System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact d245d5da922870e4401aa0f5635a23102bd71140:


0000: 2f 2a 0d 0a 20 2a 20 49 6e 73 74 61 6c 6c 65 72  /*.. * Installer
0010: 2e 63 73 20 2d 2d 0d 0a 20 2a 0d 0a 20 2a 20 57  .cs --.. *.. * W
0020: 72 69 74 74 65 6e 20 62 79 20 4a 6f 65 20 4d 69  ritten by Joe Mi
0030: 73 74 61 63 68 6b 69 6e 2e 0d 0a 20 2a 20 52 65  stachkin... * Re
0040: 6c 65 61 73 65 64 20 74 6f 20 74 68 65 20 70 75  leased to the pu
0050: 62 6c 69 63 20 64 6f 6d 61 69 6e 2c 20 75 73 65  blic domain, use
0060: 20 61 74 20 79 6f 75 72 20 6f 77 6e 20 72 69 73   at your own ris
0070: 6b 21 0d 0a 20 2a 2f 0d 0a 0d 0a 75 73 69 6e 67  k!.. */....using
0080: 20 53 79 73 74 65 6d 2e 43 6f 6c 6c 65 63 74 69   System.Collecti
0090: 6f 6e 73 2e 47 65 6e 65 72 69 63 3b 0d 0a 75 73  ons.Generic;..us
00a0: 69 6e 67 20 53 79 73 74 65 6d 2e 44 69 61 67 6e  ing System.Diagn
00b0: 6f 73 74 69 63 73 3b 0d 0a 75 73 69 6e 67 20 53  ostics;..using S
00c0: 79 73 74 65 6d 2e 45 6e 74 65 72 70 72 69 73 65  ystem.Enterprise
00d0: 53 65 72 76 69 63 65 73 2e 49 6e 74 65 72 6e 61  Services.Interna
00e0: 6c 3b 0d 0a 75 73 69 6e 67 20 53 79 73 74 65 6d  l;..using System
00f0: 2e 49 4f 3b 0d 0a 75 73 69 6e 67 20 53 79 73 74  .IO;..using Syst
0100: 65 6d 2e 52 65 66 6c 65 63 74 69 6f 6e 3b 0d 0a  em.Reflection;..
0110: 75 73 69 6e 67 20 53 79 73 74 65 6d 2e 52 75 6e  using System.Run
0120: 74 69 6d 65 2e 43 6f 6d 70 69 6c 65 72 53 65 72  time.CompilerSer
0130: 76 69 63 65 73 3b 0d 0a 75 73 69 6e 67 20 53 79  vices;..using Sy
0140: 73 74 65 6d 2e 54 68 72 65 61 64 69 6e 67 3b 0d  stem.Threading;.
0150: 0a 75 73 69 6e 67 20 53 79 73 74 65 6d 2e 57 69  .using System.Wi
0160: 6e 64 6f 77 73 2e 46 6f 72 6d 73 3b 0d 0a 75 73  ndows.Forms;..us
0170: 69 6e 67 20 53 79 73 74 65 6d 2e 58 6d 6c 3b 0d  ing System.Xml;.
0180: 0a 75 73 69 6e 67 20 4d 69 63 72 6f 73 6f 66 74  .using Microsoft
0190: 2e 57 69 6e 33 32 3b 0d 0a 0d 0a 6e 61 6d 65 73  .Win32;....names
01a0: 70 61 63 65 20 53 79 73 74 65 6d 2e 44 61 74 61  pace System.Data
01b0: 2e 53 51 4c 69 74 65 0d 0a 7b 0d 0a 20 20 20 20  .SQLite..{..    
01c0: 23 72 65 67 69 6f 6e 20 50 75 62 6c 69 63 20 44  #region Public D
01d0: 65 6c 65 67 61 74 65 73 0d 0a 20 20 20 20 69 6e  elegates..    in
01e0: 74 65 72 6e 61 6c 20 64 65 6c 65 67 61 74 65 20  ternal delegate 
01f0: 76 6f 69 64 20 54 72 61 63 65 43 61 6c 6c 62 61  void TraceCallba
0200: 63 6b 28 0d 0a 20 20 20 20 20 20 20 20 73 74 72  ck(..        str
0210: 69 6e 67 20 6d 65 73 73 61 67 65 2c 0d 0a 20 20  ing message,..  
0220: 20 20 20 20 20 20 73 74 72 69 6e 67 20 63 61 74        string cat
0230: 65 67 6f 72 79 0d 0a 20 20 20 20 29 3b 0d 0a 0d  egory..    );...
0240: 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  .    ///////////
0250: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0260: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0270: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0280: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0290: 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
02a0: 20 64 65 6c 65 67 61 74 65 20 62 6f 6f 6c 20 46   delegate bool F
02b0: 72 61 6d 65 77 6f 72 6b 43 6f 6e 66 69 67 43 61  rameworkConfigCa
02c0: 6c 6c 62 61 63 6b 28 0d 0a 20 20 20 20 20 20 20  llback(..       
02d0: 20 73 74 72 69 6e 67 20 66 69 6c 65 4e 61 6d 65   string fileName
02e0: 2c 0d 0a 20 20 20 20 20 20 20 20 73 74 72 69 6e  ,..        strin
02f0: 67 20 69 6e 76 61 72 69 61 6e 74 2c 0d 0a 20 20  g invariant,..  
0300: 20 20 20 20 20 20 73 74 72 69 6e 67 20 6e 61 6d        string nam
0310: 65 2c 0d 0a 20 20 20 20 20 20 20 20 73 74 72 69  e,..        stri
0320: 6e 67 20 64 65 73 63 72 69 70 74 69 6f 6e 2c 0d  ng description,.
0330: 0a 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20  .        string 
0340: 74 79 70 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20  typeName,..     
0350: 20 20 20 41 73 73 65 6d 62 6c 79 4e 61 6d 65 20     AssemblyName 
0360: 61 73 73 65 6d 62 6c 79 4e 61 6d 65 2c 0d 0a 20  assemblyName,.. 
0370: 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 63 6c         object cl
0380: 69 65 6e 74 44 61 74 61 2c 0d 0a 20 20 20 20 20  ientData,..     
0390: 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d     bool whatIf,.
03a0: 0a 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65  .        bool ve
03b0: 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20 20  rbose,..        
03c0: 72 65 66 20 62 6f 6f 6c 20 73 61 76 65 64 2c 0d  ref bool saved,.
03d0: 0a 20 20 20 20 20 20 20 20 72 65 66 20 73 74 72  .        ref str
03e0: 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20 20 29  ing error..    )
03f0: 3b 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  ;....    ///////
0400: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0410: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0420: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0430: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0440: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 69 6e 74 65  ////....    inte
0450: 72 6e 61 6c 20 64 65 6c 65 67 61 74 65 20 62 6f  rnal delegate bo
0460: 6f 6c 20 46 72 61 6d 65 77 6f 72 6b 52 65 67 69  ol FrameworkRegi
0470: 73 74 72 79 43 61 6c 6c 62 61 63 6b 28 0d 0a 20  stryCallback(.. 
0480: 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79 4b         RegistryK
0490: 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20  ey rootKey,..   
04a0: 20 20 20 20 20 73 74 72 69 6e 67 20 66 72 61 6d       string fram
04b0: 65 77 6f 72 6b 4e 61 6d 65 2c 0d 0a 20 20 20 20  eworkName,..    
04c0: 20 20 20 20 56 65 72 73 69 6f 6e 20 66 72 61 6d      Version fram
04d0: 65 77 6f 72 6b 56 65 72 73 69 6f 6e 2c 0d 0a 20  eworkVersion,.. 
04e0: 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 70 6c         string pl
04f0: 61 74 66 6f 72 6d 4e 61 6d 65 2c 0d 0a 20 20 20  atformName,..   
0500: 20 20 20 20 20 6f 62 6a 65 63 74 20 63 6c 69 65       object clie
0510: 6e 74 44 61 74 61 2c 0d 0a 20 20 20 20 20 20 20  ntData,..       
0520: 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20   bool whatIf,.. 
0530: 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62         bool verb
0540: 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 72 65  ose,..        re
0550: 66 20 73 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a  f string error..
0560: 20 20 20 20 29 3b 0d 0a 0d 0a 20 20 20 20 2f 2f      );....    //
0570: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0580: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0590: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
05a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
05b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
05c0: 20 69 6e 74 65 72 6e 61 6c 20 64 65 6c 65 67 61   internal delega
05d0: 74 65 20 62 6f 6f 6c 20 56 69 73 75 61 6c 53 74  te bool VisualSt
05e0: 75 64 69 6f 52 65 67 69 73 74 72 79 43 61 6c 6c  udioRegistryCall
05f0: 62 61 63 6b 28 0d 0a 20 20 20 20 20 20 20 20 52  back(..        R
0600: 65 67 69 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b  egistryKey rootK
0610: 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 56 65 72  ey,..        Ver
0620: 73 69 6f 6e 20 76 73 56 65 72 73 69 6f 6e 2c 0d  sion vsVersion,.
0630: 0a 20 20 20 20 20 20 20 20 49 6e 73 74 61 6c 6c  .        Install
0640: 65 72 2e 50 61 63 6b 61 67 65 20 70 61 63 6b 61  er.Package packa
0650: 67 65 2c 0d 0a 20 20 20 20 20 20 20 20 6f 62 6a  ge,..        obj
0660: 65 63 74 20 63 6c 69 65 6e 74 44 61 74 61 2c 0d  ect clientData,.
0670: 0a 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68  .        bool wh
0680: 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 62  atIf,..        b
0690: 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 0d 0a 20 20  ool verbose,..  
06a0: 20 20 20 20 20 20 72 65 66 20 73 74 72 69 6e 67        ref string
06b0: 20 65 72 72 6f 72 0d 0a 20 20 20 20 29 3b 0d 0a   error..    );..
06c0: 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
06d0: 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ..    //////////
06e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
06f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0700: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0710: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0720: 2f 0d 0a 0d 0a 20 20 20 20 23 72 65 67 69 6f 6e  /....    #region
0730: 20 50 75 62 6c 69 63 20 45 6e 75 6d 65 72 61 74   Public Enumerat
0740: 69 6f 6e 73 0d 0a 20 20 20 20 5b 46 6c 61 67 73  ions..    [Flags
0750: 28 29 5d 0d 0a 20 20 20 20 70 75 62 6c 69 63 20  ()]..    public 
0760: 65 6e 75 6d 20 49 6e 73 74 61 6c 6c 46 6c 61 67  enum InstallFlag
0770: 73 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  s..    {..      
0780: 20 20 4e 6f 6e 65 20 3d 20 30 78 30 2c 0d 0a 20    None = 0x0,.. 
0790: 20 20 20 20 20 20 20 47 41 43 20 3d 20 30 78 31         GAC = 0x1
07a0: 2c 0d 0a 20 20 20 20 20 20 20 20 41 73 73 65 6d  ,..        Assem
07b0: 62 6c 79 46 6f 6c 64 65 72 73 20 3d 20 30 78 32  blyFolders = 0x2
07c0: 2c 0d 0a 20 20 20 20 20 20 20 20 44 62 50 72 6f  ,..        DbPro
07d0: 76 69 64 65 72 46 61 63 74 6f 72 79 20 3d 20 30  viderFactory = 0
07e0: 78 34 2c 0d 0a 20 20 20 20 20 20 20 20 56 73 50  x4,..        VsP
07f0: 61 63 6b 61 67 65 20 3d 20 30 78 38 2c 0d 0a 20  ackage = 0x8,.. 
0800: 20 20 20 20 20 20 20 56 73 44 61 74 61 53 6f 75         VsDataSou
0810: 72 63 65 20 3d 20 30 78 31 30 2c 0d 0a 20 20 20  rce = 0x10,..   
0820: 20 20 20 20 20 56 73 44 61 74 61 50 72 6f 76 69       VsDataProvi
0830: 64 65 72 20 3d 20 30 78 32 30 2c 0d 0a 20 20 20  der = 0x20,..   
0840: 20 20 20 20 20 46 72 61 6d 65 77 6f 72 6b 20 3d       Framework =
0850: 20 47 41 43 20 7c 20 41 73 73 65 6d 62 6c 79 46   GAC | AssemblyF
0860: 6f 6c 64 65 72 73 20 7c 20 44 62 50 72 6f 76 69  olders | DbProvi
0870: 64 65 72 46 61 63 74 6f 72 79 2c 0d 0a 20 20 20  derFactory,..   
0880: 20 20 20 20 20 56 73 20 3d 20 56 73 50 61 63 6b       Vs = VsPack
0890: 61 67 65 20 7c 20 56 73 44 61 74 61 53 6f 75 72  age | VsDataSour
08a0: 63 65 20 7c 20 56 73 44 61 74 61 50 72 6f 76 69  ce | VsDataProvi
08b0: 64 65 72 2c 0d 0a 20 20 20 20 20 20 20 20 41 6c  der,..        Al
08c0: 6c 20 3d 20 46 72 61 6d 65 77 6f 72 6b 20 7c 20  l = Framework | 
08d0: 56 73 2c 0d 0a 20 20 20 20 20 20 20 20 41 6c 6c  Vs,..        All
08e0: 4e 6f 47 41 43 20 3d 20 41 6c 6c 20 26 20 7e 47  NoGAC = All & ~G
08f0: 41 43 2c 0d 0a 20 20 20 20 20 20 20 20 44 65 66  AC,..        Def
0900: 61 75 6c 74 20 3d 20 41 6c 6c 0d 0a 20 20 20 20  ault = All..    
0910: 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  }....    ///////
0920: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0930: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0940: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0950: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0960: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 5b 46 6c 61  ////....    [Fla
0970: 67 73 28 29 5d 0d 0a 20 20 20 20 70 75 62 6c 69  gs()]..    publi
0980: 63 20 65 6e 75 6d 20 54 72 61 63 65 50 72 69 6f  c enum TracePrio
0990: 72 69 74 79 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  rity..    {..   
09a0: 20 20 20 20 20 4e 6f 6e 65 20 3d 20 30 78 30 2c       None = 0x0,
09b0: 0d 0a 20 20 20 20 20 20 20 20 4c 6f 77 65 73 74  ..        Lowest
09c0: 20 3d 20 30 78 31 2c 0d 0a 20 20 20 20 20 20 20   = 0x1,..       
09d0: 20 4c 6f 77 65 72 20 3d 20 30 78 32 2c 0d 0a 20   Lower = 0x2,.. 
09e0: 20 20 20 20 20 20 20 4c 6f 77 20 3d 20 30 78 34         Low = 0x4
09f0: 2c 0d 0a 20 20 20 20 20 20 20 20 4d 65 64 69 75  ,..        Mediu
0a00: 6d 20 3d 20 30 78 38 2c 0d 0a 20 20 20 20 20 20  m = 0x8,..      
0a10: 20 20 48 69 67 68 20 3d 20 30 78 31 30 2c 0d 0a    High = 0x10,..
0a20: 20 20 20 20 20 20 20 20 48 69 67 68 65 72 20 3d          Higher =
0a30: 20 30 78 32 30 2c 0d 0a 20 20 20 20 20 20 20 20   0x20,..        
0a40: 48 69 67 68 65 73 74 20 3d 20 30 78 34 30 2c 0d  Highest = 0x40,.
0a50: 0a 20 20 20 20 20 20 20 20 44 65 66 61 75 6c 74  .        Default
0a60: 20 3d 20 4d 65 64 69 75 6d 0d 0a 20 20 20 20 7d   = Medium..    }
0a70: 0d 0a 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e  ..    #endregion
0a80: 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f  ....    ////////
0a90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0aa0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0ab0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0ac0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0ad0: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 23 72 65 67 69  ///....    #regi
0ae0: 6f 6e 20 49 6e 73 74 61 6c 6c 65 72 20 43 6c 61  on Installer Cla
0af0: 73 73 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ss..    internal
0b00: 20 73 74 61 74 69 63 20 63 6c 61 73 73 20 49 6e   static class In
0b10: 73 74 61 6c 6c 65 72 0d 0a 20 20 20 20 7b 0d 0a  staller..    {..
0b20: 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20          #region 
0b30: 50 72 69 76 61 74 65 20 48 65 6c 70 65 72 20 43  Private Helper C
0b40: 6c 61 73 73 65 73 0d 0a 20 20 20 20 20 20 20 20  lasses..        
0b50: 23 72 65 67 69 6f 6e 20 41 6e 79 50 61 69 72 20  #region AnyPair 
0b60: 43 6c 61 73 73 0d 0a 20 20 20 20 20 20 20 20 70  Class..        p
0b70: 72 69 76 61 74 65 20 73 65 61 6c 65 64 20 63 6c  rivate sealed cl
0b80: 61 73 73 20 41 6e 79 50 61 69 72 3c 54 31 2c 20  ass AnyPair<T1, 
0b90: 54 32 3e 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  T2>..        {..
0ba0: 20 20 20 20 20 20 20 20 20 20 20 20 23 72 65 67              #reg
0bb0: 69 6f 6e 20 50 75 62 6c 69 63 20 43 6f 6e 73 74  ion Public Const
0bc0: 72 75 63 74 6f 72 73 0d 0a 20 20 20 20 20 20 20  ructors..       
0bd0: 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
0be0: 20 20 20 20 20 2f 2f 20 57 41 52 4e 49 4e 47 3a       // WARNING:
0bf0: 20 54 68 69 73 20 63 6f 6e 73 74 72 75 63 74 6f   This constructo
0c00: 72 20 70 72 6f 64 75 63 65 73 20 61 6e 20 69 6d  r produces an im
0c10: 6d 75 74 61 62 6c 65 20 22 65 6d 70 74 79 22 20  mutable "empty" 
0c20: 70 61 69 72 0d 0a 20 20 20 20 20 20 20 20 20 20  pair..          
0c30: 20 20 2f 2f 20 20 20 20 20 20 20 20 20 20 6f 62    //          ob
0c40: 6a 65 63 74 2e 0d 0a 20 20 20 20 20 20 20 20 20  ject...         
0c50: 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
0c60: 20 20 20 70 75 62 6c 69 63 20 41 6e 79 50 61 69     public AnyPai
0c70: 72 28 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  r()..           
0c80: 20 20 20 20 20 3a 20 62 61 73 65 28 29 0d 0a 20       : base().. 
0c90: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
0ca0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
0cb0: 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20   do nothing...  
0cc0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
0cd0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
0ce0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0cf0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0d00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0d10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
0d20: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
0d30: 62 6c 69 63 20 41 6e 79 50 61 69 72 28 54 31 20  blic AnyPair(T1 
0d40: 78 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  x)..            
0d50: 20 20 20 20 3a 20 74 68 69 73 28 29 0d 0a 20 20      : this()..  
0d60: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
0d70: 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69               thi
0d80: 73 2e 78 20 3d 20 78 3b 0d 0a 20 20 20 20 20 20  s.x = x;..      
0d90: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
0da0: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
0db0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0dc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0dd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0de0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
0df0: 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
0e00: 20 41 6e 79 50 61 69 72 28 54 31 20 78 2c 20 54   AnyPair(T1 x, T
0e10: 32 20 79 29 0d 0a 20 20 20 20 20 20 20 20 20 20  2 y)..          
0e20: 20 20 20 20 20 20 3a 20 74 68 69 73 28 78 29 0d        : this(x).
0e30: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
0e40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0e50: 74 68 69 73 2e 79 20 3d 20 79 3b 0d 0a 20 20 20  this.y = y;..   
0e60: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
0e70: 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
0e80: 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  on....          
0e90: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
0ea0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0eb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0ec0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0ed0: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
0ee0: 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 75 62       #region Pub
0ef0: 6c 69 63 20 50 72 6f 70 65 72 74 69 65 73 0d 0a  lic Properties..
0f00: 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
0f10: 61 74 65 20 54 31 20 78 3b 0d 0a 20 20 20 20 20  ate T1 x;..     
0f20: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 54 31         public T1
0f30: 20 58 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   X..            
0f40: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
0f50: 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20     get { return 
0f60: 78 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  x; }..          
0f70: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
0f80: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
0f90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0fa0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0fb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0fc0: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
0fd0: 20 20 20 20 20 20 70 72 69 76 61 74 65 20 54 32        private T2
0fe0: 20 79 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20   y;..           
0ff0: 20 70 75 62 6c 69 63 20 54 32 20 59 0d 0a 20 20   public T2 Y..  
1000: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
1010: 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74               get
1020: 20 7b 20 72 65 74 75 72 6e 20 79 3b 20 7d 0d 0a   { return y; }..
1030: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
1040: 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 72             #endr
1050: 65 67 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20 7d  egion..        }
1060: 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65  ..        #endre
1070: 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20  gion....        
1080: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1090: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10c0: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
10d0: 20 20 20 23 72 65 67 69 6f 6e 20 54 72 61 63 65     #region Trace
10e0: 4f 70 73 20 43 6c 61 73 73 0d 0a 20 20 20 20 20  Ops Class..     
10f0: 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69     private stati
1100: 63 20 63 6c 61 73 73 20 54 72 61 63 65 4f 70 73  c class TraceOps
1110: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
1120: 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e           #region
1130: 20 50 72 69 76 61 74 65 20 43 6f 6e 73 74 61 6e   Private Constan
1140: 74 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ts..            
1150: 70 72 69 76 61 74 65 20 63 6f 6e 73 74 20 73 74  private const st
1160: 72 69 6e 67 20 44 65 66 61 75 6c 74 54 72 61 63  ring DefaultTrac
1170: 65 46 6f 72 6d 61 74 20 3d 20 22 23 7b 30 7d 20  eFormat = "#{0} 
1180: 40 20 7b 31 7d 3a 20 7b 32 7d 22 3b 0d 0a 0d 0a  @ {1}: {2}";....
1190: 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
11a0: 61 74 65 20 63 6f 6e 73 74 20 73 74 72 69 6e 67  ate const string
11b0: 20 49 73 6f 38 36 30 31 44 61 74 65 54 69 6d 65   Iso8601DateTime
11c0: 4f 75 74 70 75 74 46 6f 72 6d 61 74 20 3d 0d 0a  OutputFormat =..
11d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11e0: 22 79 79 79 79 2e 4d 4d 2e 64 64 54 48 48 3a 6d  "yyyy.MM.ddTHH:m
11f0: 6d 3a 73 73 2e 66 66 66 66 66 66 66 22 3b 0d 0a  m:ss.fffffff";..
1200: 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64              #end
1210: 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20  region....      
1220: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
1230: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1240: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1250: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1260: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
1270: 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e           #region
1280: 20 50 72 69 76 61 74 65 20 53 74 61 74 69 63 20   Private Static 
1290: 44 61 74 61 0d 0a 20 20 20 20 20 20 20 20 20 20  Data..          
12a0: 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63    private static
12b0: 20 6f 62 6a 65 63 74 20 73 79 6e 63 52 6f 6f 74   object syncRoot
12c0: 20 3d 20 6e 65 77 20 6f 62 6a 65 63 74 28 29 3b   = new object();
12d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
12e0: 69 76 61 74 65 20 73 74 61 74 69 63 20 6c 6f 6e  ivate static lon
12f0: 67 20 6e 65 78 74 49 64 3b 0d 0a 20 20 20 20 20  g nextId;..     
1300: 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
1310: 74 61 74 69 63 20 54 72 61 63 65 50 72 69 6f 72  tatic TracePrior
1320: 69 74 79 20 74 72 61 63 65 50 72 69 6f 72 69 74  ity tracePriorit
1330: 79 20 3d 20 54 72 61 63 65 50 72 69 6f 72 69 74  y = TracePriorit
1340: 79 2e 44 65 66 61 75 6c 74 3b 0d 0a 20 20 20 20  y.Default;..    
1350: 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
1360: 73 74 61 74 69 63 20 73 74 72 69 6e 67 20 74 72  static string tr
1370: 61 63 65 46 6f 72 6d 61 74 20 3d 20 44 65 66 61  aceFormat = Defa
1380: 75 6c 74 54 72 61 63 65 46 6f 72 6d 61 74 3b 0d  ultTraceFormat;.
1390: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e  .            #en
13a0: 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
13b0: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
13c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
1400: 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f            #regio
1410: 6e 20 50 75 62 6c 69 63 20 53 74 61 74 69 63 20  n Public Static 
1420: 50 72 6f 70 65 72 74 69 65 73 0d 0a 20 20 20 20  Properties..    
1430: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73          public s
1440: 74 61 74 69 63 20 54 72 61 63 65 50 72 69 6f 72  tatic TracePrior
1450: 69 74 79 20 54 72 61 63 65 50 72 69 6f 72 69 74  ity TracePriorit
1460: 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  y..            {
1470: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1480: 20 20 67 65 74 20 7b 20 6c 6f 63 6b 20 28 73 79    get { lock (sy
1490: 6e 63 52 6f 6f 74 29 20 7b 20 72 65 74 75 72 6e  ncRoot) { return
14a0: 20 74 72 61 63 65 50 72 69 6f 72 69 74 79 3b 20   tracePriority; 
14b0: 7d 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  } }..           
14c0: 20 20 20 20 20 73 65 74 20 7b 20 6c 6f 63 6b 20       set { lock 
14d0: 28 73 79 6e 63 52 6f 6f 74 29 20 7b 20 74 72 61  (syncRoot) { tra
14e0: 63 65 50 72 69 6f 72 69 74 79 20 3d 20 76 61 6c  cePriority = val
14f0: 75 65 3b 20 7d 20 7d 0d 0a 20 20 20 20 20 20 20  ue; } }..       
1500: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
1510: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
1520: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1530: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1540: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1550: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
1560: 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
1570: 73 74 61 74 69 63 20 73 74 72 69 6e 67 20 54 72  static string Tr
1580: 61 63 65 46 6f 72 6d 61 74 0d 0a 20 20 20 20 20  aceFormat..     
1590: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
15a0: 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20            get { 
15b0: 6c 6f 63 6b 20 28 73 79 6e 63 52 6f 6f 74 29 20  lock (syncRoot) 
15c0: 7b 20 72 65 74 75 72 6e 20 74 72 61 63 65 46 6f  { return traceFo
15d0: 72 6d 61 74 3b 20 7d 20 7d 0d 0a 20 20 20 20 20  rmat; } }..     
15e0: 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b             set {
15f0: 20 6c 6f 63 6b 20 28 73 79 6e 63 52 6f 6f 74 29   lock (syncRoot)
1600: 20 7b 20 74 72 61 63 65 46 6f 72 6d 61 74 20 3d   { traceFormat =
1610: 20 76 61 6c 75 65 3b 20 7d 20 7d 0d 0a 20 20 20   value; } }..   
1620: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
1630: 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
1640: 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  on....          
1650: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
1660: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1670: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1680: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1690: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
16a0: 20 20 20 20 20 23 72 65 67 69 6f 6e 20 49 6e 74       #region Int
16b0: 65 72 61 63 74 69 76 65 20 53 75 70 70 6f 72 74  eractive Support
16c0: 20 4d 65 74 68 6f 64 73 0d 0a 20 20 20 20 20 20   Methods..      
16d0: 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61        public sta
16e0: 74 69 63 20 73 74 72 69 6e 67 20 47 65 74 41 73  tic string GetAs
16f0: 73 65 6d 62 6c 79 54 69 74 6c 65 28 0d 0a 20 20  semblyTitle(..  
1700: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 41 73                As
1710: 73 65 6d 62 6c 79 20 61 73 73 65 6d 62 6c 79 0d  sembly assembly.
1720: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1730: 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   )..            
1740: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
1750: 20 20 20 69 66 20 28 61 73 73 65 6d 62 6c 79 20     if (assembly 
1760: 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  != null)..      
1770: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
1780: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1790: 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20   try..          
17a0: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
17b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17c0: 20 20 20 20 20 69 66 20 28 61 73 73 65 6d 62 6c       if (assembl
17d0: 79 2e 49 73 44 65 66 69 6e 65 64 28 0d 0a 20 20  y.IsDefined(..  
17e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 79                ty
1800: 70 65 6f 66 28 41 73 73 65 6d 62 6c 79 54 69 74  peof(AssemblyTit
1810: 6c 65 41 74 74 72 69 62 75 74 65 29 2c 20 66 61  leAttribute), fa
1820: 6c 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20  lse))..         
1830: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
1840: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1850: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 41 73                As
1860: 73 65 6d 62 6c 79 54 69 74 6c 65 41 74 74 72 69  semblyTitleAttri
1870: 62 75 74 65 20 74 69 74 6c 65 20 3d 0d 0a 20 20  bute title =..  
1880: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1890: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 41                (A
18a0: 73 73 65 6d 62 6c 79 54 69 74 6c 65 41 74 74 72  ssemblyTitleAttr
18b0: 69 62 75 74 65 29 0d 0a 20 20 20 20 20 20 20 20  ibute)..        
18c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18d0: 20 20 20 20 20 20 20 20 61 73 73 65 6d 62 6c 79          assembly
18e0: 2e 47 65 74 43 75 73 74 6f 6d 41 74 74 72 69 62  .GetCustomAttrib
18f0: 75 74 65 73 28 0d 0a 20 20 20 20 20 20 20 20 20  utes(..         
1900: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1910: 20 20 20 20 20 20 20 20 20 20 20 74 79 70 65 6f             typeo
1920: 66 28 41 73 73 65 6d 62 6c 79 54 69 74 6c 65 41  f(AssemblyTitleA
1930: 74 74 72 69 62 75 74 65 29 2c 20 66 61 6c 73 65  ttribute), false
1940: 29 5b 30 5d 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  )[0];....       
1950: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1960: 20 20 20 20 20 72 65 74 75 72 6e 20 74 69 74 6c       return titl
1970: 65 2e 54 69 74 6c 65 3b 0d 0a 20 20 20 20 20 20  e.Title;..      
1980: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1990: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
19a0: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
19b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19c0: 63 61 74 63 68 0d 0a 20 20 20 20 20 20 20 20 20  catch..         
19d0: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
19e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19f0: 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68        // do noth
1a00: 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  ing...          
1a10: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
1a20: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
1a30: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1a40: 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a    return null;..
1a50: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
1a60: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
1a70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1aa0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ab0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1ac0: 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 44 69  public static Di
1ad0: 61 6c 6f 67 52 65 73 75 6c 74 20 53 68 6f 77 4d  alogResult ShowM
1ae0: 65 73 73 61 67 65 28 0d 0a 20 20 20 20 20 20 20  essage(..       
1af0: 20 20 20 20 20 20 20 20 20 54 72 61 63 65 50 72           TracePr
1b00: 69 6f 72 69 74 79 20 74 72 61 63 65 50 72 69 6f  iority tracePrio
1b10: 72 69 74 79 2c 0d 0a 20 20 20 20 20 20 20 20 20  rity,..         
1b20: 20 20 20 20 20 20 20 54 72 61 63 65 43 61 6c 6c         TraceCall
1b30: 62 61 63 6b 20 74 72 61 63 65 43 61 6c 6c 62 61  back traceCallba
1b40: 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ck,..           
1b50: 20 20 20 20 20 41 73 73 65 6d 62 6c 79 20 61 73       Assembly as
1b60: 73 65 6d 62 6c 79 2c 0d 0a 20 20 20 20 20 20 20  sembly,..       
1b70: 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
1b80: 6d 65 73 73 61 67 65 2c 0d 0a 20 20 20 20 20 20  message,..      
1b90: 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
1ba0: 20 63 61 74 65 67 6f 72 79 2c 0d 0a 20 20 20 20   category,..    
1bb0: 20 20 20 20 20 20 20 20 20 20 20 20 4d 65 73 73              Mess
1bc0: 61 67 65 42 6f 78 42 75 74 74 6f 6e 73 20 62 75  ageBoxButtons bu
1bd0: 74 74 6f 6e 73 2c 0d 0a 20 20 20 20 20 20 20 20  ttons,..        
1be0: 20 20 20 20 20 20 20 20 4d 65 73 73 61 67 65 42          MessageB
1bf0: 6f 78 49 63 6f 6e 20 69 63 6f 6e 0d 0a 20 20 20  oxIcon icon..   
1c00: 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a               )..
1c10: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
1c20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 44                 D
1c30: 69 61 6c 6f 67 52 65 73 75 6c 74 20 72 65 73 75  ialogResult resu
1c40: 6c 74 20 3d 20 44 69 61 6c 6f 67 52 65 73 75 6c  lt = DialogResul
1c50: 74 2e 4f 4b 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  t.OK;....       
1c60: 20 20 20 20 20 20 20 20 20 54 72 61 63 65 28 74           Trace(t
1c70: 72 61 63 65 50 72 69 6f 72 69 74 79 2c 20 74 72  racePriority, tr
1c80: 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 6d 65 73  aceCallback, mes
1c90: 73 61 67 65 2c 20 63 61 74 65 67 6f 72 79 29 3b  sage, category);
1ca0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1cb0: 20 20 20 20 69 66 20 28 53 79 73 74 65 6d 49 6e      if (SystemIn
1cc0: 66 6f 72 6d 61 74 69 6f 6e 2e 55 73 65 72 49 6e  formation.UserIn
1cd0: 74 65 72 61 63 74 69 76 65 29 0d 0a 20 20 20 20  teractive)..    
1ce0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
1cf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d00: 20 20 20 73 74 72 69 6e 67 20 74 69 74 6c 65 20     string title 
1d10: 3d 20 47 65 74 41 73 73 65 6d 62 6c 79 54 69 74  = GetAssemblyTit
1d20: 6c 65 28 61 73 73 65 6d 62 6c 79 29 3b 0d 0a 0d  le(assembly);...
1d30: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1d40: 20 20 20 20 20 69 66 20 28 74 69 74 6c 65 20 3d       if (title =
1d50: 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
1d60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d70: 20 74 69 74 6c 65 20 3d 20 41 70 70 6c 69 63 61   title = Applica
1d80: 74 69 6f 6e 2e 50 72 6f 64 75 63 74 4e 61 6d 65  tion.ProductName
1d90: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
1da0: 20 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 20           result 
1db0: 3d 20 4d 65 73 73 61 67 65 42 6f 78 2e 53 68 6f  = MessageBox.Sho
1dc0: 77 28 6d 65 73 73 61 67 65 2c 20 74 69 74 6c 65  w(message, title
1dd0: 2c 20 62 75 74 74 6f 6e 73 2c 20 69 63 6f 6e 29  , buttons, icon)
1de0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
1df0: 20 20 20 20 20 20 20 20 20 54 72 61 63 65 28 74           Trace(t
1e00: 72 61 63 65 50 72 69 6f 72 69 74 79 2c 20 74 72  racePriority, tr
1e10: 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72  aceCallback, Str
1e20: 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
1e30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e40: 20 20 20 20 20 22 55 73 65 72 20 63 68 6f 69 63       "User choic
1e50: 65 20 6f 66 20 7b 30 7d 2e 22 2c 20 46 6f 72 44  e of {0}.", ForD
1e60: 69 73 70 6c 61 79 28 72 65 73 75 6c 74 29 29 2c  isplay(result)),
1e70: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1e80: 20 20 20 20 20 20 20 20 20 20 63 61 74 65 67 6f            catego
1e90: 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
1ea0: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
1eb0: 72 6e 20 72 65 73 75 6c 74 3b 0d 0a 20 20 20 20  rn result;..    
1ec0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
1ed0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1ee0: 20 54 72 61 63 65 28 74 72 61 63 65 50 72 69 6f   Trace(tracePrio
1ef0: 72 69 74 79 2c 20 74 72 61 63 65 43 61 6c 6c 62  rity, traceCallb
1f00: 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d  ack, String.Form
1f10: 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
1f20: 20 20 20 20 20 20 20 20 20 22 44 65 66 61 75 6c           "Defaul
1f30: 74 20 63 68 6f 69 63 65 20 6f 66 20 7b 30 7d 2e  t choice of {0}.
1f40: 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 72 65  ", ForDisplay(re
1f50: 73 75 6c 74 29 29 2c 0d 0a 20 20 20 20 20 20 20  sult)),..       
1f60: 20 20 20 20 20 20 20 20 20 20 20 20 20 63 61 74               cat
1f70: 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  egory);....     
1f80: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
1f90: 6e 20 72 65 73 75 6c 74 3b 0d 0a 20 20 20 20 20  n result;..     
1fa0: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
1fb0: 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
1fc0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1fd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fe0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ff0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2000: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2010: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
2020: 20 20 20 23 72 65 67 69 6f 6e 20 54 72 61 63 69     #region Traci
2030: 6e 67 20 53 75 70 70 6f 72 74 20 4d 65 74 68 6f  ng Support Metho
2040: 64 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ds..            
2050: 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 6c 6f  public static lo
2060: 6e 67 20 4e 65 78 74 49 64 28 29 0d 0a 20 20 20  ng NextId()..   
2070: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
2080: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
2090: 72 6e 20 49 6e 74 65 72 6c 6f 63 6b 65 64 2e 49  rn Interlocked.I
20a0: 6e 63 72 65 6d 65 6e 74 28 72 65 66 20 6e 65 78  ncrement(ref nex
20b0: 74 49 64 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  tId);..         
20c0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
20d0: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
20e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2100: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2110: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
2120: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74         public st
2130: 61 74 69 63 20 73 74 72 69 6e 67 20 54 69 6d 65  atic string Time
2140: 53 74 61 6d 70 28 44 61 74 65 54 69 6d 65 20 64  Stamp(DateTime d
2150: 61 74 65 54 69 6d 65 29 0d 0a 20 20 20 20 20 20  ateTime)..      
2160: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
2170: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
2180: 64 61 74 65 54 69 6d 65 2e 54 6f 53 74 72 69 6e  dateTime.ToStrin
2190: 67 28 49 73 6f 38 36 30 31 44 61 74 65 54 69 6d  g(Iso8601DateTim
21a0: 65 4f 75 74 70 75 74 46 6f 72 6d 61 74 29 3b 0d  eOutputFormat);.
21b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
21c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
21d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2200: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2210: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
2220: 20 5b 4d 65 74 68 6f 64 49 6d 70 6c 28 4d 65 74   [MethodImpl(Met
2230: 68 6f 64 49 6d 70 6c 4f 70 74 69 6f 6e 73 2e 4e  hodImplOptions.N
2240: 6f 49 6e 6c 69 6e 69 6e 67 29 5d 0d 0a 20 20 20  oInlining)]..   
2250: 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65           private
2260: 20 73 74 61 74 69 63 20 73 74 72 69 6e 67 20 47   static string G
2270: 65 74 4d 65 74 68 6f 64 4e 61 6d 65 28 0d 0a 20  etMethodName(.. 
2280: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53                 S
2290: 74 61 63 6b 54 72 61 63 65 20 73 74 61 63 6b 54  tackTrace stackT
22a0: 72 61 63 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  race,..         
22b0: 20 20 20 20 20 20 20 69 6e 74 20 6c 65 76 65 6c         int level
22c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
22d0: 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20    )..           
22e0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
22f0: 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20      try..       
2300: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
2310: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2320: 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
2330: 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a          // NOTE:
2340: 20 49 66 20 61 20 76 61 6c 69 64 20 73 74 61 63   If a valid stac
2350: 6b 20 74 72 61 63 65 20 77 61 73 20 6e 6f 74 20  k trace was not 
2360: 73 75 70 70 6c 69 65 64 20 62 79 20 74 68 65 0d  supplied by the.
2370: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2380: 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 63 61       //       ca
2390: 6c 6c 65 72 2c 20 63 72 65 61 74 65 20 6f 6e 65  ller, create one
23a0: 20 6e 6f 77 20 62 61 73 65 64 20 6f 6e 20 74 68   now based on th
23b0: 65 20 63 75 72 72 65 6e 74 0d 0a 20 20 20 20 20  e current..     
23c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
23d0: 2f 20 20 20 20 20 20 20 65 78 65 63 75 74 69 6f  /       executio
23e0: 6e 20 73 74 61 63 6b 2e 0d 0a 20 20 20 20 20 20  n stack...      
23f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
2400: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2410: 20 20 20 20 20 20 69 66 20 28 73 74 61 63 6b 54        if (stackT
2420: 72 61 63 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  race == null).. 
2430: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2440: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
2450: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
2460: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2470: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54            // NOT
2480: 45 3a 20 47 72 61 62 20 74 68 65 20 63 75 72 72  E: Grab the curr
2490: 65 6e 74 20 65 78 65 63 75 74 69 6f 6e 20 73 74  ent execution st
24a0: 61 63 6b 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  ack...          
24b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
24c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
24d0: 20 20 20 20 20 20 20 20 20 20 73 74 61 63 6b 54            stackT
24e0: 72 61 63 65 20 3d 20 6e 65 77 20 53 74 61 63 6b  race = new Stack
24f0: 54 72 61 63 65 28 29 3b 0d 0a 0d 0a 20 20 20 20  Trace();....    
2500: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2510: 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
2520: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2530: 2f 2f 20 4e 4f 54 45 3a 20 41 6c 77 61 79 73 20  // NOTE: Always 
2540: 73 6b 69 70 20 74 68 69 73 20 63 61 6c 6c 20 66  skip this call f
2550: 72 61 6d 65 20 77 68 65 6e 20 77 65 20 63 61 70  rame when we cap
2560: 74 75 72 65 0d 0a 20 20 20 20 20 20 20 20 20 20  ture..          
2570: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
2580: 20 20 20 20 20 20 20 74 68 65 20 73 74 61 63 6b         the stack
2590: 20 74 72 61 63 65 2e 0d 0a 20 20 20 20 20 20 20   trace...       
25a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25b0: 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
25c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 6c 65 76               lev
25d0: 65 6c 2b 2b 3b 0d 0a 20 20 20 20 20 20 20 20 20  el++;..         
25e0: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
25f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2600: 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
2610: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e              // N
2620: 4f 54 45 3a 20 47 65 74 20 74 68 65 20 73 70 65  OTE: Get the spe
2630: 63 69 66 69 65 64 20 73 74 61 63 6b 20 66 72 61  cified stack fra
2640: 6d 65 20 28 61 6c 77 61 79 73 20 61 64 64 20 6f  me (always add o
2650: 6e 65 20 74 6f 0d 0a 20 20 20 20 20 20 20 20 20  ne to..         
2660: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
2670: 20 20 20 20 73 6b 69 70 20 74 68 69 73 20 6d 65      skip this me
2680: 74 68 6f 64 29 2e 0d 0a 20 20 20 20 20 20 20 20  thod)...        
2690: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
26a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26b0: 20 20 20 20 53 74 61 63 6b 46 72 61 6d 65 20 73      StackFrame s
26c0: 74 61 63 6b 46 72 61 6d 65 20 3d 20 73 74 61 63  tackFrame = stac
26d0: 6b 54 72 61 63 65 2e 47 65 74 46 72 61 6d 65 28  kTrace.GetFrame(
26e0: 6c 65 76 65 6c 29 3b 0d 0a 0d 0a 20 20 20 20 20  level);....     
26f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
2700: 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
2710: 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20         // NOTE: 
2720: 47 65 74 20 74 68 65 20 6d 65 74 68 6f 64 20 66  Get the method f
2730: 6f 72 20 74 68 65 20 73 74 61 63 6b 20 66 72 61  or the stack fra
2740: 6d 65 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me...           
2750: 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
2760: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2770: 20 4d 65 74 68 6f 64 42 61 73 65 20 6d 65 74 68   MethodBase meth
2780: 6f 64 42 61 73 65 20 3d 20 73 74 61 63 6b 46 72  odBase = stackFr
2790: 61 6d 65 2e 47 65 74 4d 65 74 68 6f 64 28 29 3b  ame.GetMethod();
27a0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
27b0: 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
27c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27d0: 2f 2f 20 4e 4f 54 45 3a 20 47 65 74 20 74 68 65  // NOTE: Get the
27e0: 20 74 79 70 65 20 66 6f 72 20 74 68 65 20 6d 65   type for the me
27f0: 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 20  thod...         
2800: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
2810: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2820: 20 20 20 54 79 70 65 20 74 79 70 65 20 3d 20 6d     Type type = m
2830: 65 74 68 6f 64 42 61 73 65 2e 44 65 63 6c 61 72  ethodBase.Declar
2840: 69 6e 67 54 79 70 65 3b 0d 0a 0d 0a 20 20 20 20  ingType;....    
2850: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2860: 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
2870: 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a          // NOTE:
2880: 20 47 65 74 20 74 68 65 20 6e 61 6d 65 20 6f 66   Get the name of
2890: 20 74 68 65 20 6d 65 74 68 6f 64 2e 0d 0a 20 20   the method...  
28a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28b0: 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
28c0: 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
28d0: 20 6e 61 6d 65 20 3d 20 6d 65 74 68 6f 64 42 61   name = methodBa
28e0: 73 65 2e 4e 61 6d 65 3b 0d 0a 0d 0a 20 20 20 20  se.Name;....    
28f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2900: 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
2910: 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a          // NOTE:
2920: 20 52 65 74 75 72 6e 20 74 68 65 20 70 72 6f 70   Return the prop
2930: 65 72 6c 79 20 66 6f 72 6d 61 74 74 65 64 20 72  erly formatted r
2940: 65 73 75 6c 74 2e 0d 0a 20 20 20 20 20 20 20 20  esult...        
2950: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
2960: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2970: 20 20 20 20 72 65 74 75 72 6e 20 53 74 72 69 6e      return Strin
2980: 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
2990: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29a0: 20 20 20 22 7b 30 7d 7b 31 7d 7b 32 7d 22 2c 20     "{0}{1}{2}", 
29b0: 74 79 70 65 2e 4e 61 6d 65 2c 20 54 79 70 65 2e  type.Name, Type.
29c0: 44 65 6c 69 6d 69 74 65 72 2c 20 6e 61 6d 65 29  Delimiter, name)
29d0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
29e0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
29f0: 20 20 20 20 20 20 63 61 74 63 68 0d 0a 20 20 20        catch..   
2a00: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
2a10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a20: 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e      // do nothin
2a30: 67 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  g...            
2a40: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
2a50: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
2a60: 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20  null;..         
2a70: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
2a80: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
2a90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2aa0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ab0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ac0: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
2ad0: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74         public st
2ae0: 61 74 69 63 20 76 6f 69 64 20 54 72 61 63 65 43  atic void TraceC
2af0: 6f 72 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ore(..          
2b00: 20 20 20 20 20 20 73 74 72 69 6e 67 20 6d 65 73        string mes
2b10: 73 61 67 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  sage,..         
2b20: 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 63 61         string ca
2b30: 74 65 67 6f 72 79 0d 0a 20 20 20 20 20 20 20 20  tegory..        
2b40: 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
2b50: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
2b60: 20 20 20 20 20 20 20 20 20 20 6c 6f 63 6b 20 28            lock (
2b70: 73 79 6e 63 52 6f 6f 74 29 0d 0a 20 20 20 20 20  syncRoot)..     
2b80: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
2b90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ba0: 20 20 53 79 73 74 65 6d 2e 44 69 61 67 6e 6f 73    System.Diagnos
2bb0: 74 69 63 73 2e 54 72 61 63 65 2e 57 72 69 74 65  tics.Trace.Write
2bc0: 4c 69 6e 65 28 6d 65 73 73 61 67 65 2c 20 63 61  Line(message, ca
2bd0: 74 65 67 6f 72 79 29 3b 0d 0a 20 20 20 20 20 20  tegory);..      
2be0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 79                Sy
2bf0: 73 74 65 6d 2e 44 69 61 67 6e 6f 73 74 69 63 73  stem.Diagnostics
2c00: 2e 54 72 61 63 65 2e 46 6c 75 73 68 28 29 3b 0d  .Trace.Flush();.
2c10: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2c20: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
2c30: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
2c40: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
2c50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c80: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
2c90: 20 20 20 20 5b 4d 65 74 68 6f 64 49 6d 70 6c 28      [MethodImpl(
2ca0: 4d 65 74 68 6f 64 49 6d 70 6c 4f 70 74 69 6f 6e  MethodImplOption
2cb0: 73 2e 4e 6f 49 6e 6c 69 6e 69 6e 67 29 5d 0d 0a  s.NoInlining)]..
2cc0: 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
2cd0: 69 63 20 73 74 61 74 69 63 20 73 74 72 69 6e 67  ic static string
2ce0: 20 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20   Trace(..       
2cf0: 20 20 20 20 20 20 20 20 20 54 72 61 63 65 50 72           TracePr
2d00: 69 6f 72 69 74 79 20 74 72 61 63 65 50 72 69 6f  iority tracePrio
2d10: 72 69 74 79 2c 0d 0a 20 20 20 20 20 20 20 20 20  rity,..         
2d20: 20 20 20 20 20 20 20 54 72 61 63 65 43 61 6c 6c         TraceCall
2d30: 62 61 63 6b 20 74 72 61 63 65 43 61 6c 6c 62 61  back traceCallba
2d40: 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ck,..           
2d50: 20 20 20 20 20 45 78 63 65 70 74 69 6f 6e 20 65       Exception e
2d60: 78 63 65 70 74 69 6f 6e 2c 0d 0a 20 20 20 20 20  xception,..     
2d70: 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
2d80: 67 20 63 61 74 65 67 6f 72 79 0d 0a 20 20 20 20  g category..    
2d90: 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
2da0: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
2db0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
2dc0: 20 28 65 78 63 65 70 74 69 6f 6e 20 21 3d 20 6e   (exception != n
2dd0: 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
2de0: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
2df0: 20 54 72 61 63 65 28 74 72 61 63 65 50 72 69 6f   Trace(tracePrio
2e00: 72 69 74 79 2c 20 74 72 61 63 65 43 61 6c 6c 62  rity, traceCallb
2e10: 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ack,..          
2e20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 65                ne
2e30: 77 20 53 74 61 63 6b 54 72 61 63 65 28 65 78 63  w StackTrace(exc
2e40: 65 70 74 69 6f 6e 2c 20 74 72 75 65 29 2c 20 30  eption, true), 0
2e50: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
2e60: 20 20 20 20 20 20 20 20 20 20 20 65 78 63 65 70             excep
2e70: 74 69 6f 6e 2e 54 6f 53 74 72 69 6e 67 28 29 2c  tion.ToString(),
2e80: 20 63 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20   category);.... 
2e90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
2ea0: 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 20 20 20  eturn null;..   
2eb0: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
2ec0: 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
2ed0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ee0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ef0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
2f10: 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 4d 65  .            [Me
2f20: 74 68 6f 64 49 6d 70 6c 28 4d 65 74 68 6f 64 49  thodImpl(MethodI
2f30: 6d 70 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e 6c  mplOptions.NoInl
2f40: 69 6e 69 6e 67 29 5d 0d 0a 20 20 20 20 20 20 20  ining)]..       
2f50: 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74       public stat
2f60: 69 63 20 73 74 72 69 6e 67 20 54 72 61 63 65 28  ic string Trace(
2f70: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2f80: 20 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 20    TracePriority 
2f90: 74 72 61 63 65 50 72 69 6f 72 69 74 79 2c 0d 0a  tracePriority,..
2fa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fb0: 54 72 61 63 65 43 61 6c 6c 62 61 63 6b 20 74 72  TraceCallback tr
2fc0: 61 63 65 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20  aceCallback,..  
2fd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
2fe0: 72 69 6e 67 20 6d 65 73 73 61 67 65 2c 0d 0a 20  ring message,.. 
2ff0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
3000: 74 72 69 6e 67 20 63 61 74 65 67 6f 72 79 0d 0a  tring category..
3010: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3020: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
3030: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
3040: 20 20 72 65 74 75 72 6e 20 54 72 61 63 65 28 0d    return Trace(.
3050: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
3060: 20 20 20 20 20 74 72 61 63 65 50 72 69 6f 72 69       tracePriori
3070: 74 79 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63  ty, traceCallbac
3080: 6b 2c 20 6e 75 6c 6c 2c 20 31 2c 20 6d 65 73 73  k, null, 1, mess
3090: 61 67 65 2c 20 63 61 74 65 67 6f 72 79 29 3b 0d  age, category);.
30a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
30b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
30c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3100: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
3110: 20 5b 4d 65 74 68 6f 64 49 6d 70 6c 28 4d 65 74   [MethodImpl(Met
3120: 68 6f 64 49 6d 70 6c 4f 70 74 69 6f 6e 73 2e 4e  hodImplOptions.N
3130: 6f 49 6e 6c 69 6e 69 6e 67 29 5d 0d 0a 20 20 20  oInlining)]..   
3140: 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65           private
3150: 20 73 74 61 74 69 63 20 73 74 72 69 6e 67 20 54   static string T
3160: 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20  race(..         
3170: 20 20 20 20 20 20 20 54 72 61 63 65 50 72 69 6f         TracePrio
3180: 72 69 74 79 20 74 72 61 63 65 50 72 69 6f 72 69  rity tracePriori
3190: 74 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ty,..           
31a0: 20 20 20 20 20 54 72 61 63 65 43 61 6c 6c 62 61       TraceCallba
31b0: 63 6b 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b  ck traceCallback
31c0: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
31d0: 20 20 20 53 74 61 63 6b 54 72 61 63 65 20 73 74     StackTrace st
31e0: 61 63 6b 54 72 61 63 65 2c 0d 0a 20 20 20 20 20  ackTrace,..     
31f0: 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 6c             int l
3200: 65 76 65 6c 2c 0d 0a 20 20 20 20 20 20 20 20 20  evel,..         
3210: 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6d 65         string me
3220: 73 73 61 67 65 2c 0d 0a 20 20 20 20 20 20 20 20  ssage,..        
3230: 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 63          string c
3240: 61 74 65 67 6f 72 79 0d 0a 20 20 20 20 20 20 20  ategory..       
3250: 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
3260: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
3270: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
3280: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
3290: 2f 20 4e 4f 54 45 3a 20 49 66 20 74 68 65 20 70  / NOTE: If the p
32a0: 72 69 6f 72 69 74 79 20 6f 66 20 74 68 69 73 20  riority of this 
32b0: 6d 65 73 73 61 67 65 20 69 73 20 6c 65 73 73 20  message is less 
32c0: 74 68 61 6e 20 77 68 61 74 0d 0a 20 20 20 20 20  than what..     
32d0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
32e0: 20 20 20 20 77 65 20 63 75 72 72 65 6e 74 6c 79      we currently
32f0: 20 63 61 72 65 20 61 62 6f 75 74 2c 20 6a 75 73   care about, jus
3300: 74 20 72 65 74 75 72 6e 20 6e 6f 77 2e 0d 0a 20  t return now... 
3310: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
3320: 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
3330: 20 20 20 69 66 20 28 74 72 61 63 65 50 72 69 6f     if (tracePrio
3340: 72 69 74 79 20 3c 20 54 72 61 63 65 50 72 69 6f  rity < TracePrio
3350: 72 69 74 79 29 0d 0a 20 20 20 20 20 20 20 20 20  rity)..         
3360: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
3370: 6e 20 6d 65 73 73 61 67 65 3b 0d 0a 0d 0a 20 20  n message;....  
3380: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
3390: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
33a0: 20 20 2f 2f 20 4e 4f 54 45 3a 20 41 6c 77 61 79    // NOTE: Alway
33b0: 73 20 73 6b 69 70 20 74 68 69 73 20 63 61 6c 6c  s skip this call
33c0: 20 66 72 61 6d 65 20 69 66 20 74 68 65 20 73 74   frame if the st
33d0: 61 63 6b 20 74 72 61 63 65 20 69 73 0d 0a 20 20  ack trace is..  
33e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
33f0: 20 20 20 20 20 20 20 67 6f 69 6e 67 20 74 6f 20         going to 
3400: 62 65 20 63 61 70 74 75 72 65 64 20 62 79 20 47  be captured by G
3410: 65 74 4d 65 74 68 6f 64 4e 61 6d 65 2e 0d 0a 20  etMethodName... 
3420: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
3430: 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
3440: 20 20 20 69 66 20 28 73 74 61 63 6b 54 72 61 63     if (stackTrac
3450: 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  e == null)..    
3460: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3470: 6c 65 76 65 6c 2b 2b 3b 0d 0a 0d 0a 20 20 20 20  level++;....    
3480: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
3490: 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 20 3d 3d  traceCallback ==
34a0: 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
34b0: 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
34c0: 65 43 61 6c 6c 62 61 63 6b 20 3d 20 54 72 61 63  eCallback = Trac
34d0: 65 43 6f 72 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  eCore;....      
34e0: 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
34f0: 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46  allback(String.F
3500: 6f 72 6d 61 74 28 22 7b 30 7d 3a 20 7b 31 7d 22  ormat("{0}: {1}"
3510: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
3520: 20 20 20 20 20 20 20 47 65 74 4d 65 74 68 6f 64         GetMethod
3530: 4e 61 6d 65 28 73 74 61 63 6b 54 72 61 63 65 2c  Name(stackTrace,
3540: 20 6c 65 76 65 6c 29 2c 20 6d 65 73 73 61 67 65   level), message
3550: 29 2c 20 63 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  ), category);...
3560: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
3570: 20 72 65 74 75 72 6e 20 6d 65 73 73 61 67 65 3b   return message;
3580: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
3590: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e  .            #en
35a0: 64 72 65 67 69 6f 6e 0d 0a 20 20 20 20 20 20 20  dregion..       
35b0: 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64   }..        #end
35c0: 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20  region....      
35d0: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
35e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3600: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3610: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
3620: 20 20 20 20 20 23 72 65 67 69 6f 6e 20 4d 6f 63       #region Moc
3630: 6b 52 65 67 69 73 74 72 79 4b 65 79 20 43 6c 61  kRegistryKey Cla
3640: 73 73 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  ss..        priv
3650: 61 74 65 20 73 65 61 6c 65 64 20 63 6c 61 73 73  ate sealed class
3660: 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79   MockRegistryKey
3670: 20 3a 20 49 44 69 73 70 6f 73 61 62 6c 65 0d 0a   : IDisposable..
3680: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
3690: 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50         #region P
36a0: 72 69 76 61 74 65 20 43 6f 6e 73 74 72 75 63 74  rivate Construct
36b0: 6f 72 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ors..           
36c0: 20 70 72 69 76 61 74 65 20 4d 6f 63 6b 52 65 67   private MockReg
36d0: 69 73 74 72 79 4b 65 79 28 29 0d 0a 20 20 20 20  istryKey()..    
36e0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
36f0: 20 20 20 20 20 20 20 20 20 20 20 77 68 61 74 49             whatI
3700: 66 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20  f = true;..     
3710: 20 20 20 20 20 20 20 20 20 20 20 72 65 61 64 4f             readO
3720: 6e 6c 79 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20  nly = true;..   
3730: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 61 66               saf
3740: 65 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20  e = true;..     
3750: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
3760: 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
3770: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
3780: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3790: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37c0: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
37d0: 20 20 20 23 72 65 67 69 6f 6e 20 50 75 62 6c 69     #region Publi
37e0: 63 20 43 6f 6e 73 74 72 75 63 74 6f 72 73 0d 0a  c Constructors..
37f0: 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
3800: 69 63 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b  ic MockRegistryK
3810: 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ey(..           
3820: 20 20 20 20 20 52 65 67 69 73 74 72 79 4b 65 79       RegistryKey
3830: 20 6b 65 79 0d 0a 20 20 20 20 20 20 20 20 20 20   key..          
3840: 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
3850: 20 20 20 20 20 20 20 20 20 3a 20 74 68 69 73 28           : this(
3860: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
3870: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
3880: 20 20 74 68 69 73 2e 6b 65 79 20 3d 20 6b 65 79    this.key = key
3890: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
38a0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
38b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
38c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
38d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
38e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
38f0: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
3900: 20 20 20 70 75 62 6c 69 63 20 4d 6f 63 6b 52 65     public MockRe
3910: 67 69 73 74 72 79 4b 65 79 28 0d 0a 20 20 20 20  gistryKey(..    
3920: 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69              Regi
3930: 73 74 72 79 4b 65 79 20 6b 65 79 2c 0d 0a 20 20  stryKey key,..  
3940: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
3950: 72 69 6e 67 20 73 75 62 4b 65 79 4e 61 6d 65 0d  ring subKeyName.
3960: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
3970: 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   )..            
3980: 20 20 20 20 3a 20 74 68 69 73 28 6b 65 79 29 0d      : this(key).
3990: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
39a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
39b0: 74 68 69 73 2e 73 75 62 4b 65 79 4e 61 6d 65 20  this.subKeyName 
39c0: 3d 20 73 75 62 4b 65 79 4e 61 6d 65 3b 0d 0a 20  = subKeyName;.. 
39d0: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
39e0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
39f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3a00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3a10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3a20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
3a30: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
3a40: 75 62 6c 69 63 20 4d 6f 63 6b 52 65 67 69 73 74  ublic MockRegist
3a50: 72 79 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20  ryKey(..        
3a60: 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79          Registry
3a70: 4b 65 79 20 6b 65 79 2c 0d 0a 20 20 20 20 20 20  Key key,..      
3a80: 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
3a90: 20 73 75 62 4b 65 79 4e 61 6d 65 2c 0d 0a 20 20   subKeyName,..  
3aa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f                bo
3ab0: 6f 6c 20 77 68 61 74 49 66 0d 0a 20 20 20 20 20  ol whatIf..     
3ac0: 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
3ad0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3a 20                : 
3ae0: 74 68 69 73 28 6b 65 79 2c 20 73 75 62 4b 65 79  this(key, subKey
3af0: 4e 61 6d 65 29 0d 0a 20 20 20 20 20 20 20 20 20  Name)..         
3b00: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
3b10: 20 20 20 20 20 20 74 68 69 73 2e 77 68 61 74 49        this.whatI
3b20: 66 20 3d 20 77 68 61 74 49 66 3b 0d 0a 20 20 20  f = whatIf;..   
3b30: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
3b40: 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
3b50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3b60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3b70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3b80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
3b90: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
3ba0: 6c 69 63 20 4d 6f 63 6b 52 65 67 69 73 74 72 79  lic MockRegistry
3bb0: 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20  Key(..          
3bc0: 20 20 20 20 20 20 52 65 67 69 73 74 72 79 4b 65        RegistryKe
3bd0: 79 20 6b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20  y key,..        
3be0: 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 73          string s
3bf0: 75 62 4b 65 79 4e 61 6d 65 2c 0d 0a 20 20 20 20  ubKeyName,..    
3c00: 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
3c10: 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20   whatIf,..      
3c20: 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 72            bool r
3c30: 65 61 64 4f 6e 6c 79 0d 0a 20 20 20 20 20 20 20  eadOnly..       
3c40: 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
3c50: 20 20 20 20 20 20 20 20 20 20 20 20 3a 20 74 68              : th
3c60: 69 73 28 6b 65 79 2c 20 73 75 62 4b 65 79 4e 61  is(key, subKeyNa
3c70: 6d 65 2c 20 77 68 61 74 49 66 29 0d 0a 20 20 20  me, whatIf)..   
3c80: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
3c90: 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73              this
3ca0: 2e 72 65 61 64 4f 6e 6c 79 20 3d 20 72 65 61 64  .readOnly = read
3cb0: 4f 6e 6c 79 3b 0d 0a 20 20 20 20 20 20 20 20 20  Only;..         
3cc0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
3cd0: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
3ce0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3cf0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3d00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3d10: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
3d20: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 4d 6f         public Mo
3d30: 63 6b 52 65 67 69 73 74 72 79 4b 65 79 28 0d 0a  ckRegistryKey(..
3d40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3d50: 52 65 67 69 73 74 72 79 4b 65 79 20 6b 65 79 2c  RegistryKey key,
3d60: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
3d70: 20 20 73 74 72 69 6e 67 20 73 75 62 4b 65 79 4e    string subKeyN
3d80: 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ame,..          
3d90: 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49        bool whatI
3da0: 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  f,..            
3db0: 20 20 20 20 62 6f 6f 6c 20 72 65 61 64 4f 6e 6c      bool readOnl
3dc0: 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y,..            
3dd0: 20 20 20 20 62 6f 6f 6c 20 73 61 66 65 0d 0a 20      bool safe.. 
3de0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29                 )
3df0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
3e00: 20 20 3a 20 74 68 69 73 28 6b 65 79 2c 20 73 75    : this(key, su
3e10: 62 4b 65 79 4e 61 6d 65 2c 20 77 68 61 74 49 66  bKeyName, whatIf
3e20: 2c 20 72 65 61 64 4f 6e 6c 79 29 0d 0a 20 20 20  , readOnly)..   
3e30: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
3e40: 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73              this
3e50: 2e 73 61 66 65 20 3d 20 73 61 66 65 3b 0d 0a 20  .safe = safe;.. 
3e60: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
3e70: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
3e80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3e90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3ea0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3eb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
3ec0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
3ed0: 75 62 6c 69 63 20 4d 6f 63 6b 52 65 67 69 73 74  ublic MockRegist
3ee0: 72 79 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20  ryKey(..        
3ef0: 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79          Registry
3f00: 4b 65 79 20 6b 65 79 2c 0d 0a 20 20 20 20 20 20  Key key,..      
3f10: 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77            bool w
3f20: 68 61 74 49 66 0d 0a 20 20 20 20 20 20 20 20 20  hatIf..         
3f30: 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
3f40: 20 20 20 20 20 20 20 20 20 20 3a 20 74 68 69 73            : this
3f50: 28 6b 65 79 2c 20 6e 75 6c 6c 2c 20 77 68 61 74  (key, null, what
3f60: 49 66 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  If)..           
3f70: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
3f80: 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e      // do nothin
3f90: 67 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  g...            
3fa0: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
3fb0: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
3fc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3fd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3fe0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3ff0: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
4000: 20 20 20 20 70 75 62 6c 69 63 20 4d 6f 63 6b 52      public MockR
4010: 65 67 69 73 74 72 79 4b 65 79 28 0d 0a 20 20 20  egistryKey(..   
4020: 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67               Reg
4030: 69 73 74 72 79 4b 65 79 20 6b 65 79 2c 0d 0a 20  istryKey key,.. 
4040: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62                 b
4050: 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20  ool whatIf,..   
4060: 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f               boo
4070: 6c 20 72 65 61 64 4f 6e 6c 79 0d 0a 20 20 20 20  l readOnly..    
4080: 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
4090: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3a                 :
40a0: 20 74 68 69 73 28 6b 65 79 2c 20 6e 75 6c 6c 2c   this(key, null,
40b0: 20 77 68 61 74 49 66 2c 20 72 65 61 64 4f 6e 6c   whatIf, readOnl
40c0: 79 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y)..            
40d0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
40e0: 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67     // do nothing
40f0: 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ...            }
4100: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
4110: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4120: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4130: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4140: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4150: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
4160: 20 20 20 70 75 62 6c 69 63 20 4d 6f 63 6b 52 65     public MockRe
4170: 67 69 73 74 72 79 4b 65 79 28 0d 0a 20 20 20 20  gistryKey(..    
4180: 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69              Regi
4190: 73 74 72 79 4b 65 79 20 6b 65 79 2c 0d 0a 20 20  stryKey key,..  
41a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f                bo
41b0: 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20  ol whatIf,..    
41c0: 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
41d0: 20 72 65 61 64 4f 6e 6c 79 2c 0d 0a 20 20 20 20   readOnly,..    
41e0: 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
41f0: 20 73 61 66 65 0d 0a 20 20 20 20 20 20 20 20 20   safe..         
4200: 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
4210: 20 20 20 20 20 20 20 20 20 20 3a 20 74 68 69 73            : this
4220: 28 6b 65 79 2c 20 6e 75 6c 6c 2c 20 77 68 61 74  (key, null, what
4230: 49 66 2c 20 72 65 61 64 4f 6e 6c 79 2c 20 73 61  If, readOnly, sa
4240: 66 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  fe)..           
4250: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
4260: 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e      // do nothin
4270: 67 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  g...            
4280: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  }..            #
4290: 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20  endregion....   
42a0: 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
42b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
42c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
42d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
42e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
42f0: 20 20 20 20 20 20 20 20 20 20 20 20 23 72 65 67              #reg
4300: 69 6f 6e 20 50 75 62 6c 69 63 20 4d 65 74 68 6f  ion Public Metho
4310: 64 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ds..            
4320: 70 75 62 6c 69 63 20 76 6f 69 64 20 43 6c 6f 73  public void Clos
4330: 65 28 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e()..           
4340: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
4350: 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
4360: 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a          // NOTE:
4370: 20 4e 6f 20 64 69 73 70 6f 73 65 64 20 63 68 65   No disposed che
4380: 63 6b 20 68 65 72 65 20 62 65 63 61 75 73 65 20  ck here because 
4390: 63 61 6c 6c 69 6e 67 20 74 68 69 73 20 6d 65 74  calling this met
43a0: 68 6f 64 0d 0a 20 20 20 20 20 20 20 20 20 20 20  hod..           
43b0: 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 73 68       //       sh
43c0: 6f 75 6c 64 20 62 65 20 6a 75 73 74 20 6c 69 6b  ould be just lik
43d0: 65 20 63 61 6c 6c 69 6e 67 20 44 69 73 70 6f 73  e calling Dispos
43e0: 65 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e...            
43f0: 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
4400: 20 20 20 20 20 20 20 20 44 69 73 70 6f 73 65 28          Dispose(
4410: 74 72 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  true);..        
4420: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
4430: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
4440: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4450: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4460: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4470: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
4480: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 4d          public M
4490: 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 43  ockRegistryKey C
44a0: 72 65 61 74 65 53 75 62 4b 65 79 28 0d 0a 20 20  reateSubKey(..  
44b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
44c0: 72 69 6e 67 20 73 75 62 4b 65 79 4e 61 6d 65 0d  ring subKeyName.
44d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
44e0: 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   )..            
44f0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
4500: 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64     CheckDisposed
4510: 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ();..           
4520: 20 20 20 20 20 43 68 65 63 6b 52 65 61 64 4f 6e       CheckReadOn
4530: 6c 79 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ly();....       
4540: 20 20 20 20 20 20 20 20 20 69 66 20 28 6b 65 79           if (key
4550: 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
4560: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
4570: 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20  eturn null;.... 
4580: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
4590: 66 20 28 77 68 61 74 49 66 29 0d 0a 20 20 20 20  f (whatIf)..    
45a0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
45b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
45c0: 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
45d0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 48 41             // HA
45e0: 43 4b 3a 20 41 74 74 65 6d 70 74 20 74 6f 20 6f  CK: Attempt to o
45f0: 70 65 6e 20 74 68 65 20 73 70 65 63 69 66 69 65  pen the specifie
4600: 64 20 73 75 62 2d 6b 65 79 2e 20 20 49 66 20 74  d sub-key.  If t
4610: 68 69 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20  his..           
4620: 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
4630: 20 20 66 61 69 6c 73 2c 20 77 65 20 77 69 6c 6c    fails, we will
4640: 20 73 69 6d 70 6c 79 20 72 65 74 75 72 6e 20 74   simply return t
4650: 68 65 20 77 72 61 70 70 65 64 20 72 6f 6f 74 20  he wrapped root 
4660: 6b 65 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20  key..           
4670: 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
4680: 20 20 69 74 73 65 6c 66 20 73 69 6e 63 65 20 6e    itself since n
4690: 6f 20 77 72 69 74 65 73 20 61 72 65 20 61 6c 6c  o writes are all
46a0: 6f 77 65 64 20 69 6e 20 27 77 68 61 74 2d 69 66  owed in 'what-if
46b0: 27 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  '..             
46c0: 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
46d0: 6d 6f 64 65 20 61 6e 79 68 6f 77 2e 0d 0a 20 20  mode anyhow...  
46e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
46f0: 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
4700: 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74            Regist
4710: 72 79 4b 65 79 20 73 75 62 4b 65 79 20 3d 20 6b  ryKey subKey = k
4720: 65 79 2e 4f 70 65 6e 53 75 62 4b 65 79 28 73 75  ey.OpenSubKey(su
4730: 62 4b 65 79 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20  bKeyName);....  
4740: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4750: 20 20 72 65 74 75 72 6e 20 28 73 75 62 4b 65 79    return (subKey
4760: 20 21 3d 20 6e 75 6c 6c 29 20 3f 0d 0a 20 20 20   != null) ?..   
4770: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4780: 20 20 20 20 20 6e 65 77 20 4d 6f 63 6b 52 65 67       new MockReg
4790: 69 73 74 72 79 4b 65 79 28 0d 0a 20 20 20 20 20  istryKey(..     
47a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
47b0: 20 20 20 20 20 20 20 20 20 20 20 73 75 62 4b 65             subKe
47c0: 79 2c 20 77 68 61 74 49 66 2c 20 72 65 61 64 4f  y, whatIf, readO
47d0: 6e 6c 79 2c 20 73 61 66 65 29 20 3a 0d 0a 20 20  nly, safe) :..  
47e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
47f0: 20 20 20 20 20 20 6e 65 77 20 4d 6f 63 6b 52 65        new MockRe
4800: 67 69 73 74 72 79 4b 65 79 28 0d 0a 20 20 20 20  gistryKey(..    
4810: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4820: 20 20 20 20 20 20 20 20 20 20 20 20 6b 65 79 2c              key,
4830: 20 73 75 62 4b 65 79 4e 61 6d 65 2c 20 77 68 61   subKeyName, wha
4840: 74 49 66 2c 20 72 65 61 64 4f 6e 6c 79 2c 20 73  tIf, readOnly, s
4850: 61 66 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  afe);..         
4860: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
4870: 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a            else..
4880: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4890: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
48a0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 65         return ne
48b0: 77 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65  w MockRegistryKe
48c0: 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y(..            
48d0: 20 20 20 20 20 20 20 20 20 20 20 20 6b 65 79 2e              key.
48e0: 43 72 65 61 74 65 53 75 62 4b 65 79 28 73 75 62  CreateSubKey(sub
48f0: 4b 65 79 4e 61 6d 65 29 2c 20 77 68 61 74 49 66  KeyName), whatIf
4900: 2c 20 72 65 61 64 4f 6e 6c 79 2c 20 73 61 66 65  , readOnly, safe
4910: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
4920: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
4930: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
4940: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
4950: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4960: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4970: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4980: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
4990: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 76 6f         public vo
49a0: 69 64 20 44 65 6c 65 74 65 53 75 62 4b 65 79 28  id DeleteSubKey(
49b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
49c0: 20 20 73 74 72 69 6e 67 20 73 75 62 4b 65 79 4e    string subKeyN
49d0: 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ame..           
49e0: 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
49f0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
4a00: 20 20 20 20 20 20 20 43 68 65 63 6b 44 69 73 70         CheckDisp
4a10: 6f 73 65 64 28 29 3b 0d 0a 20 20 20 20 20 20 20  osed();..       
4a20: 20 20 20 20 20 20 20 20 20 43 68 65 63 6b 52 65           CheckRe
4a30: 61 64 4f 6e 6c 79 28 29 3b 0d 0a 0d 0a 20 20 20  adOnly();....   
4a40: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
4a50: 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  (key == null).. 
4a60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4a70: 20 20 20 72 65 74 75 72 6e 3b 0d 0a 0d 0a 20 20     return;....  
4a80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
4a90: 20 28 21 77 68 61 74 49 66 29 0d 0a 20 20 20 20   (!whatIf)..    
4aa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4ab0: 6b 65 79 2e 44 65 6c 65 74 65 53 75 62 4b 65 79  key.DeleteSubKey
4ac0: 28 73 75 62 4b 65 79 4e 61 6d 65 29 3b 0d 0a 20  (subKeyName);.. 
4ad0: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
4ae0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
4af0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4b00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4b10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4b20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
4b30: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
4b40: 75 62 6c 69 63 20 76 6f 69 64 20 44 65 6c 65 74  ublic void Delet
4b50: 65 53 75 62 4b 65 79 54 72 65 65 28 0d 0a 20 20  eSubKeyTree(..  
4b60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
4b70: 72 69 6e 67 20 73 75 62 4b 65 79 4e 61 6d 65 0d  ring subKeyName.
4b80: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
4b90: 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   )..            
4ba0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
4bb0: 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64     CheckDisposed
4bc0: 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ();..           
4bd0: 20 20 20 20 20 43 68 65 63 6b 52 65 61 64 4f 6e       CheckReadOn
4be0: 6c 79 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ly();....       
4bf0: 20 20 20 20 20 20 20 20 20 69 66 20 28 6b 65 79           if (key
4c00: 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
4c10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
4c20: 65 74 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20  eturn;....      
4c30: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21 77            if (!w
4c40: 68 61 74 49 66 29 0d 0a 20 20 20 20 20 20 20 20  hatIf)..        
4c50: 20 20 20 20 20 20 20 20 20 20 20 20 6b 65 79 2e              key.
4c60: 44 65 6c 65 74 65 53 75 62 4b 65 79 54 72 65 65  DeleteSubKeyTree
4c70: 28 73 75 62 4b 65 79 4e 61 6d 65 29 3b 0d 0a 20  (subKeyName);.. 
4c80: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
4c90: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
4ca0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4cb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4cc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4cd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
4ce0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
4cf0: 75 62 6c 69 63 20 76 6f 69 64 20 44 65 6c 65 74  ublic void Delet
4d00: 65 56 61 6c 75 65 28 0d 0a 20 20 20 20 20 20 20  eValue(..       
4d10: 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
4d20: 6e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 20 20  name..          
4d30: 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
4d40: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
4d50: 20 20 20 20 20 20 20 20 43 68 65 63 6b 44 69 73          CheckDis
4d60: 70 6f 73 65 64 28 29 3b 0d 0a 20 20 20 20 20 20  posed();..      
4d70: 20 20 20 20 20 20 20 20 20 20 43 68 65 63 6b 52            CheckR
4d80: 65 61 64 4f 6e 6c 79 28 29 3b 0d 0a 0d 0a 20 20  eadOnly();....  
4d90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
4da0: 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a   (key == null)..
4db0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4dc0: 20 20 20 20 72 65 74 75 72 6e 3b 0d 0a 0d 0a 20      return;.... 
4dd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
4de0: 66 20 28 21 77 68 61 74 49 66 29 0d 0a 20 20 20  f (!whatIf)..   
4df0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4e00: 20 6b 65 79 2e 44 65 6c 65 74 65 56 61 6c 75 65   key.DeleteValue
4e10: 28 6e 61 6d 65 29 3b 0d 0a 20 20 20 20 20 20 20  (name);..       
4e20: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
4e30: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
4e40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4e50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4e60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4e70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
4e80: 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
4e90: 73 74 72 69 6e 67 5b 5d 20 47 65 74 53 75 62 4b  string[] GetSubK
4ea0: 65 79 4e 61 6d 65 73 28 29 0d 0a 20 20 20 20 20  eyNames()..     
4eb0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
4ec0: 20 20 20 20 20 20 20 20 20 20 43 68 65 63 6b 44            CheckD
4ed0: 69 73 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20 20  isposed();....  
4ee0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
4ef0: 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a   (key == null)..
4f00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4f10: 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b      return null;
4f20: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
4f30: 20 20 20 20 72 65 74 75 72 6e 20 6b 65 79 2e 47      return key.G
4f40: 65 74 53 75 62 4b 65 79 4e 61 6d 65 73 28 29 3b  etSubKeyNames();
4f50: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
4f60: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
4f70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4f80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4f90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4fa0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4fb0: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
4fc0: 20 20 70 75 62 6c 69 63 20 6f 62 6a 65 63 74 20    public object 
4fd0: 47 65 74 56 61 6c 75 65 28 0d 0a 20 20 20 20 20  GetValue(..     
4fe0: 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
4ff0: 67 20 6e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20  g name,..       
5000: 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20           object 
5010: 64 65 66 61 75 6c 74 56 61 6c 75 65 0d 0a 20 20  defaultValue..  
5020: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d                ).
5030: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
5040: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5050: 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b  CheckDisposed();
5060: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
5070: 20 20 20 20 69 66 20 28 6b 65 79 20 3d 3d 20 6e      if (key == n
5080: 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
5090: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
50a0: 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20   null;....      
50b0: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
50c0: 20 6b 65 79 2e 47 65 74 56 61 6c 75 65 28 6e 61   key.GetValue(na
50d0: 6d 65 2c 20 64 65 66 61 75 6c 74 56 61 6c 75 65  me, defaultValue
50e0: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
50f0: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
5100: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
5110: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5120: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5130: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5140: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
5150: 20 20 20 20 70 75 62 6c 69 63 20 4d 6f 63 6b 52      public MockR
5160: 65 67 69 73 74 72 79 4b 65 79 20 4f 70 65 6e 53  egistryKey OpenS
5170: 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20  ubKey(..        
5180: 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 73          string s
5190: 75 62 4b 65 79 4e 61 6d 65 0d 0a 20 20 20 20 20  ubKeyName..     
51a0: 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
51b0: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
51c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 43 68 65               Che
51d0: 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 0d  ckDisposed();...
51e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
51f0: 20 72 65 74 75 72 6e 20 4f 70 65 6e 53 75 62 4b   return OpenSubK
5200: 65 79 28 73 75 62 4b 65 79 4e 61 6d 65 2c 20 66  ey(subKeyName, f
5210: 61 6c 73 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  alse);..        
5220: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
5230: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
5240: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5250: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5260: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5270: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
5280: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 4d          public M
5290: 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 4f  ockRegistryKey O
52a0: 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20 20  penSubKey(..    
52b0: 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
52c0: 6e 67 20 73 75 62 4b 65 79 4e 61 6d 65 2c 0d 0a  ng subKeyName,..
52d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
52e0: 62 6f 6f 6c 20 77 72 69 74 61 62 6c 65 0d 0a 20  bool writable.. 
52f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29                 )
5300: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
5310: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
5320: 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29   CheckDisposed()
5330: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
5340: 20 20 20 20 20 69 66 20 28 77 72 69 74 61 62 6c       if (writabl
5350: 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e)..            
5360: 20 20 20 20 20 20 20 20 43 68 65 63 6b 52 65 61          CheckRea
5370: 64 4f 6e 6c 79 28 29 3b 0d 0a 0d 0a 20 20 20 20  dOnly();....    
5380: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
5390: 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  key == null)..  
53a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
53b0: 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a    return null;..
53c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
53d0: 20 20 52 65 67 69 73 74 72 79 4b 65 79 20 73 75    RegistryKey su
53e0: 62 4b 65 79 20 3d 20 6b 65 79 2e 4f 70 65 6e 53  bKey = key.OpenS
53f0: 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20  ubKey(..        
5400: 20 20 20 20 20 20 20 20 20 20 20 20 73 75 62 4b              subK
5410: 65 79 4e 61 6d 65 2c 20 77 68 61 74 49 66 20 3f  eyName, whatIf ?
5420: 20 66 61 6c 73 65 20 3a 20 77 72 69 74 61 62 6c   false : writabl
5430: 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e);....         
5440: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 28 73         return (s
5450: 75 62 4b 65 79 20 21 3d 20 6e 75 6c 6c 29 20 3f  ubKey != null) ?
5460: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
5470: 20 20 20 20 20 20 6e 65 77 20 4d 6f 63 6b 52 65        new MockRe
5480: 67 69 73 74 72 79 4b 65 79 28 73 75 62 4b 65 79  gistryKey(subKey
5490: 2c 20 77 68 61 74 49 66 2c 20 72 65 61 64 4f 6e  , whatIf, readOn
54a0: 6c 79 2c 20 73 61 66 65 29 20 3a 20 6e 75 6c 6c  ly, safe) : null
54b0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
54c0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
54d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
54e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
54f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5500: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5510: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
5520: 20 20 20 70 75 62 6c 69 63 20 76 6f 69 64 20 53     public void S
5530: 65 74 56 61 6c 75 65 28 0d 0a 20 20 20 20 20 20  etValue(..      
5540: 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
5550: 20 6e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20   name,..        
5560: 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 76          object v
5570: 61 6c 75 65 0d 0a 20 20 20 20 20 20 20 20 20 20  alue..          
5580: 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
5590: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
55a0: 20 20 20 20 20 20 20 20 43 68 65 63 6b 44 69 73          CheckDis
55b0: 70 6f 73 65 64 28 29 3b 0d 0a 20 20 20 20 20 20  posed();..      
55c0: 20 20 20 20 20 20 20 20 20 20 43 68 65 63 6b 52            CheckR
55d0: 65 61 64 4f 6e 6c 79 28 29 3b 0d 0a 0d 0a 20 20  eadOnly();....  
55e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
55f0: 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a   (key == null)..
5600: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5610: 20 20 20 20 72 65 74 75 72 6e 3b 0d 0a 0d 0a 20      return;.... 
5620: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
5630: 66 20 28 21 77 68 61 74 49 66 29 0d 0a 20 20 20  f (!whatIf)..   
5640: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5650: 20 6b 65 79 2e 53 65 74 56 61 6c 75 65 28 6e 61   key.SetValue(na
5660: 6d 65 2c 20 76 61 6c 75 65 29 3b 0d 0a 20 20 20  me, value);..   
5670: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
5680: 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
5690: 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  on....          
56a0: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
56b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
56c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
56d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
56e0: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
56f0: 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 75 62       #region Pub
5700: 6c 69 63 20 50 72 6f 70 65 72 74 69 65 73 0d 0a  lic Properties..
5710: 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
5720: 69 63 20 73 74 72 69 6e 67 20 4e 61 6d 65 0d 0a  ic string Name..
5730: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
5740: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67                 g
5750: 65 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  et..            
5760: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
5770: 20 20 20 20 20 20 20 20 20 20 20 43 68 65 63 6b             Check
5780: 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20  Disposed();.... 
5790: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
57a0: 20 20 20 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75     if (key == nu
57b0: 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
57c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
57d0: 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20  urn null;....   
57e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
57f0: 20 72 65 74 75 72 6e 20 21 53 74 72 69 6e 67 2e   return !String.
5800: 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 73 75  IsNullOrEmpty(su
5810: 62 4b 65 79 4e 61 6d 65 29 20 3f 0d 0a 20 20 20  bKeyName) ?..   
5820: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5830: 20 20 20 20 20 53 74 72 69 6e 67 2e 46 6f 72 6d       String.Form
5840: 61 74 28 22 7b 30 7d 5c 5c 7b 31 7d 22 2c 20 6b  at("{0}\\{1}", k
5850: 65 79 2e 4e 61 6d 65 2c 20 73 75 62 4b 65 79 4e  ey.Name, subKeyN
5860: 61 6d 65 29 20 3a 0d 0a 20 20 20 20 20 20 20 20  ame) :..        
5870: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5880: 6b 65 79 2e 4e 61 6d 65 3b 0d 0a 20 20 20 20 20  key.Name;..     
5890: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
58a0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
58b0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
58c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
58d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
58e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
58f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
5900: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
5910: 69 76 61 74 65 20 52 65 67 69 73 74 72 79 4b 65  ivate RegistryKe
5920: 79 20 6b 65 79 3b 0d 0a 20 20 20 20 20 20 20 20  y key;..        
5930: 20 20 20 20 70 75 62 6c 69 63 20 52 65 67 69 73      public Regis
5940: 74 72 79 4b 65 79 20 4b 65 79 0d 0a 20 20 20 20  tryKey Key..    
5950: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
5960: 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b             get {
5970: 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29   CheckDisposed()
5980: 3b 20 43 68 65 63 6b 53 61 66 65 28 29 3b 20 72  ; CheckSafe(); r
5990: 65 74 75 72 6e 20 6b 65 79 3b 20 7d 0d 0a 20 20  eturn key; }..  
59a0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
59b0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
59c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
59d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
59e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
59f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
5a00: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
5a10: 69 76 61 74 65 20 73 74 72 69 6e 67 20 73 75 62  ivate string sub
5a20: 4b 65 79 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20  KeyName;..      
5a30: 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 72        public str
5a40: 69 6e 67 20 53 75 62 4b 65 79 4e 61 6d 65 0d 0a  ing SubKeyName..
5a50: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
5a60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67                 g
5a70: 65 74 20 7b 20 43 68 65 63 6b 44 69 73 70 6f 73  et { CheckDispos
5a80: 65 64 28 29 3b 20 72 65 74 75 72 6e 20 73 75 62  ed(); return sub
5a90: 4b 65 79 4e 61 6d 65 3b 20 7d 0d 0a 20 20 20 20  KeyName; }..    
5aa0: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
5ab0: 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
5ac0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5ad0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5ae0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5af0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
5b00: 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
5b10: 61 74 65 20 62 6f 6f 6c 20 77 68 61 74 49 66 3b  ate bool whatIf;
5b20: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
5b30: 62 6c 69 63 20 62 6f 6f 6c 20 57 68 61 74 49 66  blic bool WhatIf
5b40: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
5b50: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
5b60: 20 67 65 74 20 7b 20 43 68 65 63 6b 44 69 73 70   get { CheckDisp
5b70: 6f 73 65 64 28 29 3b 20 72 65 74 75 72 6e 20 77  osed(); return w
5b80: 68 61 74 49 66 3b 20 7d 0d 0a 20 20 20 20 20 20  hatIf; }..      
5b90: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
5ba0: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
5bb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5bc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5bd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5be0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
5bf0: 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
5c00: 65 20 62 6f 6f 6c 20 72 65 61 64 4f 6e 6c 79 3b  e bool readOnly;
5c10: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
5c20: 62 6c 69 63 20 62 6f 6f 6c 20 52 65 61 64 4f 6e  blic bool ReadOn
5c30: 6c 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ly..            
5c40: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
5c50: 20 20 20 67 65 74 20 7b 20 43 68 65 63 6b 44 69     get { CheckDi
5c60: 73 70 6f 73 65 64 28 29 3b 20 72 65 74 75 72 6e  sposed(); return
5c70: 20 72 65 61 64 4f 6e 6c 79 3b 20 7d 0d 0a 20 20   readOnly; }..  
5c80: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
5c90: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
5ca0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5cb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5cc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5cd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
5ce0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
5cf0: 62 6c 69 63 20 62 6f 6f 6c 20 73 61 66 65 3b 0d  blic bool safe;.
5d00: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
5d10: 6c 69 63 20 62 6f 6f 6c 20 53 61 66 65 0d 0a 20  lic bool Safe.. 
5d20: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
5d30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65                ge
5d40: 74 20 7b 20 43 68 65 63 6b 44 69 73 70 6f 73 65  t { CheckDispose
5d50: 64 28 29 3b 20 72 65 74 75 72 6e 20 73 61 66 65  d(); return safe
5d60: 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
5d70: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
5d80: 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20  #endregion....  
5d90: 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
5da0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5db0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5dc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5dd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
5de0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 72 65  .            #re
5df0: 67 69 6f 6e 20 50 72 69 76 61 74 65 20 4d 65 74  gion Private Met
5e00: 68 6f 64 73 0d 0a 20 20 20 20 20 20 20 20 20 20  hods..          
5e10: 20 20 70 72 69 76 61 74 65 20 76 6f 69 64 20 43    private void C
5e20: 68 65 63 6b 52 65 61 64 4f 6e 6c 79 28 29 0d 0a  heckReadOnly()..
5e30: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
5e40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
5e50: 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
5e60: 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 49 6e 20 22     // NOTE: In "
5e70: 72 65 61 64 2d 6f 6e 6c 79 22 20 6d 6f 64 65 2c  read-only" mode,
5e80: 20 77 65 20 64 69 73 61 6c 6c 6f 77 20 61 6c 6c   we disallow all
5e90: 20 77 72 69 74 65 20 61 63 63 65 73 73 2e 0d 0a   write access...
5ea0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5eb0: 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
5ec0: 20 20 20 20 69 66 20 28 21 72 65 61 64 4f 6e 6c      if (!readOnl
5ed0: 79 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y)..            
5ee0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 3b 0d          return;.
5ef0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
5f00: 20 20 20 74 68 72 6f 77 20 6e 65 77 20 49 6e 76     throw new Inv
5f10: 61 6c 69 64 4f 70 65 72 61 74 69 6f 6e 45 78 63  alidOperationExc
5f20: 65 70 74 69 6f 6e 28 29 3b 0d 0a 20 20 20 20 20  eption();..     
5f30: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
5f40: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
5f50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5f60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5f70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5f80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
5f90: 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
5fa0: 74 65 20 76 6f 69 64 20 43 68 65 63 6b 53 61 66  te void CheckSaf
5fb0: 65 28 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e()..           
5fc0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
5fd0: 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
5fe0: 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a          // NOTE:
5ff0: 20 49 6e 20 22 73 61 66 65 22 20 6d 6f 64 65 2c   In "safe" mode,
6000: 20 77 65 20 64 69 73 61 6c 6c 6f 77 20 61 6c 6c   we disallow all
6010: 20 64 69 72 65 63 74 20 61 63 63 65 73 73 20 74   direct access t
6020: 6f 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 20  o the..         
6030: 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
6040: 63 6f 6e 74 61 69 6e 65 64 20 72 65 67 69 73 74  contained regist
6050: 72 79 20 6b 65 79 2e 0d 0a 20 20 20 20 20 20 20  ry key...       
6060: 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
6070: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
6080: 28 21 73 61 66 65 29 0d 0a 20 20 20 20 20 20 20  (!safe)..       
6090: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
60a0: 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  urn;....        
60b0: 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65          throw ne
60c0: 77 20 49 6e 76 61 6c 69 64 4f 70 65 72 61 74 69  w InvalidOperati
60d0: 6f 6e 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a  onException();..
60e0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
60f0: 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 72             #endr
6100: 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20  egion....       
6110: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
6120: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6130: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6140: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6150: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
6160: 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20          #region 
6170: 53 79 73 74 65 6d 2e 4f 62 6a 65 63 74 20 4f 76  System.Object Ov
6180: 65 72 72 69 64 65 73 0d 0a 20 20 20 20 20 20 20  errides..       
6190: 20 20 20 20 20 70 75 62 6c 69 63 20 6f 76 65 72       public over
61a0: 72 69 64 65 20 73 74 72 69 6e 67 20 54 6f 53 74  ride string ToSt
61b0: 72 69 6e 67 28 29 0d 0a 20 20 20 20 20 20 20 20  ring()..        
61c0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
61d0: 20 20 20 20 20 20 20 43 68 65 63 6b 44 69 73 70         CheckDisp
61e0: 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20  osed();....     
61f0: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
6200: 6e 20 74 68 69 73 2e 4e 61 6d 65 3b 0d 0a 20 20  n this.Name;..  
6210: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
6220: 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67           #endreg
6230: 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ion....         
6240: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
6250: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6260: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6270: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6280: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
6290: 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 49 6d        #region Im
62a0: 70 6c 69 63 69 74 20 43 6f 6e 76 65 72 73 69 6f  plicit Conversio
62b0: 6e 20 4f 70 65 72 61 74 6f 72 73 0d 0a 20 20 20  n Operators..   
62c0: 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
62d0: 20 20 20 20 20 20 20 20 20 2f 2f 20 42 55 47 42           // BUGB
62e0: 55 47 3a 20 54 68 65 20 27 77 68 61 74 2d 69 66  UG: The 'what-if
62f0: 27 20 6d 6f 64 65 20 73 65 74 74 69 6e 67 20 68  ' mode setting h
6300: 65 72 65 20 73 68 6f 75 6c 64 20 70 72 6f 62 61  ere should proba
6310: 62 6c 79 20 62 65 20 62 61 73 65 64 0d 0a 20 20  bly be based..  
6320: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
6330: 20 20 20 20 20 6f 6e 20 73 6f 6d 65 20 73 74 61       on some sta
6340: 74 69 63 20 70 72 6f 70 65 72 74 79 2c 20 6e 6f  tic property, no
6350: 74 20 68 61 72 64 2d 63 6f 64 65 64 20 74 6f 20  t hard-coded to 
6360: 74 72 75 65 3f 0d 0a 20 20 20 20 20 20 20 20 20  true?..         
6370: 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
6380: 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63     public static
6390: 20 69 6d 70 6c 69 63 69 74 20 6f 70 65 72 61 74   implicit operat
63a0: 6f 72 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b  or MockRegistryK
63b0: 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ey(..           
63c0: 20 20 20 20 20 52 65 67 69 73 74 72 79 4b 65 79       RegistryKey
63d0: 20 6b 65 79 0d 0a 20 20 20 20 20 20 20 20 20 20   key..          
63e0: 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
63f0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
6400: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e          return n
6410: 65 77 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b  ew MockRegistryK
6420: 65 79 28 6b 65 79 2c 20 6e 75 6c 6c 2c 20 74 72  ey(key, null, tr
6430: 75 65 2c 20 66 61 6c 73 65 2c 20 66 61 6c 73 65  ue, false, false
6440: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
6450: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
6460: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
6470: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6480: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6490: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
64a0: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
64b0: 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
64c0: 20 20 20 20 2f 2f 20 42 55 47 42 55 47 3a 20 52      // BUGBUG: R
64d0: 65 6d 6f 76 65 20 6d 65 3f 20 20 54 68 69 73 20  emove me?  This 
64e0: 73 68 6f 75 6c 64 20 62 65 20 73 61 66 65 20 62  should be safe b
64f0: 65 63 61 75 73 65 20 69 6e 20 27 77 68 61 74 2d  ecause in 'what-
6500: 69 66 27 0d 0a 20 20 20 20 20 20 20 20 20 20 20  if'..           
6510: 20 2f 2f 20 20 20 20 20 20 20 20 20 6d 6f 64 65   //         mode
6520: 20 61 6c 6c 20 6b 65 79 73 20 61 72 65 20 6f 70   all keys are op
6530: 65 6e 65 64 20 72 65 61 64 2d 6f 6e 6c 79 2e 0d  ened read-only..
6540: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d  .            //.
6550: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
6560: 6c 69 63 20 73 74 61 74 69 63 20 69 6d 70 6c 69  lic static impli
6570: 63 69 74 20 6f 70 65 72 61 74 6f 72 20 52 65 67  cit operator Reg
6580: 69 73 74 72 79 4b 65 79 28 0d 0a 20 20 20 20 20  istryKey(..     
6590: 20 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52             MockR
65a0: 65 67 69 73 74 72 79 4b 65 79 20 6b 65 79 0d 0a  egistryKey key..
65b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
65c0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
65d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
65e0: 20 20 72 65 74 75 72 6e 20 28 6b 65 79 20 21 3d    return (key !=
65f0: 20 6e 75 6c 6c 29 20 3f 20 6b 65 79 2e 4b 65 79   null) ? key.Key
6600: 20 3a 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20   : null;..      
6610: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
6620: 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d       #endregion.
6630: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
6640: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6650: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6660: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6670: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6680: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
6690: 20 20 23 72 65 67 69 6f 6e 20 49 44 69 73 70 6f    #region IDispo
66a0: 73 61 62 6c 65 20 22 50 61 74 74 65 72 6e 22 20  sable "Pattern" 
66b0: 4d 65 6d 62 65 72 73 0d 0a 20 20 20 20 20 20 20  Members..       
66c0: 20 20 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f       private boo
66d0: 6c 20 64 69 73 70 6f 73 65 64 3b 0d 0a 20 20 20  l disposed;..   
66e0: 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65           private
66f0: 20 76 6f 69 64 20 43 68 65 63 6b 44 69 73 70 6f   void CheckDispo
6700: 73 65 64 28 29 20 2f 2a 20 74 68 72 6f 77 20 2a  sed() /* throw *
6710: 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  /..            {
6720: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
6730: 20 20 69 66 20 28 21 64 69 73 70 6f 73 65 64 29    if (!disposed)
6740: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
6750: 20 20 20 20 20 20 72 65 74 75 72 6e 3b 0d 0a 0d        return;...
6760: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
6770: 20 74 68 72 6f 77 20 6e 65 77 20 4f 62 6a 65 63   throw new Objec
6780: 74 44 69 73 70 6f 73 65 64 45 78 63 65 70 74 69  tDisposedExcepti
6790: 6f 6e 28 74 79 70 65 6f 66 28 4d 6f 63 6b 52 65  on(typeof(MockRe
67a0: 67 69 73 74 72 79 4b 65 79 29 2e 4e 61 6d 65 29  gistryKey).Name)
67b0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
67c0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
67d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
67e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
67f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6800: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6810: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
6820: 20 20 20 70 72 69 76 61 74 65 20 2f 2a 20 70 72     private /* pr
6830: 6f 74 65 63 74 65 64 20 76 69 72 74 75 61 6c 20  otected virtual 
6840: 2a 2f 20 76 6f 69 64 20 44 69 73 70 6f 73 65 28  */ void Dispose(
6850: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
6860: 20 20 62 6f 6f 6c 20 64 69 73 70 6f 73 69 6e 67    bool disposing
6870: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
6880: 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20    )..           
6890: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
68a0: 20 20 20 20 69 66 20 28 21 64 69 73 70 6f 73 65      if (!dispose
68b0: 64 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  d)..            
68c0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
68d0: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 64             if (d
68e0: 69 73 70 6f 73 69 6e 67 29 0d 0a 20 20 20 20 20  isposing)..     
68f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
6900: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
6910: 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
6920: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6930: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
6940: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6950: 20 20 20 20 20 20 20 20 2f 2f 20 64 69 73 70 6f          // dispo
6960: 73 65 20 6d 61 6e 61 67 65 64 20 72 65 73 6f 75  se managed resou
6970: 72 63 65 73 20 68 65 72 65 2e 2e 2e 0d 0a 20 20  rces here.....  
6980: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6990: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
69a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
69b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
69c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
69d0: 20 20 20 20 20 20 69 66 20 28 6b 65 79 20 21 3d        if (key !=
69e0: 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
69f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6a00: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
6a10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6b                 k
6a20: 65 79 2e 43 6c 6f 73 65 28 29 3b 0d 0a 20 20 20  ey.Close();..   
6a30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6a40: 20 20 20 20 20 20 20 20 20 6b 65 79 20 3d 20 6e           key = n
6a50: 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ull;..          
6a60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
6a70: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
6a80: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
6a90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
6aa0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6ab0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6ac0: 2f 2f 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20  ////..          
6ad0: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 72 65 6c            // rel
6ae0: 65 61 73 65 20 75 6e 6d 61 6e 61 67 65 64 20 72  ease unmanaged r
6af0: 65 73 6f 75 72 63 65 73 20 68 65 72 65 2e 2e 2e  esources here...
6b00: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
6b10: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
6b20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6b30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
6b40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6b50: 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
6b60: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e              // N
6b70: 4f 54 45 3a 20 54 68 69 73 20 6f 62 6a 65 63 74  OTE: This object
6b80: 20 69 73 20 6e 6f 77 20 64 69 73 70 6f 73 65 64   is now disposed
6b90: 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
6ba0: 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
6bb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
6bc0: 69 73 70 6f 73 65 64 20 3d 20 74 72 75 65 3b 0d  isposed = true;.
6bd0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
6be0: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
6bf0: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  }..            #
6c00: 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20  endregion....   
6c10: 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
6c20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6c30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6c40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6c50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
6c60: 20 20 20 20 20 20 20 20 20 20 20 20 23 72 65 67              #reg
6c70: 69 6f 6e 20 49 44 69 73 70 6f 73 61 62 6c 65 20  ion IDisposable 
6c80: 4d 65 6d 62 65 72 73 0d 0a 20 20 20 20 20 20 20  Members..       
6c90: 20 20 20 20 20 70 75 62 6c 69 63 20 76 6f 69 64       public void
6ca0: 20 44 69 73 70 6f 73 65 28 29 0d 0a 20 20 20 20   Dispose()..    
6cb0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
6cc0: 20 20 20 20 20 20 20 20 20 20 20 44 69 73 70 6f             Dispo
6cd0: 73 65 28 74 72 75 65 29 3b 0d 0a 20 20 20 20 20  se(true);..     
6ce0: 20 20 20 20 20 20 20 20 20 20 20 47 43 2e 53 75             GC.Su
6cf0: 70 70 72 65 73 73 46 69 6e 61 6c 69 7a 65 28 74  ppressFinalize(t
6d00: 68 69 73 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  his);..         
6d10: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
6d20: 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a    #endregion....
6d30: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
6d40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6d50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6d60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6d70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
6d80: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  ...            #
6d90: 72 65 67 69 6f 6e 20 44 65 73 74 72 75 63 74 6f  region Destructo
6da0: 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7e  r..            ~
6db0: 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 28  MockRegistryKey(
6dc0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
6dd0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
6de0: 20 20 44 69 73 70 6f 73 65 28 66 61 6c 73 65 29    Dispose(false)
6df0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
6e00: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 65  ..            #e
6e10: 6e 64 72 65 67 69 6f 6e 0d 0a 20 20 20 20 20 20  ndregion..      
6e20: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e    }..        #en
6e30: 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
6e40: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
6e50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6e60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6e70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6e80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
6e90: 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 52 65        #region Re
6ea0: 67 69 73 74 72 79 48 65 6c 70 65 72 20 43 6c 61  gistryHelper Cla
6eb0: 73 73 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  ss..        priv
6ec0: 61 74 65 20 73 74 61 74 69 63 20 63 6c 61 73 73  ate static class
6ed0: 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 0d   RegistryHelper.
6ee0: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
6ef0: 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20          #region 
6f00: 50 75 62 6c 69 63 20 53 74 61 74 69 63 20 50 72  Public Static Pr
6f10: 6f 70 65 72 74 69 65 73 0d 0a 20 20 20 20 20 20  operties..      
6f20: 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74        private st
6f30: 61 74 69 63 20 69 6e 74 20 73 75 62 4b 65 79 73  atic int subKeys
6f40: 43 72 65 61 74 65 64 3b 0d 0a 20 20 20 20 20 20  Created;..      
6f50: 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61        public sta
6f60: 74 69 63 20 69 6e 74 20 53 75 62 4b 65 79 73 43  tic int SubKeysC
6f70: 72 65 61 74 65 64 0d 0a 20 20 20 20 20 20 20 20  reated..        
6f80: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
6f90: 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74         get { ret
6fa0: 75 72 6e 20 73 75 62 4b 65 79 73 43 72 65 61 74  urn subKeysCreat
6fb0: 65 64 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  ed; }..         
6fc0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
6fd0: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
6fe0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6ff0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7000: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7010: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
7020: 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
7030: 74 61 74 69 63 20 69 6e 74 20 73 75 62 4b 65 79  tatic int subKey
7040: 73 44 65 6c 65 74 65 64 3b 0d 0a 20 20 20 20 20  sDeleted;..     
7050: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74         public st
7060: 61 74 69 63 20 69 6e 74 20 53 75 62 4b 65 79 73  atic int SubKeys
7070: 44 65 6c 65 74 65 64 0d 0a 20 20 20 20 20 20 20  Deleted..       
7080: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
7090: 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65          get { re
70a0: 74 75 72 6e 20 73 75 62 4b 65 79 73 44 65 6c 65  turn subKeysDele
70b0: 74 65 64 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  ted; }..        
70c0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
70d0: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
70e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
70f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7100: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7110: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
7120: 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
7130: 73 74 61 74 69 63 20 69 6e 74 20 6b 65 79 56 61  static int keyVa
7140: 6c 75 65 73 53 65 74 3b 0d 0a 20 20 20 20 20 20  luesSet;..      
7150: 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61        public sta
7160: 74 69 63 20 69 6e 74 20 4b 65 79 56 61 6c 75 65  tic int KeyValue
7170: 73 53 65 74 0d 0a 20 20 20 20 20 20 20 20 20 20  sSet..          
7180: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
7190: 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72       get { retur
71a0: 6e 20 6b 65 79 56 61 6c 75 65 73 53 65 74 3b 20  n keyValuesSet; 
71b0: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
71c0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
71d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
71e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
71f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7200: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7210: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
7220: 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69     private stati
7230: 63 20 69 6e 74 20 6b 65 79 56 61 6c 75 65 73 44  c int keyValuesD
7240: 65 6c 65 74 65 64 3b 0d 0a 20 20 20 20 20 20 20  eleted;..       
7250: 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74       public stat
7260: 69 63 20 69 6e 74 20 4b 65 79 56 61 6c 75 65 73  ic int KeyValues
7270: 44 65 6c 65 74 65 64 0d 0a 20 20 20 20 20 20 20  Deleted..       
7280: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
7290: 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65          get { re
72a0: 74 75 72 6e 20 6b 65 79 56 61 6c 75 65 73 44 65  turn keyValuesDe
72b0: 6c 65 74 65 64 3b 20 7d 0d 0a 20 20 20 20 20 20  leted; }..      
72c0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
72d0: 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d       #endregion.
72e0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
72f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7300: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7310: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7320: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7330: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
7340: 20 20 23 72 65 67 69 6f 6e 20 50 75 62 6c 69 63    #region Public
7350: 20 53 74 61 74 69 63 20 4d 65 74 68 6f 64 73 0d   Static Methods.
7360: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
7370: 6c 69 63 20 73 74 61 74 69 63 20 52 65 67 69 73  lic static Regis
7380: 74 72 79 4b 65 79 20 47 65 74 52 6f 6f 74 4b 65  tryKey GetRootKe
7390: 79 42 79 4e 61 6d 65 28 0d 0a 20 20 20 20 20 20  yByName(..      
73a0: 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
73b0: 20 6b 65 79 4e 61 6d 65 0d 0a 20 20 20 20 20 20   keyName..      
73c0: 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
73d0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
73e0: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
73f0: 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45  String.IsNullOrE
7400: 6d 70 74 79 28 6b 65 79 4e 61 6d 65 29 29 0d 0a  mpty(keyName))..
7410: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7420: 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b      return null;
7430: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
7440: 20 20 20 20 73 77 69 74 63 68 20 28 6b 65 79 4e      switch (keyN
7450: 61 6d 65 2e 54 6f 55 70 70 65 72 49 6e 76 61 72  ame.ToUpperInvar
7460: 69 61 6e 74 28 29 29 0d 0a 20 20 20 20 20 20 20  iant())..       
7470: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
7480: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7490: 63 61 73 65 20 22 48 4b 43 52 22 3a 0d 0a 20 20  case "HKCR":..  
74a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
74b0: 20 20 63 61 73 65 20 22 48 4b 45 59 5f 43 4c 41    case "HKEY_CLA
74c0: 53 53 45 53 5f 52 4f 4f 54 22 3a 0d 0a 20 20 20  SSES_ROOT":..   
74d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
74e0: 20 20 20 20 20 72 65 74 75 72 6e 20 52 65 67 69       return Regi
74f0: 73 74 72 79 2e 43 6c 61 73 73 65 73 52 6f 6f 74  stry.ClassesRoot
7500: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
7510: 20 20 20 20 20 20 20 63 61 73 65 20 22 48 4b 43         case "HKC
7520: 43 22 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  C":..           
7530: 20 20 20 20 20 20 20 20 20 63 61 73 65 20 22 48           case "H
7540: 4b 45 59 5f 43 55 52 52 45 4e 54 5f 43 4f 4e 46  KEY_CURRENT_CONF
7550: 49 47 22 3a 0d 0a 20 20 20 20 20 20 20 20 20 20  IG":..          
7560: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
7570: 74 75 72 6e 20 52 65 67 69 73 74 72 79 2e 43 75  turn Registry.Cu
7580: 72 72 65 6e 74 43 6f 6e 66 69 67 3b 0d 0a 20 20  rrentConfig;..  
7590: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
75a0: 20 20 63 61 73 65 20 22 48 4b 43 55 22 3a 0d 0a    case "HKCU":..
75b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
75c0: 20 20 20 20 63 61 73 65 20 22 48 4b 45 59 5f 43      case "HKEY_C
75d0: 55 52 52 45 4e 54 5f 55 53 45 52 22 3a 0d 0a 20  URRENT_USER":.. 
75e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
75f0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 52 65         return Re
7600: 67 69 73 74 72 79 2e 43 75 72 72 65 6e 74 55 73  gistry.CurrentUs
7610: 65 72 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  er;..           
7620: 20 20 20 20 20 20 20 20 20 63 61 73 65 20 22 48           case "H
7630: 4b 44 44 22 3a 0d 0a 20 20 20 20 20 20 20 20 20  KDD":..         
7640: 20 20 20 20 20 20 20 20 20 20 20 63 61 73 65 20             case 
7650: 22 48 4b 45 59 5f 44 59 4e 5f 44 41 54 41 22 3a  "HKEY_DYN_DATA":
7660: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
7670: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
7680: 20 52 65 67 69 73 74 72 79 2e 44 79 6e 44 61 74   Registry.DynDat
7690: 61 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  a;..            
76a0: 20 20 20 20 20 20 20 20 63 61 73 65 20 22 48 4b          case "HK
76b0: 4c 4d 22 3a 0d 0a 20 20 20 20 20 20 20 20 20 20  LM":..          
76c0: 20 20 20 20 20 20 20 20 20 20 63 61 73 65 20 22            case "
76d0: 48 4b 45 59 5f 4c 4f 43 41 4c 5f 4d 41 43 48 49  HKEY_LOCAL_MACHI
76e0: 4e 45 22 3a 0d 0a 20 20 20 20 20 20 20 20 20 20  NE":..          
76f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
7700: 74 75 72 6e 20 52 65 67 69 73 74 72 79 2e 4c 6f  turn Registry.Lo
7710: 63 61 6c 4d 61 63 68 69 6e 65 3b 0d 0a 20 20 20  calMachine;..   
7720: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7730: 20 63 61 73 65 20 22 48 4b 50 44 22 3a 0d 0a 20   case "HKPD":.. 
7740: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7750: 20 20 20 63 61 73 65 20 22 48 4b 45 59 5f 50 45     case "HKEY_PE
7760: 52 46 4f 52 4d 41 4e 43 45 5f 44 41 54 41 22 3a  RFORMANCE_DATA":
7770: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
7780: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
7790: 20 52 65 67 69 73 74 72 79 2e 50 65 72 66 6f 72   Registry.Perfor
77a0: 6d 61 6e 63 65 44 61 74 61 3b 0d 0a 20 20 20 20  manceData;..    
77b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
77c0: 63 61 73 65 20 22 48 4b 55 22 3a 0d 0a 20 20 20  case "HKU":..   
77d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
77e0: 20 63 61 73 65 20 22 48 4b 45 59 5f 55 53 45 52   case "HKEY_USER
77f0: 53 22 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  S":..           
7800: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
7810: 75 72 6e 20 52 65 67 69 73 74 72 79 2e 55 73 65  urn Registry.Use
7820: 72 73 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  rs;..           
7830: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
7840: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
7850: 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20   null;..        
7860: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
7870: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
7880: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7890: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
78a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
78b0: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
78c0: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73          public s
78d0: 74 61 74 69 63 20 4d 6f 63 6b 52 65 67 69 73 74  tatic MockRegist
78e0: 72 79 4b 65 79 20 4f 70 65 6e 53 75 62 4b 65 79  ryKey OpenSubKey
78f0: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
7900: 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b     MockRegistryK
7910: 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20  ey rootKey,..   
7920: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72               str
7930: 69 6e 67 20 73 75 62 4b 65 79 4e 61 6d 65 2c 0d  ing subKeyName,.
7940: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
7950: 20 62 6f 6f 6c 20 77 72 69 74 61 62 6c 65 2c 0d   bool writable,.
7960: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
7970: 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20   bool whatIf,.. 
7980: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62                 b
7990: 6f 6f 6c 20 76 65 72 62 6f 73 65 0d 0a 20 20 20  ool verbose..   
79a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a               )..
79b0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
79c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
79d0: 66 20 28 72 6f 6f 74 4b 65 79 20 3d 3d 20 6e 75  f (rootKey == nu
79e0: 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
79f0: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
7a00: 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  null;....       
7a10: 20 20 20 20 20 20 20 20 20 69 66 20 28 76 65 72           if (ver
7a20: 62 6f 73 65 29 0d 0a 20 20 20 20 20 20 20 20 20  bose)..         
7a30: 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
7a40: 4f 70 73 2e 54 72 61 63 65 28 0d 0a 20 20 20 20  Ops.Trace(..    
7a50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7a60: 20 20 20 20 77 72 69 74 61 62 6c 65 20 3f 20 54      writable ? T
7a70: 72 61 63 65 50 72 69 6f 72 69 74 79 2e 48 69 67  racePriority.Hig
7a80: 68 65 73 74 20 3a 20 54 72 61 63 65 50 72 69 6f  hest : TracePrio
7a90: 72 69 74 79 2e 48 69 67 68 65 72 2c 0d 0a 20 20  rity.Higher,..  
7aa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7ab0: 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62        traceCallb
7ac0: 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d  ack, String.Form
7ad0: 61 74 28 22 72 6f 6f 74 4b 65 79 20 3d 20 7b 30  at("rootKey = {0
7ae0: 7d 2c 20 22 20 2b 0d 0a 20 20 20 20 20 20 20 20  }, " +..        
7af0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7b00: 22 73 75 62 4b 65 79 4e 61 6d 65 20 3d 20 7b 31  "subKeyName = {1
7b10: 7d 2c 20 77 72 69 74 61 62 6c 65 20 3d 20 7b 32  }, writable = {2
7b20: 7d 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 72  }", ForDisplay(r
7b30: 6f 6f 74 4b 65 79 29 2c 0d 0a 20 20 20 20 20 20  ootKey),..      
7b40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7b50: 20 20 46 6f 72 44 69 73 70 6c 61 79 28 73 75 62    ForDisplay(sub
7b60: 4b 65 79 4e 61 6d 65 29 2c 20 46 6f 72 44 69 73  KeyName), ForDis
7b70: 70 6c 61 79 28 77 72 69 74 61 62 6c 65 29 29 2c  play(writable)),
7b80: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
7b90: 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
7ba0: 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20  ategory);....   
7bb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
7bc0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
7bd0: 20 2f 2f 20 48 41 43 4b 3a 20 41 6c 77 61 79 73   // HACK: Always
7be0: 20 66 6f 72 62 69 64 20 77 72 69 74 61 62 6c 65   forbid writable
7bf0: 20 61 63 63 65 73 73 20 77 68 65 6e 20 6f 70 65   access when ope
7c00: 72 61 74 69 6e 67 20 69 6e 0d 0a 20 20 20 20 20  rating in..     
7c10: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
7c20: 20 20 20 20 27 77 68 61 74 2d 69 66 27 20 6d 6f      'what-if' mo
7c30: 64 65 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  de...           
7c40: 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
7c50: 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65 67           MockReg
7c60: 69 73 74 72 79 4b 65 79 20 6b 65 79 20 3d 20 72  istryKey key = r
7c70: 6f 6f 74 4b 65 79 2e 4f 70 65 6e 53 75 62 4b 65  ootKey.OpenSubKe
7c80: 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y(..            
7c90: 20 20 20 20 20 20 20 20 73 75 62 4b 65 79 4e 61          subKeyNa
7ca0: 6d 65 2c 20 77 68 61 74 49 66 20 3f 20 66 61 6c  me, whatIf ? fal
7cb0: 73 65 20 3a 20 77 72 69 74 61 62 6c 65 29 3b 0d  se : writable);.
7cc0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
7cd0: 20 20 20 72 65 74 75 72 6e 20 28 6b 65 79 20 21     return (key !
7ce0: 3d 20 6e 75 6c 6c 29 20 3f 0d 0a 20 20 20 20 20  = null) ?..     
7cf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e                 n
7d00: 65 77 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b  ew MockRegistryK
7d10: 65 79 28 6b 65 79 2c 20 77 68 61 74 49 66 2c 20  ey(key, whatIf, 
7d20: 66 61 6c 73 65 2c 20 66 61 6c 73 65 29 20 3a 20  false, false) : 
7d30: 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20  null;..         
7d40: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
7d50: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
7d60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7d70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7d80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7d90: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
7da0: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74         public st
7db0: 61 74 69 63 20 4d 6f 63 6b 52 65 67 69 73 74 72  atic MockRegistr
7dc0: 79 4b 65 79 20 43 72 65 61 74 65 53 75 62 4b 65  yKey CreateSubKe
7dd0: 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y(..            
7de0: 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79      MockRegistry
7df0: 4b 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20  Key rootKey,..  
7e00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
7e10: 72 69 6e 67 20 73 75 62 4b 65 79 4e 61 6d 65 2c  ring subKeyName,
7e20: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
7e30: 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a    bool whatIf,..
7e40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7e50: 62 6f 6f 6c 20 76 65 72 62 6f 73 65 0d 0a 20 20  bool verbose..  
7e60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d                ).
7e70: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
7e80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7e90: 69 66 20 28 72 6f 6f 74 4b 65 79 20 3d 3d 20 6e  if (rootKey == n
7ea0: 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
7eb0: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
7ec0: 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20   null;....      
7ed0: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76 65            if (ve
7ee0: 72 62 6f 73 65 29 0d 0a 20 20 20 20 20 20 20 20  rbose)..        
7ef0: 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
7f00: 65 4f 70 73 2e 54 72 61 63 65 28 0d 0a 20 20 20  eOps.Trace(..   
7f10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7f20: 20 20 20 20 20 54 72 61 63 65 50 72 69 6f 72 69       TracePriori
7f30: 74 79 2e 48 69 67 68 65 73 74 2c 20 74 72 61 63  ty.Highest, trac
7f40: 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e  eCallback, Strin
7f50: 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
7f60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7f70: 20 20 20 22 72 6f 6f 74 4b 65 79 20 3d 20 7b 30     "rootKey = {0
7f80: 7d 2c 20 73 75 62 4b 65 79 4e 61 6d 65 20 3d 20  }, subKeyName = 
7f90: 7b 31 7d 22 2c 20 46 6f 72 44 69 73 70 6c 61 79  {1}", ForDisplay
7fa0: 28 72 6f 6f 74 4b 65 79 29 2c 0d 0a 20 20 20 20  (rootKey),..    
7fb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7fc0: 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 73      ForDisplay(s
7fd0: 75 62 4b 65 79 4e 61 6d 65 29 29 2c 20 74 72 61  ubKeyName)), tra
7fe0: 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
7ff0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8000: 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20  try..           
8010: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
8020: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
8030: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8040: 20 20 20 20 2f 2f 20 48 41 43 4b 3a 20 41 6c 77      // HACK: Alw
8050: 61 79 73 20 6f 70 65 6e 20 61 20 6b 65 79 2c 20  ays open a key, 
8060: 72 61 74 68 65 72 20 74 68 61 6e 20 63 72 65 61  rather than crea
8070: 74 69 6e 67 20 6f 6e 65 20 77 68 65 6e 0d 0a 20  ting one when.. 
8080: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8090: 20 20 20 2f 2f 20 20 20 20 20 20 20 6f 70 65 72     //       oper
80a0: 61 74 69 6e 67 20 69 6e 20 27 77 68 61 74 2d 69  ating in 'what-i
80b0: 66 27 20 6d 6f 64 65 2e 0d 0a 20 20 20 20 20 20  f' mode...      
80c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
80d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
80e0: 20 20 20 20 20 20 69 66 20 28 77 68 61 74 49 66        if (whatIf
80f0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
8100: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
8110: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8120: 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
8130: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
8140: 20 48 41 43 4b 3a 20 41 74 74 65 6d 70 74 20 74   HACK: Attempt t
8150: 6f 20 6f 70 65 6e 20 74 68 65 20 73 70 65 63 69  o open the speci
8160: 66 69 65 64 20 73 75 62 2d 6b 65 79 2e 20 20 49  fied sub-key.  I
8170: 66 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  f..             
8180: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
8190: 20 20 20 20 74 68 69 73 20 66 61 69 6c 73 2c 20      this fails, 
81a0: 77 65 20 77 69 6c 6c 20 73 69 6d 70 6c 79 20 72  we will simply r
81b0: 65 74 75 72 6e 20 74 68 65 20 72 6f 6f 74 20 6b  eturn the root k
81c0: 65 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ey..            
81d0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
81e0: 20 20 20 20 20 69 74 73 65 6c 66 20 73 69 6e 63       itself sinc
81f0: 65 20 6e 6f 20 77 72 69 74 65 73 20 61 72 65 20  e no writes are 
8200: 61 6c 6c 6f 77 65 64 20 69 6e 0d 0a 20 20 20 20  allowed in..    
8210: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8220: 20 20 20 20 2f 2f 20 20 20 20 20 20 20 27 77 68      //       'wh
8230: 61 74 2d 69 66 27 20 6d 6f 64 65 20 61 6e 79 68  at-if' mode anyh
8240: 6f 77 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ow...           
8250: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
8260: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
8270: 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65 67           MockReg
8280: 69 73 74 72 79 4b 65 79 20 6b 65 79 20 3d 20 72  istryKey key = r
8290: 6f 6f 74 4b 65 79 2e 4f 70 65 6e 53 75 62 4b 65  ootKey.OpenSubKe
82a0: 79 28 73 75 62 4b 65 79 4e 61 6d 65 29 3b 0d 0a  y(subKeyName);..
82b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
82c0: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
82d0: 20 28 6b 65 79 20 21 3d 20 6e 75 6c 6c 29 20 3f   (key != null) ?
82e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
82f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6b 65                ke
8300: 79 20 3a 20 6e 65 77 20 4d 6f 63 6b 52 65 67 69  y : new MockRegi
8310: 73 74 72 79 4b 65 79 28 0d 0a 20 20 20 20 20 20  stryKey(..      
8320: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8330: 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65            rootKe
8340: 79 2c 20 73 75 62 4b 65 79 4e 61 6d 65 2c 20 74  y, subKeyName, t
8350: 72 75 65 2c 20 66 61 6c 73 65 2c 20 66 61 6c 73  rue, false, fals
8360: 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e);..           
8370: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
8380: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8390: 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20  else..          
83a0: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
83b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
83c0: 20 20 20 20 20 72 65 74 75 72 6e 20 6e 65 77 20       return new 
83d0: 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 28  MockRegistryKey(
83e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
83f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f                ro
8400: 6f 74 4b 65 79 2e 43 72 65 61 74 65 53 75 62 4b  otKey.CreateSubK
8410: 65 79 28 73 75 62 4b 65 79 4e 61 6d 65 29 2c 20  ey(subKeyName), 
8420: 66 61 6c 73 65 2c 20 66 61 6c 73 65 2c 0d 0a 20  false, false,.. 
8430: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8440: 20 20 20 20 20 20 20 20 20 20 20 66 61 6c 73 65             false
8450: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
8460: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
8470: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
8480: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 69                fi
8490: 6e 61 6c 6c 79 0d 0a 20 20 20 20 20 20 20 20 20  nally..         
84a0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
84b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 75                su
84c0: 62 4b 65 79 73 43 72 65 61 74 65 64 2b 2b 3b 0d  bKeysCreated++;.
84d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
84e0: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
84f0: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
8500: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
8510: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8520: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8530: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8540: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
8550: 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69      public stati
8560: 63 20 76 6f 69 64 20 44 65 6c 65 74 65 53 75 62  c void DeleteSub
8570: 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20  Key(..          
8580: 20 20 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 74        MockRegist
8590: 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a  ryKey rootKey,..
85a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
85b0: 73 74 72 69 6e 67 20 73 75 62 4b 65 79 4e 61 6d  string subKeyNam
85c0: 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
85d0: 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c      bool whatIf,
85e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
85f0: 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 0d 0a    bool verbose..
8600: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8610: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
8620: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
8630: 20 20 69 66 20 28 72 6f 6f 74 4b 65 79 20 3d 3d    if (rootKey ==
8640: 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
8650: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
8660: 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  rn;....         
8670: 20 20 20 20 20 20 20 69 66 20 28 76 65 72 62 6f         if (verbo
8680: 73 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se)..           
8690: 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70           TraceOp
86a0: 73 2e 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20  s.Trace(..      
86b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
86c0: 20 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e    TracePriority.
86d0: 48 69 67 68 65 73 74 2c 20 74 72 61 63 65 43 61  Highest, traceCa
86e0: 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46  llback, String.F
86f0: 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
8700: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8710: 22 72 6f 6f 74 4b 65 79 20 3d 20 7b 30 7d 2c 20  "rootKey = {0}, 
8720: 73 75 62 4b 65 79 4e 61 6d 65 20 3d 20 7b 31 7d  subKeyName = {1}
8730: 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 72 6f  ", ForDisplay(ro
8740: 6f 74 4b 65 79 29 2c 0d 0a 20 20 20 20 20 20 20  otKey),..       
8750: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8760: 20 46 6f 72 44 69 73 70 6c 61 79 28 73 75 62 4b   ForDisplay(subK
8770: 65 79 4e 61 6d 65 29 29 2c 20 74 72 61 63 65 43  eyName)), traceC
8780: 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20  ategory);....   
8790: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
87a0: 28 21 77 68 61 74 49 66 29 0d 0a 20 20 20 20 20  (!whatIf)..     
87b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
87c0: 6f 6f 74 4b 65 79 2e 44 65 6c 65 74 65 53 75 62  ootKey.DeleteSub
87d0: 4b 65 79 28 73 75 62 4b 65 79 4e 61 6d 65 29 3b  Key(subKeyName);
87e0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
87f0: 20 20 20 20 73 75 62 4b 65 79 73 44 65 6c 65 74      subKeysDelet
8800: 65 64 2b 2b 3b 0d 0a 20 20 20 20 20 20 20 20 20  ed++;..         
8810: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
8820: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
8830: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8840: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8850: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8860: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
8870: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74         public st
8880: 61 74 69 63 20 76 6f 69 64 20 44 65 6c 65 74 65  atic void Delete
8890: 53 75 62 4b 65 79 54 72 65 65 28 0d 0a 20 20 20  SubKeyTree(..   
88a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 4d 6f 63               Moc
88b0: 6b 52 65 67 69 73 74 72 79 4b 65 79 20 72 6f 6f  kRegistryKey roo
88c0: 74 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20  tKey,..         
88d0: 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 73 75         string su
88e0: 62 4b 65 79 4e 61 6d 65 2c 0d 0a 20 20 20 20 20  bKeyName,..     
88f0: 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
8900: 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20  whatIf,..       
8910: 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65           bool ve
8920: 72 62 6f 73 65 0d 0a 20 20 20 20 20 20 20 20 20  rbose..         
8930: 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
8940: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
8950: 20 20 20 20 20 20 20 20 20 69 66 20 28 72 6f 6f           if (roo
8960: 74 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  tKey == null).. 
8970: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8980: 20 20 20 72 65 74 75 72 6e 3b 0d 0a 0d 0a 20 20     return;....  
8990: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
89a0: 20 28 76 65 72 62 6f 73 65 29 0d 0a 20 20 20 20   (verbose)..    
89b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
89c0: 54 72 61 63 65 4f 70 73 2e 54 72 61 63 65 28 0d  TraceOps.Trace(.
89d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
89e0: 20 20 20 20 20 20 20 20 20 54 72 61 63 65 50 72           TracePr
89f0: 69 6f 72 69 74 79 2e 48 69 67 68 65 73 74 2c 20  iority.Highest, 
8a00: 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53  traceCallback, S
8a10: 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
8a20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8a30: 20 20 20 20 20 20 20 22 72 6f 6f 74 4b 65 79 20         "rootKey 
8a40: 3d 20 7b 30 7d 2c 20 73 75 62 4b 65 79 4e 61 6d  = {0}, subKeyNam
8a50: 65 20 3d 20 7b 31 7d 22 2c 20 46 6f 72 44 69 73  e = {1}", ForDis
8a60: 70 6c 61 79 28 72 6f 6f 74 4b 65 79 29 2c 0d 0a  play(rootKey),..
8a70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8a80: 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c          ForDispl
8a90: 61 79 28 73 75 62 4b 65 79 4e 61 6d 65 29 29 2c  ay(subKeyName)),
8aa0: 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
8ab0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
8ac0: 20 20 20 20 69 66 20 28 21 77 68 61 74 49 66 29      if (!whatIf)
8ad0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
8ae0: 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2e 44 65        rootKey.De
8af0: 6c 65 74 65 53 75 62 4b 65 79 54 72 65 65 28 73  leteSubKeyTree(s
8b00: 75 62 4b 65 79 4e 61 6d 65 29 3b 0d 0a 0d 0a 20  ubKeyName);.... 
8b10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
8b20: 75 62 4b 65 79 73 44 65 6c 65 74 65 64 2b 2b 3b  ubKeysDeleted++;
8b30: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
8b40: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
8b50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8b60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8b70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8b80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8b90: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
8ba0: 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20    public static 
8bb0: 73 74 72 69 6e 67 5b 5d 20 47 65 74 53 75 62 4b  string[] GetSubK
8bc0: 65 79 4e 61 6d 65 73 28 0d 0a 20 20 20 20 20 20  eyNames(..      
8bd0: 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65            MockRe
8be0: 67 69 73 74 72 79 4b 65 79 20 6b 65 79 2c 0d 0a  gistryKey key,..
8bf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8c00: 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20  bool whatIf,..  
8c10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f                bo
8c20: 6f 6c 20 76 65 72 62 6f 73 65 0d 0a 20 20 20 20  ol verbose..    
8c30: 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
8c40: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
8c50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
8c60: 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a   (key == null)..
8c70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8c80: 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b      return null;
8c90: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
8ca0: 20 20 20 20 69 66 20 28 76 65 72 62 6f 73 65 29      if (verbose)
8cb0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
8cc0: 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 54        TraceOps.T
8cd0: 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20  race(..         
8ce0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
8cf0: 72 61 63 65 50 72 69 6f 72 69 74 79 2e 48 69 67  racePriority.Hig
8d00: 68 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b  h, traceCallback
8d10: 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  , String.Format(
8d20: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
8d30: 20 20 20 20 20 20 20 20 20 20 22 6b 65 79 20 3d            "key =
8d40: 20 7b 30 7d 22 2c 20 46 6f 72 44 69 73 70 6c 61   {0}", ForDispla
8d50: 79 28 6b 65 79 29 29 2c 20 74 72 61 63 65 43 61  y(key)), traceCa
8d60: 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
8d70: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
8d80: 72 6e 20 6b 65 79 2e 47 65 74 53 75 62 4b 65 79  rn key.GetSubKey
8d90: 4e 61 6d 65 73 28 29 3b 0d 0a 20 20 20 20 20 20  Names();..      
8da0: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
8db0: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
8dc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8dd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8de0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8df0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
8e00: 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
8e10: 20 73 74 61 74 69 63 20 6f 62 6a 65 63 74 20 47   static object G
8e20: 65 74 56 61 6c 75 65 28 0d 0a 20 20 20 20 20 20  etValue(..      
8e30: 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65            MockRe
8e40: 67 69 73 74 72 79 4b 65 79 20 6b 65 79 2c 0d 0a  gistryKey key,..
8e50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8e60: 73 74 72 69 6e 67 20 6e 61 6d 65 2c 0d 0a 20 20  string name,..  
8e70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6f 62                ob
8e80: 6a 65 63 74 20 64 65 66 61 75 6c 74 56 61 6c 75  ject defaultValu
8e90: 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
8ea0: 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c      bool whatIf,
8eb0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
8ec0: 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 0d 0a    bool verbose..
8ed0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8ee0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
8ef0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
8f00: 20 20 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75 6c    if (key == nul
8f10: 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
8f20: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e          return n
8f30: 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ull;....        
8f40: 20 20 20 20 20 20 20 20 69 66 20 28 76 65 72 62          if (verb
8f50: 6f 73 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ose)..          
8f60: 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f            TraceO
8f70: 70 73 2e 54 72 61 63 65 28 0d 0a 20 20 20 20 20  ps.Trace(..     
8f80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8f90: 20 20 20 54 72 61 63 65 50 72 69 6f 72 69 74 79     TracePriority
8fa0: 2e 48 69 67 68 2c 20 74 72 61 63 65 43 61 6c 6c  .High, traceCall
8fb0: 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72  back, String.For
8fc0: 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
8fd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 6b                "k
8fe0: 65 79 20 3d 20 7b 30 7d 2c 20 6e 61 6d 65 20 3d  ey = {0}, name =
8ff0: 20 7b 31 7d 2c 20 64 65 66 61 75 6c 74 56 61 6c   {1}, defaultVal
9000: 75 65 20 3d 20 7b 32 7d 22 2c 0d 0a 20 20 20 20  ue = {2}",..    
9010: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9020: 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 6b      ForDisplay(k
9030: 65 79 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28  ey), ForDisplay(
9040: 6e 61 6d 65 29 2c 0d 0a 20 20 20 20 20 20 20 20  name),..        
9050: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9060: 46 6f 72 44 69 73 70 6c 61 79 28 64 65 66 61 75  ForDisplay(defau
9070: 6c 74 56 61 6c 75 65 29 29 2c 20 74 72 61 63 65  ltValue)), trace
9080: 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
9090: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
90a0: 74 75 72 6e 20 6b 65 79 2e 47 65 74 56 61 6c 75  turn key.GetValu
90b0: 65 28 6e 61 6d 65 2c 20 64 65 66 61 75 6c 74 56  e(name, defaultV
90c0: 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  alue);..        
90d0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
90e0: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
90f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9100: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9110: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9120: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
9130: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73          public s
9140: 74 61 74 69 63 20 76 6f 69 64 20 53 65 74 56 61  tatic void SetVa
9150: 6c 75 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  lue(..          
9160: 20 20 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 74        MockRegist
9170: 72 79 4b 65 79 20 6b 65 79 2c 0d 0a 20 20 20 20  ryKey key,..    
9180: 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
9190: 6e 67 20 6e 61 6d 65 2c 0d 0a 20 20 20 20 20 20  ng name,..      
91a0: 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74            object
91b0: 20 76 61 6c 75 65 2c 0d 0a 20 20 20 20 20 20 20   value,..       
91c0: 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68           bool wh
91d0: 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20  atIf,..         
91e0: 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62         bool verb
91f0: 6f 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ose..           
9200: 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
9210: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
9220: 20 20 20 20 20 20 20 69 66 20 28 6b 65 79 20 3d         if (key =
9230: 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
9240: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
9250: 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  urn;....        
9260: 20 20 20 20 20 20 20 20 69 66 20 28 76 65 72 62          if (verb
9270: 6f 73 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ose)..          
9280: 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f            TraceO
9290: 70 73 2e 54 72 61 63 65 28 0d 0a 20 20 20 20 20  ps.Trace(..     
92a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
92b0: 20 20 20 54 72 61 63 65 50 72 69 6f 72 69 74 79     TracePriority
92c0: 2e 48 69 67 68 65 73 74 2c 20 74 72 61 63 65 43  .Highest, traceC
92d0: 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e  allback, String.
92e0: 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
92f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9300: 20 22 6b 65 79 20 3d 20 7b 30 7d 2c 20 6e 61 6d   "key = {0}, nam
9310: 65 20 3d 20 7b 31 7d 2c 20 76 61 6c 75 65 20 3d  e = {1}, value =
9320: 20 7b 32 7d 22 2c 20 46 6f 72 44 69 73 70 6c 61   {2}", ForDispla
9330: 79 28 6b 65 79 29 2c 0d 0a 20 20 20 20 20 20 20  y(key),..       
9340: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9350: 20 46 6f 72 44 69 73 70 6c 61 79 28 6e 61 6d 65   ForDisplay(name
9360: 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 76 61  ), ForDisplay(va
9370: 6c 75 65 29 29 2c 20 74 72 61 63 65 43 61 74 65  lue)), traceCate
9380: 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
9390: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21 77            if (!w
93a0: 68 61 74 49 66 29 0d 0a 20 20 20 20 20 20 20 20  hatIf)..        
93b0: 20 20 20 20 20 20 20 20 20 20 20 20 6b 65 79 2e              key.
93c0: 53 65 74 56 61 6c 75 65 28 6e 61 6d 65 2c 20 76  SetValue(name, v
93d0: 61 6c 75 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  alue);....      
93e0: 20 20 20 20 20 20 20 20 20 20 6b 65 79 56 61 6c            keyVal
93f0: 75 65 73 53 65 74 2b 2b 3b 0d 0a 20 20 20 20 20  uesSet++;..     
9400: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
9410: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
9420: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9430: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9440: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9450: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
9460: 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
9470: 63 20 73 74 61 74 69 63 20 76 6f 69 64 20 44 65  c static void De
9480: 6c 65 74 65 56 61 6c 75 65 28 0d 0a 20 20 20 20  leteValue(..    
9490: 20 20 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b              Mock
94a0: 52 65 67 69 73 74 72 79 4b 65 79 20 6b 65 79 2c  RegistryKey key,
94b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
94c0: 20 20 73 74 72 69 6e 67 20 6e 61 6d 65 2c 0d 0a    string name,..
94d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
94e0: 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20  bool whatIf,..  
94f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f                bo
9500: 6f 6c 20 76 65 72 62 6f 73 65 0d 0a 20 20 20 20  ol verbose..    
9510: 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
9520: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
9530: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
9540: 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a   (key == null)..
9550: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9560: 20 20 20 20 72 65 74 75 72 6e 3b 0d 0a 0d 0a 20      return;.... 
9570: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
9580: 66 20 28 76 65 72 62 6f 73 65 29 0d 0a 20 20 20  f (verbose)..   
9590: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
95a0: 20 54 72 61 63 65 4f 70 73 2e 54 72 61 63 65 28   TraceOps.Trace(
95b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
95c0: 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 50            TraceP
95d0: 72 69 6f 72 69 74 79 2e 48 69 67 68 65 73 74 2c  riority.Highest,
95e0: 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20   traceCallback, 
95f0: 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
9600: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9610: 20 20 20 20 20 20 20 20 22 6b 65 79 20 3d 20 7b          "key = {
9620: 30 7d 2c 20 6e 61 6d 65 20 3d 20 7b 31 7d 22 2c  0}, name = {1}",
9630: 20 46 6f 72 44 69 73 70 6c 61 79 28 6b 65 79 29   ForDisplay(key)
9640: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
9650: 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69             ForDi
9660: 73 70 6c 61 79 28 6e 61 6d 65 29 29 2c 20 74 72  splay(name)), tr
9670: 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  aceCategory);...
9680: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
9690: 20 69 66 20 28 21 77 68 61 74 49 66 29 0d 0a 20   if (!whatIf).. 
96a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
96b0: 20 20 20 6b 65 79 2e 44 65 6c 65 74 65 56 61 6c     key.DeleteVal
96c0: 75 65 28 6e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20  ue(name);....   
96d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 6b 65 79               key
96e0: 56 61 6c 75 65 73 44 65 6c 65 74 65 64 2b 2b 3b  ValuesDeleted++;
96f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
9700: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e  .            #en
9710: 64 72 65 67 69 6f 6e 0d 0a 20 20 20 20 20 20 20  dregion..       
9720: 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64   }..        #end
9730: 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20  region....      
9740: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
9750: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9760: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9770: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9780: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
9790: 20 20 20 20 20 23 72 65 67 69 6f 6e 20 53 74 72       #region Str
97a0: 69 6e 67 4c 69 73 74 20 43 6c 61 73 73 0d 0a 20  ingList Class.. 
97b0: 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
97c0: 65 61 6c 65 64 20 63 6c 61 73 73 20 53 74 72 69  ealed class Stri
97d0: 6e 67 4c 69 73 74 20 3a 20 4c 69 73 74 3c 73 74  ngList : List<st
97e0: 72 69 6e 67 3e 0d 0a 20 20 20 20 20 20 20 20 7b  ring>..        {
97f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
9800: 62 6c 69 63 20 53 74 72 69 6e 67 4c 69 73 74 28  blic StringList(
9810: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
9820: 20 20 20 3a 20 62 61 73 65 28 29 0d 0a 20 20 20     : base()..   
9830: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
9840: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64              // d
9850: 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20  o nothing...    
9860: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
9870: 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
9880: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9890: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
98a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
98b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
98c0: 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
98d0: 69 63 20 53 74 72 69 6e 67 4c 69 73 74 28 49 45  ic StringList(IE
98e0: 6e 75 6d 65 72 61 62 6c 65 3c 73 74 72 69 6e 67  numerable<string
98f0: 3e 20 63 6f 6c 6c 65 63 74 69 6f 6e 29 0d 0a 20  > collection).. 
9900: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3a                 :
9910: 20 62 61 73 65 28 63 6f 6c 6c 65 63 74 69 6f 6e   base(collection
9920: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
9930: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
9940: 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e    // do nothing.
9950: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
9960: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
9970: 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
9980: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
9990: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
99a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
99b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
99c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
99d0: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65  /....        #re
99e0: 67 69 6f 6e 20 53 74 72 69 6e 67 44 69 63 74 69  gion StringDicti
99f0: 6f 6e 61 72 79 20 43 6c 61 73 73 0d 0a 20 20 20  onary Class..   
9a00: 20 20 20 20 20 70 72 69 76 61 74 65 20 73 65 61       private sea
9a10: 6c 65 64 20 63 6c 61 73 73 20 53 74 72 69 6e 67  led class String
9a20: 44 69 63 74 69 6f 6e 61 72 79 20 3a 20 44 69 63  Dictionary : Dic
9a30: 74 69 6f 6e 61 72 79 3c 73 74 72 69 6e 67 2c 20  tionary<string, 
9a40: 73 74 72 69 6e 67 3e 0d 0a 20 20 20 20 20 20 20  string>..       
9a50: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
9a60: 70 75 62 6c 69 63 20 53 74 72 69 6e 67 44 69 63  public StringDic
9a70: 74 69 6f 6e 61 72 79 28 29 0d 0a 20 20 20 20 20  tionary()..     
9a80: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
9a90: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20            // do 
9aa0: 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20  nothing...      
9ab0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
9ac0: 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64   }..        #end
9ad0: 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20  region....      
9ae0: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
9af0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9b00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9b10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9b20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
9b30: 20 20 20 20 20 23 72 65 67 69 6f 6e 20 56 65 72       #region Ver
9b40: 73 69 6f 6e 4c 69 73 74 20 43 6c 61 73 73 0d 0a  sionList Class..
9b50: 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
9b60: 73 65 61 6c 65 64 20 63 6c 61 73 73 20 56 65 72  sealed class Ver
9b70: 73 69 6f 6e 4c 69 73 74 20 3a 20 4c 69 73 74 3c  sionList : List<
9b80: 56 65 72 73 69 6f 6e 3e 0d 0a 20 20 20 20 20 20  Version>..      
9b90: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
9ba0: 20 70 75 62 6c 69 63 20 56 65 72 73 69 6f 6e 4c   public VersionL
9bb0: 69 73 74 28 29 0d 0a 20 20 20 20 20 20 20 20 20  ist()..         
9bc0: 20 20 20 20 20 20 20 3a 20 62 61 73 65 28 29 0d         : base().
9bd0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
9be0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9bf0: 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a  // do nothing...
9c00: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
9c10: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
9c20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9c30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9c40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9c50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9c60: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
9c70: 70 75 62 6c 69 63 20 56 65 72 73 69 6f 6e 4c 69  public VersionLi
9c80: 73 74 28 49 45 6e 75 6d 65 72 61 62 6c 65 3c 56  st(IEnumerable<V
9c90: 65 72 73 69 6f 6e 3e 20 63 6f 6c 6c 65 63 74 69  ersion> collecti
9ca0: 6f 6e 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  on)..           
9cb0: 20 20 20 20 20 3a 20 62 61 73 65 28 63 6f 6c 6c       : base(coll
9cc0: 65 63 74 69 6f 6e 29 0d 0a 20 20 20 20 20 20 20  ection)..       
9cd0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
9ce0: 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f          // do no
9cf0: 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20  thing...        
9d00: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d      }..        }
9d10: 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65  ..        #endre
9d20: 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20  gion....        
9d30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9d40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9d50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9d60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9d70: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
9d80: 20 20 20 23 72 65 67 69 6f 6e 20 56 65 72 73 69     #region Versi
9d90: 6f 6e 4d 61 70 20 43 6c 61 73 73 0d 0a 20 20 20  onMap Class..   
9da0: 20 20 20 20 20 70 72 69 76 61 74 65 20 73 65 61       private sea
9db0: 6c 65 64 20 63 6c 61 73 73 20 56 65 72 73 69 6f  led class Versio
9dc0: 6e 4d 61 70 20 3a 20 44 69 63 74 69 6f 6e 61 72  nMap : Dictionar
9dd0: 79 3c 73 74 72 69 6e 67 2c 20 56 65 72 73 69 6f  y<string, Versio
9de0: 6e 4c 69 73 74 3e 0d 0a 20 20 20 20 20 20 20 20  nList>..        
9df0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  {..            p
9e00: 75 62 6c 69 63 20 56 65 72 73 69 6f 6e 4d 61 70  ublic VersionMap
9e10: 28 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ()..            
9e20: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
9e30: 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67     // do nothing
9e40: 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ...            }
9e50: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..   
9e60: 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d       #endregion.
9e70: 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
9e80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9e90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9ea0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9eb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9ec0: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72  //....        #r
9ed0: 65 67 69 6f 6e 20 56 65 72 73 69 6f 6e 4c 69 73  egion VersionLis
9ee0: 74 4d 61 70 20 43 6c 61 73 73 0d 0a 20 20 20 20  tMap Class..    
9ef0: 20 20 20 20 70 72 69 76 61 74 65 20 73 65 61 6c      private seal
9f00: 65 64 20 63 6c 61 73 73 20 56 65 72 73 69 6f 6e  ed class Version
9f10: 4c 69 73 74 4d 61 70 20 3a 20 44 69 63 74 69 6f  ListMap : Dictio
9f20: 6e 61 72 79 3c 56 65 72 73 69 6f 6e 2c 20 56 65  nary<Version, Ve
9f30: 72 73 69 6f 6e 4c 69 73 74 3e 0d 0a 20 20 20 20  rsionList>..    
9f40: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
9f50: 20 20 20 70 75 62 6c 69 63 20 56 65 72 73 69 6f     public Versio
9f60: 6e 4c 69 73 74 4d 61 70 28 29 0d 0a 20 20 20 20  nListMap()..    
9f70: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
9f80: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f             // do
9f90: 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20   nothing...     
9fa0: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
9fb0: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e    }..        #en
9fc0: 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
9fd0: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
9fe0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9ff0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a000: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a010: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
a020: 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 61        #region Pa
a030: 63 6b 61 67 65 20 43 6c 61 73 73 0d 0a 20 20 20  ckage Class..   
a040: 20 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 73 65       internal se
a050: 61 6c 65 64 20 63 6c 61 73 73 20 50 61 63 6b 61  aled class Packa
a060: 67 65 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  ge..        {.. 
a070: 20 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69             #regi
a080: 6f 6e 20 50 75 62 6c 69 63 20 43 6f 6e 73 74 72  on Public Constr
a090: 75 63 74 6f 72 73 0d 0a 20 20 20 20 20 20 20 20  uctors..        
a0a0: 20 20 20 20 70 75 62 6c 69 63 20 50 61 63 6b 61      public Packa
a0b0: 67 65 28 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ge()..          
a0c0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
a0d0: 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69       // do nothi
a0e0: 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ng...           
a0f0: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
a100: 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20  #endregion....  
a110: 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
a120: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a130: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a140: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a150: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
a160: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 72 65  .            #re
a170: 67 69 6f 6e 20 50 75 62 6c 69 63 20 50 72 6f 70  gion Public Prop
a180: 65 72 74 69 65 73 0d 0a 20 20 20 20 20 20 20 20  erties..        
a190: 20 20 20 20 70 72 69 76 61 74 65 20 47 75 69 64      private Guid
a1a0: 20 70 61 63 6b 61 67 65 49 64 3b 0d 0a 20 20 20   packageId;..   
a1b0: 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
a1c0: 47 75 69 64 20 50 61 63 6b 61 67 65 49 64 0d 0a  Guid PackageId..
a1d0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
a1e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67                 g
a1f0: 65 74 20 7b 20 72 65 74 75 72 6e 20 70 61 63 6b  et { return pack
a200: 61 67 65 49 64 3b 20 7d 0d 0a 20 20 20 20 20 20  ageId; }..      
a210: 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20            set { 
a220: 70 61 63 6b 61 67 65 49 64 20 3d 20 76 61 6c 75  packageId = valu
a230: 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  e; }..          
a240: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
a250: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
a260: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a270: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a280: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a290: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
a2a0: 20 20 20 20 20 20 70 72 69 76 61 74 65 20 47 75        private Gu
a2b0: 69 64 20 73 65 72 76 69 63 65 49 64 3b 0d 0a 20  id serviceId;.. 
a2c0: 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
a2d0: 63 20 47 75 69 64 20 53 65 72 76 69 63 65 49 64  c Guid ServiceId
a2e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
a2f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
a300: 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 73 65   get { return se
a310: 72 76 69 63 65 49 64 3b 20 7d 0d 0a 20 20 20 20  rviceId; }..    
a320: 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20              set 
a330: 7b 20 73 65 72 76 69 63 65 49 64 20 3d 20 76 61  { serviceId = va
a340: 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  lue; }..        
a350: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
a360: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
a370: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a380: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a390: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a3a0: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
a3b0: 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
a3c0: 47 75 69 64 20 64 61 74 61 53 6f 75 72 63 65 49  Guid dataSourceI
a3d0: 64 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  d;..            
a3e0: 70 75 62 6c 69 63 20 47 75 69 64 20 44 61 74 61  public Guid Data
a3f0: 53 6f 75 72 63 65 49 64 0d 0a 20 20 20 20 20 20  SourceId..      
a400: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
a410: 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72           get { r
a420: 65 74 75 72 6e 20 64 61 74 61 53 6f 75 72 63 65  eturn dataSource
a430: 49 64 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  Id; }..         
a440: 20 20 20 20 20 20 20 73 65 74 20 7b 20 64 61 74         set { dat
a450: 61 53 6f 75 72 63 65 49 64 20 3d 20 76 61 6c 75  aSourceId = valu
a460: 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  e; }..          
a470: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
a480: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
a490: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a4a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a4b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a4c0: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
a4d0: 20 20 20 20 20 20 70 72 69 76 61 74 65 20 47 75        private Gu
a4e0: 69 64 20 64 61 74 61 50 72 6f 76 69 64 65 72 49  id dataProviderI
a4f0: 64 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  d;..            
a500: 70 75 62 6c 69 63 20 47 75 69 64 20 44 61 74 61  public Guid Data
a510: 50 72 6f 76 69 64 65 72 49 64 0d 0a 20 20 20 20  ProviderId..    
a520: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
a530: 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b             get {
a540: 20 72 65 74 75 72 6e 20 64 61 74 61 50 72 6f 76   return dataProv
a550: 69 64 65 72 49 64 3b 20 7d 0d 0a 20 20 20 20 20  iderId; }..     
a560: 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b             set {
a570: 20 64 61 74 61 50 72 6f 76 69 64 65 72 49 64 20   dataProviderId 
a580: 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20  = value; }..    
a590: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
a5a0: 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
a5b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a5c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a5d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a5e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
a5f0: 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
a600: 61 74 65 20 47 75 69 64 20 61 64 6f 4e 65 74 54  ate Guid adoNetT
a610: 65 63 68 6e 6f 6c 6f 67 79 49 64 3b 0d 0a 20 20  echnologyId;..  
a620: 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
a630: 20 47 75 69 64 20 41 64 6f 4e 65 74 54 65 63 68   Guid AdoNetTech
a640: 6e 6f 6c 6f 67 79 49 64 0d 0a 20 20 20 20 20 20  nologyId..      
a650: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
a660: 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72           get { r
a670: 65 74 75 72 6e 20 61 64 6f 4e 65 74 54 65 63 68  eturn adoNetTech
a680: 6e 6f 6c 6f 67 79 49 64 3b 20 7d 0d 0a 20 20 20  nologyId; }..   
a690: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74               set
a6a0: 20 7b 20 61 64 6f 4e 65 74 54 65 63 68 6e 6f 6c   { adoNetTechnol
a6b0: 6f 67 79 49 64 20 3d 20 76 61 6c 75 65 3b 20 7d  ogyId = value; }
a6c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
a6d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e  .            #en
a6e0: 64 72 65 67 69 6f 6e 0d 0a 20 20 20 20 20 20 20  dregion..       
a6f0: 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64   }..        #end
a700: 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20  region....      
a710: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
a720: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a730: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a740: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a750: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
a760: 20 20 20 20 20 23 72 65 67 69 6f 6e 20 43 6f 6e       #region Con
a770: 66 69 67 75 72 61 74 69 6f 6e 20 43 6c 61 73 73  figuration Class
a780: 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
a790: 65 20 73 65 61 6c 65 64 20 63 6c 61 73 73 20 43  e sealed class C
a7a0: 6f 6e 66 69 67 75 72 61 74 69 6f 6e 0d 0a 20 20  onfiguration..  
a7b0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
a7c0: 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 72 69       #region Pri
a7d0: 76 61 74 65 20 43 6f 6e 73 74 61 6e 74 73 0d 0a  vate Constants..
a7e0: 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
a7f0: 61 74 65 20 63 6f 6e 73 74 20 63 68 61 72 20 53  ate const char S
a800: 77 69 74 63 68 20 3d 20 27 2d 27 3b 0d 0a 20 20  witch = '-';..  
a810: 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
a820: 65 20 63 6f 6e 73 74 20 63 68 61 72 20 41 6c 74  e const char Alt
a830: 53 77 69 74 63 68 20 3d 20 27 2f 27 3b 0d 0a 0d  Switch = '/';...
a840: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
a850: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a860: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a870: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a880: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a890: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
a8a0: 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 72  private static r
a8b0: 65 61 64 6f 6e 6c 79 20 63 68 61 72 5b 5d 20 53  eadonly char[] S
a8c0: 77 69 74 63 68 43 68 61 72 73 20 3d 20 7b 0d 0a  witchChars = {..
a8d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a8e0: 53 77 69 74 63 68 2c 20 41 6c 74 53 77 69 74 63  Switch, AltSwitc
a8f0: 68 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  h..            }
a900: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  ;..            #
a910: 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20  endregion....   
a920: 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
a930: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a940: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a950: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a960: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
a970: 20 20 20 20 20 20 20 20 20 20 20 20 23 72 65 67              #reg
a980: 69 6f 6e 20 50 72 69 76 61 74 65 20 43 6f 6e 73  ion Private Cons
a990: 74 72 75 63 74 6f 72 73 0d 0a 20 20 20 20 20 20  tructors..      
a9a0: 20 20 20 20 20 20 70 72 69 76 61 74 65 20 43 6f        private Co
a9b0: 6e 66 69 67 75 72 61 74 69 6f 6e 28 0d 0a 20 20  nfiguration(..  
a9c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 41 73                As
a9d0: 73 65 6d 62 6c 79 20 61 73 73 65 6d 62 6c 79 2c  sembly assembly,
a9e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
a9f0: 20 20 73 74 72 69 6e 67 20 6c 6f 67 46 69 6c 65    string logFile
aa00: 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  Name,..         
aa10: 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 64 69         string di
aa20: 72 65 63 74 6f 72 79 2c 0d 0a 20 20 20 20 20 20  rectory,..      
aa30: 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
aa40: 20 63 6f 72 65 46 69 6c 65 4e 61 6d 65 2c 0d 0a   coreFileName,..
aa50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
aa60: 73 74 72 69 6e 67 20 6c 69 6e 71 46 69 6c 65 4e  string linqFileN
aa70: 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ame,..          
aa80: 20 20 20 20 20 20 73 74 72 69 6e 67 20 64 65 73        string des
aa90: 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 2c 0d 0a  ignerFileName,..
aaa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
aab0: 73 74 72 69 6e 67 20 74 72 61 63 65 46 6f 72 6d  string traceForm
aac0: 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at,..           
aad0: 20 20 20 20 20 49 6e 73 74 61 6c 6c 46 6c 61 67       InstallFlag
aae0: 73 20 69 6e 73 74 61 6c 6c 46 6c 61 67 73 2c 0d  s installFlags,.
aaf0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
ab00: 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 20 74   TracePriority t
ab10: 72 61 63 65 50 72 69 6f 72 69 74 79 2c 0d 0a 20  racePriority,.. 
ab20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62                 b
ab30: 6f 6f 6c 20 69 6e 73 74 61 6c 6c 2c 0d 0a 20 20  ool install,..  
ab40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f                bo
ab50: 6f 6c 20 6e 6f 44 65 73 6b 74 6f 70 2c 0d 0a 20  ol noDesktop,.. 
ab60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62                 b
ab70: 6f 6f 6c 20 6e 6f 43 6f 6d 70 61 63 74 2c 0d 0a  ool noCompact,..
ab80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ab90: 62 6f 6f 6c 20 6e 6f 4e 65 74 46 78 32 30 2c 0d  bool noNetFx20,.
aba0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
abb0: 20 62 6f 6f 6c 20 6e 6f 4e 65 74 46 78 34 30 2c   bool noNetFx40,
abc0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
abd0: 20 20 62 6f 6f 6c 20 6e 6f 56 73 32 30 30 38 2c    bool noVs2008,
abe0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
abf0: 20 20 62 6f 6f 6c 20 6e 6f 56 73 32 30 31 30 2c    bool noVs2010,
ac00: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
ac10: 20 20 62 6f 6f 6c 20 6e 6f 54 72 61 63 65 2c 0d    bool noTrace,.
ac20: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
ac30: 20 62 6f 6f 6c 20 6e 6f 43 6f 6e 73 6f 6c 65 2c   bool noConsole,
ac40: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
ac50: 20 20 62 6f 6f 6c 20 6e 6f 4c 6f 67 2c 0d 0a 20    bool noLog,.. 
ac60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62                 b
ac70: 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20  ool whatIf,..   
ac80: 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f               boo
ac90: 6c 20 76 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20  l verbose,..    
aca0: 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
acb0: 20 63 6f 6e 66 69 72 6d 0d 0a 20 20 20 20 20 20   confirm..      
acc0: 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
acd0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
ace0: 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73              this
acf0: 2e 61 73 73 65 6d 62 6c 79 20 3d 20 61 73 73 65  .assembly = asse
ad00: 6d 62 6c 79 3b 0d 0a 20 20 20 20 20 20 20 20 20  mbly;..         
ad10: 20 20 20 20 20 20 20 74 68 69 73 2e 6c 6f 67 46         this.logF
ad20: 69 6c 65 4e 61 6d 65 20 3d 20 6c 6f 67 46 69 6c  ileName = logFil
ad30: 65 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20  eName;..        
ad40: 20 20 20 20 20 20 20 20 74 68 69 73 2e 64 69 72          this.dir
ad50: 65 63 74 6f 72 79 20 3d 20 64 69 72 65 63 74 6f  ectory = directo
ad60: 72 79 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ry;..           
ad70: 20 20 20 20 20 74 68 69 73 2e 63 6f 72 65 46 69       this.coreFi
ad80: 6c 65 4e 61 6d 65 20 3d 20 63 6f 72 65 46 69 6c  leName = coreFil
ad90: 65 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20  eName;..        
ada0: 20 20 20 20 20 20 20 20 74 68 69 73 2e 6c 69 6e          this.lin
adb0: 71 46 69 6c 65 4e 61 6d 65 20 3d 20 6c 69 6e 71  qFileName = linq
adc0: 46 69 6c 65 4e 61 6d 65 3b 0d 0a 20 20 20 20 20  FileName;..     
add0: 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e             this.
ade0: 64 65 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65  designerFileName
adf0: 20 3d 20 64 65 73 69 67 6e 65 72 46 69 6c 65 4e   = designerFileN
ae00: 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ame;..          
ae10: 20 20 20 20 20 20 74 68 69 73 2e 74 72 61 63 65        this.trace
ae20: 46 6f 72 6d 61 74 20 3d 20 74 72 61 63 65 46 6f  Format = traceFo
ae30: 72 6d 61 74 3b 0d 0a 20 20 20 20 20 20 20 20 20  rmat;..         
ae40: 20 20 20 20 20 20 20 74 68 69 73 2e 69 6e 73 74         this.inst
ae50: 61 6c 6c 46 6c 61 67 73 20 3d 20 69 6e 73 74 61  allFlags = insta
ae60: 6c 6c 46 6c 61 67 73 3b 0d 0a 20 20 20 20 20 20  llFlags;..      
ae70: 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 74            this.t
ae80: 72 61 63 65 50 72 69 6f 72 69 74 79 20 3d 20 74  racePriority = t
ae90: 72 61 63 65 50 72 69 6f 72 69 74 79 3b 0d 0a 20  racePriority;.. 
aea0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
aeb0: 68 69 73 2e 69 6e 73 74 61 6c 6c 20 3d 20 69 6e  his.install = in
aec0: 73 74 61 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20  stall;..        
aed0: 20 20 20 20 20 20 20 20 74 68 69 73 2e 6e 6f 44          this.noD
aee0: 65 73 6b 74 6f 70 20 3d 20 6e 6f 44 65 73 6b 74  esktop = noDeskt
aef0: 6f 70 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  op;..           
af00: 20 20 20 20 20 74 68 69 73 2e 6e 6f 43 6f 6d 70       this.noComp
af10: 61 63 74 20 3d 20 6e 6f 43 6f 6d 70 61 63 74 3b  act = noCompact;
af20: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
af30: 20 20 74 68 69 73 2e 6e 6f 4e 65 74 46 78 32 30    this.noNetFx20
af40: 20 3d 20 6e 6f 4e 65 74 46 78 32 30 3b 0d 0a 20   = noNetFx20;.. 
af50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
af60: 68 69 73 2e 6e 6f 4e 65 74 46 78 34 30 20 3d 20  his.noNetFx40 = 
af70: 6e 6f 4e 65 74 46 78 34 30 3b 0d 0a 20 20 20 20  noNetFx40;..    
af80: 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73              this
af90: 2e 6e 6f 56 73 32 30 30 38 20 3d 20 6e 6f 56 73  .noVs2008 = noVs
afa0: 32 30 30 38 3b 0d 0a 20 20 20 20 20 20 20 20 20  2008;..         
afb0: 20 20 20 20 20 20 20 74 68 69 73 2e 6e 6f 56 73         this.noVs
afc0: 32 30 31 30 20 3d 20 6e 6f 56 73 32 30 31 30 3b  2010 = noVs2010;
afd0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
afe0: 20 20 74 68 69 73 2e 6e 6f 54 72 61 63 65 20 3d    this.noTrace =
aff0: 20 6e 6f 54 72 61 63 65 3b 0d 0a 20 20 20 20 20   noTrace;..     
b000: 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e             this.
b010: 6e 6f 43 6f 6e 73 6f 6c 65 20 3d 20 6e 6f 43 6f  noConsole = noCo
b020: 6e 73 6f 6c 65 3b 0d 0a 20 20 20 20 20 20 20 20  nsole;..        
b030: 20 20 20 20 20 20 20 20 74 68 69 73 2e 6e 6f 4c          this.noL
b040: 6f 67 20 3d 20 6e 6f 4c 6f 67 3b 0d 0a 20 20 20  og = noLog;..   
b050: 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69               thi
b060: 73 2e 77 68 61 74 49 66 20 3d 20 77 68 61 74 49  s.whatIf = whatI
b070: 66 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  f;..            
b080: 20 20 20 20 74 68 69 73 2e 76 65 72 62 6f 73 65      this.verbose
b090: 20 3d 20 76 65 72 62 6f 73 65 3b 0d 0a 20 20 20   = verbose;..   
b0a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69               thi
b0b0: 73 2e 63 6f 6e 66 69 72 6d 20 3d 20 63 6f 6e 66  s.confirm = conf
b0c0: 69 72 6d 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  irm;..          
b0d0: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
b0e0: 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20   #endregion.... 
b0f0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
b100: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b110: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b120: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b130: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
b140: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 72  ..            #r
b150: 65 67 69 6f 6e 20 50 72 69 76 61 74 65 20 53 74  egion Private St
b160: 61 74 69 63 20 4d 65 74 68 6f 64 73 0d 0a 20 20  atic Methods..  
b170: 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
b180: 65 20 73 74 61 74 69 63 20 76 6f 69 64 20 47 65  e static void Ge
b190: 74 44 65 66 61 75 6c 74 46 69 6c 65 4e 61 6d 65  tDefaultFileName
b1a0: 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  s(..            
b1b0: 20 20 20 20 72 65 66 20 73 74 72 69 6e 67 20 64      ref string d
b1c0: 69 72 65 63 74 6f 72 79 2c 0d 0a 20 20 20 20 20  irectory,..     
b1d0: 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20 73             ref s
b1e0: 74 72 69 6e 67 20 63 6f 72 65 46 69 6c 65 4e 61  tring coreFileNa
b1f0: 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me,..           
b200: 20 20 20 20 20 72 65 66 20 73 74 72 69 6e 67 20       ref string 
b210: 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 2c 0d 0a 20  linqFileName,.. 
b220: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
b230: 65 66 20 73 74 72 69 6e 67 20 64 65 73 69 67 6e  ef string design
b240: 65 72 46 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 20  erFileName..    
b250: 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
b260: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
b270: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
b280: 20 28 74 68 69 73 41 73 73 65 6d 62 6c 79 20 3d   (thisAssembly =
b290: 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
b2a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
b2b0: 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  urn;....        
b2c0: 20 20 20 20 20 20 20 20 64 69 72 65 63 74 6f 72          director
b2d0: 79 20 3d 20 50 61 74 68 2e 47 65 74 44 69 72 65  y = Path.GetDire
b2e0: 63 74 6f 72 79 4e 61 6d 65 28 74 68 69 73 41 73  ctoryName(thisAs
b2f0: 73 65 6d 62 6c 79 2e 4c 6f 63 61 74 69 6f 6e 29  sembly.Location)
b300: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
b310: 20 20 20 20 20 69 66 20 28 53 74 72 69 6e 67 2e       if (String.
b320: 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 64 69  IsNullOrEmpty(di
b330: 72 65 63 74 6f 72 79 29 29 0d 0a 20 20 20 20 20  rectory))..     
b340: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
b350: 65 74 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20  eturn;....      
b360: 20 20 20 20 20 20 20 20 20 20 63 6f 72 65 46 69            coreFi
b370: 6c 65 4e 61 6d 65 20 3d 20 50 61 74 68 2e 43 6f  leName = Path.Co
b380: 6d 62 69 6e 65 28 64 69 72 65 63 74 6f 72 79 2c  mbine(directory,
b390: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
b3a0: 20 20 20 20 20 20 49 6e 73 74 61 6c 6c 65 72 2e        Installer.
b3b0: 43 6f 72 65 46 69 6c 65 4e 61 6d 65 29 3b 0d 0a  CoreFileName);..
b3c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
b3d0: 20 20 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 20 3d    linqFileName =
b3e0: 20 50 61 74 68 2e 43 6f 6d 62 69 6e 65 28 64 69   Path.Combine(di
b3f0: 72 65 63 74 6f 72 79 2c 0d 0a 20 20 20 20 20 20  rectory,..      
b400: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 49 6e                In
b410: 73 74 61 6c 6c 65 72 2e 4c 69 6e 71 46 69 6c 65  staller.LinqFile
b420: 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  Name);....      
b430: 20 20 20 20 20 20 20 20 20 20 64 65 73 69 67 6e            design
b440: 65 72 46 69 6c 65 4e 61 6d 65 20 3d 20 50 61 74  erFileName = Pat
b450: 68 2e 43 6f 6d 62 69 6e 65 28 64 69 72 65 63 74  h.Combine(direct
b460: 6f 72 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ory,..          
b470: 20 20 20 20 20 20 20 20 20 20 49 6e 73 74 61 6c            Instal
b480: 6c 65 72 2e 44 65 73 69 67 6e 65 72 46 69 6c 65  ler.DesignerFile
b490: 4e 61 6d 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  Name);..        
b4a0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
b4b0: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
b4c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b4d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b4e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b4f0: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
b500: 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
b510: 73 74 61 74 69 63 20 62 6f 6f 6c 20 43 68 65 63  static bool Chec
b520: 6b 4f 70 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20  kOption(..      
b530: 20 20 20 20 20 20 20 20 20 20 72 65 66 20 73 74            ref st
b540: 72 69 6e 67 20 61 72 67 0d 0a 20 20 20 20 20 20  ring arg..      
b550: 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
b560: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
b570: 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
b580: 6e 67 20 72 65 73 75 6c 74 20 3d 20 61 72 67 3b  ng result = arg;
b590: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
b5a0: 20 20 20 20 69 66 20 28 21 53 74 72 69 6e 67 2e      if (!String.
b5b0: 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 72 65  IsNullOrEmpty(re
b5c0: 73 75 6c 74 29 29 0d 0a 20 20 20 20 20 20 20 20  sult))..        
b5d0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
b5e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
b5f0: 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
b600: 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20         // NOTE: 
b610: 52 65 6d 6f 76 65 20 61 6c 6c 20 6c 65 61 64 69  Remove all leadi
b620: 6e 67 20 73 77 69 74 63 68 20 63 68 61 72 73 2e  ng switch chars.
b630: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
b640: 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
b650: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
b660: 73 75 6c 74 20 3d 20 72 65 73 75 6c 74 2e 54 72  sult = result.Tr
b670: 69 6d 53 74 61 72 74 28 53 77 69 74 63 68 43 68  imStart(SwitchCh
b680: 61 72 73 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ars);....       
b690: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
b6a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
b6b0: 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 48 6f       // NOTE: Ho
b6c0: 77 20 6d 61 6e 79 20 63 68 61 72 73 20 77 65 72  w many chars wer
b6d0: 65 20 72 65 6d 6f 76 65 64 3f 0d 0a 20 20 20 20  e removed?..    
b6e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b6f0: 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
b700: 20 20 20 20 20 20 20 20 69 6e 74 20 63 6f 75 6e          int coun
b710: 74 20 3d 20 61 72 67 2e 4c 65 6e 67 74 68 20 2d  t = arg.Length -
b720: 20 72 65 73 75 6c 74 2e 4c 65 6e 67 74 68 3b 0d   result.Length;.
b730: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
b740: 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
b750: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
b760: 2f 20 4e 4f 54 45 3a 20 57 61 73 20 74 68 65 72  / NOTE: Was ther
b770: 65 20 61 74 20 6c 65 61 73 74 20 6f 6e 65 3f 0d  e at least one?.
b780: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
b790: 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
b7a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
b7b0: 28 63 6f 75 6e 74 20 3e 20 30 29 0d 0a 20 20 20  (count > 0)..   
b7c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b7d0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
b7e0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
b7f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b800: 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a          // NOTE:
b810: 20 4f 6b 2c 20 72 65 70 6c 61 63 65 20 74 68 65   Ok, replace the
b820: 69 72 20 6f 72 69 67 69 6e 61 6c 0d 0a 20 20 20  ir original..   
b830: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b840: 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 61 72       //       ar
b850: 67 75 6d 65 6e 74 2e 0d 0a 20 20 20 20 20 20 20  gument...       
b860: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b870: 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
b880: 20 20 20 20 20 20 20 20 20 20 20 20 20 61 72 67               arg
b890: 20 3d 20 72 65 73 75 6c 74 3b 0d 0a 0d 0a 20 20   = result;....  
b8a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b8b0: 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
b8c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b8d0: 20 20 2f 2f 20 4e 4f 54 45 3a 20 59 65 73 2c 20    // NOTE: Yes, 
b8e0: 74 68 69 73 20 69 73 20 61 20 73 77 69 74 63 68  this is a switch
b8f0: 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
b900: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
b910: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b920: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72         return tr
b930: 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
b940: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
b950: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
b960: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
b970: 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
b980: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
b990: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
b9a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b9b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b9c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b9d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b9e0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
b9f0: 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 62  private static b
ba00: 6f 6f 6c 20 4d 61 74 63 68 4f 70 74 69 6f 6e 28  ool MatchOption(
ba10: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
ba20: 20 20 73 74 72 69 6e 67 20 61 72 67 2c 0d 0a 20    string arg,.. 
ba30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
ba40: 74 72 69 6e 67 20 6f 70 74 69 6f 6e 0d 0a 20 20  tring option..  
ba50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d                ).
ba60: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
ba70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ba80: 69 66 20 28 28 61 72 67 20 3d 3d 20 6e 75 6c 6c  if ((arg == null
ba90: 29 20 7c 7c 20 28 6f 70 74 69 6f 6e 20 3d 3d 20  ) || (option == 
baa0: 6e 75 6c 6c 29 29 0d 0a 20 20 20 20 20 20 20 20  null))..        
bab0: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
bac0: 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20  rn false;....   
bad0: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
bae0: 75 72 6e 20 53 74 72 69 6e 67 2e 43 6f 6d 70 61  urn String.Compa
baf0: 72 65 28 61 72 67 2c 20 30 2c 20 6f 70 74 69 6f  re(arg, 0, optio
bb00: 6e 2c 20 30 2c 0d 0a 20 20 20 20 20 20 20 20 20  n, 0,..         
bb10: 20 20 20 20 20 20 20 20 20 20 20 61 72 67 2e 4c             arg.L
bb20: 65 6e 67 74 68 2c 20 53 74 72 69 6e 67 43 6f 6d  ength, StringCom
bb30: 70 61 72 69 73 6f 6e 2e 4f 72 64 69 6e 61 6c 49  parison.OrdinalI
bb40: 67 6e 6f 72 65 43 61 73 65 29 20 3d 3d 20 30 3b  gnoreCase) == 0;
bb50: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
bb60: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
bb70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bb80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bb90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bba0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bbb0: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
bbc0: 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63    private static
bbd0: 20 62 6f 6f 6c 3f 20 50 61 72 73 65 42 6f 6f 6c   bool? ParseBool
bbe0: 65 61 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ean(..          
bbf0: 20 20 20 20 20 20 73 74 72 69 6e 67 20 74 65 78        string tex
bc00: 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  t..             
bc10: 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20     )..          
bc20: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
bc30: 20 20 20 20 20 69 66 20 28 21 53 74 72 69 6e 67       if (!String
bc40: 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 74  .IsNullOrEmpty(t
bc50: 65 78 74 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ext))..         
bc60: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
bc70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f                bo
bc80: 6f 6c 20 76 61 6c 75 65 3b 0d 0a 0d 0a 20 20 20  ol value;....   
bc90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bca0: 20 69 66 20 28 62 6f 6f 6c 2e 54 72 79 50 61 72   if (bool.TryPar
bcb0: 73 65 28 74 65 78 74 2c 20 6f 75 74 20 76 61 6c  se(text, out val
bcc0: 75 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ue))..          
bcd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
bce0: 74 75 72 6e 20 76 61 6c 75 65 3b 0d 0a 20 20 20  turn value;..   
bcf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
bd00: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
bd10: 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a    return null;..
bd20: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
bd30: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
bd40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bd50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bd60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bd70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bd80: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
bd90: 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 6f  private static o
bda0: 62 6a 65 63 74 20 50 61 72 73 65 45 6e 75 6d 28  bject ParseEnum(
bdb0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
bdc0: 20 20 54 79 70 65 20 65 6e 75 6d 54 79 70 65 2c    Type enumType,
bdd0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
bde0: 20 20 73 74 72 69 6e 67 20 74 65 78 74 2c 0d 0a    string text,..
bdf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
be00: 62 6f 6f 6c 20 6e 6f 43 61 73 65 0d 0a 20 20 20  bool noCase..   
be10: 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a               )..
be20: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
be30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
be40: 66 20 28 28 65 6e 75 6d 54 79 70 65 20 3d 3d 20  f ((enumType == 
be50: 6e 75 6c 6c 29 20 7c 7c 20 21 65 6e 75 6d 54 79  null) || !enumTy
be60: 70 65 2e 49 73 45 6e 75 6d 29 0d 0a 20 20 20 20  pe.IsEnum)..    
be70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
be80: 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a  return null;....
be90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bea0: 69 66 20 28 21 53 74 72 69 6e 67 2e 49 73 4e 75  if (!String.IsNu
beb0: 6c 6c 4f 72 45 6d 70 74 79 28 74 65 78 74 29 29  llOrEmpty(text))
bec0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
bed0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
bee0: 20 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20           try..  
bef0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bf00: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
bf10: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
bf20: 75 72 6e 20 45 6e 75 6d 2e 50 61 72 73 65 28 65  urn Enum.Parse(e
bf30: 6e 75 6d 54 79 70 65 2c 20 74 65 78 74 2c 20 6e  numType, text, n
bf40: 6f 43 61 73 65 29 3b 0d 0a 20 20 20 20 20 20 20  oCase);..       
bf50: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
bf60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bf70: 20 20 20 20 63 61 74 63 68 0d 0a 20 20 20 20 20      catch..     
bf80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
bf90: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
bfa0: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20            // do 
bfb0: 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20  nothing...      
bfc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
bfd0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
bfe0: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
bff0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c        return nul
c000: 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l;..            
c010: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  }..            #
c020: 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20  endregion....   
c030: 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
c040: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c050: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c060: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c070: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
c080: 20 20 20 20 20 20 20 20 20 20 20 20 23 72 65 67              #reg
c090: 69 6f 6e 20 50 75 62 6c 69 63 20 53 74 61 74 69  ion Public Stati
c0a0: 63 20 4d 65 74 68 6f 64 73 0d 0a 20 20 20 20 20  c Methods..     
c0b0: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74         public st
c0c0: 61 74 69 63 20 43 6f 6e 66 69 67 75 72 61 74 69  atic Configurati
c0d0: 6f 6e 20 43 72 65 61 74 65 44 65 66 61 75 6c 74  on CreateDefault
c0e0: 28 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ()..            
c0f0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
c100: 20 20 20 73 74 72 69 6e 67 20 64 69 72 65 63 74     string direct
c110: 6f 72 79 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20  ory = null;..   
c120: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72               str
c130: 69 6e 67 20 63 6f 72 65 46 69 6c 65 4e 61 6d 65  ing coreFileName
c140: 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20   = null;..      
c150: 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
c160: 20 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 20 3d 20   linqFileName = 
c170: 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20  null;..         
c180: 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 64 65         string de
c190: 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 20 3d  signerFileName =
c1a0: 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20   null;....      
c1b0: 20 20 20 20 20 20 20 20 20 20 47 65 74 44 65 66            GetDef
c1c0: 61 75 6c 74 46 69 6c 65 4e 61 6d 65 73 28 0d 0a  aultFileNames(..
c1d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c1e0: 20 20 20 20 72 65 66 20 64 69 72 65 63 74 6f 72      ref director
c1f0: 79 2c 20 72 65 66 20 63 6f 72 65 46 69 6c 65 4e  y, ref coreFileN
c200: 61 6d 65 2c 20 72 65 66 20 6c 69 6e 71 46 69 6c  ame, ref linqFil
c210: 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20  eName,..        
c220: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20              ref 
c230: 64 65 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65  designerFileName
c240: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
c250: 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 65 77        return new
c260: 20 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 28 74   Configuration(t
c270: 68 69 73 41 73 73 65 6d 62 6c 79 2c 20 6e 75 6c  hisAssembly, nul
c280: 6c 2c 20 64 69 72 65 63 74 6f 72 79 2c 0d 0a 20  l, directory,.. 
c290: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c2a0: 20 20 20 63 6f 72 65 46 69 6c 65 4e 61 6d 65 2c     coreFileName,
c2b0: 20 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 2c 20 64   linqFileName, d
c2c0: 65 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 2c  esignerFileName,
c2d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
c2e0: 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 54        TraceOps.T
c2f0: 72 61 63 65 46 6f 72 6d 61 74 2c 20 49 6e 73 74  raceFormat, Inst
c300: 61 6c 6c 46 6c 61 67 73 2e 44 65 66 61 75 6c 74  allFlags.Default
c310: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
c320: 20 20 20 20 20 20 20 54 72 61 63 65 50 72 69 6f         TracePrio
c330: 72 69 74 79 2e 44 65 66 61 75 6c 74 2c 20 74 72  rity.Default, tr
c340: 75 65 2c 20 66 61 6c 73 65 2c 20 74 72 75 65 2c  ue, false, true,
c350: 20 66 61 6c 73 65 2c 20 66 61 6c 73 65 2c 0d 0a   false, false,..
c360: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c370: 20 20 20 20 66 61 6c 73 65 2c 20 66 61 6c 73 65      false, false
c380: 2c 20 66 61 6c 73 65 2c 20 66 61 6c 73 65 2c 20  , false, false, 
c390: 66 61 6c 73 65 2c 20 74 72 75 65 2c 20 74 72 75  false, true, tru
c3a0: 65 2c 20 66 61 6c 73 65 29 3b 0d 0a 20 20 20 20  e, false);..    
c3b0: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
c3c0: 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
c3d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c3e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c3f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c400: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
c410: 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
c420: 69 63 20 73 74 61 74 69 63 20 62 6f 6f 6c 20 46  ic static bool F
c430: 72 6f 6d 41 72 67 73 28 0d 0a 20 20 20 20 20 20  romArgs(..      
c440: 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
c450: 5b 5d 20 61 72 67 73 2c 0d 0a 20 20 20 20 20 20  [] args,..      
c460: 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 73            bool s
c470: 74 72 69 63 74 2c 0d 0a 20 20 20 20 20 20 20 20  trict,..        
c480: 20 20 20 20 20 20 20 20 72 65 66 20 43 6f 6e 66          ref Conf
c490: 69 67 75 72 61 74 69 6f 6e 20 63 6f 6e 66 69 67  iguration config
c4a0: 75 72 61 74 69 6f 6e 2c 0d 0a 20 20 20 20 20 20  uration,..      
c4b0: 20 20 20 20 20 20 20 20 20 20 72 65 66 20 73 74            ref st
c4c0: 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20 20  ring error..    
c4d0: 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
c4e0: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
c4f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
c500: 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  y..             
c510: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
c520: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 61 72            if (ar
c530: 67 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  gs == null)..   
c540: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c550: 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65       return true
c560: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
c570: 20 20 20 20 20 20 20 20 20 69 66 20 28 63 6f 6e           if (con
c580: 66 69 67 75 72 61 74 69 6f 6e 20 3d 3d 20 6e 75  figuration == nu
c590: 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
c5a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
c5b0: 66 69 67 75 72 61 74 69 6f 6e 20 3d 20 43 6f 6e  figuration = Con
c5c0: 66 69 67 75 72 61 74 69 6f 6e 2e 43 72 65 61 74  figuration.Creat
c5d0: 65 44 65 66 61 75 6c 74 28 29 3b 0d 0a 0d 0a 20  eDefault();.... 
c5e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c5f0: 20 20 20 69 6e 74 20 6c 65 6e 67 74 68 20 3d 20     int length = 
c600: 61 72 67 73 2e 4c 65 6e 67 74 68 3b 0d 0a 0d 0a  args.Length;....
c610: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c620: 20 20 20 20 66 6f 72 20 28 69 6e 74 20 69 6e 64      for (int ind
c630: 65 78 20 3d 20 30 3b 20 69 6e 64 65 78 20 3c 20  ex = 0; index < 
c640: 6c 65 6e 67 74 68 3b 20 69 6e 64 65 78 2b 2b 29  length; index++)
c650: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
c660: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
c670: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c680: 20 73 74 72 69 6e 67 20 61 72 67 20 3d 20 61 72   string arg = ar
c690: 67 73 5b 69 6e 64 65 78 5d 3b 0d 0a 0d 0a 20 20  gs[index];....  
c6a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c6b0: 20 20 20 20 20 20 69 66 20 28 53 74 72 69 6e 67        if (String
c6c0: 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 61  .IsNullOrEmpty(a
c6d0: 72 67 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  rg))..          
c6e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c6f0: 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 0d 0a 20    continue;.... 
c700: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c710: 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6e 65         string ne
c720: 77 41 72 67 20 3d 20 61 72 67 3b 0d 0a 0d 0a 20  wArg = arg;.... 
c730: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c740: 20 20 20 20 20 20 20 69 66 20 28 43 68 65 63 6b         if (Check
c750: 4f 70 74 69 6f 6e 28 72 65 66 20 6e 65 77 41 72  Option(ref newAr
c760: 67 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  g))..           
c770: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
c780: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c790: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
c7a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c7b0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e              // N
c7c0: 4f 54 45 3a 20 41 6c 6c 20 74 68 65 20 73 75 70  OTE: All the sup
c7d0: 70 6f 72 74 65 64 20 63 6f 6d 6d 61 6e 64 20 6c  ported command l
c7e0: 69 6e 65 20 6f 70 74 69 6f 6e 73 20 6d 75 73 74  ine options must
c7f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
c800: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
c810: 20 20 20 20 20 20 20 68 61 76 65 20 61 20 76 61         have a va
c820: 6c 75 65 3b 20 74 68 65 72 65 66 6f 72 65 2c 20  lue; therefore, 
c830: 61 74 74 65 6d 70 74 20 74 6f 20 61 64 76 61 6e  attempt to advan
c840: 63 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ce..            
c850: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c860: 2f 2f 20 20 20 20 20 20 20 74 6f 20 69 74 20 6e  //       to it n
c870: 6f 77 2e 20 20 49 66 20 77 65 20 66 61 69 6c 2c  ow.  If we fail,
c880: 20 77 65 20 61 72 65 20 64 6f 6e 65 2e 0d 0a 20   we are done... 
c890: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c8a0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
c8b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c8c0: 20 20 20 20 20 20 20 20 20 20 20 69 6e 64 65 78             index
c8d0: 2b 2b 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ++;....         
c8e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c8f0: 20 20 20 69 66 20 28 69 6e 64 65 78 20 3e 3d 20     if (index >= 
c900: 6c 65 6e 67 74 68 29 0d 0a 20 20 20 20 20 20 20  length)..       
c910: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c920: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
c930: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c940: 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
c950: 54 72 61 63 65 4f 70 73 2e 54 72 61 63 65 28 0d  TraceOps.Trace(.
c960: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
c970: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c980: 20 20 20 20 20 54 72 61 63 65 50 72 69 6f 72 69       TracePriori
c990: 74 79 2e 4c 6f 77 65 73 74 2c 0d 0a 20 20 20 20  ty.Lowest,..    
c9a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c9b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c9c0: 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53  traceCallback, S
c9d0: 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
c9e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c9f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ca00: 20 20 20 22 4d 69 73 73 69 6e 67 20 76 61 6c 75     "Missing valu
ca10: 65 20 66 6f 72 20 6f 70 74 69 6f 6e 3a 20 7b 30  e for option: {0
ca20: 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }",..           
ca30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ca40: 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70           ForDisp
ca50: 6c 61 79 28 61 72 67 29 29 2c 20 74 72 61 63 65  lay(arg)), trace
ca60: 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
ca70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ca80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
ca90: 20 28 73 74 72 69 63 74 29 0d 0a 20 20 20 20 20   (strict)..     
caa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cab0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
cac0: 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a  eturn false;....
cad0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cae0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
caf0: 62 72 65 61 6b 3b 0d 0a 20 20 20 20 20 20 20 20  break;..        
cb00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cb10: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
cb20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cb30: 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
cb40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cb50: 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 47 72       // NOTE: Gr
cb60: 61 62 20 74 68 65 20 74 65 78 74 75 61 6c 20 76  ab the textual v
cb70: 61 6c 75 65 20 6f 66 20 74 68 69 73 20 63 6f 6d  alue of this com
cb80: 6d 61 6e 64 20 6c 69 6e 65 0d 0a 20 20 20 20 20  mand line..     
cb90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cba0: 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
cbb0: 6f 70 74 69 6f 6e 2e 0d 0a 20 20 20 20 20 20 20  option...       
cbc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cbd0: 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
cbe0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cbf0: 20 20 20 20 20 73 74 72 69 6e 67 20 74 65 78 74       string text
cc00: 20 3d 20 61 72 67 73 5b 69 6e 64 65 78 5d 3b 0d   = args[index];.
cc10: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
cc20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
cc30: 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
cc40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
cc50: 2f 20 4e 4f 54 45 3a 20 46 69 67 75 72 65 20 6f  / NOTE: Figure o
cc60: 75 74 20 77 68 69 63 68 20 63 6f 6d 6d 61 6e 64  ut which command
cc70: 20 6c 69 6e 65 20 6f 70 74 69 6f 6e 20 74 68 69   line option thi
cc80: 73 20 69 73 0d 0a 20 20 20 20 20 20 20 20 20 20  s is..          
cc90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cca0: 20 20 2f 2f 20 20 20 20 20 20 20 28 62 61 73 65    //       (base
ccb0: 64 20 6f 6e 20 61 20 70 61 72 74 69 61 6c 20 6e  d on a partial n
ccc0: 61 6d 65 20 6d 61 74 63 68 29 20 61 6e 64 20 74  ame match) and t
ccd0: 68 65 6e 20 74 72 79 0d 0a 20 20 20 20 20 20 20  hen try..       
cce0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ccf0: 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 74 6f       //       to
cd00: 20 69 6e 74 65 72 70 72 65 74 20 74 68 65 20 74   interpret the t
cd10: 65 78 74 75 61 6c 20 76 61 6c 75 65 20 61 73 20  extual value as 
cd20: 74 68 65 20 63 6f 72 72 65 63 74 0d 0a 20 20 20  the correct..   
cd30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cd40: 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
cd50: 20 20 74 79 70 65 2e 0d 0a 20 20 20 20 20 20 20    type...       
cd60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cd70: 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
cd80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cd90: 20 20 20 20 20 69 66 20 28 4d 61 74 63 68 4f 70       if (MatchOp
cda0: 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 73 74  tion(newArg, "st
cdb0: 72 69 63 74 22 29 29 0d 0a 20 20 20 20 20 20 20  rict"))..       
cdc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cdd0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
cde0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cdf0: 20 20 20 20 20 20 20 20 62 6f 6f 6c 3f 20 76 61          bool? va
ce00: 6c 75 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c 65  lue = ParseBoole
ce10: 61 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20 20  an(text);....   
ce20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ce30: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
ce40: 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d  (value == null).
ce50: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
ce60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ce70: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
ce80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ce90: 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
cea0: 54 72 61 63 65 4f 70 73 2e 54 72 61 63 65 28 0d  TraceOps.Trace(.
ceb0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
cec0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ced0: 20 20 20 20 20 20 20 20 20 54 72 61 63 65 50 72           TracePr
cee0: 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c 0d 0a  iority.Lowest,..
cef0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cf00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cf10: 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c          traceCal
cf20: 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f  lback, String.Fo
cf30: 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
cf40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cf50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
cf60: 49 6e 76 61 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c  Invalid {0} bool
cf70: 65 61 6e 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c  ean value: {1}",
cf80: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
cf90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cfa0: 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73            ForDis
cfb0: 70 6c 61 79 28 61 72 67 29 2c 20 46 6f 72 44 69  play(arg), ForDi
cfc0: 73 70 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a 20  splay(text)),.. 
cfd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cfe0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cff0: 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65         traceCate
d000: 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
d010: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d020: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
d030: 20 28 73 74 72 69 63 74 29 0d 0a 20 20 20 20 20   (strict)..     
d040: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d050: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d060: 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
d070: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
d080: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d090: 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65          continue
d0a0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
d0b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d0c0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
d0d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d0e0: 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
d0f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d100: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e              // N
d110: 4f 54 45 3a 20 41 6c 6c 6f 77 20 74 68 65 20 63  OTE: Allow the c
d120: 6f 6d 6d 61 6e 64 20 6c 69 6e 65 20 61 72 67 75  ommand line argu
d130: 6d 65 6e 74 73 20 74 6f 20 6f 76 65 72 72 69 64  ments to overrid
d140: 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..             
d150: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d160: 20 20 20 2f 2f 20 20 20 20 20 20 20 74 68 65 20     //       the 
d170: 22 73 74 72 69 63 74 6e 65 73 73 22 20 73 65 74  "strictness" set
d180: 74 69 6e 67 20 70 72 6f 76 69 64 65 64 20 62 79  ting provided by
d190: 20 6f 75 72 20 63 61 6c 6c 65 72 2e 0d 0a 20 20   our caller...  
d1a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d1b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
d1c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
d1d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d1e0: 20 20 73 74 72 69 63 74 20 3d 20 28 62 6f 6f 6c    strict = (bool
d1f0: 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20  )value;..       
d200: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d210: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
d220: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d230: 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74      else if (Mat
d240: 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c  chOption(newArg,
d250: 20 22 6c 6f 67 46 69 6c 65 4e 61 6d 65 22 29 29   "logFileName"))
d260: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
d270: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
d280: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
d290: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d2a0: 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6c   configuration.l
d2b0: 6f 67 46 69 6c 65 4e 61 6d 65 20 3d 20 74 65 78  ogFileName = tex
d2c0: 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t;..            
d2d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d2e0: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
d2f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
d300: 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74  lse if (MatchOpt
d310: 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 64 69 72  ion(newArg, "dir
d320: 65 63 74 6f 72 79 22 29 29 0d 0a 20 20 20 20 20  ectory"))..     
d330: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d340: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
d350: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d360: 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67            config
d370: 75 72 61 74 69 6f 6e 2e 64 69 72 65 63 74 6f 72  uration.director
d380: 79 20 3d 20 74 65 78 74 3b 0d 0a 0d 0a 20 20 20  y = text;....   
d390: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d3a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
d3b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
d3c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d3d0: 20 2f 2f 20 4e 4f 54 45 3a 20 2a 53 50 45 43 49   // NOTE: *SPECI
d3e0: 41 4c 2a 20 4d 75 73 74 20 72 65 66 72 65 73 68  AL* Must refresh
d3f0: 20 74 68 65 20 66 69 6c 65 20 6e 61 6d 65 73 0d   the file names.
d400: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
d410: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d420: 20 2f 2f 20 20 20 20 20 20 20 68 65 72 65 20 62   //       here b
d430: 65 63 61 75 73 65 20 74 68 65 20 75 6e 64 65 72  ecause the under
d440: 6c 79 69 6e 67 20 64 69 72 65 63 74 6f 72 79 0d  lying directory.
d450: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
d460: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d470: 20 2f 2f 20 20 20 20 20 20 20 68 61 73 20 63 68   //       has ch
d480: 61 6e 67 65 64 2e 0d 0a 20 20 20 20 20 20 20 20  anged...        
d490: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d4a0: 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
d4b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d4c0: 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
d4d0: 6e 67 20 63 6f 72 65 46 69 6c 65 4e 61 6d 65 20  ng coreFileName 
d4e0: 3d 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e  = configuration.
d4f0: 63 6f 72 65 46 69 6c 65 4e 61 6d 65 3b 0d 0a 0d  coreFileName;...
d500: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
d510: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d520: 20 69 66 20 28 21 53 74 72 69 6e 67 2e 49 73 4e   if (!String.IsN
d530: 75 6c 6c 4f 72 45 6d 70 74 79 28 63 6f 72 65 46  ullOrEmpty(coreF
d540: 69 6c 65 4e 61 6d 65 29 29 0d 0a 20 20 20 20 20  ileName))..     
d550: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d560: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
d570: 6f 72 65 46 69 6c 65 4e 61 6d 65 20 3d 20 50 61  oreFileName = Pa
d580: 74 68 2e 47 65 74 46 69 6c 65 4e 61 6d 65 28 63  th.GetFileName(c
d590: 6f 72 65 46 69 6c 65 4e 61 6d 65 29 3b 0d 0a 0d  oreFileName);...
d5a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
d5b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d5c0: 20 69 66 20 28 53 74 72 69 6e 67 2e 49 73 4e 75   if (String.IsNu
d5d0: 6c 6c 4f 72 45 6d 70 74 79 28 63 6f 72 65 46 69  llOrEmpty(coreFi
d5e0: 6c 65 4e 61 6d 65 29 29 0d 0a 20 20 20 20 20 20  leName))..      
d5f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d600: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
d610: 72 65 46 69 6c 65 4e 61 6d 65 20 3d 20 49 6e 73  reFileName = Ins
d620: 74 61 6c 6c 65 72 2e 43 6f 72 65 46 69 6c 65 4e  taller.CoreFileN
d630: 61 6d 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ame;....        
d640: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d650: 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72          configur
d660: 61 74 69 6f 6e 2e 63 6f 72 65 46 69 6c 65 4e 61  ation.coreFileNa
d670: 6d 65 20 3d 20 50 61 74 68 2e 43 6f 6d 62 69 6e  me = Path.Combin
d680: 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
d690: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d6a0: 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72          configur
d6b0: 61 74 69 6f 6e 2e 64 69 72 65 63 74 6f 72 79 2c  ation.directory,
d6c0: 20 63 6f 72 65 46 69 6c 65 4e 61 6d 65 29 3b 0d   coreFileName);.
d6d0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
d6e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d6f0: 20 20 20 73 74 72 69 6e 67 20 6c 69 6e 71 46 69     string linqFi
d700: 6c 65 4e 61 6d 65 20 3d 20 63 6f 6e 66 69 67 75  leName = configu
d710: 72 61 74 69 6f 6e 2e 6c 69 6e 71 46 69 6c 65 4e  ration.linqFileN
d720: 61 6d 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ame;....        
d730: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d740: 20 20 20 20 20 20 20 20 69 66 20 28 21 53 74 72          if (!Str
d750: 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74  ing.IsNullOrEmpt
d760: 79 28 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 29 29  y(linqFileName))
d770: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
d780: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d790: 20 20 20 20 20 20 6c 69 6e 71 46 69 6c 65 4e 61        linqFileNa
d7a0: 6d 65 20 3d 20 50 61 74 68 2e 47 65 74 46 69 6c  me = Path.GetFil
d7b0: 65 4e 61 6d 65 28 6c 69 6e 71 46 69 6c 65 4e 61  eName(linqFileNa
d7c0: 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  me);....        
d7d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d7e0: 20 20 20 20 20 20 20 20 69 66 20 28 53 74 72 69          if (Stri
d7f0: 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79  ng.IsNullOrEmpty
d800: 28 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 29 29 0d  (linqFileName)).
d810: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
d820: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d830: 20 20 20 20 20 6c 69 6e 71 46 69 6c 65 4e 61 6d       linqFileNam
d840: 65 20 3d 20 49 6e 73 74 61 6c 6c 65 72 2e 4c 69  e = Installer.Li
d850: 6e 71 46 69 6c 65 4e 61 6d 65 3b 0d 0a 0d 0a 20  nqFileName;.... 
d860: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d870: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
d880: 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6c 69 6e  onfiguration.lin
d890: 71 46 69 6c 65 4e 61 6d 65 20 3d 20 50 61 74 68  qFileName = Path
d8a0: 2e 43 6f 6d 62 69 6e 65 28 0d 0a 20 20 20 20 20  .Combine(..     
d8b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d8c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
d8d0: 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 64 69 72  onfiguration.dir
d8e0: 65 63 74 6f 72 79 2c 20 6c 69 6e 71 46 69 6c 65  ectory, linqFile
d8f0: 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  Name);....      
d900: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d910: 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
d920: 20 64 65 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d   designerFileNam
d930: 65 20 3d 20 63 6f 6e 66 69 67 75 72 61 74 69 6f  e = configuratio
d940: 6e 2e 64 65 73 69 67 6e 65 72 46 69 6c 65 4e 61  n.designerFileNa
d950: 6d 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  me;....         
d960: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d970: 20 20 20 20 20 20 20 69 66 20 28 21 53 74 72 69         if (!Stri
d980: 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79  ng.IsNullOrEmpty
d990: 28 64 65 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d  (designerFileNam
d9a0: 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e))..           
d9b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d9c0: 20 20 20 20 20 20 20 20 20 64 65 73 69 67 6e 65           designe
d9d0: 72 46 69 6c 65 4e 61 6d 65 20 3d 20 50 61 74 68  rFileName = Path
d9e0: 2e 47 65 74 46 69 6c 65 4e 61 6d 65 28 64 65 73  .GetFileName(des
d9f0: 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 29 3b 0d  ignerFileName);.
da00: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
da10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
da20: 20 20 20 69 66 20 28 53 74 72 69 6e 67 2e 49 73     if (String.Is
da30: 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 64 65 73 69  NullOrEmpty(desi
da40: 67 6e 65 72 46 69 6c 65 4e 61 6d 65 29 29 0d 0a  gnerFileName))..
da50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
da60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
da70: 20 20 20 20 64 65 73 69 67 6e 65 72 46 69 6c 65      designerFile
da80: 4e 61 6d 65 20 3d 20 49 6e 73 74 61 6c 6c 65 72  Name = Installer
da90: 2e 44 65 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d  .DesignerFileNam
daa0: 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
dab0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dac0: 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74        configurat
dad0: 69 6f 6e 2e 64 65 73 69 67 6e 65 72 46 69 6c 65  ion.designerFile
dae0: 4e 61 6d 65 20 3d 20 50 61 74 68 2e 43 6f 6d 62  Name = Path.Comb
daf0: 69 6e 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ine(..          
db00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
db10: 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67            config
db20: 75 72 61 74 69 6f 6e 2e 64 69 72 65 63 74 6f 72  uration.director
db30: 79 2c 20 64 65 73 69 67 6e 65 72 46 69 6c 65 4e  y, designerFileN
db40: 61 6d 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ame);..         
db50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
db60: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
db70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
db80: 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68    else if (Match
db90: 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22  Option(newArg, "
dba0: 63 6f 72 65 46 69 6c 65 4e 61 6d 65 22 29 29 0d  coreFileName")).
dbb0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
dbc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
dbd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dbe0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dbf0: 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 63 6f  configuration.co
dc00: 72 65 46 69 6c 65 4e 61 6d 65 20 3d 20 74 65 78  reFileName = tex
dc10: 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t;..            
dc20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dc30: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
dc40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
dc50: 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74  lse if (MatchOpt
dc60: 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 6c 69 6e  ion(newArg, "lin
dc70: 71 46 69 6c 65 4e 61 6d 65 22 29 29 0d 0a 20 20  qFileName"))..  
dc80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dc90: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
dca0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dcb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
dcc0: 66 69 67 75 72 61 74 69 6f 6e 2e 6c 69 6e 71 46  figuration.linqF
dcd0: 69 6c 65 4e 61 6d 65 20 3d 20 74 65 78 74 3b 0d  ileName = text;.
dce0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
dcf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
dd00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dd10: 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65              else
dd20: 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e   if (MatchOption
dd30: 28 6e 65 77 41 72 67 2c 20 22 64 65 73 69 67 6e  (newArg, "design
dd40: 65 72 46 69 6c 65 4e 61 6d 65 22 29 29 0d 0a 20  erFileName")).. 
dd50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dd60: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
dd70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dd80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
dd90: 6e 66 69 67 75 72 61 74 69 6f 6e 2e 64 65 73 69  nfiguration.desi
dda0: 67 6e 65 72 46 69 6c 65 4e 61 6d 65 20 3d 20 74  gnerFileName = t
ddb0: 65 78 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ext;..          
ddc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ddd0: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
dde0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ddf0: 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f   else if (MatchO
de00: 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 74  ption(newArg, "t
de10: 72 61 63 65 46 6f 72 6d 61 74 22 29 29 0d 0a 20  raceFormat")).. 
de20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
de30: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
de40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
de50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
de60: 6e 66 69 67 75 72 61 74 69 6f 6e 2e 74 72 61 63  nfiguration.trac
de70: 65 46 6f 72 6d 61 74 20 3d 20 74 65 78 74 3b 0d  eFormat = text;.
de80: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
de90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dea0: 20 54 72 61 63 65 4f 70 73 2e 54 72 61 63 65 46   TraceOps.TraceF
deb0: 6f 72 6d 61 74 20 3d 20 63 6f 6e 66 69 67 75 72  ormat = configur
dec0: 61 74 69 6f 6e 2e 74 72 61 63 65 46 6f 72 6d 61  ation.traceForma
ded0: 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t;..            
dee0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
def0: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
df00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
df10: 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74  lse if (MatchOpt
df20: 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 74 72 61  ion(newArg, "tra
df30: 63 65 50 72 69 6f 72 69 74 79 22 29 29 0d 0a 20  cePriority")).. 
df40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
df50: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
df60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
df70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6f 62                ob
df80: 6a 65 63 74 20 76 61 6c 75 65 20 3d 20 50 61 72  ject value = Par
df90: 73 65 45 6e 75 6d 28 0d 0a 20 20 20 20 20 20 20  seEnum(..       
dfa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dfb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 74 79 70               typ
dfc0: 65 6f 66 28 54 72 61 63 65 50 72 69 6f 72 69 74  eof(TracePriorit
dfd0: 79 29 2c 20 74 65 78 74 2c 20 74 72 75 65 29 3b  y), text, true);
dfe0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
dff0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e000: 20 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d 3d      if (value ==
e010: 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
e020: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e030: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
e040: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e050: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
e060: 72 72 6f 72 20 3d 20 54 72 61 63 65 4f 70 73 2e  rror = TraceOps.
e070: 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20  Trace(..        
e080: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e090: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e0a0: 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f  TracePriority.Lo
e0b0: 77 65 73 74 2c 0d 0a 20 20 20 20 20 20 20 20 20  west,..         
e0c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e0d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
e0e0: 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74  raceCallback, St
e0f0: 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
e100: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e110: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e120: 20 20 20 20 20 20 22 49 6e 76 61 6c 69 64 20 74        "Invalid t
e130: 72 61 63 65 20 70 72 69 6f 72 69 74 79 20 76 61  race priority va
e140: 6c 75 65 3a 20 7b 30 7d 22 2c 0d 0a 20 20 20 20  lue: {0}",..    
e150: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e160: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e170: 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 74      ForDisplay(t
e180: 65 78 74 29 29 2c 20 74 72 61 63 65 43 61 74 65  ext)), traceCate
e190: 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
e1a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e1b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
e1c0: 20 28 73 74 72 69 63 74 29 0d 0a 20 20 20 20 20   (strict)..     
e1d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e1e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e1f0: 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
e200: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
e210: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e220: 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65          continue
e230: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
e240: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e250: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
e260: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e270: 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72          configur
e280: 61 74 69 6f 6e 2e 74 72 61 63 65 50 72 69 6f 72  ation.tracePrior
e290: 69 74 79 20 3d 20 28 54 72 61 63 65 50 72 69 6f  ity = (TracePrio
e2a0: 72 69 74 79 29 76 61 6c 75 65 3b 0d 0a 20 20 20  rity)value;..   
e2b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e2c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61               Tra
e2d0: 63 65 4f 70 73 2e 54 72 61 63 65 50 72 69 6f 72  ceOps.TracePrior
e2e0: 69 74 79 20 3d 20 63 6f 6e 66 69 67 75 72 61 74  ity = configurat
e2f0: 69 6f 6e 2e 74 72 61 63 65 50 72 69 6f 72 69 74  ion.tracePriorit
e300: 79 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y;..            
e310: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e320: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
e330: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
e340: 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74  lse if (MatchOpt
e350: 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 69 6e 73  ion(newArg, "ins
e360: 74 61 6c 6c 22 29 29 0d 0a 20 20 20 20 20 20 20  tall"))..       
e370: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e380: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
e390: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e3a0: 20 20 20 20 20 20 20 20 62 6f 6f 6c 3f 20 76 61          bool? va
e3b0: 6c 75 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c 65  lue = ParseBoole
e3c0: 61 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20 20  an(text);....   
e3d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e3e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
e3f0: 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d  (value == null).
e400: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
e410: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e420: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
e430: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e440: 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
e450: 54 72 61 63 65 4f 70 73 2e 54 72 61 63 65 28 0d  TraceOps.Trace(.
e460: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
e470: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e480: 20 20 20 20 20 20 20 20 20 54 72 61 63 65 50 72           TracePr
e490: 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c 0d 0a  iority.Lowest,..
e4a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e4b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e4c0: 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c          traceCal
e4d0: 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f  lback, String.Fo
e4e0: 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
e4f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e500: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
e510: 49 6e 76 61 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c  Invalid {0} bool
e520: 65 61 6e 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c  ean value: {1}",
e530: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
e540: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e550: 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73            ForDis
e560: 70 6c 61 79 28 61 72 67 29 2c 20 46 6f 72 44 69  play(arg), ForDi
e570: 73 70 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a 20  splay(text)),.. 
e580: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e590: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e5a0: 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65         traceCate
e5b0: 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
e5c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e5d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
e5e0: 20 28 73 74 72 69 63 74 29 0d 0a 20 20 20 20 20   (strict)..     
e5f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e600: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e610: 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
e620: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
e630: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e640: 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65          continue
e650: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
e660: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e670: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
e680: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e690: 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72          configur
e6a0: 61 74 69 6f 6e 2e 69 6e 73 74 61 6c 6c 20 3d 20  ation.install = 
e6b0: 28 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20 20  (bool)value;..  
e6c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e6d0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
e6e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e6f0: 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66           else if
e700: 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65   (MatchOption(ne
e710: 77 41 72 67 2c 20 22 69 6e 73 74 61 6c 6c 46 6c  wArg, "installFl
e720: 61 67 73 22 29 29 0d 0a 20 20 20 20 20 20 20 20  ags"))..        
e730: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e740: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
e750: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e760: 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 76 61         object va
e770: 6c 75 65 20 3d 20 50 61 72 73 65 45 6e 75 6d 28  lue = ParseEnum(
e780: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
e790: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e7a0: 20 20 20 20 20 20 74 79 70 65 6f 66 28 49 6e 73        typeof(Ins
e7b0: 74 61 6c 6c 46 6c 61 67 73 29 2c 20 74 65 78 74  tallFlags), text
e7c0: 2c 20 74 72 75 65 29 3b 0d 0a 0d 0a 20 20 20 20  , true);....    
e7d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e7e0: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
e7f0: 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  value == null)..
e800: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e810: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e820: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
e830: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e840: 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 54         error = T
e850: 72 61 63 65 4f 70 73 2e 54 72 61 63 65 28 0d 0a  raceOps.Trace(..
e860: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e870: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e880: 20 20 20 20 20 20 20 20 54 72 61 63 65 50 72 69          TracePri
e890: 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c 0d 0a 20  ority.Lowest,.. 
e8a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e8b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e8c0: 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c         traceCall
e8d0: 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72  back, String.For
e8e0: 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
e8f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e900: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 49                "I
e910: 6e 76 61 6c 69 64 20 69 6e 73 74 61 6c 6c 20 66  nvalid install f
e920: 6c 61 67 73 20 76 61 6c 75 65 3a 20 7b 30 7d 22  lags value: {0}"
e930: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
e940: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e950: 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69             ForDi
e960: 73 70 6c 61 79 28 74 65 78 74 29 29 2c 20 74 72  splay(text)), tr
e970: 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  aceCategory);...
e980: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
e990: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e9a0: 20 20 20 20 20 69 66 20 28 73 74 72 69 63 74 29       if (strict)
e9b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
e9c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e9d0: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
e9e0: 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20   false;....     
e9f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ea00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
ea10: 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20  ontinue;..      
ea20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ea30: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
ea40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ea50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
ea60: 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 69 6e 73  onfiguration.ins
ea70: 74 61 6c 6c 46 6c 61 67 73 20 3d 20 28 49 6e 73  tallFlags = (Ins
ea80: 74 61 6c 6c 46 6c 61 67 73 29 76 61 6c 75 65 3b  tallFlags)value;
ea90: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
eaa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
eab0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
eac0: 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73               els
ead0: 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f  e if (MatchOptio
eae0: 6e 28 6e 65 77 41 72 67 2c 20 22 77 68 61 74 49  n(newArg, "whatI
eaf0: 66 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  f"))..          
eb00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
eb10: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
eb20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
eb30: 20 20 20 20 20 62 6f 6f 6c 3f 20 76 61 6c 75 65       bool? value
eb40: 20 3d 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28   = ParseBoolean(
eb50: 74 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  text);....      
eb60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
eb70: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76 61            if (va
eb80: 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  lue == null)..  
eb90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
eba0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
ebb0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
ebc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ebd0: 20 20 20 20 20 65 72 72 6f 72 20 3d 20 54 72 61       error = Tra
ebe0: 63 65 4f 70 73 2e 54 72 61 63 65 28 0d 0a 20 20  ceOps.Trace(..  
ebf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ec00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ec10: 20 20 20 20 20 20 54 72 61 63 65 50 72 69 6f 72        TracePrior
ec20: 69 74 79 2e 4c 6f 77 65 73 74 2c 0d 0a 20 20 20  ity.Lowest,..   
ec30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ec40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ec50: 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61       traceCallba
ec60: 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ck, String.Forma
ec70: 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
ec80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ec90: 20 20 20 20 20 20 20 20 20 20 20 20 22 49 6e 76              "Inv
eca0: 61 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e  alid {0} boolean
ecb0: 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20   value: {1}",.. 
ecc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ecd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ece0: 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61         ForDispla
ecf0: 79 28 61 72 67 29 2c 20 46 6f 72 44 69 73 70 6c  y(arg), ForDispl
ed00: 61 79 28 74 65 78 74 29 29 2c 0d 0a 20 20 20 20  ay(text)),..    
ed10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ed20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ed30: 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72      traceCategor
ed40: 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
ed50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ed60: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 73             if (s
ed70: 74 72 69 63 74 29 0d 0a 20 20 20 20 20 20 20 20  trict)..        
ed80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ed90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
eda0: 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d  return false;...
edb0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
edc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
edd0: 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a       continue;..
ede0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
edf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ee00: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
ee10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ee20: 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69       configurati
ee30: 6f 6e 2e 77 68 61 74 49 66 20 3d 20 28 62 6f 6f  on.whatIf = (boo
ee40: 6c 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20  l)value;..      
ee50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ee60: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
ee70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ee80: 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61       else if (Ma
ee90: 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67  tchOption(newArg
eea0: 2c 20 22 76 65 72 62 6f 73 65 22 29 29 0d 0a 20  , "verbose")).. 
eeb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
eec0: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
eed0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
eee0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f                bo
eef0: 6f 6c 3f 20 76 61 6c 75 65 20 3d 20 50 61 72 73  ol? value = Pars
ef00: 65 42 6f 6f 6c 65 61 6e 28 74 65 78 74 29 3b 0d  eBoolean(text);.
ef10: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
ef20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ef30: 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d 3d 20     if (value == 
ef40: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
ef50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ef60: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
ef70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ef80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72                er
ef90: 72 6f 72 20 3d 20 54 72 61 63 65 4f 70 73 2e 54  ror = TraceOps.T
efa0: 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20  race(..         
efb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
efc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
efd0: 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77  racePriority.Low
efe0: 65 73 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  est,..          
eff0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f000: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
f010: 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72  aceCallback, Str
f020: 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
f030: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f040: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f050: 20 20 20 20 20 22 49 6e 76 61 6c 69 64 20 7b 30       "Invalid {0
f060: 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 3a  } boolean value:
f070: 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20   {1}",..        
f080: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f090: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f0a0: 46 6f 72 44 69 73 70 6c 61 79 28 61 72 67 29 2c  ForDisplay(arg),
f0b0: 20 46 6f 72 44 69 73 70 6c 61 79 28 74 65 78 74   ForDisplay(text
f0c0: 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  )),..           
f0d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f0e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
f0f0: 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
f100: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f110: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f120: 20 20 20 20 69 66 20 28 73 74 72 69 63 74 29 0d      if (strict).
f130: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
f140: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f150: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
f160: 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  false;....      
f170: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f180: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
f190: 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20  ntinue;..       
f1a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f1b0: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
f1c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f1d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
f1e0: 6e 66 69 67 75 72 61 74 69 6f 6e 2e 76 65 72 62  nfiguration.verb
f1f0: 6f 73 65 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75  ose = (bool)valu
f200: 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
f210: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f220: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
f230: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
f240: 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74  lse if (MatchOpt
f250: 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 63 6f 6e  ion(newArg, "con
f260: 66 69 72 6d 22 29 29 0d 0a 20 20 20 20 20 20 20  firm"))..       
f270: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f280: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
f290: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f2a0: 20 20 20 20 20 20 20 20 62 6f 6f 6c 3f 20 76 61          bool? va
f2b0: 6c 75 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c 65  lue = ParseBoole
f2c0: 61 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20 20  an(text);....   
f2d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f2e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
f2f0: 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d  (value == null).
f300: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
f310: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f320: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
f330: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f340: 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
f350: 54 72 61 63 65 4f 70 73 2e 54 72 61 63 65 28 0d  TraceOps.Trace(.
f360: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
f370: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f380: 20 20 20 20 20 20 20 20 20 54 72 61 63 65 50 72           TracePr
f390: 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c 0d 0a  iority.Lowest,..
f3a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f3b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f3c0: 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c          traceCal
f3d0: 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f  lback, String.Fo
f3e0: 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
f3f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f400: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
f410: 49 6e 76 61 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c  Invalid {0} bool
f420: 65 61 6e 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c  ean value: {1}",
f430: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
f440: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f450: 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73            ForDis
f460: 70 6c 61 79 28 61 72 67 29 2c 20 46 6f 72 44 69  play(arg), ForDi
f470: 73 70 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a 20  splay(text)),.. 
f480: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f490: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f4a0: 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65         traceCate
f4b0: 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
f4c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f4d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
f4e0: 20 28 73 74 72 69 63 74 29 0d 0a 20 20 20 20 20   (strict)..     
f4f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f500: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f510: 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
f520: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
f530: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f540: 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65          continue
f550: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
f560: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f570: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
f580: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f590: 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72          configur
f5a0: 61 74 69 6f 6e 2e 63 6f 6e 66 69 72 6d 20 3d 20  ation.confirm = 
f5b0: 28 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20 20  (bool)value;..  
f5c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f5d0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
f5e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f5f0: 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66           else if
f600: 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65   (MatchOption(ne
f610: 77 41 72 67 2c 20 22 6e 6f 44 65 73 6b 74 6f 70  wArg, "noDesktop
f620: 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  "))..           
f630: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f640: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
f650: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f660: 20 20 20 20 62 6f 6f 6c 3f 20 76 61 6c 75 65 20      bool? value 
f670: 3d 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74  = ParseBoolean(t
f680: 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ext);....       
f690: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f6a0: 20 20 20 20 20 20 20 20 20 69 66 20 28 76 61 6c           if (val
f6b0: 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ue == null)..   
f6c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f6d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
f6e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f6f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f700: 20 20 20 20 65 72 72 6f 72 20 3d 20 54 72 61 63      error = Trac
f710: 65 4f 70 73 2e 54 72 61 63 65 28 0d 0a 20 20 20  eOps.Trace(..   
f720: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f730: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f740: 20 20 20 20 20 54 72 61 63 65 50 72 69 6f 72 69       TracePriori
f750: 74 79 2e 4c 6f 77 65 73 74 2c 0d 0a 20 20 20 20  ty.Lowest,..    
f760: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f770: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f780: 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63      traceCallbac
f790: 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  k, String.Format
f7a0: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
f7b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f7c0: 20 20 20 20 20 20 20 20 20 20 20 22 49 6e 76 61             "Inva
f7d0: 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20  lid {0} boolean 
f7e0: 76 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20  value: {1}",..  
f7f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f800: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f810: 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79        ForDisplay
f820: 28 61 72 67 29 2c 20 46 6f 72 44 69 73 70 6c 61  (arg), ForDispla
f830: 79 28 74 65 78 74 29 29 2c 0d 0a 20 20 20 20 20  y(text)),..     
f840: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f850: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f860: 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
f870: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
f880: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f890: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 73 74            if (st
f8a0: 72 69 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20  rict)..         
f8b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f8c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
f8d0: 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a  eturn false;....
f8e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f8f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f900: 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20      continue;.. 
f910: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f920: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
f930: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
f940: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f950: 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f      configuratio
f960: 6e 2e 6e 6f 44 65 73 6b 74 6f 70 20 3d 20 28 62  n.noDesktop = (b
f970: 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20  ool)value;..    
f980: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f990: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
f9a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f9b0: 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28         else if (
f9c0: 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41  MatchOption(newA
f9d0: 72 67 2c 20 22 6e 6f 43 6f 6d 70 61 63 74 22 29  rg, "noCompact")
f9e0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
f9f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
fa00: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
fa10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fa20: 20 20 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d 20    bool? value = 
fa30: 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65 78  ParseBoolean(tex
fa40: 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  t);....         
fa50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fa60: 20 20 20 20 20 20 20 69 66 20 28 76 61 6c 75 65         if (value
fa70: 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
fa80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fa90: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
faa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fab0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fac0: 20 20 65 72 72 6f 72 20 3d 20 54 72 61 63 65 4f    error = TraceO
fad0: 70 73 2e 54 72 61 63 65 28 0d 0a 20 20 20 20 20  ps.Trace(..     
fae0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
faf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fb00: 20 20 20 54 72 61 63 65 50 72 69 6f 72 69 74 79     TracePriority
fb10: 2e 4c 6f 77 65 73 74 2c 0d 0a 20 20 20 20 20 20  .Lowest,..      
fb20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fb30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fb40: 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c    traceCallback,
fb50: 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d   String.Format(.
fb60: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
fb70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fb80: 20 20 20 20 20 20 20 20 20 22 49 6e 76 61 6c 69           "Invali
fb90: 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61  d {0} boolean va
fba0: 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20  lue: {1}",..    
fbb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fbc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fbd0: 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 61      ForDisplay(a
fbe0: 72 67 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28  rg), ForDisplay(
fbf0: 74 65 78 74 29 29 2c 0d 0a 20 20 20 20 20 20 20  text)),..       
fc00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fc10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fc20: 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
fc30: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
fc40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fc50: 20 20 20 20 20 20 20 20 69 66 20 28 73 74 72 69          if (stri
fc60: 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ct)..           
fc70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fc80: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
fc90: 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20  urn false;....  
fca0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fcb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fcc0: 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20    continue;..   
fcd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fce0: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
fcf0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
fd00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fd10: 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e    configuration.
fd20: 6e 6f 43 6f 6d 70 61 63 74 20 3d 20 28 62 6f 6f  noCompact = (boo
fd30: 6c 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20  l)value;..      
fd40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fd50: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
fd60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fd70: 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61       else if (Ma
fd80: 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67  tchOption(newArg
fd90: 2c 20 22 6e 6f 4e 65 74 46 78 32 30 22 29 29 0d  , "noNetFx20")).
fda0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
fdb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
fdc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fdd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fde0: 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d 20 50 61  bool? value = Pa
fdf0: 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65 78 74 29  rseBoolean(text)
fe00: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
fe10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fe20: 20 20 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d       if (value =
fe30: 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
fe40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fe50: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
fe60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fe70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fe80: 65 72 72 6f 72 20 3d 20 54 72 61 63 65 4f 70 73  error = TraceOps
fe90: 2e 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20  .Trace(..       
fea0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
feb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fec0: 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c   TracePriority.L
fed0: 6f 77 65 73 74 2c 0d 0a 20 20 20 20 20 20 20 20  owest,..        
fee0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fef0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ff00: 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53  traceCallback, S
ff10: 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
ff20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ff30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ff40: 20 20 20 20 20 20 20 22 49 6e 76 61 6c 69 64 20         "Invalid 
ff50: 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75  {0} boolean valu
ff60: 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20  e: {1}",..      
ff70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ff80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ff90: 20 20 46 6f 72 44 69 73 70 6c 61 79 28 61 72 67    ForDisplay(arg
ffa0: 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 74 65  ), ForDisplay(te
ffb0: 78 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  xt)),..         
ffc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ffd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
ffe0: 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
fff0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
10000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10010 20 20 20 20 20 20 69 66 20 28 73 74 72 69 63 74        if (strict
10020 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
10030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10040 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
10050 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20  n false;....    
10060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10080 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20  continue;..     
10090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
100a0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
100b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
100c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
100d0 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f  configuration.no
100e0 4e 65 74 46 78 32 30 20 3d 20 28 62 6f 6f 6c 29  NetFx20 = (bool)
100f0 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20  value;..        
10100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10110 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
10120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10130 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63     else if (Matc
10140 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20  hOption(newArg, 
10150 22 6e 6f 4e 65 74 46 78 34 30 22 29 29 0d 0a 20  "noNetFx40")).. 
10160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10170 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
10180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f                bo
101a0 6f 6c 3f 20 76 61 6c 75 65 20 3d 20 50 61 72 73  ol? value = Pars
101b0 65 42 6f 6f 6c 65 61 6e 28 74 65 78 74 29 3b 0d  eBoolean(text);.
101c0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
101d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
101e0 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d 3d 20     if (value == 
101f0 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
10200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10210 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
10220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72                er
10240 72 6f 72 20 3d 20 54 72 61 63 65 4f 70 73 2e 54  ror = TraceOps.T
10250 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20  race(..         
10260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
10280 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77  racePriority.Low
10290 65 73 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  est,..          
102a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
102b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
102c0 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72  aceCallback, Str
102d0 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
102e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
102f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10300 20 20 20 20 20 22 49 6e 76 61 6c 69 64 20 7b 30       "Invalid {0
10310 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 3a  } boolean value:
10320 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20   {1}",..        
10330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10350 46 6f 72 44 69 73 70 6c 61 79 28 61 72 67 29 2c  ForDisplay(arg),
10360 20 46 6f 72 44 69 73 70 6c 61 79 28 74 65 78 74   ForDisplay(text
10370 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  )),..           
10380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10390 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
103a0 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
103b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
103c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
103d0 20 20 20 20 69 66 20 28 73 74 72 69 63 74 29 0d      if (strict).
103e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
103f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10400 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
10410 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  false;....      
10420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
10440 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20  ntinue;..       
10450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10460 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
10470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
10490 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 4e 65  nfiguration.noNe
104a0 74 46 78 34 30 20 3d 20 28 62 6f 6f 6c 29 76 61  tFx40 = (bool)va
104b0 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lue;..          
104c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
104d0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
104e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
104f0 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f   else if (MatchO
10500 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 6e  ption(newArg, "n
10510 6f 56 73 32 30 30 38 22 29 29 0d 0a 20 20 20 20  oVs2008"))..    
10520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10530 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
10540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10550 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 3f             bool?
10560 20 76 61 6c 75 65 20 3d 20 50 61 72 73 65 42 6f   value = ParseBo
10570 6f 6c 65 61 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a  olean(text);....
10580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
105a0 69 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c  if (value == nul
105b0 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
105c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
105d0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
105e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
105f0 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72             error
10600 20 3d 20 54 72 61 63 65 4f 70 73 2e 54 72 61 63   = TraceOps.Trac
10610 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
10620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10630 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
10640 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74  ePriority.Lowest
10650 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
10660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10670 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
10680 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67  Callback, String
10690 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  .Format(..      
106a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
106b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
106c0 20 20 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20 62    "Invalid {0} b
106d0 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 3a 20 7b 31  oolean value: {1
106e0 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }",..           
106f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10700 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72               For
10710 44 69 73 70 6c 61 79 28 61 72 67 29 2c 20 46 6f  Display(arg), Fo
10720 72 44 69 73 70 6c 61 79 28 74 65 78 74 29 29 2c  rDisplay(text)),
10730 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
10740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10750 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
10760 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20  ategory);....   
10770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10790 20 69 66 20 28 73 74 72 69 63 74 29 0d 0a 20 20   if (strict)..  
107a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
107b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
107c0 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
107d0 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  se;....         
107e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
107f0 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69             conti
10800 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  nue;..          
10810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10820 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
10830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10840 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69             confi
10850 67 75 72 61 74 69 6f 6e 2e 6e 6f 56 73 32 30 30  guration.noVs200
10860 38 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 65 3b  8 = (bool)value;
10870 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
10880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
10890 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
108a0 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73               els
108b0 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f  e if (MatchOptio
108c0 6e 28 6e 65 77 41 72 67 2c 20 22 6e 6f 56 73 32  n(newArg, "noVs2
108d0 30 31 30 22 29 29 0d 0a 20 20 20 20 20 20 20 20  010"))..        
108e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
108f0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
10900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10910 20 20 20 20 20 20 20 62 6f 6f 6c 3f 20 76 61 6c         bool? val
10920 75 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c 65 61  ue = ParseBoolea
10930 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20  n(text);....    
10940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10950 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
10960 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  value == null)..
10970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10990 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
109a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
109b0 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 54         error = T
109c0 72 61 63 65 4f 70 73 2e 54 72 61 63 65 28 0d 0a  raceOps.Trace(..
109d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
109e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
109f0 20 20 20 20 20 20 20 20 54 72 61 63 65 50 72 69          TracePri
10a00 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c 0d 0a 20  ority.Lowest,.. 
10a10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10a20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10a30 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c         traceCall
10a40 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72  back, String.For
10a50 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
10a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10a70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 49                "I
10a80 6e 76 61 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c 65  nvalid {0} boole
10a90 61 6e 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d  an value: {1}",.
10aa0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
10ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10ac0 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70           ForDisp
10ad0 6c 61 79 28 61 72 67 29 2c 20 46 6f 72 44 69 73  lay(arg), ForDis
10ae0 70 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a 20 20  play(text)),..  
10af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10b00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10b10 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67        traceCateg
10b20 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
10b30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10b40 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
10b50 28 73 74 72 69 63 74 29 0d 0a 20 20 20 20 20 20  (strict)..      
10b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10b70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10b80 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
10b90 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
10ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10bb0 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b         continue;
10bc0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
10bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10be0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
10bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10c00 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61         configura
10c10 74 69 6f 6e 2e 6e 6f 56 73 32 30 31 30 20 3d 20  tion.noVs2010 = 
10c20 28 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20 20  (bool)value;..  
10c30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10c40 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
10c50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10c60 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66           else if
10c70 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65   (MatchOption(ne
10c80 77 41 72 67 2c 20 22 6e 6f 54 72 61 63 65 22 29  wArg, "noTrace")
10c90 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
10ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
10cb0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
10cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10cd0 20 20 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d 20    bool? value = 
10ce0 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65 78  ParseBoolean(tex
10cf0 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  t);....         
10d00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10d10 20 20 20 20 20 20 20 69 66 20 28 76 61 6c 75 65         if (value
10d20 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
10d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10d40 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
10d50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10d60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10d70 20 20 65 72 72 6f 72 20 3d 20 54 72 61 63 65 4f    error = TraceO
10d80 70 73 2e 54 72 61 63 65 28 0d 0a 20 20 20 20 20  ps.Trace(..     
10d90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10da0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10db0 20 20 20 54 72 61 63 65 50 72 69 6f 72 69 74 79     TracePriority
10dc0 2e 4c 6f 77 65 73 74 2c 0d 0a 20 20 20 20 20 20  .Lowest,..      
10dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10de0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10df0 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c    traceCallback,
10e00 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d   String.Format(.
10e10 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
10e20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10e30 20 20 20 20 20 20 20 20 20 22 49 6e 76 61 6c 69           "Invali
10e40 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61  d {0} boolean va
10e50 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20  lue: {1}",..    
10e60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10e70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10e80 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 61      ForDisplay(a
10e90 72 67 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28  rg), ForDisplay(
10ea0 74 65 78 74 29 29 2c 0d 0a 20 20 20 20 20 20 20  text)),..       
10eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10ed0 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
10ee0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
10ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10f00 20 20 20 20 20 20 20 20 69 66 20 28 73 74 72 69          if (stri
10f10 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ct)..           
10f20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10f30 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
10f40 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20  urn false;....  
10f50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10f70 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20    continue;..   
10f80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10f90 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
10fa0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
10fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10fc0 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e    configuration.
10fd0 6e 6f 54 72 61 63 65 20 3d 20 28 62 6f 6f 6c 29  noTrace = (bool)
10fe0 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20  value;..        
10ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11000 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
11010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11020 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63     else if (Matc
11030 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20  hOption(newArg, 
11040 22 6e 6f 43 6f 6e 73 6f 6c 65 22 29 29 0d 0a 20  "noConsole")).. 
11050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11060 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
11070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f                bo
11090 6f 6c 3f 20 76 61 6c 75 65 20 3d 20 50 61 72 73  ol? value = Pars
110a0 65 42 6f 6f 6c 65 61 6e 28 74 65 78 74 29 3b 0d  eBoolean(text);.
110b0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
110c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
110d0 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d 3d 20     if (value == 
110e0 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
110f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11100 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
11110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72                er
11130 72 6f 72 20 3d 20 54 72 61 63 65 4f 70 73 2e 54  ror = TraceOps.T
11140 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20  race(..         
11150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
11170 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77  racePriority.Low
11180 65 73 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  est,..          
11190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
111a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
111b0 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72  aceCallback, Str
111c0 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
111d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
111e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
111f0 20 20 20 20 20 22 49 6e 76 61 6c 69 64 20 7b 30       "Invalid {0
11200 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 3a  } boolean value:
11210 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20   {1}",..        
11220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11240 46 6f 72 44 69 73 70 6c 61 79 28 61 72 67 29 2c  ForDisplay(arg),
11250 20 46 6f 72 44 69 73 70 6c 61 79 28 74 65 78 74   ForDisplay(text
11260 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  )),..           
11270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11280 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
11290 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
112a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
112b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
112c0 20 20 20 20 69 66 20 28 73 74 72 69 63 74 29 0d      if (strict).
112d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
112e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
112f0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
11300 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  false;....      
11310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
11330 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20  ntinue;..       
11340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11350 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
11360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
11380 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 43 6f  nfiguration.noCo
11390 6e 73 6f 6c 65 20 3d 20 28 62 6f 6f 6c 29 76 61  nsole = (bool)va
113a0 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lue;..          
113b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
113c0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
113d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
113e0 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f   else if (MatchO
113f0 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 6e  ption(newArg, "n
11400 6f 4c 6f 67 22 29 29 0d 0a 20 20 20 20 20 20 20  oLog"))..       
11410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11420 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
11430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11440 20 20 20 20 20 20 20 20 62 6f 6f 6c 3f 20 76 61          bool? va
11450 6c 75 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c 65  lue = ParseBoole
11460 61 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20 20  an(text);....   
11470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11480 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
11490 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d  (value == null).
114a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
114b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
114c0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
114d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
114e0 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
114f0 54 72 61 63 65 4f 70 73 2e 54 72 61 63 65 28 0d  TraceOps.Trace(.
11500 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
11510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11520 20 20 20 20 20 20 20 20 20 54 72 61 63 65 50 72           TracePr
11530 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c 0d 0a  iority.Lowest,..
11540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11560 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c          traceCal
11570 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f  lback, String.Fo
11580 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
11590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
115a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
115b0 49 6e 76 61 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c  Invalid {0} bool
115c0 65 61 6e 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c  ean value: {1}",
115d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
115e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
115f0 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73            ForDis
11600 70 6c 61 79 28 61 72 67 29 2c 20 46 6f 72 44 69  play(arg), ForDi
11610 73 70 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a 20  splay(text)),.. 
11620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11640 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65         traceCate
11650 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
11660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
11680 20 28 73 74 72 69 63 74 29 0d 0a 20 20 20 20 20   (strict)..     
11690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
116a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
116b0 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
116c0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
116d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
116e0 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65          continue
116f0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
11700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11710 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
11720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11730 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72          configur
11740 61 74 69 6f 6e 2e 6e 6f 4c 6f 67 20 3d 20 28 62  ation.noLog = (b
11750 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20  ool)value;..    
11760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11770 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
11780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11790 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20         else..   
117a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
117b0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
117c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
117d0 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
117e0 72 20 3d 20 54 72 61 63 65 4f 70 73 2e 54 72 61  r = TraceOps.Tra
117f0 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ce(..           
11800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11810 20 20 20 20 20 20 20 20 20 54 72 61 63 65 50 72           TracePr
11820 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c 0d 0a  iority.Lowest,..
11830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11850 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63      traceCallbac
11860 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  k, String.Format
11870 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
11880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11890 20 20 20 20 20 20 20 22 55 6e 73 75 70 70 6f 72         "Unsuppor
118a0 74 65 64 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65  ted command line
118b0 20 6f 70 74 69 6f 6e 3a 20 7b 30 7d 22 2c 0d 0a   option: {0}",..
118c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
118d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
118e0 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 61      ForDisplay(a
118f0 72 67 29 29 2c 20 74 72 61 63 65 43 61 74 65 67  rg)), traceCateg
11900 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
11910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11920 20 20 20 20 20 20 20 20 20 69 66 20 28 73 74 72           if (str
11930 69 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ict)..          
11940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11950 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
11960 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20   false;..       
11970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11980 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
11990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
119a0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
119b0 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d             else.
119c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
119d0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
119e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
119f0 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
11a00 54 72 61 63 65 4f 70 73 2e 54 72 61 63 65 28 0d  TraceOps.Trace(.
11a10 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
11a20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11a30 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c   TracePriority.L
11a40 6f 77 65 73 74 2c 0d 0a 20 20 20 20 20 20 20 20  owest,..        
11a50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11a60 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c          traceCal
11a70 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f  lback, String.Fo
11a80 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
11a90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11aa0 20 20 20 20 20 20 20 22 55 6e 73 75 70 70 6f 72         "Unsuppor
11ab0 74 65 64 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65  ted command line
11ac0 20 61 72 67 75 6d 65 6e 74 3a 20 7b 30 7d 22 2c   argument: {0}",
11ad0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
11ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11af0 20 20 46 6f 72 44 69 73 70 6c 61 79 28 61 72 67    ForDisplay(arg
11b00 29 29 2c 20 74 72 61 63 65 43 61 74 65 67 6f 72  )), traceCategor
11b10 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
11b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11b30 20 20 20 69 66 20 28 73 74 72 69 63 74 29 0d 0a     if (strict)..
11b40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11b50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11b60 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20  return false;.. 
11b70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11b80 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
11b90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
11ba0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
11bb0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72         return tr
11bc0 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
11bd0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
11be0 20 20 20 20 20 20 20 20 63 61 74 63 68 20 28 45          catch (E
11bf0 78 63 65 70 74 69 6f 6e 20 65 29 0d 0a 20 20 20  xception e)..   
11c00 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
11c10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11c20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 54 72 61      TraceOps.Tra
11c30 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ce(..           
11c40 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61               Tra
11c50 63 65 50 72 69 6f 72 69 74 79 2e 48 69 67 68 65  cePriority.Highe
11c60 73 74 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63  st, traceCallbac
11c70 6b 2c 20 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  k, e,..         
11c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
11c90 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
11ca0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
11cb0 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 46        error = "F
11cc0 61 69 6c 65 64 20 74 6f 20 6d 6f 64 69 66 79 20  ailed to modify 
11cd0 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 22 3b  configuration.";
11ce0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
11cf0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
11d00 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
11d10 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lse;..          
11d20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
11d30 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
11d40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11d50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11d60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11d70 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
11d80 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61        public sta
11d90 74 69 63 20 62 6f 6f 6c 20 50 72 6f 63 65 73 73  tic bool Process
11da0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
11db0 20 20 20 73 74 72 69 6e 67 5b 5d 20 61 72 67 73     string[] args
11dc0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
11dd0 20 20 20 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e     Configuration
11de0 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2c 0d   configuration,.
11df0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
11e00 20 62 6f 6f 6c 20 73 74 72 69 63 74 2c 0d 0a 20   bool strict,.. 
11e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
11e20 65 66 20 73 74 72 69 6e 67 20 65 72 72 6f 72 0d  ef string error.
11e30 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
11e40 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   )..            
11e50 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
11e60 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20     try..        
11e70 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
11e80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
11e90 66 20 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  f (configuration
11ea0 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
11eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
11ec0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
11ed0 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20            error 
11ee0 3d 20 22 49 6e 76 61 6c 69 64 20 63 6f 6e 66 69  = "Invalid confi
11ef0 67 75 72 61 74 69 6f 6e 2e 22 3b 0d 0a 20 20 20  guration.";..   
11f00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11f10 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
11f20 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
11f30 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
11f40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11f50 20 41 73 73 65 6d 62 6c 79 20 61 73 73 65 6d 62   Assembly assemb
11f60 6c 79 20 3d 20 63 6f 6e 66 69 67 75 72 61 74 69  ly = configurati
11f70 6f 6e 2e 61 73 73 65 6d 62 6c 79 3b 0d 0a 0d 0a  on.assembly;....
11f80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11f90 20 20 20 20 69 66 20 28 61 73 73 65 6d 62 6c 79      if (assembly
11fa0 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
11fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
11fc0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
11fd0 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20            error 
11fe0 3d 20 22 49 6e 76 61 6c 69 64 20 61 73 73 65 6d  = "Invalid assem
11ff0 62 6c 79 2e 22 3b 0d 0a 20 20 20 20 20 20 20 20  bly.";..        
12000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12010 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20  return false;.. 
12020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12030 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
12040 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
12050 21 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e  !configuration.n
12060 6f 54 72 61 63 65 29 0d 0a 20 20 20 20 20 20 20  oTrace)..       
12070 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
12080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12090 20 20 20 20 20 20 20 20 69 66 20 28 21 63 6f 6e          if (!con
120a0 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 4c 6f 67  figuration.noLog
120b0 20 26 26 0d 0a 20 20 20 20 20 20 20 20 20 20 20   &&..           
120c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
120d0 20 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72   String.IsNullOr
120e0 45 6d 70 74 79 28 63 6f 6e 66 69 67 75 72 61 74  Empty(configurat
120f0 69 6f 6e 2e 6c 6f 67 46 69 6c 65 4e 61 6d 65 29  ion.logFileName)
12100 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
12110 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
12120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12130 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67            config
12140 75 72 61 74 69 6f 6e 2e 6c 6f 67 46 69 6c 65 4e  uration.logFileN
12150 61 6d 65 20 3d 20 47 65 74 4c 6f 67 46 69 6c 65  ame = GetLogFile
12160 4e 61 6d 65 28 29 3b 0d 0a 20 20 20 20 20 20 20  Name();..       
12170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12180 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
12190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
121a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
121b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
121c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
121d0 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
121e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
121f0 20 69 66 20 28 21 63 6f 6e 66 69 67 75 72 61 74   if (!configurat
12200 69 6f 6e 2e 6e 6f 43 6f 6e 73 6f 6c 65 29 0d 0a  ion.noConsole)..
12210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12220 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
12230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12240 20 20 20 20 20 20 20 54 72 61 63 65 2e 4c 69 73         Trace.Lis
12250 74 65 6e 65 72 73 2e 41 64 64 28 6e 65 77 20 43  teners.Add(new C
12260 6f 6e 73 6f 6c 65 54 72 61 63 65 4c 69 73 74 65  onsoleTraceListe
12270 6e 65 72 28 29 29 3b 0d 0a 20 20 20 20 20 20 20  ner());..       
12280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12290 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
122a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
122b0 20 28 21 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e   (!configuration
122c0 2e 6e 6f 4c 6f 67 20 26 26 0d 0a 20 20 20 20 20  .noLog &&..     
122d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
122e0 20 20 20 20 20 20 20 21 53 74 72 69 6e 67 2e 49         !String.I
122f0 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 63 6f 6e  sNullOrEmpty(con
12300 66 69 67 75 72 61 74 69 6f 6e 2e 6c 6f 67 46 69  figuration.logFi
12310 6c 65 4e 61 6d 65 29 29 0d 0a 20 20 20 20 20 20  leName))..      
12320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12330 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
12340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12350 20 54 72 61 63 65 2e 4c 69 73 74 65 6e 65 72 73   Trace.Listeners
12360 2e 41 64 64 28 6e 65 77 20 54 65 78 74 57 72 69  .Add(new TextWri
12370 74 65 72 54 72 61 63 65 4c 69 73 74 65 6e 65 72  terTraceListener
12380 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
12390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
123a0 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e     configuration
123b0 2e 6c 6f 67 46 69 6c 65 4e 61 6d 65 29 29 3b 0d  .logFileName));.
123c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
123d0 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
123e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
123f0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
12400 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
12410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12420 20 2f 2f 20 4e 4f 54 45 3a 20 44 75 6d 70 20 74   // NOTE: Dump t
12430 68 65 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  he configuration
12440 20 6e 6f 77 20 69 6e 20 63 61 73 65 20 77 65 20   now in case we 
12450 6e 65 65 64 20 74 6f 0d 0a 20 20 20 20 20 20 20  need to..       
12460 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
12470 20 20 20 20 20 20 74 72 6f 75 62 6c 65 73 68 6f        troublesho
12480 6f 74 20 61 6e 79 20 69 73 73 75 65 73 2e 0d 0a  ot any issues...
12490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
124a0 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
124b0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
124c0 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 74 72  configuration.tr
124d0 61 63 65 50 72 69 6f 72 69 74 79 20 3c 3d 20 54  acePriority <= T
124e0 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4d 65 64  racePriority.Med
124f0 69 75 6d 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ium)..          
12500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
12510 6e 66 69 67 75 72 61 74 69 6f 6e 2e 44 75 6d 70  nfiguration.Dump
12520 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ();....         
12530 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
12540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12550 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 53 68 6f 77     // NOTE: Show
12560 20 77 68 65 72 65 20 77 65 20 61 72 65 20 72 75   where we are ru
12570 6e 6e 69 6e 67 20 66 72 6f 6d 20 61 6e 64 20 68  nning from and h
12580 6f 77 20 77 65 20 77 65 72 65 0d 0a 20 20 20 20  ow we were..    
12590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
125a0 2f 2f 20 20 20 20 20 20 20 69 6e 76 6f 6b 65 64  //       invoked
125b0 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
125c0 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
125d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
125e0 74 72 69 6e 67 20 6c 6f 63 61 74 69 6f 6e 20 3d  tring location =
125f0 20 61 73 73 65 6d 62 6c 79 2e 4c 6f 63 61 74 69   assembly.Locati
12600 6f 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  on;....         
12610 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
12620 4f 70 73 2e 54 72 61 63 65 28 0d 0a 20 20 20 20  Ops.Trace(..    
12630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12640 20 20 20 20 54 72 61 63 65 50 72 69 6f 72 69 74      TracePriorit
12650 79 2e 4d 65 64 69 75 6d 2c 20 74 72 61 63 65 43  y.Medium, traceC
12660 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e  allback, String.
12670 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
12680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12690 20 22 52 75 6e 6e 69 6e 67 20 65 78 65 63 75 74   "Running execut
126a0 61 62 6c 65 20 69 73 3a 20 7b 30 7d 22 2c 20 46  able is: {0}", F
126b0 6f 72 44 69 73 70 6c 61 79 28 6c 6f 63 61 74 69  orDisplay(locati
126c0 6f 6e 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  on)),..         
126d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
126e0 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
126f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
12700 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 54        TraceOps.T
12710 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20  race(..         
12720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
12730 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4d 65 64  racePriority.Med
12740 69 75 6d 2c 20 74 72 61 63 65 43 61 6c 6c 62 61  ium, traceCallba
12750 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ck, String.Forma
12760 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
12770 20 20 20 20 20 20 20 20 20 20 20 20 22 4f 72 69              "Ori
12780 67 69 6e 61 6c 20 63 6f 6d 6d 61 6e 64 20 6c 69  ginal command li
12790 6e 65 20 69 73 3a 20 7b 30 7d 22 2c 0d 0a 20 20  ne is: {0}",..  
127a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
127b0 20 20 20 20 20 20 45 6e 76 69 72 6f 6e 6d 65 6e        Environmen
127c0 74 2e 43 6f 6d 6d 61 6e 64 4c 69 6e 65 29 2c 20  t.CommandLine), 
127d0 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
127e0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
127f0 20 20 20 20 20 20 20 69 66 20 28 21 63 6f 6e 66         if (!conf
12800 69 67 75 72 61 74 69 6f 6e 2e 77 68 61 74 49 66  iguration.whatIf
12810 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
12820 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
12830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12840 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
12850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
12860 20 4e 4f 54 45 3a 20 49 66 20 74 68 65 20 64 65   NOTE: If the de
12870 62 75 67 67 65 72 20 69 73 20 61 74 74 61 63 68  bugger is attach
12880 65 64 20 61 6e 64 20 57 68 61 74 2d 49 66 20 6d  ed and What-If m
12890 6f 64 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ode..           
128a0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
128b0 20 20 20 20 20 20 69 73 20 5b 6e 6f 77 5d 20 64        is [now] d
128c0 69 73 61 62 6c 65 64 2c 20 69 73 73 75 65 20 61  isabled, issue a
128d0 20 77 61 72 6e 69 6e 67 2e 0d 0a 20 20 20 20 20   warning...     
128e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
128f0 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
12900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
12910 66 20 28 44 65 62 75 67 67 65 72 2e 49 73 41 74  f (Debugger.IsAt
12920 74 61 63 68 65 64 29 0d 0a 20 20 20 20 20 20 20  tached)..       
12930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12940 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 54 72       TraceOps.Tr
12950 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ace(..          
12960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12970 20 20 20 20 20 20 54 72 61 63 65 50 72 69 6f 72        TracePrior
12980 69 74 79 2e 4d 65 64 69 75 6d 2c 20 74 72 61 63  ity.Medium, trac
12990 65 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20  eCallback,..    
129a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
129b0 20 20 20 20 20 20 20 20 20 20 20 20 22 46 6f 72              "For
129c0 63 65 64 20 74 6f 20 64 69 73 61 62 6c 65 20 5c  ced to disable \
129d0 22 77 68 61 74 2d 69 66 5c 22 20 6d 6f 64 65 20  "what-if\" mode 
129e0 77 69 74 68 20 22 20 2b 0d 0a 20 20 20 20 20 20  with " +..      
129f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12a00 20 20 20 20 20 20 20 20 20 20 22 64 65 62 75 67            "debug
12a10 67 65 72 20 61 74 74 61 63 68 65 64 2e 22 2c 20  ger attached.", 
12a20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
12a30 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
12a40 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
12a50 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65              else
12a60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
12a70 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
12a80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12a90 20 54 72 61 63 65 4f 70 73 2e 54 72 61 63 65 28   TraceOps.Trace(
12aa0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
12ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
12ac0 61 63 65 50 72 69 6f 72 69 74 79 2e 48 69 67 68  acePriority.High
12ad0 65 72 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63  er, traceCallbac
12ae0 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  k,..            
12af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12b00 22 4e 6f 20 61 63 74 75 61 6c 20 63 68 61 6e 67  "No actual chang
12b10 65 73 20 77 69 6c 6c 20 62 65 20 6d 61 64 65 20  es will be made 
12b20 74 6f 20 74 68 69 73 20 22 20 2b 0d 0a 20 20 20  to this " +..   
12b30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12b40 20 20 20 20 20 20 20 20 20 22 73 79 73 74 65 6d           "system
12b50 20 62 65 63 61 75 73 65 20 5c 22 77 68 61 74 2d   because \"what-
12b60 69 66 5c 22 20 6d 6f 64 65 20 69 73 20 65 6e 61  if\" mode is ena
12b70 62 6c 65 64 2e 22 2c 0d 0a 20 20 20 20 20 20 20  bled.",..       
12b80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12b90 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f       traceCatego
12ba0 72 79 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ry);..          
12bb0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
12bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12bd0 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
12be0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f             // NO
12bf0 54 45 3a 20 49 66 20 74 68 65 20 63 6f 6d 6d 61  TE: If the comma
12c00 6e 64 20 6c 69 6e 65 20 68 61 73 20 6e 6f 74 20  nd line has not 
12c10 62 65 65 6e 20 6d 61 6e 75 61 6c 6c 79 0d 0a 20  been manually.. 
12c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12c30 20 20 20 2f 2f 20 20 20 20 20 20 20 63 6f 6e 66     //       conf
12c40 69 72 6d 65 64 20 28 69 2e 65 2e 20 76 69 61 20  irmed (i.e. via 
12c50 74 68 65 20 65 78 70 6c 69 63 69 74 20 63 6f 6d  the explicit com
12c60 6d 61 6e 64 20 6c 69 6e 65 0d 0a 20 20 20 20 20  mand line..     
12c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
12c80 2f 20 20 20 20 20 20 20 6f 70 74 69 6f 6e 29 2c  /       option),
12c90 20 74 68 65 6e 20 73 74 6f 70 20 70 72 6f 63 65   then stop proce
12ca0 73 73 69 6e 67 20 6e 6f 77 2e 20 20 57 65 20 65  ssing now.  We e
12cb0 6e 66 6f 72 63 65 0d 0a 20 20 20 20 20 20 20 20  nforce..        
12cc0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
12cd0 20 20 20 20 20 74 68 69 73 20 72 75 6c 65 20 73       this rule s
12ce0 6f 20 74 68 61 74 20 73 69 6d 70 6c 79 20 64 6f  o that simply do
12cf0 75 62 6c 65 2d 63 6c 69 63 6b 69 6e 67 20 74 68  uble-clicking th
12d00 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..             
12d10 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
12d20 65 78 65 63 75 74 61 62 6c 65 20 77 69 6c 6c 20  executable will 
12d30 6e 6f 74 20 72 65 73 75 6c 74 20 69 6e 20 61 6e  not result in an
12d40 79 20 63 68 61 6e 67 65 73 20 62 65 69 6e 67 0d  y changes being.
12d50 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
12d60 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 6d 61       //       ma
12d70 64 65 20 74 6f 20 74 68 65 20 73 79 73 74 65 6d  de to the system
12d80 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
12d90 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
12da0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
12db0 66 20 28 21 63 6f 6e 66 69 67 75 72 61 74 69 6f  f (!configuratio
12dc0 6e 2e 63 6f 6e 66 69 72 6d 29 0d 0a 20 20 20 20  n.confirm)..    
12dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12de0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
12df0 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72             error
12e00 20 3d 20 22 43 61 6e 6e 6f 74 20 63 6f 6e 74 69   = "Cannot conti
12e10 6e 75 65 2c 20 74 68 65 20 5c 22 63 6f 6e 66 69  nue, the \"confi
12e20 72 6d 5c 22 20 6f 70 74 69 6f 6e 20 69 73 20 22  rm\" option is "
12e30 20 2b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   +..            
12e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12e50 22 6e 6f 74 20 65 6e 61 62 6c 65 64 2e 22 3b 0d  "not enabled.";.
12e60 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
12e70 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
12e80 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  n false;..      
12e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
12ea0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
12eb0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72         return tr
12ec0 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
12ed0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
12ee0 20 20 20 20 20 20 20 20 63 61 74 63 68 20 28 45          catch (E
12ef0 78 63 65 70 74 69 6f 6e 20 65 29 0d 0a 20 20 20  xception e)..   
12f00 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
12f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12f20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 54 72 61      TraceOps.Tra
12f30 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ce(..           
12f40 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61               Tra
12f50 63 65 50 72 69 6f 72 69 74 79 2e 48 69 67 68 65  cePriority.Highe
12f60 73 74 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63  st, traceCallbac
12f70 6b 2c 20 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  k, e,..         
12f80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
12f90 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
12fa0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
12fb0 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 46        error = "F
12fc0 61 69 6c 65 64 20 74 6f 20 70 72 6f 63 65 73 73  ailed to process
12fd0 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 22   configuration."
12fe0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
12ff0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
13000 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
13010 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alse;..         
13020 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
13030 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
13040 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13050 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13060 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13070 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
13080 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74         public st
13090 61 74 69 63 20 62 6f 6f 6c 20 43 68 65 63 6b 52  atic bool CheckR
130a0 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 28 0d 0a  untimeVersion(..
130b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
130c0 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 63 6f  Configuration co
130d0 6e 66 69 67 75 72 61 74 69 6f 6e 2c 0d 0a 20 20  nfiguration,..  
130e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f                bo
130f0 6f 6c 20 73 74 72 69 63 74 2c 0d 0a 20 20 20 20  ol strict,..    
13100 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20              ref 
13110 73 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20  string error..  
13120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d                ).
13130 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
13140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13150 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20  try..           
13160 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
13170 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
13180 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 3d 3d  configuration ==
13190 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
131a0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
131b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
131c0 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22         error = "
131d0 49 6e 76 61 6c 69 64 20 63 6f 6e 66 69 67 75 72  Invalid configur
131e0 61 74 69 6f 6e 2e 22 3b 0d 0a 20 20 20 20 20 20  ation.";..      
131f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13200 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
13210 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
13220 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
13230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
13240 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
13250 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 57        // NOTE: W
13260 68 61 74 20 76 65 72 73 69 6f 6e 20 6f 66 20 74  hat version of t
13270 68 65 20 72 75 6e 74 69 6d 65 20 77 61 73 20 74  he runtime was t
13280 68 65 20 63 6f 72 65 20 28 70 72 69 6d 61 72 79  he core (primary
13290 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
132a0 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
132b0 61 73 73 65 6d 62 6c 79 20 63 6f 6d 70 69 6c 65  assembly compile
132c0 64 20 61 67 61 69 6e 73 74 20 28 65 2e 67 2e 20  d against (e.g. 
132d0 22 76 32 2e 30 2e 35 30 37 32 37 22 20 6f 72 0d  "v2.0.50727" or.
132e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
132f0 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 22 76       //       "v
13300 34 2e 30 2e 33 30 33 31 39 22 29 2e 0d 0a 20 20  4.0.30319")...  
13310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13320 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
13330 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
13340 20 63 6f 72 65 49 6d 61 67 65 52 75 6e 74 69 6d   coreImageRuntim
13350 65 56 65 72 73 69 6f 6e 20 3d 20 47 65 74 49 6d  eVersion = GetIm
13360 61 67 65 52 75 6e 74 69 6d 65 56 65 72 73 69 6f  ageRuntimeVersio
13370 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n(..            
13380 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66              conf
13390 69 67 75 72 61 74 69 6f 6e 2e 63 6f 72 65 46 69  iguration.coreFi
133a0 6c 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20  leName);....    
133b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
133c0 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
133d0 20 20 20 20 20 20 20 20 2f 2f 20 54 4f 44 4f 3a          // TODO:
133e0 20 52 65 73 74 72 69 63 74 20 74 68 65 20 63 6f   Restrict the co
133f0 6e 66 69 67 75 72 61 74 69 6f 6e 20 62 61 73 65  nfiguration base
13400 64 20 6f 6e 20 77 68 69 63 68 20 69 6d 61 67 65  d on which image
13410 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
13420 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 72        //       r
13430 75 6e 74 69 6d 65 20 76 65 72 73 69 6f 6e 73 20  untime versions 
13440 28 77 68 69 63 68 20 6d 6f 72 65 2d 6f 72 2d 6c  (which more-or-l
13450 65 73 73 20 63 6f 72 72 65 73 70 6f 6e 64 0d 0a  ess correspond..
13460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13470 20 20 20 20 2f 2f 20 20 20 20 20 20 20 74 6f 20      //       to 
13480 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b 20 76  .NET Framework v
13490 65 72 73 69 6f 6e 73 29 20 61 72 65 20 73 75 70  ersions) are sup
134a0 70 6f 72 74 65 64 20 62 79 20 74 68 65 0d 0a 20  ported by the.. 
134b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
134c0 20 20 20 2f 2f 20 20 20 20 20 20 20 76 65 72 73     //       vers
134d0 69 6f 6e 73 20 6f 66 20 56 69 73 75 61 6c 20 53  ions of Visual S
134e0 74 75 64 69 6f 20 74 68 61 74 20 61 72 65 20 69  tudio that are i
134f0 6e 73 74 61 6c 6c 65 64 2e 0d 0a 20 20 20 20 20  nstalled...     
13500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
13510 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
13520 20 20 20 20 20 20 20 69 66 20 28 53 74 72 69 6e         if (Strin
13530 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28  g.IsNullOrEmpty(
13540 63 6f 72 65 49 6d 61 67 65 52 75 6e 74 69 6d 65  coreImageRuntime
13550 56 65 72 73 69 6f 6e 29 29 0d 0a 20 20 20 20 20  Version))..     
13560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
13570 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
13580 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20            error 
13590 3d 20 22 69 6e 76 61 6c 69 64 20 63 6f 72 65 20  = "invalid core 
135a0 66 69 6c 65 20 69 6d 61 67 65 20 72 75 6e 74 69  file image runti
135b0 6d 65 20 76 65 72 73 69 6f 6e 22 3b 0d 0a 20 20  me version";..  
135c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
135d0 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
135e0 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se;..           
135f0 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
13600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13610 65 6c 73 65 20 69 66 20 28 53 74 72 69 6e 67 2e  else if (String.
13620 45 71 75 61 6c 73 28 0d 0a 20 20 20 20 20 20 20  Equals(..       
13630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13640 20 20 20 20 20 63 6f 72 65 49 6d 61 67 65 52 75       coreImageRu
13650 6e 74 69 6d 65 56 65 72 73 69 6f 6e 2c 20 43 4c  ntimeVersion, CL
13660 52 32 49 6d 61 67 65 52 75 6e 74 69 6d 65 56 65  R2ImageRuntimeVe
13670 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20  rsion,..        
13680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13690 20 20 20 20 53 74 72 69 6e 67 43 6f 6d 70 61 72      StringCompar
136a0 69 73 6f 6e 2e 49 6e 76 61 72 69 61 6e 74 43 75  ison.InvariantCu
136b0 6c 74 75 72 65 29 29 0d 0a 20 20 20 20 20 20 20  lture))..       
136c0 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
136d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
136e0 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
136f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13700 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 46 6f 72      // NOTE: For
13710 20 74 68 65 20 43 4c 52 20 76 32 2e 30 20 72 75   the CLR v2.0 ru
13720 6e 74 69 6d 65 2c 20 6d 61 6b 65 20 73 75 72 65  ntime, make sure
13730 20 77 65 20 64 69 73 61 62 6c 65 0d 0a 20 20 20   we disable..   
13740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13750 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 61 6e       //       an
13760 79 20 61 74 74 65 6d 70 74 20 74 6f 20 75 73 65  y attempt to use
13770 20 69 74 20 66 6f 72 20 74 68 69 6e 67 73 20 74   it for things t
13780 68 61 74 20 72 65 71 75 69 72 65 0d 0a 20 20 20  hat require..   
13790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
137a0 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 61 6e       //       an
137b0 20 61 73 73 65 6d 62 6c 79 20 63 6f 6d 70 69 6c   assembly compil
137c0 65 64 20 66 6f 72 20 74 68 65 20 43 4c 52 20 76  ed for the CLR v
137d0 34 2e 30 2e 20 20 49 74 20 69 73 0d 0a 20 20 20  4.0.  It is..   
137e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
137f0 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 75 6e       //       un
13800 63 65 72 74 61 69 6e 20 69 66 20 74 68 69 73 20  certain if this 
13810 69 73 20 61 63 74 75 61 6c 6c 79 20 61 20 70 72  is actually a pr
13820 6f 62 6c 65 6d 20 69 6e 0d 0a 20 20 20 20 20 20  oblem in..      
13830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13840 20 20 2f 2f 20 20 20 20 20 20 20 70 72 61 63 74    //       pract
13850 69 63 65 20 61 73 20 74 68 65 20 43 4c 52 20 76  ice as the CLR v
13860 34 2e 30 20 63 61 6e 20 6c 6f 61 64 20 61 6e 64  4.0 can load and
13870 20 75 73 65 20 61 6e 0d 0a 20 20 20 20 20 20 20   use an..       
13880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13890 20 2f 2f 20 20 20 20 20 20 20 61 73 73 65 6d 62   //       assemb
138a0 6c 79 20 63 6f 6d 70 69 6c 65 64 20 77 69 74 68  ly compiled with
138b0 20 74 68 65 20 43 4c 52 20 76 32 2e 30 3b 20 68   the CLR v2.0; h
138c0 6f 77 65 76 65 72 2c 0d 0a 20 20 20 20 20 20 20  owever,..       
138d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
138e0 20 2f 2f 20 20 20 20 20 20 20 73 69 6e 63 65 20   //       since 
138f0 74 68 69 73 20 70 72 6f 6a 65 63 74 20 6f 66 66  this project off
13900 65 72 73 20 62 6f 74 68 20 63 6f 6e 66 69 67 75  ers both configu
13910 72 61 74 69 6f 6e 73 2c 0d 0a 20 20 20 20 20 20  rations,..      
13920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13930 20 20 2f 2f 20 20 20 20 20 20 20 77 65 20 63 75    //       we cu
13940 72 72 65 6e 74 6c 79 20 64 69 73 61 6c 6c 6f 77  rrently disallow
13950 20 74 68 69 73 20 6d 69 73 6d 61 74 63 68 2e 0d   this mismatch..
13960 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
13970 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
13980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13990 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69       configurati
139a0 6f 6e 2e 6e 6f 4e 65 74 46 78 34 30 20 3d 20 74  on.noNetFx40 = t
139b0 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  rue;..          
139c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
139d0 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 56 73  nfiguration.noVs
139e0 32 30 31 30 20 3d 20 74 72 75 65 3b 0d 0a 0d 0a  2010 = true;....
139f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13a00 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73          TraceOps
13a10 2e 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20  .Trace(..       
13a20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13a30 20 20 20 20 20 54 72 61 63 65 50 72 69 6f 72 69       TracePriori
13a40 74 79 2e 4d 65 64 69 75 6d 2c 20 74 72 61 63 65  ty.Medium, trace
13a50 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67  Callback, String
13a60 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  .Format(..      
13a70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13a80 20 20 20 20 20 20 22 41 73 73 65 6d 62 6c 79 20        "Assembly 
13a90 69 73 20 63 6f 6d 70 69 6c 65 64 20 66 6f 72 20  is compiled for 
13aa0 74 68 65 20 2e 4e 45 54 20 46 72 61 6d 65 77 6f  the .NET Framewo
13ab0 72 6b 20 7b 30 7d 2c 20 22 20 2b 0d 0a 20 20 20  rk {0}, " +..   
13ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13ad0 20 20 20 20 20 20 20 20 20 22 73 75 70 70 6f 72           "suppor
13ae0 74 20 66 6f 72 20 2e 4e 45 54 20 46 72 61 6d 65  t for .NET Frame
13af0 77 6f 72 6b 20 7b 31 7d 20 69 73 20 6e 6f 77 20  work {1} is now 
13b00 64 69 73 61 62 6c 65 64 2e 22 2c 0d 0a 20 20 20  disabled.",..   
13b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13b20 20 20 20 20 20 20 20 20 20 43 4c 52 32 49 6d 61           CLR2Ima
13b30 67 65 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e  geRuntimeVersion
13b40 2c 20 43 4c 52 34 49 6d 61 67 65 52 75 6e 74 69  , CLR4ImageRunti
13b50 6d 65 56 65 72 73 69 6f 6e 29 2c 0d 0a 20 20 20  meVersion),..   
13b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13b70 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
13b80 74 65 67 6f 72 79 29 3b 0d 0a 20 20 20 20 20 20  tegory);..      
13b90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
13ba0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
13bb0 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 53 74       else if (St
13bc0 72 69 6e 67 2e 45 71 75 61 6c 73 28 0d 0a 20 20  ring.Equals(..  
13bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13be0 20 20 20 20 20 20 20 20 20 20 63 6f 72 65 49 6d            coreIm
13bf0 61 67 65 52 75 6e 74 69 6d 65 56 65 72 73 69 6f  ageRuntimeVersio
13c00 6e 2c 20 43 4c 52 34 49 6d 61 67 65 52 75 6e 74  n, CLR4ImageRunt
13c10 69 6d 65 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20  imeVersion,..   
13c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13c30 20 20 20 20 20 20 20 20 20 53 74 72 69 6e 67 43           StringC
13c40 6f 6d 70 61 72 69 73 6f 6e 2e 49 6e 76 61 72 69  omparison.Invari
13c50 61 6e 74 43 75 6c 74 75 72 65 29 29 0d 0a 20 20  antCulture))..  
13c60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13c70 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
13c80 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
13c90 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
13ca0 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45           // NOTE
13cb0 3a 20 46 6f 72 20 74 68 65 20 43 4c 52 20 76 34  : For the CLR v4
13cc0 2e 30 20 72 75 6e 74 69 6d 65 2c 20 6d 61 6b 65  .0 runtime, make
13cd0 20 73 75 72 65 20 77 65 20 64 69 73 61 62 6c 65   sure we disable
13ce0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
13cf0 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
13d00 20 20 20 61 6e 79 20 61 74 74 65 6d 70 74 20 74     any attempt t
13d10 6f 20 75 73 65 20 69 74 20 66 6f 72 20 74 68 69  o use it for thi
13d20 6e 67 73 20 74 68 61 74 20 72 65 71 75 69 72 65  ngs that require
13d30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
13d40 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
13d50 20 20 20 61 6e 20 61 73 73 65 6d 62 6c 79 20 63     an assembly c
13d60 6f 6d 70 69 6c 65 64 20 66 6f 72 20 74 68 65 20  ompiled for the 
13d70 43 4c 52 20 76 32 2e 30 2e 0d 0a 20 20 20 20 20  CLR v2.0...     
13d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13d90 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
13da0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
13db0 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 4e  onfiguration.noN
13dc0 65 74 46 78 32 30 20 3d 20 74 72 75 65 3b 0d 0a  etFx20 = true;..
13dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13de0 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72          configur
13df0 61 74 69 6f 6e 2e 6e 6f 56 73 32 30 30 38 20 3d  ation.noVs2008 =
13e00 20 74 72 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20   true;....      
13e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13e20 20 20 54 72 61 63 65 4f 70 73 2e 54 72 61 63 65    TraceOps.Trace
13e30 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
13e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
13e50 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4d 65 64  racePriority.Med
13e60 69 75 6d 2c 20 74 72 61 63 65 43 61 6c 6c 62 61  ium, traceCallba
13e70 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ck, String.Forma
13e80 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
13e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13ea0 22 41 73 73 65 6d 62 6c 79 20 69 73 20 63 6f 6d  "Assembly is com
13eb0 70 69 6c 65 64 20 66 6f 72 20 74 68 65 20 2e 4e  piled for the .N
13ec0 45 54 20 46 72 61 6d 65 77 6f 72 6b 20 7b 30 7d  ET Framework {0}
13ed0 2c 20 22 20 2b 0d 0a 20 20 20 20 20 20 20 20 20  , " +..         
13ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13ef0 20 20 20 22 73 75 70 70 6f 72 74 20 66 6f 72 20     "support for 
13f00 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b 20 7b  .NET Framework {
13f10 31 7d 20 69 73 20 6e 6f 77 20 64 69 73 61 62 6c  1} is now disabl
13f20 65 64 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  ed.",..         
13f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13f40 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 43 4c     ForDisplay(CL
13f50 52 34 49 6d 61 67 65 52 75 6e 74 69 6d 65 56 65  R4ImageRuntimeVe
13f60 72 73 69 6f 6e 29 2c 0d 0a 20 20 20 20 20 20 20  rsion),..       
13f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13f80 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28       ForDisplay(
13f90 43 4c 52 32 49 6d 61 67 65 52 75 6e 74 69 6d 65  CLR2ImageRuntime
13fa0 56 65 72 73 69 6f 6e 29 29 2c 0d 0a 20 20 20 20  Version)),..    
13fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13fc0 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74          traceCat
13fd0 65 67 6f 72 79 29 3b 0d 0a 20 20 20 20 20 20 20  egory);..       
13fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
13ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14000 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20      else..      
14010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
14020 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
14030 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
14040 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d   String.Format(.
14050 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
14060 20 20 20 20 20 20 20 20 20 20 20 20 20 22 75 6e               "un
14070 73 75 70 70 6f 72 74 65 64 20 63 6f 72 65 20 66  supported core f
14080 69 6c 65 20 69 6d 61 67 65 20 72 75 6e 74 69 6d  ile image runtim
14090 65 20 76 65 72 73 69 6f 6e 20 22 20 2b 0d 0a 20  e version " +.. 
140a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
140b0 20 20 20 20 20 20 20 20 20 20 20 22 7b 30 7d 2c             "{0},
140c0 20 6d 75 73 74 20 62 65 20 7b 31 7d 20 6f 72 20   must be {1} or 
140d0 7b 32 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  {2}",..         
140e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
140f0 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 63 6f     ForDisplay(co
14100 72 65 49 6d 61 67 65 52 75 6e 74 69 6d 65 56 65  reImageRuntimeVe
14110 72 73 69 6f 6e 29 2c 0d 0a 20 20 20 20 20 20 20  rsion),..       
14120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14130 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28       ForDisplay(
14140 43 4c 52 32 49 6d 61 67 65 52 75 6e 74 69 6d 65  CLR2ImageRuntime
14150 56 65 72 73 69 6f 6e 29 2c 0d 0a 20 20 20 20 20  Version),..     
14160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14170 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61         ForDispla
14180 79 28 43 4c 52 34 49 6d 61 67 65 52 75 6e 74 69  y(CLR4ImageRunti
14190 6d 65 56 65 72 73 69 6f 6e 29 29 3b 0d 0a 0d 0a  meVersion));....
141a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
141b0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
141c0 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alse;..         
141d0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
141e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
141f0 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b      return true;
14200 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
14210 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
14220 20 20 20 20 20 63 61 74 63 68 20 28 45 78 63 65       catch (Exce
14230 70 74 69 6f 6e 20 65 29 0d 0a 20 20 20 20 20 20  ption e)..      
14240 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
14250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14260 20 54 72 61 63 65 4f 70 73 2e 54 72 61 63 65 28   TraceOps.Trace(
14270 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
14280 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 50            TraceP
14290 72 69 6f 72 69 74 79 2e 48 69 67 68 65 73 74 2c  riority.Highest,
142a0 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20   traceCallback, 
142b0 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
142c0 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
142d0 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
142e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
142f0 20 20 20 65 72 72 6f 72 20 3d 20 22 46 61 69 6c     error = "Fail
14300 65 64 20 74 6f 20 63 68 65 63 6b 20 69 6d 61 67  ed to check imag
14310 65 20 72 75 6e 74 69 6d 65 20 76 65 72 73 69 6f  e runtime versio
14320 6e 2e 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  n.";..          
14330 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
14340 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
14350 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  n false;..      
14360 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
14370 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d       #endregion.
14380 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
14390 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
143a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
143b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
143c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
143d0 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
143e0 20 20 23 72 65 67 69 6f 6e 20 50 75 62 6c 69 63    #region Public
143f0 20 4d 65 74 68 6f 64 73 0d 0a 20 20 20 20 20 20   Methods..      
14400 20 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f        public boo
14410 6c 20 48 61 73 46 6c 61 67 73 28 0d 0a 20 20 20  l HasFlags(..   
14420 20 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 73               Ins
14430 74 61 6c 6c 46 6c 61 67 73 20 68 61 73 46 6c 61  tallFlags hasFla
14440 67 73 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  gs,..           
14450 20 20 20 20 20 62 6f 6f 6c 20 61 6c 6c 0d 0a 20       bool all.. 
14460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29                 )
14470 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
14480 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
14490 20 69 66 20 28 61 6c 6c 29 0d 0a 20 20 20 20 20   if (all)..     
144a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
144b0 65 74 75 72 6e 20 28 28 69 6e 73 74 61 6c 6c 46  eturn ((installF
144c0 6c 61 67 73 20 26 20 68 61 73 46 6c 61 67 73 29  lags & hasFlags)
144d0 20 3d 3d 20 68 61 73 46 6c 61 67 73 29 3b 0d 0a   == hasFlags);..
144e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
144f0 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20  else..          
14500 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
14510 20 28 28 69 6e 73 74 61 6c 6c 46 6c 61 67 73 20   ((installFlags 
14520 26 20 68 61 73 46 6c 61 67 73 29 20 21 3d 20 49  & hasFlags) != I
14530 6e 73 74 61 6c 6c 46 6c 61 67 73 2e 4e 6f 6e 65  nstallFlags.None
14540 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
14550 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
14560 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
14570 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14580 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14590 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
145a0 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
145b0 20 20 20 20 70 75 62 6c 69 63 20 76 6f 69 64 20      public void 
145c0 44 75 6d 70 28 29 0d 0a 20 20 20 20 20 20 20 20  Dump()..        
145d0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
145e0 20 20 20 20 20 20 20 69 66 20 28 74 72 61 63 65         if (trace
145f0 43 61 6c 6c 62 61 63 6b 20 21 3d 20 6e 75 6c 6c  Callback != null
14600 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
14610 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
14620 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
14630 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46  allback(String.F
14640 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c  ormat(NameAndVal
14650 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20  ueFormat,..     
14660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14670 20 20 20 22 41 73 73 65 6d 62 6c 79 22 2c 20 46     "Assembly", F
14680 6f 72 44 69 73 70 6c 61 79 28 61 73 73 65 6d 62  orDisplay(assemb
14690 6c 79 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  ly)),..         
146a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
146b0 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
146c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
146d0 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62        traceCallb
146e0 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ack(String.Forma
146f0 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f  t(NameAndValueFo
14700 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20  rmat,..         
14710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
14720 4c 6f 67 46 69 6c 65 4e 61 6d 65 22 2c 20 46 6f  LogFileName", Fo
14730 72 44 69 73 70 6c 61 79 28 6c 6f 67 46 69 6c 65  rDisplay(logFile
14740 4e 61 6d 65 29 29 2c 0d 0a 20 20 20 20 20 20 20  Name)),..       
14750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14760 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
14770 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
14780 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c          traceCal
14790 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72  lback(String.For
147a0 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65  mat(NameAndValue
147b0 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20  Format,..       
147c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
147d0 20 22 44 69 72 65 63 74 6f 72 79 22 2c 20 46 6f   "Directory", Fo
147e0 72 44 69 73 70 6c 61 79 28 64 69 72 65 63 74 6f  rDisplay(directo
147f0 72 79 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  ry)),..         
14800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
14810 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
14820 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
14830 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62        traceCallb
14840 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ack(String.Forma
14850 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f  t(NameAndValueFo
14860 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20  rmat,..         
14870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
14880 43 6f 72 65 46 69 6c 65 4e 61 6d 65 22 2c 20 46  CoreFileName", F
14890 6f 72 44 69 73 70 6c 61 79 28 63 6f 72 65 46 69  orDisplay(coreFi
148a0 6c 65 4e 61 6d 65 29 29 2c 0d 0a 20 20 20 20 20  leName)),..     
148b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
148c0 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
148d0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
148e0 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
148f0 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46  allback(String.F
14900 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c  ormat(NameAndVal
14910 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20  ueFormat,..     
14920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14930 20 20 20 22 4c 69 6e 71 46 69 6c 65 4e 61 6d 65     "LinqFileName
14940 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 6c 69  ", ForDisplay(li
14950 6e 71 46 69 6c 65 4e 61 6d 65 29 29 2c 0d 0a 20  nqFileName)),.. 
14960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14970 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65         traceCate
14980 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
14990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
149a0 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69  aceCallback(Stri
149b0 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e  ng.Format(NameAn
149c0 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20  dValueFormat,.. 
149d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
149e0 20 20 20 20 20 20 20 22 44 65 73 69 67 6e 65 72         "Designer
149f0 46 69 6c 65 4e 61 6d 65 22 2c 20 46 6f 72 44 69  FileName", ForDi
14a00 73 70 6c 61 79 28 64 65 73 69 67 6e 65 72 46 69  splay(designerFi
14a10 6c 65 4e 61 6d 65 29 29 2c 0d 0a 20 20 20 20 20  leName)),..     
14a20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14a30 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
14a40 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
14a50 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
14a60 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46  allback(String.F
14a70 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c  ormat(NameAndVal
14a80 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20  ueFormat,..     
14a90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14aa0 20 20 20 22 54 72 61 63 65 46 6f 72 6d 61 74 22     "TraceFormat"
14ab0 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 74 72 61  , ForDisplay(tra
14ac0 63 65 46 6f 72 6d 61 74 29 29 2c 0d 0a 20 20 20  ceFormat)),..   
14ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14ae0 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f       traceCatego
14af0 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
14b00 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
14b10 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67  eCallback(String
14b20 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56  .Format(NameAndV
14b30 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20  alueFormat,..   
14b40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14b50 20 20 20 20 20 22 49 6e 73 74 61 6c 6c 46 6c 61       "InstallFla
14b60 67 73 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28  gs", ForDisplay(
14b70 69 6e 73 74 61 6c 6c 46 6c 61 67 73 29 29 2c 0d  installFlags)),.
14b80 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
14b90 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
14ba0 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
14bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14bc0 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74  traceCallback(St
14bd0 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65  ring.Format(Name
14be0 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d  AndValueFormat,.
14bf0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
14c00 20 20 20 20 20 20 20 20 20 22 54 72 61 63 65 50           "TraceP
14c10 72 69 6f 72 69 74 79 22 2c 20 46 6f 72 44 69 73  riority", ForDis
14c20 70 6c 61 79 28 74 72 61 63 65 50 72 69 6f 72 69  play(tracePriori
14c30 74 79 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  ty)),..         
14c40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
14c50 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
14c60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
14c70 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62        traceCallb
14c80 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ack(String.Forma
14c90 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f  t(NameAndValueFo
14ca0 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20  rmat,..         
14cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
14cc0 49 6e 73 74 61 6c 6c 22 2c 20 46 6f 72 44 69 73  Install", ForDis
14cd0 70 6c 61 79 28 69 6e 73 74 61 6c 6c 29 29 2c 0d  play(install)),.
14ce0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
14cf0 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
14d00 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
14d10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14d20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74  traceCallback(St
14d30 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65  ring.Format(Name
14d40 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d  AndValueFormat,.
14d50 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
14d60 20 20 20 20 20 20 20 20 20 22 4e 6f 44 65 73 6b           "NoDesk
14d70 74 6f 70 22 2c 20 46 6f 72 44 69 73 70 6c 61 79  top", ForDisplay
14d80 28 6e 6f 44 65 73 6b 74 6f 70 29 29 2c 0d 0a 20  (noDesktop)),.. 
14d90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14da0 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65         traceCate
14db0 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
14dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
14dd0 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69  aceCallback(Stri
14de0 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e  ng.Format(NameAn
14df0 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20  dValueFormat,.. 
14e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14e10 20 20 20 20 20 20 20 22 4e 6f 43 6f 6d 70 61 63         "NoCompac
14e20 74 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 6e  t", ForDisplay(n
14e30 6f 43 6f 6d 70 61 63 74 29 29 2c 0d 0a 20 20 20  oCompact)),..   
14e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14e50 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f       traceCatego
14e60 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
14e70 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
14e80 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67  eCallback(String
14e90 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56  .Format(NameAndV
14ea0 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20  alueFormat,..   
14eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14ec0 20 20 20 20 20 22 4e 6f 4e 65 74 46 78 32 30 22       "NoNetFx20"
14ed0 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 6e 6f 4e  , ForDisplay(noN
14ee0 65 74 46 78 32 30 29 29 2c 0d 0a 20 20 20 20 20  etFx20)),..     
14ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14f00 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
14f10 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
14f20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
14f30 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46  allback(String.F
14f40 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c  ormat(NameAndVal
14f50 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20  ueFormat,..     
14f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14f70 20 20 20 22 4e 6f 4e 65 74 46 78 34 30 22 2c 20     "NoNetFx40", 
14f80 46 6f 72 44 69 73 70 6c 61 79 28 6e 6f 4e 65 74  ForDisplay(noNet
14f90 46 78 34 30 29 29 2c 0d 0a 20 20 20 20 20 20 20  Fx40)),..       
14fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14fb0 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
14fc0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
14fd0 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c          traceCal
14fe0 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72  lback(String.For
14ff0 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65  mat(NameAndValue
15000 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20  Format,..       
15010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15020 20 22 4e 6f 56 73 32 30 30 38 22 2c 20 46 6f 72   "NoVs2008", For
15030 44 69 73 70 6c 61 79 28 6e 6f 56 73 32 30 30 38  Display(noVs2008
15040 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  )),..           
15050 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
15060 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
15070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15080 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63      traceCallbac
15090 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  k(String.Format(
150a0 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d  NameAndValueForm
150b0 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at,..           
150c0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 4e 6f               "No
150d0 56 73 32 30 31 30 22 2c 20 46 6f 72 44 69 73 70  Vs2010", ForDisp
150e0 6c 61 79 28 6e 6f 56 73 32 30 31 30 29 29 2c 0d  lay(noVs2010)),.
150f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
15100 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
15110 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
15120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15130 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74  traceCallback(St
15140 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65  ring.Format(Name
15150 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d  AndValueFormat,.
15160 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
15170 20 20 20 20 20 20 20 20 20 22 4e 6f 54 72 61 63           "NoTrac
15180 65 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 6e  e", ForDisplay(n
15190 6f 54 72 61 63 65 29 29 2c 0d 0a 20 20 20 20 20  oTrace)),..     
151a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
151b0 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
151c0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
151d0 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
151e0 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46  allback(String.F
151f0 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c  ormat(NameAndVal
15200 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20  ueFormat,..     
15210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15220 20 20 20 22 4e 6f 43 6f 6e 73 6f 6c 65 22 2c 20     "NoConsole", 
15230 46 6f 72 44 69 73 70 6c 61 79 28 6e 6f 43 6f 6e  ForDisplay(noCon
15240 73 6f 6c 65 29 29 2c 0d 0a 20 20 20 20 20 20 20  sole)),..       
15250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15260 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
15270 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
15280 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c          traceCal
15290 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72  lback(String.For
152a0 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65  mat(NameAndValue
152b0 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20  Format,..       
152c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
152d0 20 22 4e 6f 4c 6f 67 22 2c 20 46 6f 72 44 69 73   "NoLog", ForDis
152e0 70 6c 61 79 28 6e 6f 4c 6f 67 29 29 2c 0d 0a 20  play(noLog)),.. 
152f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15300 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65         traceCate
15310 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
15320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
15330 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69  aceCallback(Stri
15340 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e  ng.Format(NameAn
15350 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20  dValueFormat,.. 
15360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15370 20 20 20 20 20 20 20 22 57 68 61 74 49 66 22 2c         "WhatIf",
15380 20 46 6f 72 44 69 73 70 6c 61 79 28 77 68 61 74   ForDisplay(what
15390 49 66 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  If)),..         
153a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
153b0 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
153c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
153d0 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62        traceCallb
153e0 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ack(String.Forma
153f0 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f  t(NameAndValueFo
15400 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20  rmat,..         
15410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
15420 56 65 72 62 6f 73 65 22 2c 20 46 6f 72 44 69 73  Verbose", ForDis
15430 70 6c 61 79 28 76 65 72 62 6f 73 65 29 29 2c 0d  play(verbose)),.
15440 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
15450 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
15460 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
15470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15480 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74  traceCallback(St
15490 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65  ring.Format(Name
154a0 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d  AndValueFormat,.
154b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
154c0 20 20 20 20 20 20 20 20 20 22 43 6f 6e 66 69 72           "Confir
154d0 6d 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 63  m", ForDisplay(c
154e0 6f 6e 66 69 72 6d 29 29 2c 0d 0a 20 20 20 20 20  onfirm)),..     
154f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15500 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
15510 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
15520 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
15530 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
15540 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a    #endregion....
15550 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
15560 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15570 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15580 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15590 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
155a0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  ...            #
155b0 72 65 67 69 6f 6e 20 50 75 62 6c 69 63 20 50 72  region Public Pr
155c0 6f 70 65 72 74 69 65 73 0d 0a 20 20 20 20 20 20  operties..      
155d0 20 20 20 20 20 20 70 72 69 76 61 74 65 20 41 73        private As
155e0 73 65 6d 62 6c 79 20 61 73 73 65 6d 62 6c 79 3b  sembly assembly;
155f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
15600 62 6c 69 63 20 41 73 73 65 6d 62 6c 79 20 41 73  blic Assembly As
15610 73 65 6d 62 6c 79 0d 0a 20 20 20 20 20 20 20 20  sembly..        
15620 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
15630 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74         get { ret
15640 75 72 6e 20 61 73 73 65 6d 62 6c 79 3b 20 7d 0d  urn assembly; }.
15650 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
15660 20 73 65 74 20 7b 20 61 73 73 65 6d 62 6c 79 20   set { assembly 
15670 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20  = value; }..    
15680 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
15690 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
156a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
156b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
156c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
156d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
156e0 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
156f0 61 74 65 20 73 74 72 69 6e 67 20 6c 6f 67 46 69  ate string logFi
15700 6c 65 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20  leName;..       
15710 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 72 69       public stri
15720 6e 67 20 4c 6f 67 46 69 6c 65 4e 61 6d 65 0d 0a  ng LogFileName..
15730 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
15740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67                 g
15750 65 74 20 7b 20 72 65 74 75 72 6e 20 6c 6f 67 46  et { return logF
15760 69 6c 65 4e 61 6d 65 3b 20 7d 0d 0a 20 20 20 20  ileName; }..    
15770 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20              set 
15780 7b 20 6c 6f 67 46 69 6c 65 4e 61 6d 65 20 3d 20  { logFileName = 
15790 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20  value; }..      
157a0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
157b0 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
157c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
157d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
157e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
157f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
15800 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
15810 65 20 73 74 72 69 6e 67 20 64 69 72 65 63 74 6f  e string directo
15820 72 79 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ry;..           
15830 20 70 75 62 6c 69 63 20 73 74 72 69 6e 67 20 44   public string D
15840 69 72 65 63 74 6f 72 79 0d 0a 20 20 20 20 20 20  irectory..      
15850 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
15860 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72           get { r
15870 65 74 75 72 6e 20 64 69 72 65 63 74 6f 72 79 3b  eturn directory;
15880 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
15890 20 20 20 20 73 65 74 20 7b 20 64 69 72 65 63 74      set { direct
158a0 6f 72 79 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a  ory = value; }..
158b0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
158c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
158d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
158e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
158f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15900 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15910 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
15920 70 72 69 76 61 74 65 20 73 74 72 69 6e 67 20 63  private string c
15930 6f 72 65 46 69 6c 65 4e 61 6d 65 3b 0d 0a 20 20  oreFileName;..  
15940 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
15950 20 73 74 72 69 6e 67 20 43 6f 72 65 46 69 6c 65   string CoreFile
15960 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 20 20  Name..          
15970 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
15980 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72       get { retur
15990 6e 20 63 6f 72 65 46 69 6c 65 4e 61 6d 65 3b 20  n coreFileName; 
159a0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
159b0 20 20 20 73 65 74 20 7b 20 63 6f 72 65 46 69 6c     set { coreFil
159c0 65 4e 61 6d 65 20 3d 20 76 61 6c 75 65 3b 20 7d  eName = value; }
159d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
159e0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
159f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15a00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15a10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15a20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15a30 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
15a40 20 20 70 72 69 76 61 74 65 20 73 74 72 69 6e 67    private string
15a50 20 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 3b 0d 0a   linqFileName;..
15a60 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
15a70 69 63 20 73 74 72 69 6e 67 20 4c 69 6e 71 46 69  ic string LinqFi
15a80 6c 65 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20  leName..        
15a90 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
15aa0 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74         get { ret
15ab0 75 72 6e 20 6c 69 6e 71 46 69 6c 65 4e 61 6d 65  urn linqFileName
15ac0 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
15ad0 20 20 20 20 20 73 65 74 20 7b 20 6c 69 6e 71 46       set { linqF
15ae0 69 6c 65 4e 61 6d 65 20 3d 20 76 61 6c 75 65 3b  ileName = value;
15af0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
15b00 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
15b10 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
15b20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15b30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15b40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15b50 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
15b60 20 20 20 20 70 72 69 76 61 74 65 20 73 74 72 69      private stri
15b70 6e 67 20 64 65 73 69 67 6e 65 72 46 69 6c 65 4e  ng designerFileN
15b80 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ame;..          
15b90 20 20 70 75 62 6c 69 63 20 73 74 72 69 6e 67 20    public string 
15ba0 44 65 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65  DesignerFileName
15bb0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
15bc0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
15bd0 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 64 65   get { return de
15be0 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 3b 20  signerFileName; 
15bf0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
15c00 20 20 20 73 65 74 20 7b 20 64 65 73 69 67 6e 65     set { designe
15c10 72 46 69 6c 65 4e 61 6d 65 20 3d 20 76 61 6c 75  rFileName = valu
15c20 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  e; }..          
15c30 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
15c40 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
15c50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15c60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15c70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15c80 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
15c90 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74        private st
15ca0 72 69 6e 67 20 74 72 61 63 65 46 6f 72 6d 61 74  ring traceFormat
15cb0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ;..            p
15cc0 75 62 6c 69 63 20 73 74 72 69 6e 67 20 54 72 61  ublic string Tra
15cd0 63 65 46 6f 72 6d 61 74 0d 0a 20 20 20 20 20 20  ceFormat..      
15ce0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
15cf0 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72           get { r
15d00 65 74 75 72 6e 20 74 72 61 63 65 46 6f 72 6d 61  eturn traceForma
15d10 74 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  t; }..          
15d20 20 20 20 20 20 20 73 65 74 20 7b 20 74 72 61 63        set { trac
15d30 65 46 6f 72 6d 61 74 20 3d 20 76 61 6c 75 65 3b  eFormat = value;
15d40 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
15d50 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
15d60 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
15d70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15d80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15d90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15da0 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
15db0 20 20 20 20 70 72 69 76 61 74 65 20 49 6e 73 74      private Inst
15dc0 61 6c 6c 46 6c 61 67 73 20 69 6e 73 74 61 6c 6c  allFlags install
15dd0 46 6c 61 67 73 3b 0d 0a 20 20 20 20 20 20 20 20  Flags;..        
15de0 20 20 20 20 70 75 62 6c 69 63 20 49 6e 73 74 61      public Insta
15df0 6c 6c 46 6c 61 67 73 20 49 6e 73 74 61 6c 6c 46  llFlags InstallF
15e00 6c 61 67 73 0d 0a 20 20 20 20 20 20 20 20 20 20  lags..          
15e10 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
15e20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72       get { retur
15e30 6e 20 69 6e 73 74 61 6c 6c 46 6c 61 67 73 3b 20  n installFlags; 
15e40 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
15e50 20 20 20 73 65 74 20 7b 20 69 6e 73 74 61 6c 6c     set { install
15e60 46 6c 61 67 73 20 3d 20 76 61 6c 75 65 3b 20 7d  Flags = value; }
15e70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
15e80 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
15e90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15ea0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15eb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15ec0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15ed0 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
15ee0 20 20 70 72 69 76 61 74 65 20 54 72 61 63 65 50    private TraceP
15ef0 72 69 6f 72 69 74 79 20 74 72 61 63 65 50 72 69  riority tracePri
15f00 6f 72 69 74 79 3b 0d 0a 20 20 20 20 20 20 20 20  ority;..        
15f10 20 20 20 20 70 75 62 6c 69 63 20 54 72 61 63 65      public Trace
15f20 50 72 69 6f 72 69 74 79 20 54 72 61 63 65 50 72  Priority TracePr
15f30 69 6f 72 69 74 79 0d 0a 20 20 20 20 20 20 20 20  iority..        
15f40 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
15f50 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74         get { ret
15f60 75 72 6e 20 74 72 61 63 65 50 72 69 6f 72 69 74  urn tracePriorit
15f70 79 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  y; }..          
15f80 20 20 20 20 20 20 73 65 74 20 7b 20 74 72 61 63        set { trac
15f90 65 50 72 69 6f 72 69 74 79 20 3d 20 76 61 6c 75  ePriority = valu
15fa0 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  e; }..          
15fb0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
15fc0 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
15fd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15fe0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15ff0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16000 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
16010 20 20 20 20 20 20 70 72 69 76 61 74 65 20 62 6f        private bo
16020 6f 6c 20 69 6e 73 74 61 6c 6c 3b 0d 0a 20 20 20  ol install;..   
16030 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
16040 62 6f 6f 6c 20 49 6e 73 74 61 6c 6c 0d 0a 20 20  bool Install..  
16050 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
16060 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74               get
16070 20 7b 20 72 65 74 75 72 6e 20 69 6e 73 74 61 6c   { return instal
16080 6c 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  l; }..          
16090 20 20 20 20 20 20 73 65 74 20 7b 20 69 6e 73 74        set { inst
160a0 61 6c 6c 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a  all = value; }..
160b0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
160c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
160d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
160e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
160f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16100 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16110 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
16120 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 6e 6f 44  private bool noD
16130 65 73 6b 74 6f 70 3b 0d 0a 20 20 20 20 20 20 20  esktop;..       
16140 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c       public bool
16150 20 4e 6f 44 65 73 6b 74 6f 70 0d 0a 20 20 20 20   NoDesktop..    
16160 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
16170 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b             get {
16180 20 72 65 74 75 72 6e 20 6e 6f 44 65 73 6b 74 6f   return noDeskto
16190 70 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  p; }..          
161a0 20 20 20 20 20 20 73 65 74 20 7b 20 6e 6f 44 65        set { noDe
161b0 73 6b 74 6f 70 20 3d 20 76 61 6c 75 65 3b 20 7d  sktop = value; }
161c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
161d0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
161e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
161f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16200 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16210 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16220 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
16230 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 6e    private bool n
16240 6f 43 6f 6d 70 61 63 74 3b 0d 0a 20 20 20 20 20  oCompact;..     
16250 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f         public bo
16260 6f 6c 20 4e 6f 43 6f 6d 70 61 63 74 0d 0a 20 20  ol NoCompact..  
16270 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
16280 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74               get
16290 20 7b 20 72 65 74 75 72 6e 20 6e 6f 43 6f 6d 70   { return noComp
162a0 61 63 74 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  act; }..        
162b0 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 6e 6f          set { no
162c0 43 6f 6d 70 61 63 74 20 3d 20 76 61 6c 75 65 3b  Compact = value;
162d0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
162e0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
162f0 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
16300 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16310 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16320 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16330 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
16340 20 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c      private bool
16350 20 6e 6f 4e 65 74 46 78 32 30 3b 0d 0a 20 20 20   noNetFx20;..   
16360 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
16370 62 6f 6f 6c 20 4e 6f 4e 65 74 46 78 32 30 0d 0a  bool NoNetFx20..
16380 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
16390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67                 g
163a0 65 74 20 7b 20 72 65 74 75 72 6e 20 6e 6f 4e 65  et { return noNe
163b0 74 46 78 32 30 3b 20 7d 0d 0a 20 20 20 20 20 20  tFx20; }..      
163c0 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20            set { 
163d0 6e 6f 4e 65 74 46 78 32 30 20 3d 20 76 61 6c 75  noNetFx20 = valu
163e0 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  e; }..          
163f0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
16400 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
16410 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16420 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16430 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16440 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
16450 20 20 20 20 20 20 70 72 69 76 61 74 65 20 62 6f        private bo
16460 6f 6c 20 6e 6f 4e 65 74 46 78 34 30 3b 0d 0a 20  ol noNetFx40;.. 
16470 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
16480 63 20 62 6f 6f 6c 20 4e 6f 4e 65 74 46 78 34 30  c bool NoNetFx40
16490 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
164a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
164b0 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 6e 6f   get { return no
164c0 4e 65 74 46 78 34 30 3b 20 7d 0d 0a 20 20 20 20  NetFx40; }..    
164d0 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20              set 
164e0 7b 20 6e 6f 4e 65 74 46 78 34 30 20 3d 20 76 61  { noNetFx40 = va
164f0 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  lue; }..        
16500 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
16510 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
16520 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16530 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16540 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16550 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
16560 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
16570 62 6f 6f 6c 20 6e 6f 56 73 32 30 30 38 3b 0d 0a  bool noVs2008;..
16580 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
16590 69 63 20 62 6f 6f 6c 20 4e 6f 56 73 32 30 30 38  ic bool NoVs2008
165a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
165b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
165c0 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 6e 6f   get { return no
165d0 56 73 32 30 30 38 3b 20 7d 0d 0a 20 20 20 20 20  Vs2008; }..     
165e0 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b             set {
165f0 20 6e 6f 56 73 32 30 30 38 20 3d 20 76 61 6c 75   noVs2008 = valu
16600 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  e; }..          
16610 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
16620 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
16630 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16640 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16650 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16660 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
16670 20 20 20 20 20 20 70 72 69 76 61 74 65 20 62 6f        private bo
16680 6f 6c 20 6e 6f 56 73 32 30 31 30 3b 0d 0a 20 20  ol noVs2010;..  
16690 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
166a0 20 62 6f 6f 6c 20 4e 6f 56 73 32 30 31 30 0d 0a   bool NoVs2010..
166b0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
166c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67                 g
166d0 65 74 20 7b 20 72 65 74 75 72 6e 20 6e 6f 56 73  et { return noVs
166e0 32 30 31 30 3b 20 7d 0d 0a 20 20 20 20 20 20 20  2010; }..       
166f0 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 6e           set { n
16700 6f 56 73 32 30 31 30 20 3d 20 76 61 6c 75 65 3b  oVs2010 = value;
16710 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
16720 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
16730 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
16740 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16750 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16760 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16770 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
16780 20 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c      private bool
16790 20 6e 6f 54 72 61 63 65 3b 0d 0a 20 20 20 20 20   noTrace;..     
167a0 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f         public bo
167b0 6f 6c 20 4e 6f 54 72 61 63 65 0d 0a 20 20 20 20  ol NoTrace..    
167c0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
167d0 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b             get {
167e0 20 72 65 74 75 72 6e 20 6e 6f 54 72 61 63 65 3b   return noTrace;
167f0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
16800 20 20 20 20 73 65 74 20 7b 20 6e 6f 54 72 61 63      set { noTrac
16810 65 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20  e = value; }..  
16820 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
16830 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
16840 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16850 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16860 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16870 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
16880 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
16890 69 76 61 74 65 20 62 6f 6f 6c 20 6e 6f 43 6f 6e  ivate bool noCon
168a0 73 6f 6c 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  sole;..         
168b0 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 4e     public bool N
168c0 6f 43 6f 6e 73 6f 6c 65 0d 0a 20 20 20 20 20 20  oConsole..      
168d0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
168e0 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72           get { r
168f0 65 74 75 72 6e 20 6e 6f 43 6f 6e 73 6f 6c 65 3b  eturn noConsole;
16900 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
16910 20 20 20 20 73 65 74 20 7b 20 6e 6f 43 6f 6e 73      set { noCons
16920 6f 6c 65 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a  ole = value; }..
16930 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
16940 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
16950 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16960 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16970 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16980 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16990 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
169a0 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 6e 6f 4c  private bool noL
169b0 6f 67 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  og;..           
169c0 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 4e 6f 4c   public bool NoL
169d0 6f 67 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  og..            
169e0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
169f0 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20     get { return 
16a00 6e 6f 4c 6f 67 3b 20 7d 0d 0a 20 20 20 20 20 20  noLog; }..      
16a10 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20            set { 
16a20 6e 6f 4c 6f 67 20 3d 20 76 61 6c 75 65 3b 20 7d  noLog = value; }
16a30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
16a40 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
16a50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16a60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16a70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16a80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16a90 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
16aa0 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 77    private bool w
16ab0 68 61 74 49 66 3b 0d 0a 20 20 20 20 20 20 20 20  hatIf;..        
16ac0 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20      public bool 
16ad0 57 68 61 74 49 66 0d 0a 20 20 20 20 20 20 20 20  WhatIf..        
16ae0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
16af0 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74         get { ret
16b00 75 72 6e 20 77 68 61 74 49 66 3b 20 7d 0d 0a 20  urn whatIf; }.. 
16b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
16b20 65 74 20 7b 20 77 68 61 74 49 66 20 3d 20 76 61  et { whatIf = va
16b30 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  lue; }..        
16b40 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
16b50 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
16b60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16b70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16b80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16b90 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
16ba0 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
16bb0 62 6f 6f 6c 20 76 65 72 62 6f 73 65 3b 0d 0a 20  bool verbose;.. 
16bc0 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
16bd0 63 20 62 6f 6f 6c 20 56 65 72 62 6f 73 65 0d 0a  c bool Verbose..
16be0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
16bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67                 g
16c00 65 74 20 7b 20 72 65 74 75 72 6e 20 76 65 72 62  et { return verb
16c10 6f 73 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  ose; }..        
16c20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 76 65          set { ve
16c30 72 62 6f 73 65 20 3d 20 76 61 6c 75 65 3b 20 7d  rbose = value; }
16c40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
16c50 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
16c60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16c70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16c80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16c90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16ca0 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
16cb0 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 63    private bool c
16cc0 6f 6e 66 69 72 6d 3b 0d 0a 20 20 20 20 20 20 20  onfirm;..       
16cd0 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c       public bool
16ce0 20 43 6f 6e 66 69 72 6d 0d 0a 20 20 20 20 20 20   Confirm..      
16cf0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
16d00 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72           get { r
16d10 65 74 75 72 6e 20 63 6f 6e 66 69 72 6d 3b 20 7d  eturn confirm; }
16d20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
16d30 20 20 73 65 74 20 7b 20 63 6f 6e 66 69 72 6d 20    set { confirm 
16d40 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20  = value; }..    
16d50 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
16d60 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f         #endregio
16d70 6e 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  n..        }..  
16d80 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
16d90 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
16da0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16db0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16dc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16dd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16de0 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23  ///....        #
16df0 72 65 67 69 6f 6e 20 46 72 61 6d 65 77 6f 72 6b  region Framework
16e00 4c 69 73 74 20 43 6c 61 73 73 0d 0a 20 20 20 20  List Class..    
16e10 20 20 20 20 70 72 69 76 61 74 65 20 73 65 61 6c      private seal
16e20 65 64 20 63 6c 61 73 73 20 46 72 61 6d 65 77 6f  ed class Framewo
16e30 72 6b 4c 69 73 74 0d 0a 20 20 20 20 20 20 20 20  rkList..        
16e40 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  {..            #
16e50 72 65 67 69 6f 6e 20 50 75 62 6c 69 63 20 43 6f  region Public Co
16e60 6e 73 74 72 75 63 74 6f 72 73 0d 0a 20 20 20 20  nstructors..    
16e70 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 46          public F
16e80 72 61 6d 65 77 6f 72 6b 4c 69 73 74 28 29 0d 0a  rameworkList()..
16e90 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
16ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
16eb0 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20  / do nothing... 
16ec0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
16ed0 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65            #endre
16ee0 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20  gion....        
16ef0 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
16f00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16f10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16f20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16f30 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
16f40 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50         #region P
16f50 75 62 6c 69 63 20 4d 65 74 68 6f 64 73 0d 0a 20  ublic Methods.. 
16f60 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
16f70 74 65 20 52 65 67 69 73 74 72 79 4b 65 79 20 72  te RegistryKey r
16f80 6f 6f 74 4b 65 79 3b 0d 0a 20 20 20 20 20 20 20  ootKey;..       
16f90 20 20 20 20 20 70 75 62 6c 69 63 20 52 65 67 69       public Regi
16fa0 73 74 72 79 4b 65 79 20 52 6f 6f 74 4b 65 79 0d  stryKey RootKey.
16fb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
16fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16fd0 67 65 74 20 7b 20 72 65 74 75 72 6e 20 72 6f 6f  get { return roo
16fe0 74 4b 65 79 3b 20 7d 0d 0a 20 20 20 20 20 20 20  tKey; }..       
16ff0 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 72           set { r
17000 6f 6f 74 4b 65 79 20 3d 20 76 61 6c 75 65 3b 20  ootKey = value; 
17010 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
17020 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
17030 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17040 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17050 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17060 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17070 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
17080 20 20 20 70 72 69 76 61 74 65 20 53 74 72 69 6e     private Strin
17090 67 4c 69 73 74 20 6e 61 6d 65 73 3b 0d 0a 20 20  gList names;..  
170a0 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
170b0 20 53 74 72 69 6e 67 4c 69 73 74 20 4e 61 6d 65   StringList Name
170c0 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  s..            {
170d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
170e0 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 6e    get { return n
170f0 61 6d 65 73 3b 20 7d 0d 0a 20 20 20 20 20 20 20  ames; }..       
17100 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 6e           set { n
17110 61 6d 65 73 20 3d 20 76 61 6c 75 65 3b 20 7d 0d  ames = value; }.
17120 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
17130 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
17140 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17150 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17160 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17170 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17180 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
17190 20 70 72 69 76 61 74 65 20 56 65 72 73 69 6f 6e   private Version
171a0 4d 61 70 20 76 65 72 73 69 6f 6e 73 3b 0d 0a 20  Map versions;.. 
171b0 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
171c0 63 20 56 65 72 73 69 6f 6e 4d 61 70 20 56 65 72  c VersionMap Ver
171d0 73 69 6f 6e 73 0d 0a 20 20 20 20 20 20 20 20 20  sions..         
171e0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
171f0 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75        get { retu
17200 72 6e 20 76 65 72 73 69 6f 6e 73 3b 20 7d 0d 0a  rn versions; }..
17210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17220 73 65 74 20 7b 20 76 65 72 73 69 6f 6e 73 20 3d  set { versions =
17230 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20   value; }..     
17240 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
17250 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
17260 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17270 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17280 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17290 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
172a0 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
172b0 74 65 20 53 74 72 69 6e 67 4c 69 73 74 20 70 6c  te StringList pl
172c0 61 74 66 6f 72 6d 4e 61 6d 65 73 3b 0d 0a 20 20  atformNames;..  
172d0 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
172e0 20 53 74 72 69 6e 67 4c 69 73 74 20 50 6c 61 74   StringList Plat
172f0 66 6f 72 6d 4e 61 6d 65 73 0d 0a 20 20 20 20 20  formNames..     
17300 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
17310 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20            get { 
17320 72 65 74 75 72 6e 20 70 6c 61 74 66 6f 72 6d 4e  return platformN
17330 61 6d 65 73 3b 20 7d 0d 0a 20 20 20 20 20 20 20  ames; }..       
17340 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 70           set { p
17350 6c 61 74 66 6f 72 6d 4e 61 6d 65 73 20 3d 20 76  latformNames = v
17360 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20  alue; }..       
17370 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
17380 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
17390 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
173a0 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
173b0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
173c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
173d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
173e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
173f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17400 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67  ....        #reg
17410 69 6f 6e 20 56 73 4c 69 73 74 20 43 6c 61 73 73  ion VsList Class
17420 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
17430 65 20 73 65 61 6c 65 64 20 63 6c 61 73 73 20 56  e sealed class V
17440 73 4c 69 73 74 0d 0a 20 20 20 20 20 20 20 20 7b  sList..        {
17450 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 72  ..            #r
17460 65 67 69 6f 6e 20 50 75 62 6c 69 63 20 43 6f 6e  egion Public Con
17470 73 74 72 75 63 74 6f 72 73 0d 0a 20 20 20 20 20  structors..     
17480 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 56 73         public Vs
17490 4c 69 73 74 28 29 0d 0a 20 20 20 20 20 20 20 20  List()..        
174a0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
174b0 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74         // do not
174c0 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 20  hing...         
174d0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
174e0 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a    #endregion....
174f0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
17500 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17510 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17520 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17530 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
17540 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  ...            #
17550 72 65 67 69 6f 6e 20 50 75 62 6c 69 63 20 50 72  region Public Pr
17560 6f 70 65 72 74 69 65 73 0d 0a 20 20 20 20 20 20  operties..      
17570 20 20 20 20 20 20 70 72 69 76 61 74 65 20 52 65        private Re
17580 67 69 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65  gistryKey rootKe
17590 79 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y;..            
175a0 70 75 62 6c 69 63 20 52 65 67 69 73 74 72 79 4b  public RegistryK
175b0 65 79 20 52 6f 6f 74 4b 65 79 0d 0a 20 20 20 20  ey RootKey..    
175c0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
175d0 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b             get {
175e0 20 72 65 74 75 72 6e 20 72 6f 6f 74 4b 65 79 3b   return rootKey;
175f0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
17600 20 20 20 20 73 65 74 20 7b 20 72 6f 6f 74 4b 65      set { rootKe
17610 79 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20  y = value; }..  
17620 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
17630 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
17640 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17650 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17660 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17670 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
17680 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
17690 69 76 61 74 65 20 56 65 72 73 69 6f 6e 4c 69 73  ivate VersionLis
176a0 74 20 76 65 72 73 69 6f 6e 73 3b 0d 0a 20 20 20  t versions;..   
176b0 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
176c0 56 65 72 73 69 6f 6e 4c 69 73 74 20 56 65 72 73  VersionList Vers
176d0 69 6f 6e 73 0d 0a 20 20 20 20 20 20 20 20 20 20  ions..          
176e0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
176f0 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72       get { retur
17700 6e 20 76 65 72 73 69 6f 6e 73 3b 20 7d 0d 0a 20  n versions; }.. 
17710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
17720 65 74 20 7b 20 76 65 72 73 69 6f 6e 73 20 3d 20  et { versions = 
17730 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20  value; }..      
17740 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
17750 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
17760 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17770 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17780 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17790 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
177a0 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
177b0 65 20 56 65 72 73 69 6f 6e 4c 69 73 74 4d 61 70  e VersionListMap
177c0 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f   frameworkVersio
177d0 6e 73 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ns;..           
177e0 20 70 75 62 6c 69 63 20 56 65 72 73 69 6f 6e 4c   public VersionL
177f0 69 73 74 4d 61 70 20 46 72 61 6d 65 77 6f 72 6b  istMap Framework
17800 56 65 72 73 69 6f 6e 73 0d 0a 20 20 20 20 20 20  Versions..      
17810 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
17820 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72           get { r
17830 65 74 75 72 6e 20 66 72 61 6d 65 77 6f 72 6b 56  eturn frameworkV
17840 65 72 73 69 6f 6e 73 3b 20 7d 0d 0a 20 20 20 20  ersions; }..    
17850 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20              set 
17860 7b 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69  { frameworkVersi
17870 6f 6e 73 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a  ons = value; }..
17880 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
17890 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
178a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
178b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
178c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
178d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
178e0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
178f0 70 72 69 76 61 74 65 20 56 65 72 73 69 6f 6e 4c  private VersionL
17900 69 73 74 20 69 6e 73 74 61 6c 6c 65 64 56 65 72  ist installedVer
17910 73 69 6f 6e 73 3b 0d 0a 20 20 20 20 20 20 20 20  sions;..        
17920 20 20 20 20 70 75 62 6c 69 63 20 56 65 72 73 69      public Versi
17930 6f 6e 4c 69 73 74 20 49 6e 73 74 61 6c 6c 65 64  onList Installed
17940 56 65 72 73 69 6f 6e 73 0d 0a 20 20 20 20 20 20  Versions..      
17950 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
17960 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72           get { r
17970 65 74 75 72 6e 20 69 6e 73 74 61 6c 6c 65 64 56  eturn installedV
17980 65 72 73 69 6f 6e 73 3b 20 7d 0d 0a 20 20 20 20  ersions; }..    
17990 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20              set 
179a0 7b 20 69 6e 73 74 61 6c 6c 65 64 56 65 72 73 69  { installedVersi
179b0 6f 6e 73 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a  ons = value; }..
179c0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
179d0 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 72             #endr
179e0 65 67 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20 7d  egion..        }
179f0 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65  ..        #endre
17a00 67 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20 23 65  gion..        #e
17a10 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20  ndregion....    
17a20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
17a30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17a40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17a50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17a60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
17a70 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50         #region P
17a80 72 69 76 61 74 65 20 43 6f 6e 73 74 61 6e 74 20  rivate Constant 
17a90 44 61 74 61 0d 0a 20 20 20 20 20 20 20 20 70 72  Data..        pr
17aa0 69 76 61 74 65 20 63 6f 6e 73 74 20 73 74 72 69  ivate const stri
17ab0 6e 67 20 43 6f 72 65 46 69 6c 65 4e 61 6d 65 20  ng CoreFileName 
17ac0 3d 20 22 53 79 73 74 65 6d 2e 44 61 74 61 2e 53  = "System.Data.S
17ad0 51 4c 69 74 65 2e 64 6c 6c 22 3b 0d 0a 20 20 20  QLite.dll";..   
17ae0 20 20 20 20 20 70 72 69 76 61 74 65 20 63 6f 6e       private con
17af0 73 74 20 73 74 72 69 6e 67 20 4c 69 6e 71 46 69  st string LinqFi
17b00 6c 65 4e 61 6d 65 20 3d 20 22 53 79 73 74 65 6d  leName = "System
17b10 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 4c 69 6e  .Data.SQLite.Lin
17b20 71 2e 64 6c 6c 22 3b 0d 0a 20 20 20 20 20 20 20  q.dll";..       
17b30 20 70 72 69 76 61 74 65 20 63 6f 6e 73 74 20 73   private const s
17b40 74 72 69 6e 67 20 44 65 73 69 67 6e 65 72 46 69  tring DesignerFi
17b50 6c 65 4e 61 6d 65 20 3d 20 22 53 51 4c 69 74 65  leName = "SQLite
17b60 2e 44 65 73 69 67 6e 65 72 2e 64 6c 6c 22 3b 0d  .Designer.dll";.
17b70 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
17b80 20 63 6f 6e 73 74 20 73 74 72 69 6e 67 20 50 72   const string Pr
17b90 6f 76 69 64 65 72 4e 61 6d 65 20 3d 20 22 53 51  oviderName = "SQ
17ba0 4c 69 74 65 20 44 61 74 61 20 50 72 6f 76 69 64  Lite Data Provid
17bb0 65 72 22 3b 0d 0a 20 20 20 20 20 20 20 20 70 72  er";..        pr
17bc0 69 76 61 74 65 20 63 6f 6e 73 74 20 73 74 72 69  ivate const stri
17bd0 6e 67 20 50 72 6f 6a 65 63 74 4e 61 6d 65 20 3d  ng ProjectName =
17be0 20 22 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51   "System.Data.SQ
17bf0 4c 69 74 65 22 3b 0d 0a 20 20 20 20 20 20 20 20  Lite";..        
17c00 70 72 69 76 61 74 65 20 63 6f 6e 73 74 20 73 74  private const st
17c10 72 69 6e 67 20 4c 65 67 61 63 79 50 72 6f 6a 65  ring LegacyProje
17c20 63 74 4e 61 6d 65 20 3d 20 22 53 51 4c 69 74 65  ctName = "SQLite
17c30 22 3b 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  ";..        priv
17c40 61 74 65 20 63 6f 6e 73 74 20 73 74 72 69 6e 67  ate const string
17c50 20 49 6e 76 61 72 69 61 6e 74 4e 61 6d 65 20 3d   InvariantName =
17c60 20 22 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51   "System.Data.SQ
17c70 4c 69 74 65 22 3b 0d 0a 20 20 20 20 20 20 20 20  Lite";..        
17c80 70 72 69 76 61 74 65 20 63 6f 6e 73 74 20 73 74  private const st
17c90 72 69 6e 67 20 46 61 63 74 6f 72 79 54 79 70 65  ring FactoryType
17ca0 4e 61 6d 65 20 3d 20 22 53 79 73 74 65 6d 2e 44  Name = "System.D
17cb0 61 74 61 2e 53 51 4c 69 74 65 2e 53 51 4c 69 74  ata.SQLite.SQLit
17cc0 65 46 61 63 74 6f 72 79 22 3b 0d 0a 20 20 20 20  eFactory";..    
17cd0 20 20 20 20 70 72 69 76 61 74 65 20 63 6f 6e 73      private cons
17ce0 74 20 73 74 72 69 6e 67 20 44 65 73 63 72 69 70  t string Descrip
17cf0 74 69 6f 6e 20 3d 20 22 2e 4e 45 54 20 46 72 61  tion = ".NET Fra
17d00 6d 65 77 6f 72 6b 20 44 61 74 61 20 50 72 6f 76  mework Data Prov
17d10 69 64 65 72 20 66 6f 72 20 53 51 4c 69 74 65 22  ider for SQLite"
17d20 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ;....        ///
17d30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17d40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17d50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17d60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17d70 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
17d80 70 72 69 76 61 74 65 20 63 6f 6e 73 74 20 73 74  private const st
17d90 72 69 6e 67 20 43 4c 52 32 49 6d 61 67 65 52 75  ring CLR2ImageRu
17da0 6e 74 69 6d 65 56 65 72 73 69 6f 6e 20 3d 20 22  ntimeVersion = "
17db0 76 32 2e 30 2e 35 30 37 32 37 22 3b 0d 0a 20 20  v2.0.50727";..  
17dc0 20 20 20 20 20 20 70 72 69 76 61 74 65 20 63 6f        private co
17dd0 6e 73 74 20 73 74 72 69 6e 67 20 43 4c 52 34 49  nst string CLR4I
17de0 6d 61 67 65 52 75 6e 74 69 6d 65 56 65 72 73 69  mageRuntimeVersi
17df0 6f 6e 20 3d 20 22 76 34 2e 30 2e 33 30 33 31 39  on = "v4.0.30319
17e00 22 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ";....        //
17e10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17e20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17e30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17e40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17e50 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
17e60 20 70 72 69 76 61 74 65 20 63 6f 6e 73 74 20 73   private const s
17e70 74 72 69 6e 67 20 4e 61 6d 65 41 6e 64 56 61 6c  tring NameAndVal
17e80 75 65 46 6f 72 6d 61 74 20 3d 20 22 7b 30 7d 3a  ueFormat = "{0}:
17e90 20 7b 31 7d 22 3b 0d 0a 20 20 20 20 20 20 20 20   {1}";..        
17ea0 70 72 69 76 61 74 65 20 63 6f 6e 73 74 20 73 74  private const st
17eb0 72 69 6e 67 20 4c 6f 67 46 69 6c 65 53 75 66 66  ring LogFileSuff
17ec0 69 78 20 3d 20 22 2e 6c 6f 67 22 3b 0d 0a 0d 0a  ix = ".log";....
17ed0 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
17ee0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17ef0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17f00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17f10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
17f20 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  ...        priva
17f30 74 65 20 73 74 61 74 69 63 20 72 65 61 64 6f 6e  te static readon
17f40 6c 79 20 73 74 72 69 6e 67 20 56 73 49 64 46 6f  ly string VsIdFo
17f50 72 6d 61 74 20 3d 20 22 42 22 3b 0d 0a 0d 0a 20  rmat = "B";.... 
17f60 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
17f70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17f80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17f90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17fa0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
17fb0 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
17fc0 65 20 73 74 61 74 69 63 20 72 65 61 64 6f 6e 6c  e static readonl
17fd0 79 20 73 74 72 69 6e 67 20 46 72 61 6d 65 77 6f  y string Framewo
17fe0 72 6b 4b 65 79 4e 61 6d 65 20 3d 0d 0a 20 20 20  rkKeyName =..   
17ff0 20 20 20 20 20 20 20 20 20 22 53 6f 66 74 77 61           "Softwa
18000 72 65 5c 5c 4d 69 63 72 6f 73 6f 66 74 5c 5c 2e  re\\Microsoft\\.
18010 4e 45 54 46 72 61 6d 65 77 6f 72 6b 22 3b 0d 0a  NETFramework";..
18020 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
18030 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18040 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18050 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18060 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18070 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69  /....        pri
18080 76 61 74 65 20 73 74 61 74 69 63 20 72 65 61 64  vate static read
18090 6f 6e 6c 79 20 73 74 72 69 6e 67 20 46 72 61 6d  only string Fram
180a0 65 77 6f 72 6b 53 64 6b 4b 65 79 4e 61 6d 65 20  eworkSdkKeyName 
180b0 3d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22  =..            "
180c0 53 6f 66 74 77 61 72 65 5c 5c 4d 69 63 72 6f 73  Software\\Micros
180d0 6f 66 74 5c 5c 4d 69 63 72 6f 73 6f 66 74 20 53  oft\\Microsoft S
180e0 44 4b 73 5c 5c 2e 4e 45 54 46 72 61 6d 65 77 6f  DKs\\.NETFramewo
180f0 72 6b 22 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  rk";....        
18100 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18110 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18120 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18130 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18140 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
18150 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69     private stati
18160 63 20 72 65 61 64 6f 6e 6c 79 20 73 74 72 69 6e  c readonly strin
18170 67 20 57 69 6e 64 6f 77 73 53 64 6b 4b 65 79 4e  g WindowsSdkKeyN
18180 61 6d 65 20 3d 0d 0a 20 20 20 20 20 20 20 20 20  ame =..         
18190 20 20 20 22 53 6f 66 74 77 61 72 65 5c 5c 4d 69     "Software\\Mi
181a0 63 72 6f 73 6f 66 74 5c 5c 4d 69 63 72 6f 73 6f  crosoft\\Microso
181b0 66 74 20 53 44 4b 73 5c 5c 57 69 6e 64 6f 77 73  ft SDKs\\Windows
181c0 22 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ";....        //
181d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
181e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
181f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18200 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18210 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
18220 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
18230 72 65 61 64 6f 6e 6c 79 20 73 74 72 69 6e 67 20  readonly string 
18240 58 50 61 74 68 46 6f 72 41 64 64 45 6c 65 6d 65  XPathForAddEleme
18250 6e 74 20 3d 0d 0a 20 20 20 20 20 20 20 20 20 20  nt =..          
18260 20 20 22 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e    "configuration
18270 2f 73 79 73 74 65 6d 2e 64 61 74 61 2f 44 62 50  /system.data/DbP
18280 72 6f 76 69 64 65 72 46 61 63 74 6f 72 69 65 73  roviderFactories
18290 2f 61 64 64 5b 40 69 6e 76 61 72 69 61 6e 74 3d  /add[@invariant=
182a0 5c 22 7b 30 7d 5c 22 5d 22 3b 0d 0a 0d 0a 20 20  \"{0}\"]";....  
182b0 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74        private st
182c0 61 74 69 63 20 72 65 61 64 6f 6e 6c 79 20 73 74  atic readonly st
182d0 72 69 6e 67 20 58 50 61 74 68 46 6f 72 52 65 6d  ring XPathForRem
182e0 6f 76 65 45 6c 65 6d 65 6e 74 20 3d 0d 0a 20 20  oveElement =..  
182f0 20 20 20 20 20 20 20 20 20 20 22 63 6f 6e 66 69            "confi
18300 67 75 72 61 74 69 6f 6e 2f 73 79 73 74 65 6d 2e  guration/system.
18310 64 61 74 61 2f 44 62 50 72 6f 76 69 64 65 72 46  data/DbProviderF
18320 61 63 74 6f 72 69 65 73 2f 72 65 6d 6f 76 65 5b  actories/remove[
18330 40 69 6e 76 61 72 69 61 6e 74 3d 5c 22 7b 30 7d  @invariant=\"{0}
18340 5c 22 5d 22 3b 0d 0a 20 20 20 20 20 20 20 20 23  \"]";..        #
18350 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20  endregion....   
18360 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
18370 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18380 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18390 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
183a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
183b0 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20          #region 
183c0 50 72 69 76 61 74 65 20 53 74 61 74 69 63 20 44  Private Static D
183d0 61 74 61 0d 0a 20 20 20 20 20 20 20 20 70 72 69  ata..        pri
183e0 76 61 74 65 20 73 74 61 74 69 63 20 41 73 73 65  vate static Asse
183f0 6d 62 6c 79 20 74 68 69 73 41 73 73 65 6d 62 6c  mbly thisAssembl
18400 79 20 3d 20 41 73 73 65 6d 62 6c 79 2e 47 65 74  y = Assembly.Get
18410 45 78 65 63 75 74 69 6e 67 41 73 73 65 6d 62 6c  ExecutingAssembl
18420 79 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  y();....        
18430 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 73  private static s
18440 74 72 69 6e 67 20 74 72 61 63 65 43 61 74 65 67  tring traceCateg
18450 6f 72 79 20 3d 20 50 61 74 68 2e 47 65 74 46 69  ory = Path.GetFi
18460 6c 65 4e 61 6d 65 28 0d 0a 20 20 20 20 20 20 20  leName(..       
18470 20 20 20 20 20 74 68 69 73 41 73 73 65 6d 62 6c       thisAssembl
18480 79 2e 4c 6f 63 61 74 69 6f 6e 29 3b 0d 0a 0d 0a  y.Location);....
18490 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
184a0 73 74 61 74 69 63 20 54 72 61 63 65 43 61 6c 6c  static TraceCall
184b0 62 61 63 6b 20 74 72 61 63 65 43 61 6c 6c 62 61  back traceCallba
184c0 63 6b 20 3d 20 41 70 70 54 72 61 63 65 3b 0d 0a  ck = AppTrace;..
184d0 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
184e0 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  on....        //
184f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18500 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18510 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18520 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18530 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
18540 20 23 72 65 67 69 6f 6e 20 54 72 61 63 65 20 48   #region Trace H
18550 61 6e 64 6c 69 6e 67 0d 0a 20 20 20 20 20 20 20  andling..       
18560 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
18570 73 74 72 69 6e 67 20 47 65 74 4c 6f 67 46 69 6c  string GetLogFil
18580 65 4e 61 6d 65 28 29 0d 0a 20 20 20 20 20 20 20  eName()..       
18590 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
185a0 73 74 72 69 6e 67 20 72 65 73 75 6c 74 20 3d 20  string result = 
185b0 50 61 74 68 2e 47 65 74 54 65 6d 70 46 69 6c 65  Path.GetTempFile
185c0 4e 61 6d 65 28 29 3b 20 2f 2a 20 74 68 72 6f 77  Name(); /* throw
185d0 20 2a 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20   */....         
185e0 20 20 20 46 69 6c 65 2e 4d 6f 76 65 28 72 65 73     File.Move(res
185f0 75 6c 74 2c 20 72 65 73 75 6c 74 20 2b 20 4c 6f  ult, result + Lo
18600 67 46 69 6c 65 53 75 66 66 69 78 29 3b 20 2f 2a  gFileSuffix); /*
18610 20 74 68 72 6f 77 20 2a 2f 0d 0a 20 20 20 20 20   throw */..     
18620 20 20 20 20 20 20 20 72 65 73 75 6c 74 20 2b 3d         result +=
18630 20 4c 6f 67 46 69 6c 65 53 75 66 66 69 78 3b 0d   LogFileSuffix;.
18640 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  ...            r
18650 65 74 75 72 6e 20 72 65 73 75 6c 74 3b 0d 0a 20  eturn result;.. 
18660 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
18670 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
18680 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18690 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
186a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
186b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
186c0 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
186d0 74 61 74 69 63 20 76 6f 69 64 20 41 70 70 54 72  tatic void AppTr
186e0 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ace(..          
186f0 20 20 73 74 72 69 6e 67 20 6d 65 73 73 61 67 65    string message
18700 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  ,..            s
18710 74 72 69 6e 67 20 63 61 74 65 67 6f 72 79 0d 0a  tring category..
18720 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
18730 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
18740 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 54        TraceOps.T
18750 72 61 63 65 43 6f 72 65 28 53 74 72 69 6e 67 2e  raceCore(String.
18760 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
18770 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70           TraceOp
18780 73 2e 54 72 61 63 65 46 6f 72 6d 61 74 2c 20 54  s.TraceFormat, T
18790 72 61 63 65 4f 70 73 2e 4e 65 78 74 49 64 28 29  raceOps.NextId()
187a0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
187b0 20 20 20 54 72 61 63 65 4f 70 73 2e 54 69 6d 65     TraceOps.Time
187c0 53 74 61 6d 70 28 44 61 74 65 54 69 6d 65 2e 55  Stamp(DateTime.U
187d0 74 63 4e 6f 77 29 2c 20 6d 65 73 73 61 67 65 29  tcNow), message)
187e0 2c 20 63 61 74 65 67 6f 72 79 29 3b 0d 0a 20 20  , category);..  
187f0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
18800 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20   #endregion.... 
18810 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
18820 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18830 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18840 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18850 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
18860 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f  ..        #regio
18870 6e 20 47 65 6e 65 72 69 63 20 53 74 72 69 6e 67  n Generic String
18880 20 48 61 6e 64 6c 69 6e 67 0d 0a 20 20 20 20 20   Handling..     
18890 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69     private stati
188a0 63 20 73 74 72 69 6e 67 20 46 6f 72 44 69 73 70  c string ForDisp
188b0 6c 61 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20  lay(..          
188c0 20 20 6f 62 6a 65 63 74 20 76 61 6c 75 65 0d 0a    object value..
188d0 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
188e0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
188f0 20 20 20 20 20 20 69 66 20 28 76 61 6c 75 65 20        if (value 
18900 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
18910 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
18920 20 22 3c 6e 75 6c 6c 3e 22 3b 0d 0a 0d 0a 20 20   "<null>";....  
18930 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
18940 20 72 65 73 75 6c 74 3b 0d 0a 20 20 20 20 20 20   result;..      
18950 20 20 20 20 20 20 54 79 70 65 20 74 79 70 65 20        Type type 
18960 3d 20 76 61 6c 75 65 2e 47 65 74 54 79 70 65 28  = value.GetType(
18970 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
18980 20 20 69 66 20 28 74 79 70 65 20 3d 3d 20 74 79    if (type == ty
18990 70 65 6f 66 28 58 6d 6c 45 6c 65 6d 65 6e 74 29  peof(XmlElement)
189a0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
189b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
189c0 20 20 58 6d 6c 45 6c 65 6d 65 6e 74 20 65 6c 65    XmlElement ele
189d0 6d 65 6e 74 20 3d 20 28 58 6d 6c 45 6c 65 6d 65  ment = (XmlEleme
189e0 6e 74 29 76 61 6c 75 65 3b 0d 0a 0d 0a 20 20 20  nt)value;....   
189f0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 73               res
18a00 75 6c 74 20 3d 20 65 6c 65 6d 65 6e 74 2e 4f 75  ult = element.Ou
18a10 74 65 72 58 6d 6c 3b 0d 0a 20 20 20 20 20 20 20  terXml;..       
18a20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
18a30 20 20 20 20 65 6c 73 65 20 69 66 20 28 74 79 70      else if (typ
18a40 65 20 3d 3d 20 74 79 70 65 6f 66 28 56 65 72 73  e == typeof(Vers
18a50 69 6f 6e 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ion))..         
18a60 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
18a70 20 20 20 20 20 20 56 65 72 73 69 6f 6e 20 76 65        Version ve
18a80 72 73 69 6f 6e 20 3d 20 28 56 65 72 73 69 6f 6e  rsion = (Version
18a90 29 76 61 6c 75 65 3b 0d 0a 0d 0a 20 20 20 20 20  )value;....     
18aa0 20 20 20 20 20 20 20 20 20 20 20 72 65 73 75 6c             resul
18ab0 74 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  t = String.Forma
18ac0 74 28 22 76 7b 30 7d 22 2c 20 76 65 72 73 69 6f  t("v{0}", versio
18ad0 6e 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n);..           
18ae0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
18af0 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20  else..          
18b00 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
18b10 20 20 20 20 20 72 65 73 75 6c 74 20 3d 20 76 61       result = va
18b20 6c 75 65 2e 54 6f 53 74 72 69 6e 67 28 29 3b 0d  lue.ToString();.
18b30 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
18b40 20 20 20 69 66 20 28 72 65 73 75 6c 74 2e 4c 65     if (result.Le
18b50 6e 67 74 68 20 3d 3d 20 30 29 0d 0a 20 20 20 20  ngth == 0)..    
18b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18b70 72 65 74 75 72 6e 20 22 3c 65 6d 70 74 79 3e 22  return "<empty>"
18b80 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
18b90 20 20 20 20 20 72 65 73 75 6c 74 20 3d 20 53 74       result = St
18ba0 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
18bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18bc0 20 20 74 79 70 65 2e 49 73 53 75 62 63 6c 61 73    type.IsSubclas
18bd0 73 4f 66 28 74 79 70 65 6f 66 28 56 61 6c 75 65  sOf(typeof(Value
18be0 54 79 70 65 29 29 20 3f 20 22 7b 30 7d 22 20 3a  Type)) ? "{0}" :
18bf0 20 22 5c 22 7b 30 7d 5c 22 22 2c 0d 0a 20 20 20   "\"{0}\"",..   
18c00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18c10 20 72 65 73 75 6c 74 29 3b 0d 0a 20 20 20 20 20   result);..     
18c20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
18c30 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 72          return r
18c40 65 73 75 6c 74 3b 0d 0a 20 20 20 20 20 20 20 20  esult;..        
18c50 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72  }..        #endr
18c60 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20  egion....       
18c70 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
18c80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18c90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18ca0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18cb0 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
18cc0 20 20 20 20 23 72 65 67 69 6f 6e 20 2e 4e 45 54      #region .NET
18cd0 20 46 72 61 6d 65 77 6f 72 6b 20 48 61 6e 64 6c   Framework Handl
18ce0 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 70 72 69  ing..        pri
18cf0 76 61 74 65 20 73 74 61 74 69 63 20 73 74 72 69  vate static stri
18d00 6e 67 20 47 65 74 49 6d 61 67 65 52 75 6e 74 69  ng GetImageRunti
18d10 6d 65 56 65 72 73 69 6f 6e 28 0d 0a 20 20 20 20  meVersion(..    
18d20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 66          string f
18d30 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20  ileName..       
18d40 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
18d50 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74  {..            t
18d60 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ry..            
18d70 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
18d80 20 20 20 41 73 73 65 6d 62 6c 79 20 61 73 73 65     Assembly asse
18d90 6d 62 6c 79 20 3d 0d 0a 20 20 20 20 20 20 20 20  mbly =..        
18da0 20 20 20 20 20 20 20 20 20 20 20 20 41 73 73 65              Asse
18db0 6d 62 6c 79 2e 52 65 66 6c 65 63 74 69 6f 6e 4f  mbly.ReflectionO
18dc0 6e 6c 79 4c 6f 61 64 46 72 6f 6d 28 66 69 6c 65  nlyLoadFrom(file
18dd0 4e 61 6d 65 29 3b 20 2f 2a 20 74 68 72 6f 77 20  Name); /* throw 
18de0 2a 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  */....          
18df0 20 20 20 20 20 20 69 66 20 28 61 73 73 65 6d 62        if (assemb
18e00 6c 79 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ly != null)..   
18e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18e20 20 72 65 74 75 72 6e 20 61 73 73 65 6d 62 6c 79   return assembly
18e30 2e 49 6d 61 67 65 52 75 6e 74 69 6d 65 56 65 72  .ImageRuntimeVer
18e40 73 69 6f 6e 3b 0d 0a 20 20 20 20 20 20 20 20 20  sion;..         
18e50 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
18e60 20 20 63 61 74 63 68 0d 0a 20 20 20 20 20 20 20    catch..       
18e70 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
18e80 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f          // do no
18e90 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20  thing...        
18ea0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
18eb0 20 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c       return null
18ec0 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  ;..        }....
18ed0 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
18ee0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18ef0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18f00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18f10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
18f20 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  ...        priva
18f30 74 65 20 73 74 61 74 69 63 20 73 74 72 69 6e 67  te static string
18f40 20 47 65 74 46 72 61 6d 65 77 6f 72 6b 44 69 72   GetFrameworkDir
18f50 65 63 74 6f 72 79 28 0d 0a 20 20 20 20 20 20 20  ectory(..       
18f60 20 20 20 20 20 52 65 67 69 73 74 72 79 4b 65 79       RegistryKey
18f70 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20 20 20   rootKey,..     
18f80 20 20 20 20 20 20 20 56 65 72 73 69 6f 6e 20 66         Version f
18f90 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 2c  rameworkVersion,
18fa0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
18fb0 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20  ol whatIf,..    
18fc0 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65 72          bool ver
18fd0 62 6f 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20  bose..          
18fe0 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a    )..        {..
18ff0 20 20 20 20 20 20 20 20 20 20 20 20 75 73 69 6e              usin
19000 67 20 28 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b  g (MockRegistryK
19010 65 79 20 6b 65 79 20 3d 20 52 65 67 69 73 74 72  ey key = Registr
19020 79 48 65 6c 70 65 72 2e 4f 70 65 6e 53 75 62 4b  yHelper.OpenSubK
19030 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ey(..           
19040 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79           rootKey
19050 2c 20 46 72 61 6d 65 77 6f 72 6b 4b 65 79 4e 61  , FrameworkKeyNa
19060 6d 65 2c 20 66 61 6c 73 65 2c 20 77 68 61 74 49  me, false, whatI
19070 66 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a 20 20  f, verbose))..  
19080 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
19090 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
190a0 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  (key == null).. 
190b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
190c0 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d     return null;.
190d0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
190e0 20 20 20 6f 62 6a 65 63 74 20 76 61 6c 75 65 20     object value 
190f0 3d 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72  = RegistryHelper
19100 2e 47 65 74 56 61 6c 75 65 28 0d 0a 20 20 20 20  .GetValue(..    
19110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19120 6b 65 79 2c 20 22 49 6e 73 74 61 6c 6c 52 6f 6f  key, "InstallRoo
19130 74 22 2c 20 6e 75 6c 6c 2c 20 77 68 61 74 49 66  t", null, whatIf
19140 2c 20 76 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20  , verbose);.... 
19150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
19160 66 20 28 21 28 76 61 6c 75 65 20 69 73 20 73 74  f (!(value is st
19170 72 69 6e 67 29 29 0d 0a 20 20 20 20 20 20 20 20  ring))..        
19180 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
19190 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20  rn null;....    
191a0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
191b0 72 6e 20 50 61 74 68 2e 43 6f 6d 62 69 6e 65 28  rn Path.Combine(
191c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
191d0 20 20 20 20 20 20 28 73 74 72 69 6e 67 29 76 61        (string)va
191e0 6c 75 65 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d  lue, String.Form
191f0 61 74 28 22 76 7b 30 7d 22 2c 20 66 72 61 6d 65  at("v{0}", frame
19200 77 6f 72 6b 56 65 72 73 69 6f 6e 29 29 3b 0d 0a  workVersion));..
19210 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
19220 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
19230 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
19240 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19250 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19260 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19270 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
19280 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
19290 74 61 74 69 63 20 73 74 72 69 6e 67 20 47 65 74  tatic string Get
192a0 53 64 6b 42 69 6e 61 72 79 46 69 6c 65 4e 61 6d  SdkBinaryFileNam
192b0 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
192c0 52 65 67 69 73 74 72 79 4b 65 79 20 72 6f 6f 74  RegistryKey root
192d0 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  Key,..          
192e0 20 20 73 74 72 69 6e 67 20 66 69 6c 65 4e 61 6d    string fileNam
192f0 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
19300 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20  bool whatIf,..  
19310 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76            bool v
19320 65 72 62 6f 73 65 0d 0a 20 20 20 20 20 20 20 20  erbose..        
19330 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b      )..        {
19340 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 74  ..            St
19350 72 69 6e 67 44 69 63 74 69 6f 6e 61 72 79 20 72  ringDictionary r
19360 65 73 75 6c 74 73 20 3d 20 6e 65 77 20 53 74 72  esults = new Str
19370 69 6e 67 44 69 63 74 69 6f 6e 61 72 79 28 29 3b  ingDictionary();
19380 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
19390 73 74 72 69 6e 67 5b 5d 20 6b 65 79 4e 61 6d 65  string[] keyName
193a0 73 20 3d 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  s = {..         
193b0 20 20 20 20 20 20 20 46 72 61 6d 65 77 6f 72 6b         Framework
193c0 4b 65 79 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20  KeyName,..      
193d0 20 20 20 20 20 20 20 20 20 20 46 72 61 6d 65 77            Framew
193e0 6f 72 6b 53 64 6b 4b 65 79 4e 61 6d 65 2c 0d 0a  orkSdkKeyName,..
193f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19400 57 69 6e 64 6f 77 73 53 64 6b 4b 65 79 4e 61 6d  WindowsSdkKeyNam
19410 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  e..            }
19420 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
19430 20 73 74 72 69 6e 67 5b 5d 20 76 61 6c 75 65 4e   string[] valueN
19440 61 6d 65 73 20 3d 20 7b 0d 0a 20 20 20 20 20 20  ames = {..      
19450 20 20 20 20 20 20 20 20 20 20 22 73 64 6b 49 6e            "sdkIn
19460 73 74 61 6c 6c 52 6f 6f 74 76 32 2e 30 22 2c 0d  stallRootv2.0",.
19470 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
19480 20 22 49 6e 73 74 61 6c 6c 61 74 69 6f 6e 46 6f   "InstallationFo
19490 6c 64 65 72 22 2c 0d 0a 20 20 20 20 20 20 20 20  lder",..        
194a0 20 20 20 20 20 20 20 20 22 49 6e 73 74 61 6c 6c          "Install
194b0 61 74 69 6f 6e 46 6f 6c 64 65 72 22 0d 0a 20 20  ationFolder"..  
194c0 20 20 20 20 20 20 20 20 20 20 7d 3b 0d 0a 0d 0a            };....
194d0 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
194e0 5b 5d 20 75 73 65 53 75 62 4b 65 79 73 20 3d 20  [] useSubKeys = 
194f0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
19500 20 20 20 66 61 6c 73 65 2c 0d 0a 20 20 20 20 20     false,..     
19510 20 20 20 20 20 20 20 20 20 20 20 74 72 75 65 2c             true,
19520 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
19530 20 20 74 72 75 65 0d 0a 20 20 20 20 20 20 20 20    true..        
19540 20 20 20 20 7d 3b 0d 0a 0d 0a 20 20 20 20 20 20      };....      
19550 20 20 20 20 20 20 66 6f 72 20 28 69 6e 74 20 69        for (int i
19560 6e 64 65 78 20 3d 20 30 3b 20 69 6e 64 65 78 20  ndex = 0; index 
19570 3c 20 6b 65 79 4e 61 6d 65 73 2e 4c 65 6e 67 74  < keyNames.Lengt
19580 68 3b 20 69 6e 64 65 78 2b 2b 29 0d 0a 20 20 20  h; index++)..   
19590 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
195a0 20 20 20 20 20 20 20 20 20 20 20 20 75 73 69 6e              usin
195b0 67 20 28 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b  g (MockRegistryK
195c0 65 79 20 6b 65 79 20 3d 20 52 65 67 69 73 74 72  ey key = Registr
195d0 79 48 65 6c 70 65 72 2e 4f 70 65 6e 53 75 62 4b  yHelper.OpenSubK
195e0 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ey(..           
195f0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f               roo
19600 74 4b 65 79 2c 20 6b 65 79 4e 61 6d 65 73 5b 69  tKey, keyNames[i
19610 6e 64 65 78 5d 2c 20 66 61 6c 73 65 2c 20 77 68  ndex], false, wh
19620 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 29 0d  atIf, verbose)).
19630 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
19640 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
19650 20 20 20 20 20 20 20 20 69 66 20 28 6b 65 79 20          if (key 
19660 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
19670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19680 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 0d 0a 20    continue;.... 
19690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
196a0 20 20 20 69 66 20 28 75 73 65 53 75 62 4b 65 79     if (useSubKey
196b0 73 5b 69 6e 64 65 78 5d 29 0d 0a 20 20 20 20 20  s[index])..     
196c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
196d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
196e0 20 20 20 20 20 20 20 20 20 20 66 6f 72 65 61 63            foreac
196f0 68 20 28 73 74 72 69 6e 67 20 73 75 62 4b 65 79  h (string subKey
19700 4e 61 6d 65 20 69 6e 20 52 65 67 69 73 74 72 79  Name in Registry
19710 48 65 6c 70 65 72 2e 47 65 74 53 75 62 4b 65 79  Helper.GetSubKey
19720 4e 61 6d 65 73 28 0d 0a 20 20 20 20 20 20 20 20  Names(..        
19730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19740 20 20 20 20 20 20 20 20 6b 65 79 2c 20 77 68 61          key, wha
19750 74 49 66 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a  tIf, verbose))..
19760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19770 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
19780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19790 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 4d 6f         using (Mo
197a0 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 73 75  ckRegistryKey su
197b0 62 4b 65 79 20 3d 20 52 65 67 69 73 74 72 79 48  bKey = RegistryH
197c0 65 6c 70 65 72 2e 4f 70 65 6e 53 75 62 4b 65 79  elper.OpenSubKey
197d0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
197e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
197f0 20 20 20 20 20 20 20 6b 65 79 2c 20 73 75 62 4b         key, subK
19800 65 79 4e 61 6d 65 2c 20 66 61 6c 73 65 2c 20 77  eyName, false, w
19810 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 29  hatIf, verbose))
19820 0d 0a 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 20 20 7b 0d                {.
19840 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
19850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19860 20 69 66 20 28 73 75 62 4b 65 79 20 3d 3d 20 6e   if (subKey == n
19870 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
19880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19890 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e            contin
198a0 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ue;....         
198b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
198c0 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 76 61         object va
198d0 6c 75 65 20 3d 20 52 65 67 69 73 74 72 79 48 65  lue = RegistryHe
198e0 6c 70 65 72 2e 47 65 74 56 61 6c 75 65 28 0d 0a  lper.GetValue(..
198f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19910 20 20 20 20 73 75 62 4b 65 79 2c 20 76 61 6c 75      subKey, valu
19920 65 4e 61 6d 65 73 5b 69 6e 64 65 78 5d 2c 20 6e  eNames[index], n
19930 75 6c 6c 2c 20 77 68 61 74 49 66 2c 0d 0a 20 20  ull, whatIf,..  
19940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19960 20 20 76 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20    verbose);.... 
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 20 69                 i
19990 66 20 28 21 28 76 61 6c 75 65 20 69 73 20 73 74  f (!(value is st
199a0 72 69 6e 67 29 29 0d 0a 20 20 20 20 20 20 20 20  ring))..        
199b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
199c0 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74              cont
199d0 69 6e 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  inue;....       
199e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
199f0 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
19a00 70 61 74 68 20 3d 20 28 73 74 72 69 6e 67 29 76  path = (string)v
19a10 61 6c 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  alue;....       
19a20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19a30 20 20 20 20 20 20 20 20 20 69 66 20 28 21 44 69           if (!Di
19a40 72 65 63 74 6f 72 79 2e 45 78 69 73 74 73 28 70  rectory.Exists(p
19a50 61 74 68 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ath))..         
19a60 20 20 20 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 63 6f 6e 74 69             conti
19a80 6e 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  nue;....        
19a90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19aa0 20 20 20 20 20 20 20 20 70 61 74 68 20 3d 20 50          path = P
19ab0 61 74 68 2e 43 6f 6d 62 69 6e 65 28 70 61 74 68  ath.Combine(path
19ac0 2c 20 22 62 69 6e 22 29 3b 0d 0a 0d 0a 20 20 20  , "bin");....   
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 69 66 20               if 
19af0 28 21 44 69 72 65 63 74 6f 72 79 2e 45 78 69 73  (!Directory.Exis
19b00 74 73 28 70 61 74 68 29 29 0d 0a 20 20 20 20 20  ts(path))..     
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 20 20 63                 c
19b30 6f 6e 74 69 6e 75 65 3b 0d 0a 0d 0a 20 20 20 20  ontinue;....    
19b40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19b50 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
19b60 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45  String.IsNullOrE
19b70 6d 70 74 79 28 66 69 6c 65 4e 61 6d 65 29 29 0d  mpty(fileName)).
19b80 0a 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 20 20 20 20                  
19ba0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
19bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19bc0 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 73 2e          results.
19bd0 41 64 64 28 73 75 62 4b 65 79 2e 4e 61 6d 65 2c  Add(subKey.Name,
19be0 20 70 61 74 68 29 3b 0d 0a 20 20 20 20 20 20 20   path);..       
19bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19c00 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
19c10 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20  tinue;..        
19c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19c30 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
19c40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19c50 20 20 20 20 20 20 20 20 20 20 20 20 20 70 61 74               pat
19c60 68 20 3d 20 50 61 74 68 2e 43 6f 6d 62 69 6e 65  h = Path.Combine
19c70 28 70 61 74 68 2c 20 66 69 6c 65 4e 61 6d 65 29  (path, fileName)
19c80 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
19c90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19ca0 20 20 20 20 20 69 66 20 28 46 69 6c 65 2e 45 78       if (File.Ex
19cb0 69 73 74 73 28 70 61 74 68 29 29 0d 0a 20 20 20  ists(path))..   
19cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19ce0 20 72 65 73 75 6c 74 73 2e 41 64 64 28 73 75 62   results.Add(sub
19cf0 4b 65 79 2e 4e 61 6d 65 2c 20 70 61 74 68 29 3b  Key.Name, path);
19d00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
19d10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
19d20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
19d30 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
19d40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19d50 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
19d60 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20         else..   
19d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19d80 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
19d90 20 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65              obje
19da0 63 74 20 76 61 6c 75 65 20 3d 20 52 65 67 69 73  ct value = Regis
19db0 74 72 79 48 65 6c 70 65 72 2e 47 65 74 56 61 6c  tryHelper.GetVal
19dc0 75 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue(..           
19dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19de0 20 6b 65 79 2c 20 76 61 6c 75 65 4e 61 6d 65 73   key, valueNames
19df0 5b 69 6e 64 65 78 5d 2c 20 6e 75 6c 6c 2c 20 77  [index], null, w
19e00 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 3b  hatIf, verbose);
19e10 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
19e20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
19e30 21 28 76 61 6c 75 65 20 69 73 20 73 74 72 69 6e  !(value is strin
19e40 67 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  g))..           
19e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19e60 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 0d 0a 20 20   continue;....  
19e70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19e80 20 20 20 20 20 20 73 74 72 69 6e 67 20 70 61 74        string pat
19e90 68 20 3d 20 28 73 74 72 69 6e 67 29 76 61 6c 75  h = (string)valu
19ea0 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
19eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
19ec0 20 28 21 44 69 72 65 63 74 6f 72 79 2e 45 78 69   (!Directory.Exi
19ed0 73 74 73 28 70 61 74 68 29 29 0d 0a 20 20 20 20  sts(path))..    
19ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19ef0 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65          continue
19f00 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
19f10 20 20 20 20 20 20 20 20 20 20 20 20 20 70 61 74               pat
19f20 68 20 3d 20 50 61 74 68 2e 43 6f 6d 62 69 6e 65  h = Path.Combine
19f30 28 70 61 74 68 2c 20 22 62 69 6e 22 29 3b 0d 0a  (path, "bin");..
19f40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
19f50 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21 44            if (!D
19f60 69 72 65 63 74 6f 72 79 2e 45 78 69 73 74 73 28  irectory.Exists(
19f70 70 61 74 68 29 29 0d 0a 20 20 20 20 20 20 20 20  path))..        
19f80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19f90 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 0d      continue;...
19fa0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
19fb0 20 20 20 20 20 20 20 20 20 69 66 20 28 53 74 72           if (Str
19fc0 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74  ing.IsNullOrEmpt
19fd0 79 28 66 69 6c 65 4e 61 6d 65 29 29 0d 0a 20 20  y(fileName))..  
19fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19ff0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
1a000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a010 20 20 20 20 20 72 65 73 75 6c 74 73 2e 41 64 64       results.Add
1a020 28 6b 65 79 2e 4e 61 6d 65 2c 20 70 61 74 68 29  (key.Name, path)
1a030 3b 0d 0a 20 20 20 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 20 63                 c
1a050 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20  ontinue;..      
1a060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a070 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
1a080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70                 p
1a090 61 74 68 20 3d 20 50 61 74 68 2e 43 6f 6d 62 69  ath = Path.Combi
1a0a0 6e 65 28 70 61 74 68 2c 20 66 69 6c 65 4e 61 6d  ne(path, fileNam
1a0b0 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e);....         
1a0c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
1a0d0 66 20 28 46 69 6c 65 2e 45 78 69 73 74 73 28 70  f (File.Exists(p
1a0e0 61 74 68 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ath))..         
1a0f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a100 20 20 20 72 65 73 75 6c 74 73 2e 41 64 64 28 6b     results.Add(k
1a110 65 79 2e 4e 61 6d 65 2c 20 70 61 74 68 29 3b 0d  ey.Name, path);.
1a120 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1a130 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
1a140 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
1a150 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
1a160 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
1a170 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a          // NOTE:
1a180 20 49 66 20 77 65 20 66 6f 75 6e 64 20 73 6f 6d   If we found som
1a190 65 20 72 65 73 75 6c 74 73 2c 20 72 65 74 75 72  e results, retur
1a1a0 6e 20 74 68 65 20 6c 61 73 74 20 28 6c 61 74 65  n the last (late
1a1b0 73 74 29 20 6f 6e 65 2e 0d 0a 20 20 20 20 20 20  st) one...      
1a1c0 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
1a1d0 20 20 20 20 20 20 69 66 20 28 72 65 73 75 6c 74        if (result
1a1e0 73 2e 43 6f 75 6e 74 20 3e 20 30 29 0d 0a 20 20  s.Count > 0)..  
1a1f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
1a200 74 75 72 6e 20 72 65 73 75 6c 74 73 5b 6e 65 77  turn results[new
1a210 20 53 74 72 69 6e 67 4c 69 73 74 28 72 65 73 75   StringList(resu
1a220 6c 74 73 2e 4b 65 79 73 29 5b 72 65 73 75 6c 74  lts.Keys)[result
1a230 73 2e 43 6f 75 6e 74 20 2d 20 31 5d 5d 3b 0d 0a  s.Count - 1]];..
1a240 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
1a250 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20  turn null;..    
1a260 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23      }..        #
1a270 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20  endregion....   
1a280 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
1a290 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a2a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a2b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a2c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
1a2d0 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20          #region 
1a2e0 50 65 72 2d 46 72 61 6d 65 77 6f 72 6b 2f 50 6c  Per-Framework/Pl
1a2f0 61 74 66 6f 72 6d 20 48 61 6e 64 6c 69 6e 67 0d  atform Handling.
1a300 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
1a310 20 73 74 61 74 69 63 20 76 6f 69 64 20 49 6e 69   static void Ini
1a320 74 69 61 6c 69 7a 65 46 72 61 6d 65 77 6f 72 6b  tializeFramework
1a330 4c 69 73 74 28 0d 0a 20 20 20 20 20 20 20 20 20  List(..         
1a340 20 20 20 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e     Configuration
1a350 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2c 0d   configuration,.
1a360 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66  .            ref
1a370 20 46 72 61 6d 65 77 6f 72 6b 4c 69 73 74 20 66   FrameworkList f
1a380 72 61 6d 65 77 6f 72 6b 4c 69 73 74 0d 0a 20 20  rameworkList..  
1a390 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
1a3a0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
1a3b0 20 20 20 20 69 66 20 28 66 72 61 6d 65 77 6f 72      if (framewor
1a3c0 6b 4c 69 73 74 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  kList == null)..
1a3d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a3e0 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 20 3d 20  frameworkList = 
1a3f0 6e 65 77 20 46 72 61 6d 65 77 6f 72 6b 4c 69 73  new FrameworkLis
1a400 74 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  t();....        
1a410 20 20 20 20 69 66 20 28 66 72 61 6d 65 77 6f 72      if (framewor
1a420 6b 4c 69 73 74 2e 52 6f 6f 74 4b 65 79 20 3d 3d  kList.RootKey ==
1a430 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
1a440 20 20 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72          framewor
1a450 6b 4c 69 73 74 2e 52 6f 6f 74 4b 65 79 20 3d 20  kList.RootKey = 
1a460 52 65 67 69 73 74 72 79 2e 4c 6f 63 61 6c 4d 61  Registry.LocalMa
1a470 63 68 69 6e 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  chine;....      
1a480 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
1a490 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a4a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a4b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a4c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
1a4d0 20 20 20 20 20 20 20 20 20 69 66 20 28 66 72 61           if (fra
1a4e0 6d 65 77 6f 72 6b 4c 69 73 74 2e 4e 61 6d 65 73  meworkList.Names
1a4f0 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
1a500 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
1a510 20 20 20 20 20 20 20 20 20 20 66 72 61 6d 65 77            framew
1a520 6f 72 6b 4c 69 73 74 2e 4e 61 6d 65 73 20 3d 20  orkList.Names = 
1a530 6e 65 77 20 53 74 72 69 6e 67 4c 69 73 74 28 29  new StringList()
1a540 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
1a550 20 20 20 20 20 69 66 20 28 28 63 6f 6e 66 69 67       if ((config
1a560 75 72 61 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29  uration == null)
1a570 20 7c 7c 20 21 63 6f 6e 66 69 67 75 72 61 74 69   || !configurati
1a580 6f 6e 2e 4e 6f 44 65 73 6b 74 6f 70 29 0d 0a 20  on.NoDesktop).. 
1a590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a5a0 20 20 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74     frameworkList
1a5b0 2e 4e 61 6d 65 73 2e 41 64 64 28 22 2e 4e 45 54  .Names.Add(".NET
1a5c0 46 72 61 6d 65 77 6f 72 6b 22 29 3b 0d 0a 0d 0a  Framework");....
1a5d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a5e0 69 66 20 28 28 63 6f 6e 66 69 67 75 72 61 74 69  if ((configurati
1a5f0 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20 21  on == null) || !
1a600 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 4e 6f  configuration.No
1a610 43 6f 6d 70 61 63 74 29 0d 0a 20 20 20 20 20 20  Compact)..      
1a620 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
1a630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a640 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 4e   frameworkList.N
1a650 61 6d 65 73 2e 41 64 64 28 22 2e 4e 45 54 43 6f  ames.Add(".NETCo
1a660 6d 70 61 63 74 46 72 61 6d 65 77 6f 72 6b 22 29  mpactFramework")
1a670 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
1a680 20 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b         framework
1a690 4c 69 73 74 2e 4e 61 6d 65 73 2e 41 64 64 28 22  List.Names.Add("
1a6a0 2e 4e 45 54 43 6f 6d 70 61 63 74 46 72 61 6d 65  .NETCompactFrame
1a6b0 77 6f 72 6b 22 29 3b 0d 0a 20 20 20 20 20 20 20  work");..       
1a6c0 20 20 20 20 20 20 20 20 20 20 20 20 20 66 72 61               fra
1a6d0 6d 65 77 6f 72 6b 4c 69 73 74 2e 4e 61 6d 65 73  meworkList.Names
1a6e0 2e 41 64 64 28 22 2e 4e 45 54 43 6f 6d 70 61 63  .Add(".NETCompac
1a6f0 74 46 72 61 6d 65 77 6f 72 6b 22 29 3b 0d 0a 20  tFramework");.. 
1a700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
1a710 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
1a720 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
1a730 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a740 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a750 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a760 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a770 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
1a780 20 20 69 66 20 28 66 72 61 6d 65 77 6f 72 6b 4c    if (frameworkL
1a790 69 73 74 2e 56 65 72 73 69 6f 6e 73 20 3d 3d 20  ist.Versions == 
1a7a0 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
1a7b0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
1a7c0 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 4c        frameworkL
1a7d0 69 73 74 2e 56 65 72 73 69 6f 6e 73 20 3d 20 6e  ist.Versions = n
1a7e0 65 77 20 56 65 72 73 69 6f 6e 4d 61 70 28 29 3b  ew VersionMap();
1a7f0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1a800 20 20 20 20 69 66 20 28 28 63 6f 6e 66 69 67 75      if ((configu
1a810 72 61 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 20  ration == null) 
1a820 7c 7c 20 21 63 6f 6e 66 69 67 75 72 61 74 69 6f  || !configuratio
1a830 6e 2e 4e 6f 44 65 73 6b 74 6f 70 29 0d 0a 20 20  n.NoDesktop)..  
1a840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
1a850 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1a860 20 20 20 20 20 56 65 72 73 69 6f 6e 4c 69 73 74       VersionList
1a870 20 64 65 73 6b 74 6f 70 56 65 72 73 69 6f 6e 4c   desktopVersionL
1a880 69 73 74 20 3d 20 6e 65 77 20 56 65 72 73 69 6f  ist = new Versio
1a890 6e 4c 69 73 74 28 29 3b 0d 0a 0d 0a 20 20 20 20  nList();....    
1a8a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a8b0 69 66 20 28 28 63 6f 6e 66 69 67 75 72 61 74 69  if ((configurati
1a8c0 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20 21  on == null) || !
1a8d0 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 4e 6f  configuration.No
1a8e0 4e 65 74 46 78 32 30 29 0d 0a 20 20 20 20 20 20  NetFx20)..      
1a8f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a900 20 20 64 65 73 6b 74 6f 70 56 65 72 73 69 6f 6e    desktopVersion
1a910 4c 69 73 74 2e 41 64 64 28 6e 65 77 20 56 65 72  List.Add(new Ver
1a920 73 69 6f 6e 28 32 2c 20 30 2c 20 35 30 37 32 37  sion(2, 0, 50727
1a930 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ));....         
1a940 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 28             if ((
1a950 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 3d 3d  configuration ==
1a960 20 6e 75 6c 6c 29 20 7c 7c 20 21 63 6f 6e 66 69   null) || !confi
1a970 67 75 72 61 74 69 6f 6e 2e 4e 6f 4e 65 74 46 78  guration.NoNetFx
1a980 34 30 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  40)..           
1a990 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65 73               des
1a9a0 6b 74 6f 70 56 65 72 73 69 6f 6e 4c 69 73 74 2e  ktopVersionList.
1a9b0 41 64 64 28 6e 65 77 20 56 65 72 73 69 6f 6e 28  Add(new Version(
1a9c0 34 2c 20 30 2c 20 33 30 33 31 39 29 29 3b 0d 0a  4, 0, 30319));..
1a9d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1a9e0 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 4c        frameworkL
1a9f0 69 73 74 2e 56 65 72 73 69 6f 6e 73 2e 41 64 64  ist.Versions.Add
1aa00 28 22 2e 4e 45 54 46 72 61 6d 65 77 6f 72 6b 22  (".NETFramework"
1aa10 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
1aa20 20 20 20 20 20 20 20 20 20 20 20 64 65 73 6b 74             deskt
1aa30 6f 70 56 65 72 73 69 6f 6e 4c 69 73 74 29 3b 0d  opVersionList);.
1aa40 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1aa50 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
1aa60 20 20 20 20 20 20 69 66 20 28 28 63 6f 6e 66 69        if ((confi
1aa70 67 75 72 61 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c  guration == null
1aa80 29 20 7c 7c 20 21 63 6f 6e 66 69 67 75 72 61 74  ) || !configurat
1aa90 69 6f 6e 2e 4e 6f 43 6f 6d 70 61 63 74 29 0d 0a  ion.NoCompact)..
1aaa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1aab0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
1aac0 20 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b         framework
1aad0 4c 69 73 74 2e 56 65 72 73 69 6f 6e 73 2e 41 64  List.Versions.Ad
1aae0 64 28 22 2e 4e 45 54 43 6f 6d 70 61 63 74 46 72  d(".NETCompactFr
1aaf0 61 6d 65 77 6f 72 6b 22 2c 0d 0a 20 20 20 20 20  amework",..     
1ab00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ab10 20 20 20 6e 65 77 20 56 65 72 73 69 6f 6e 4c 69     new VersionLi
1ab20 73 74 28 6e 65 77 20 56 65 72 73 69 6f 6e 5b 5d  st(new Version[]
1ab30 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
1ab40 20 20 20 20 20 20 20 20 20 20 20 20 6e 65 77 20              new 
1ab50 56 65 72 73 69 6f 6e 28 32 2c 20 30 2c 20 30 2c  Version(2, 0, 0,
1ab60 20 30 29 2c 20 6e 65 77 20 56 65 72 73 69 6f 6e   0), new Version
1ab70 28 33 2c 20 35 2c 20 30 2c 20 30 29 0d 0a 20 20  (3, 5, 0, 0)..  
1ab80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ab90 20 20 7d 29 29 3b 0d 0a 20 20 20 20 20 20 20 20    }));..        
1aba0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
1abb0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
1abc0 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
1abd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1abe0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1abf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ac00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
1ac10 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 66             if (f
1ac20 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 50 6c 61  rameworkList.Pla
1ac30 74 66 6f 72 6d 4e 61 6d 65 73 20 3d 3d 20 6e 75  tformNames == nu
1ac40 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
1ac50 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
1ac60 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73      frameworkLis
1ac70 74 2e 50 6c 61 74 66 6f 72 6d 4e 61 6d 65 73 20  t.PlatformNames 
1ac80 3d 20 6e 65 77 20 53 74 72 69 6e 67 4c 69 73 74  = new StringList
1ac90 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ();....         
1aca0 20 20 20 20 20 20 20 69 66 20 28 28 63 6f 6e 66         if ((conf
1acb0 69 67 75 72 61 74 69 6f 6e 20 3d 3d 20 6e 75 6c  iguration == nul
1acc0 6c 29 20 7c 7c 20 21 63 6f 6e 66 69 67 75 72 61  l) || !configura
1acd0 74 69 6f 6e 2e 4e 6f 44 65 73 6b 74 6f 70 29 0d  tion.NoDesktop).
1ace0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1acf0 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 4c 69       frameworkLi
1ad00 73 74 2e 50 6c 61 74 66 6f 72 6d 4e 61 6d 65 73  st.PlatformNames
1ad10 2e 41 64 64 28 6e 75 6c 6c 29 3b 0d 0a 0d 0a 20  .Add(null);.... 
1ad20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
1ad30 66 20 28 28 63 6f 6e 66 69 67 75 72 61 74 69 6f  f ((configuratio
1ad40 6e 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20 21 63  n == null) || !c
1ad50 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 4e 6f 43  onfiguration.NoC
1ad60 6f 6d 70 61 63 74 29 0d 0a 20 20 20 20 20 20 20  ompact)..       
1ad70 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
1ad80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ad90 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 50 6c  frameworkList.Pl
1ada0 61 74 66 6f 72 6d 4e 61 6d 65 73 2e 41 64 64 28  atformNames.Add(
1adb0 22 50 6f 63 6b 65 74 50 43 22 29 3b 0d 0a 20 20  "PocketPC");..  
1adc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1add0 20 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e    frameworkList.
1ade0 50 6c 61 74 66 6f 72 6d 4e 61 6d 65 73 2e 41 64  PlatformNames.Ad
1adf0 64 28 22 53 6d 61 72 74 70 68 6f 6e 65 22 29 3b  d("Smartphone");
1ae00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1ae10 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 4c        frameworkL
1ae20 69 73 74 2e 50 6c 61 74 66 6f 72 6d 4e 61 6d 65  ist.PlatformName
1ae30 73 2e 41 64 64 28 22 57 69 6e 64 6f 77 73 43 45  s.Add("WindowsCE
1ae40 22 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ");..           
1ae50 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
1ae60 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d      }..        }
1ae70 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
1ae80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ae90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1aea0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1aeb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1aec0 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70  ///....        p
1aed0 72 69 76 61 74 65 20 73 74 61 74 69 63 20 62 6f  rivate static bo
1aee0 6f 6c 20 48 61 76 65 46 72 61 6d 65 77 6f 72 6b  ol HaveFramework
1aef0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 52  (..            R
1af00 65 67 69 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b  egistryKey rootK
1af10 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ey,..           
1af20 20 73 74 72 69 6e 67 20 66 72 61 6d 65 77 6f 72   string framewor
1af30 6b 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20  kName,..        
1af40 20 20 20 20 56 65 72 73 69 6f 6e 20 66 72 61 6d      Version fram
1af50 65 77 6f 72 6b 56 65 72 73 69 6f 6e 2c 0d 0a 20  eworkVersion,.. 
1af60 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
1af70 67 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 2c 0d  g platformName,.
1af80 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f  .            boo
1af90 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20  l whatIf,..     
1afa0 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62         bool verb
1afb0 6f 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ose..           
1afc0 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20   )..        {.. 
1afd0 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
1afe0 67 20 66 6f 72 6d 61 74 20 3d 20 21 53 74 72 69  g format = !Stri
1aff0 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79  ng.IsNullOrEmpty
1b000 28 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 29 20 3f  (platformName) ?
1b010 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1b020 20 20 22 53 6f 66 74 77 61 72 65 5c 5c 4d 69 63    "Software\\Mic
1b030 72 6f 73 6f 66 74 5c 5c 7b 30 7d 5c 5c 76 7b 31  rosoft\\{0}\\v{1
1b040 7d 5c 5c 7b 32 7d 22 20 3a 0d 0a 20 20 20 20 20  }\\{2}" :..     
1b050 20 20 20 20 20 20 20 20 20 20 20 22 53 6f 66 74             "Soft
1b060 77 61 72 65 5c 5c 4d 69 63 72 6f 73 6f 66 74 5c  ware\\Microsoft\
1b070 5c 7b 30 7d 5c 5c 76 7b 31 7d 22 3b 0d 0a 0d 0a  \{0}\\v{1}";....
1b080 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
1b090 6e 67 20 6b 65 79 4e 61 6d 65 20 3d 20 53 74 72  ng keyName = Str
1b0a0 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
1b0b0 20 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72               for
1b0c0 6d 61 74 2c 20 66 72 61 6d 65 77 6f 72 6b 4e 61  mat, frameworkNa
1b0d0 6d 65 2c 20 66 72 61 6d 65 77 6f 72 6b 56 65 72  me, frameworkVer
1b0e0 73 69 6f 6e 2c 20 70 6c 61 74 66 6f 72 6d 4e 61  sion, platformNa
1b0f0 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  me);....        
1b100 20 20 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52      using (MockR
1b110 65 67 69 73 74 72 79 4b 65 79 20 6b 65 79 20 3d  egistryKey key =
1b120 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e   RegistryHelper.
1b130 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20  OpenSubKey(..   
1b140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b150 20 72 6f 6f 74 4b 65 79 2c 20 6b 65 79 4e 61 6d   rootKey, keyNam
1b160 65 2c 20 66 61 6c 73 65 2c 20 77 68 61 74 49 66  e, false, whatIf
1b170 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a 20 20 20  , verbose))..   
1b180 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
1b190 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
1b1a0 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  key == null)..  
1b1b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b1c0 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
1b1d0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
1b1e0 20 20 20 69 66 20 28 70 6c 61 74 66 6f 72 6d 4e     if (platformN
1b1f0 61 6d 65 20 21 3d 20 6e 75 6c 6c 29 20 2f 2f 20  ame != null) // 
1b200 4e 4f 54 45 3a 20 53 6b 69 70 20 6e 6f 6e 2d 64  NOTE: Skip non-d
1b210 65 73 6b 74 6f 70 2e 0d 0a 20 20 20 20 20 20 20  esktop...       
1b220 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
1b230 75 72 6e 20 74 72 75 65 3b 0d 0a 0d 0a 20 20 20  urn true;....   
1b240 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72               str
1b250 69 6e 67 20 64 69 72 65 63 74 6f 72 79 20 3d 20  ing directory = 
1b260 47 65 74 46 72 61 6d 65 77 6f 72 6b 44 69 72 65  GetFrameworkDire
1b270 63 74 6f 72 79 28 0d 0a 20 20 20 20 20 20 20 20  ctory(..        
1b280 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74              root
1b290 4b 65 79 2c 20 66 72 61 6d 65 77 6f 72 6b 56 65  Key, frameworkVe
1b2a0 72 73 69 6f 6e 2c 20 77 68 61 74 49 66 2c 20 76  rsion, whatIf, v
1b2b0 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20  erbose);....    
1b2c0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
1b2d0 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45  String.IsNullOrE
1b2e0 6d 70 74 79 28 64 69 72 65 63 74 6f 72 79 29 29  mpty(directory))
1b2f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1b300 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
1b310 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  se;....         
1b320 20 20 20 20 20 20 20 69 66 20 28 21 44 69 72 65         if (!Dire
1b330 63 74 6f 72 79 2e 45 78 69 73 74 73 28 64 69 72  ctory.Exists(dir
1b340 65 63 74 6f 72 79 29 29 0d 0a 20 20 20 20 20 20  ectory))..      
1b350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
1b360 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20  turn false;.... 
1b370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
1b380 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20  eturn true;..   
1b390 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
1b3a0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
1b3b0 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
1b3c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b3d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b3e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b3f0 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
1b400 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74      private stat
1b410 69 63 20 62 6f 6f 6c 20 46 6f 72 45 61 63 68 46  ic bool ForEachF
1b420 72 61 6d 65 77 6f 72 6b 43 6f 6e 66 69 67 28 0d  rameworkConfig(.
1b430 0a 20 20 20 20 20 20 20 20 20 20 20 20 46 72 61  .            Fra
1b440 6d 65 77 6f 72 6b 4c 69 73 74 20 66 72 61 6d 65  meworkList frame
1b450 77 6f 72 6b 4c 69 73 74 2c 0d 0a 20 20 20 20 20  workList,..     
1b460 20 20 20 20 20 20 20 46 72 61 6d 65 77 6f 72 6b         Framework
1b470 43 6f 6e 66 69 67 43 61 6c 6c 62 61 63 6b 20 63  ConfigCallback c
1b480 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20  allback,..      
1b490 20 20 20 20 20 20 73 74 72 69 6e 67 20 69 6e 76        string inv
1b4a0 61 72 69 61 6e 74 2c 0d 0a 20 20 20 20 20 20 20  ariant,..       
1b4b0 20 20 20 20 20 73 74 72 69 6e 67 20 6e 61 6d 65       string name
1b4c0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  ,..            s
1b4d0 74 72 69 6e 67 20 64 65 73 63 72 69 70 74 69 6f  tring descriptio
1b4e0 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n,..            
1b4f0 73 74 72 69 6e 67 20 74 79 70 65 4e 61 6d 65 2c  string typeName,
1b500 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 41 73  ..            As
1b510 73 65 6d 62 6c 79 4e 61 6d 65 20 61 73 73 65 6d  semblyName assem
1b520 62 6c 79 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20  blyName,..      
1b530 20 20 20 20 20 20 6f 62 6a 65 63 74 20 63 6c 69        object cli
1b540 65 6e 74 44 61 74 61 2c 0d 0a 20 20 20 20 20 20  entData,..      
1b550 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49        bool whatI
1b560 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  f,..            
1b570 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 0d 0a 20  bool verbose,.. 
1b580 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20 62             ref b
1b590 6f 6f 6c 20 73 61 76 65 64 2c 0d 0a 20 20 20 20  ool saved,..    
1b5a0 20 20 20 20 20 20 20 20 72 65 66 20 73 74 72 69          ref stri
1b5b0 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20 20 20 20  ng error..      
1b5c0 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
1b5d0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
1b5e0 69 66 20 28 66 72 61 6d 65 77 6f 72 6b 4c 69 73  if (frameworkLis
1b5f0 74 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  t == null)..    
1b600 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
1b610 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72             error
1b620 20 3d 20 22 69 6e 76 61 6c 69 64 20 66 72 61 6d   = "invalid fram
1b630 65 77 6f 72 6b 20 6c 69 73 74 22 3b 0d 0a 20 20  ework list";..  
1b640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
1b650 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20  turn false;..   
1b660 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
1b670 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74            Regist
1b680 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79 20 3d 20  ryKey rootKey = 
1b690 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 52 6f  frameworkList.Ro
1b6a0 6f 74 4b 65 79 3b 0d 0a 0d 0a 20 20 20 20 20 20  otKey;....      
1b6b0 20 20 20 20 20 20 69 66 20 28 72 6f 6f 74 4b 65        if (rootKe
1b6c0 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  y == null)..    
1b6d0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
1b6e0 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72             error
1b6f0 20 3d 20 22 69 6e 76 61 6c 69 64 20 72 6f 6f 74   = "invalid root
1b700 20 6b 65 79 22 3b 0d 0a 20 20 20 20 20 20 20 20   key";..        
1b710 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
1b720 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alse;..         
1b730 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
1b740 20 20 20 20 69 66 20 28 21 4f 62 6a 65 63 74 2e      if (!Object.
1b750 52 65 66 65 72 65 6e 63 65 45 71 75 61 6c 73 28  ReferenceEquals(
1b760 72 6f 6f 74 4b 65 79 2c 20 52 65 67 69 73 74 72  rootKey, Registr
1b770 79 2e 43 75 72 72 65 6e 74 55 73 65 72 29 20 26  y.CurrentUser) &
1b780 26 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  &..             
1b790 20 20 20 21 4f 62 6a 65 63 74 2e 52 65 66 65 72     !Object.Refer
1b7a0 65 6e 63 65 45 71 75 61 6c 73 28 72 6f 6f 74 4b  enceEquals(rootK
1b7b0 65 79 2c 20 52 65 67 69 73 74 72 79 2e 4c 6f 63  ey, Registry.Loc
1b7c0 61 6c 4d 61 63 68 69 6e 65 29 29 0d 0a 20 20 20  alMachine))..   
1b7d0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
1b7e0 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
1b7f0 72 20 3d 20 22 72 6f 6f 74 20 6b 65 79 20 6d 75  r = "root key mu
1b800 73 74 20 62 65 20 70 65 72 2d 75 73 65 72 20 6f  st be per-user o
1b810 72 20 70 65 72 2d 6d 61 63 68 69 6e 65 22 3b 0d  r per-machine";.
1b820 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1b830 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
1b840 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
1b850 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
1b860 28 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 4e  (frameworkList.N
1b870 61 6d 65 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  ames == null).. 
1b880 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
1b890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72                er
1b8a0 72 6f 72 20 3d 20 22 6e 6f 20 66 72 61 6d 65 77  ror = "no framew
1b8b0 6f 72 6b 20 6e 61 6d 65 73 20 66 6f 75 6e 64 22  ork names found"
1b8c0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
1b8d0 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
1b8e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
1b8f0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
1b900 66 20 28 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74  f (frameworkList
1b910 2e 56 65 72 73 69 6f 6e 73 20 3d 3d 20 6e 75 6c  .Versions == nul
1b920 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
1b930 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
1b940 20 20 20 65 72 72 6f 72 20 3d 20 22 6e 6f 20 66     error = "no f
1b950 72 61 6d 65 77 6f 72 6b 20 76 65 72 73 69 6f 6e  ramework version
1b960 73 20 66 6f 75 6e 64 22 3b 0d 0a 20 20 20 20 20  s found";..     
1b970 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
1b980 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  n false;..      
1b990 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
1b9a0 20 20 20 20 20 20 20 69 66 20 28 66 72 61 6d 65         if (frame
1b9b0 77 6f 72 6b 4c 69 73 74 2e 50 6c 61 74 66 6f 72  workList.Platfor
1b9c0 6d 4e 61 6d 65 73 20 3d 3d 20 6e 75 6c 6c 29 0d  mNames == null).
1b9d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
1b9e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b9f0 65 72 72 6f 72 20 3d 20 22 6e 6f 20 70 6c 61 74  error = "no plat
1ba00 66 6f 72 6d 20 6e 61 6d 65 73 20 66 6f 75 6e 64  form names found
1ba10 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ";..            
1ba20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
1ba30 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
1ba40 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1ba50 69 66 20 28 66 72 61 6d 65 77 6f 72 6b 4c 69 73  if (frameworkLis
1ba60 74 2e 4e 61 6d 65 73 2e 43 6f 75 6e 74 20 21 3d  t.Names.Count !=
1ba70 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 50   frameworkList.P
1ba80 6c 61 74 66 6f 72 6d 4e 61 6d 65 73 2e 43 6f 75  latformNames.Cou
1ba90 6e 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  nt)..           
1baa0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
1bab0 20 20 20 20 65 72 72 6f 72 20 3d 20 53 74 72 69      error = Stri
1bac0 6e 67 2e 46 6f 72 6d 61 74 28 22 66 72 61 6d 65  ng.Format("frame
1bad0 77 6f 72 6b 20 6e 61 6d 65 20 63 6f 75 6e 74 20  work name count 
1bae0 7b 30 7d 20 64 6f 65 73 20 6e 6f 74 20 22 20 2b  {0} does not " +
1baf0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1bb00 20 20 20 20 20 20 22 6d 61 74 63 68 20 70 6c 61        "match pla
1bb10 74 66 6f 72 6d 20 6e 61 6d 65 20 63 6f 75 6e 74  tform name count
1bb20 20 7b 31 7d 22 2c 20 66 72 61 6d 65 77 6f 72 6b   {1}", framework
1bb30 4c 69 73 74 2e 4e 61 6d 65 73 2e 43 6f 75 6e 74  List.Names.Count
1bb40 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
1bb50 20 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b         framework
1bb60 4c 69 73 74 2e 50 6c 61 74 66 6f 72 6d 4e 61 6d  List.PlatformNam
1bb70 65 73 2e 43 6f 75 6e 74 29 3b 0d 0a 0d 0a 20 20  es.Count);....  
1bb80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
1bb90 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20  turn false;..   
1bba0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
1bbb0 20 20 20 20 20 20 20 20 20 20 66 6f 72 20 28 69            for (i
1bbc0 6e 74 20 69 6e 64 65 78 20 3d 20 30 3b 20 69 6e  nt index = 0; in
1bbd0 64 65 78 20 3c 20 66 72 61 6d 65 77 6f 72 6b 4c  dex < frameworkL
1bbe0 69 73 74 2e 4e 61 6d 65 73 2e 43 6f 75 6e 74 3b  ist.Names.Count;
1bbf0 20 69 6e 64 65 78 2b 2b 29 0d 0a 20 20 20 20 20   index++)..     
1bc00 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
1bc10 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
1bc20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
1bc30 20 4e 4f 54 45 3a 20 47 72 61 62 20 74 68 65 20   NOTE: Grab the 
1bc40 6e 61 6d 65 20 6f 66 20 74 68 65 20 66 72 61 6d  name of the fram
1bc50 65 77 6f 72 6b 20 28 65 2e 67 2e 20 22 2e 4e 45  ework (e.g. ".NE
1bc60 54 46 72 61 6d 65 77 6f 72 6b 22 29 0d 0a 20 20  TFramework")..  
1bc70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
1bc80 20 20 20 20 20 20 20 61 6e 64 20 74 68 65 20 6e         and the n
1bc90 61 6d 65 20 6f 66 20 74 68 65 20 70 6c 61 74 66  ame of the platf
1bca0 6f 72 6d 20 28 65 2e 67 2e 20 22 57 69 6e 64 6f  orm (e.g. "Windo
1bcb0 77 73 43 45 22 29 2e 0d 0a 20 20 20 20 20 20 20  wsCE")...       
1bcc0 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
1bcd0 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72               str
1bce0 69 6e 67 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d  ing frameworkNam
1bcf0 65 20 3d 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73  e = frameworkLis
1bd00 74 2e 4e 61 6d 65 73 5b 69 6e 64 65 78 5d 3b 0d  t.Names[index];.
1bd10 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1bd20 20 73 74 72 69 6e 67 20 70 6c 61 74 66 6f 72 6d   string platform
1bd30 4e 61 6d 65 20 3d 20 66 72 61 6d 65 77 6f 72 6b  Name = framework
1bd40 4c 69 73 74 2e 50 6c 61 74 66 6f 72 6d 4e 61 6d  List.PlatformNam
1bd50 65 73 5b 69 6e 64 65 78 5d 3b 0d 0a 0d 0a 20 20  es[index];....  
1bd60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
1bd70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1bd80 20 20 2f 2f 20 4e 4f 54 45 3a 20 53 6b 69 70 20    // NOTE: Skip 
1bd90 61 6c 6c 20 6e 6f 6e 2d 64 65 73 6b 74 6f 70 20  all non-desktop 
1bda0 66 72 61 6d 65 77 6f 72 6b 73 20 28 69 2e 65 2e  frameworks (i.e.
1bdb0 20 69 66 20 74 68 65 20 70 6c 61 74 66 6f 72 6d   if the platform
1bdc0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1bdd0 20 20 2f 2f 20 20 20 20 20 20 20 6e 61 6d 65 20    //       name 
1bde0 69 73 20 6e 6f 74 20 6e 75 6c 6c 29 2e 0d 0a 20  is not null)... 
1bdf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1be00 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
1be10 20 20 20 69 66 20 28 70 6c 61 74 66 6f 72 6d 4e     if (platformN
1be20 61 6d 65 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20  ame != null)..  
1be30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1be40 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 0d 0a 20    continue;.... 
1be50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1be60 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
1be70 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 47 72 61 62     // NOTE: Grab
1be80 20 74 68 65 20 73 75 70 70 6f 72 74 65 64 20 76   the supported v
1be90 65 72 73 69 6f 6e 73 20 6f 66 20 74 68 69 73 20  ersions of this 
1bea0 70 61 72 74 69 63 75 6c 61 72 0d 0a 20 20 20 20  particular..    
1beb0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
1bec0 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 2e 0d       framework..
1bed0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1bee0 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
1bef0 20 20 20 20 20 56 65 72 73 69 6f 6e 4c 69 73 74       VersionList
1bf00 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f   frameworkVersio
1bf10 6e 4c 69 73 74 3b 0d 0a 0d 0a 20 20 20 20 20 20  nList;....      
1bf20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21 66            if (!f
1bf30 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 56 65 72  rameworkList.Ver
1bf40 73 69 6f 6e 73 2e 54 72 79 47 65 74 56 61 6c 75  sions.TryGetValu
1bf50 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
1bf60 20 20 20 20 20 20 20 20 20 20 20 20 66 72 61 6d              fram
1bf70 65 77 6f 72 6b 4e 61 6d 65 2c 20 6f 75 74 20 66  eworkName, out f
1bf80 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 4c  rameworkVersionL
1bf90 69 73 74 29 20 7c 7c 0d 0a 20 20 20 20 20 20 20  ist) ||..       
1bfa0 20 20 20 20 20 20 20 20 20 20 20 20 20 28 66 72               (fr
1bfb0 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 4c 69  ameworkVersionLi
1bfc0 73 74 20 3d 3d 20 6e 75 6c 6c 29 29 0d 0a 20 20  st == null))..  
1bfd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
1bfe0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1bff0 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a       continue;..
1c000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c010 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
1c020 20 20 20 20 20 66 6f 72 65 61 63 68 20 28 56 65       foreach (Ve
1c030 72 73 69 6f 6e 20 66 72 61 6d 65 77 6f 72 6b 56  rsion frameworkV
1c040 65 72 73 69 6f 6e 20 69 6e 20 66 72 61 6d 65 77  ersion in framew
1c050 6f 72 6b 56 65 72 73 69 6f 6e 4c 69 73 74 29 0d  orkVersionList).
1c060 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1c070 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
1c080 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73          TraceOps
1c090 2e 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20  .Trace(..       
1c0a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c0b0 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c   TracePriority.L
1c0c0 6f 77 65 72 2c 20 74 72 61 63 65 43 61 6c 6c 62  ower, traceCallb
1c0d0 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d  ack, String.Form
1c0e0 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
1c0f0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 66 72               "fr
1c100 61 6d 65 77 6f 72 6b 4e 61 6d 65 20 3d 20 7b 30  ameworkName = {0
1c110 7d 2c 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73  }, frameworkVers
1c120 69 6f 6e 20 3d 20 7b 31 7d 2c 20 22 20 2b 0d 0a  ion = {1}, " +..
1c130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c140 20 20 20 20 20 20 20 20 22 70 6c 61 74 66 6f 72          "platfor
1c150 6d 4e 61 6d 65 20 3d 20 7b 32 7d 22 2c 20 46 6f  mName = {2}", Fo
1c160 72 44 69 73 70 6c 61 79 28 66 72 61 6d 65 77 6f  rDisplay(framewo
1c170 72 6b 4e 61 6d 65 29 2c 0d 0a 20 20 20 20 20 20  rkName),..      
1c180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c190 20 20 46 6f 72 44 69 73 70 6c 61 79 28 66 72 61    ForDisplay(fra
1c1a0 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 29 2c 0d  meworkVersion),.
1c1b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1c1c0 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70           ForDisp
1c1d0 6c 61 79 28 70 6c 61 74 66 6f 72 6d 4e 61 6d 65  lay(platformName
1c1e0 29 29 2c 20 74 72 61 63 65 43 61 74 65 67 6f 72  )), traceCategor
1c1f0 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
1c200 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21             if (!
1c210 48 61 76 65 46 72 61 6d 65 77 6f 72 6b 28 0d 0a  HaveFramework(..
1c220 20 20 20 20 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 72 6f 6f 74              root
1c240 4b 65 79 2c 20 66 72 61 6d 65 77 6f 72 6b 4e 61  Key, frameworkNa
1c250 6d 65 2c 20 66 72 61 6d 65 77 6f 72 6b 56 65 72  me, frameworkVer
1c260 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20  sion,..         
1c270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c280 20 20 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 2c     platformName,
1c290 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65   whatIf, verbose
1c2a0 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
1c2b0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
1c2c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c2d0 20 20 20 54 72 61 63 65 4f 70 73 2e 54 72 61 63     TraceOps.Trac
1c2e0 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
1c2f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c300 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f  TracePriority.Lo
1c310 77 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b  w, traceCallback
1c320 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
1c330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
1c340 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b 20 6e  .NET Framework n
1c350 6f 74 20 66 6f 75 6e 64 2c 20 73 6b 69 70 70 69  ot found, skippi
1c360 6e 67 2e 2e 2e 22 2c 0d 0a 20 20 20 20 20 20 20  ng...",..       
1c370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c380 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f       traceCatego
1c390 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
1c3a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c3b0 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20  continue;..     
1c3c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
1c3d0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1c3e0 20 20 20 20 20 20 20 20 69 66 20 28 63 61 6c 6c          if (call
1c3f0 62 61 63 6b 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  back == null).. 
1c400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c410 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b         continue;
1c420 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1c430 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 64          string d
1c440 69 72 65 63 74 6f 72 79 20 3d 20 47 65 74 46 72  irectory = GetFr
1c450 61 6d 65 77 6f 72 6b 44 69 72 65 63 74 6f 72 79  ameworkDirectory
1c460 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
1c470 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b             rootK
1c480 65 79 2c 20 66 72 61 6d 65 77 6f 72 6b 56 65 72  ey, frameworkVer
1c490 73 69 6f 6e 2c 20 77 68 61 74 49 66 2c 20 76 65  sion, whatIf, ve
1c4a0 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20  rbose);....     
1c4b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
1c4c0 66 20 28 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c  f (String.IsNull
1c4d0 4f 72 45 6d 70 74 79 28 64 69 72 65 63 74 6f 72  OrEmpty(director
1c4e0 79 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  y))..           
1c4f0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
1c500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c510 20 20 20 20 54 72 61 63 65 4f 70 73 2e 54 72 61      TraceOps.Tra
1c520 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ce(..           
1c530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c540 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c   TracePriority.L
1c550 6f 77 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63  ow, traceCallbac
1c560 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  k, String.Format
1c570 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
1c580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
1c590 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b 20 7b  .NET Framework {
1c5a0 30 7d 20 64 69 72 65 63 74 6f 72 79 20 69 73 20  0} directory is 
1c5b0 69 6e 76 61 6c 69 64 2c 20 22 20 2b 0d 0a 20 20  invalid, " +..  
1c5c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c5d0 20 20 20 20 20 20 20 20 20 20 22 73 6b 69 70 70            "skipp
1c5e0 69 6e 67 2e 2e 2e 22 2c 20 46 6f 72 44 69 73 70  ing...", ForDisp
1c5f0 6c 61 79 28 66 72 61 6d 65 77 6f 72 6b 56 65 72  lay(frameworkVer
1c600 73 69 6f 6e 29 29 2c 0d 0a 20 20 20 20 20 20 20  sion)),..       
1c610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c620 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f       traceCatego
1c630 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
1c640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c650 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20  continue;..     
1c660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
1c670 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1c680 20 20 20 20 20 20 20 20 64 69 72 65 63 74 6f 72          director
1c690 79 20 3d 20 50 61 74 68 2e 43 6f 6d 62 69 6e 65  y = Path.Combine
1c6a0 28 64 69 72 65 63 74 6f 72 79 2c 20 22 43 6f 6e  (directory, "Con
1c6b0 66 69 67 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  fig");....      
1c6c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
1c6d0 20 28 21 44 69 72 65 63 74 6f 72 79 2e 45 78 69   (!Directory.Exi
1c6e0 73 74 73 28 64 69 72 65 63 74 6f 72 79 29 29 0d  sts(directory)).
1c6f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1c700 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
1c710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c720 54 72 61 63 65 4f 70 73 2e 54 72 61 63 65 28 0d  TraceOps.Trace(.
1c730 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1c740 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61               Tra
1c750 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 2c 20  cePriority.Low, 
1c760 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53  traceCallback, S
1c770 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
1c780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c790 20 20 20 20 20 20 20 20 20 20 20 22 2e 4e 45 54             ".NET
1c7a0 20 46 72 61 6d 65 77 6f 72 6b 20 7b 30 7d 20 64   Framework {0} d
1c7b0 69 72 65 63 74 6f 72 79 20 7b 31 7d 20 64 6f 65  irectory {1} doe
1c7c0 73 20 6e 6f 74 20 65 78 69 73 74 2c 20 22 20 2b  s not exist, " +
1c7d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1c7e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 73                "s
1c7f0 6b 69 70 70 69 6e 67 2e 2e 2e 22 2c 20 46 6f 72  kipping...", For
1c800 44 69 73 70 6c 61 79 28 66 72 61 6d 65 77 6f 72  Display(framewor
1c810 6b 56 65 72 73 69 6f 6e 29 2c 0d 0a 20 20 20 20  kVersion),..    
1c820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c830 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c          ForDispl
1c840 61 79 28 64 69 72 65 63 74 6f 72 79 29 29 2c 20  ay(directory)), 
1c850 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
1c860 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
1c870 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69             conti
1c880 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  nue;..          
1c890 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
1c8a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c8b0 20 20 20 73 74 72 69 6e 67 20 66 69 6c 65 4e 61     string fileNa
1c8c0 6d 65 20 3d 20 50 61 74 68 2e 43 6f 6d 62 69 6e  me = Path.Combin
1c8d0 65 28 64 69 72 65 63 74 6f 72 79 2c 20 22 6d 61  e(directory, "ma
1c8e0 63 68 69 6e 65 2e 63 6f 6e 66 69 67 22 29 3b 0d  chine.config");.
1c8f0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
1c900 20 20 20 20 20 20 20 69 66 20 28 21 46 69 6c 65         if (!File
1c910 2e 45 78 69 73 74 73 28 66 69 6c 65 4e 61 6d 65  .Exists(fileName
1c920 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
1c930 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
1c940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c950 20 20 20 54 72 61 63 65 4f 70 73 2e 54 72 61 63     TraceOps.Trac
1c960 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
1c970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c980 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f  TracePriority.Lo
1c990 77 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b  w, traceCallback
1c9a0 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  , String.Format(
1c9b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1c9c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2e                ".
1c9d0 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b 20 7b 30  NET Framework {0
1c9e0 7d 20 66 69 6c 65 20 7b 31 7d 20 64 6f 65 73 20  } file {1} does 
1c9f0 6e 6f 74 20 65 78 69 73 74 2c 20 22 20 2b 0d 0a  not exist, " +..
1ca00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ca10 20 20 20 20 20 20 20 20 20 20 20 20 22 73 6b 69              "ski
1ca20 70 70 69 6e 67 2e 2e 2e 22 2c 20 46 6f 72 44 69  pping...", ForDi
1ca30 73 70 6c 61 79 28 66 72 61 6d 65 77 6f 72 6b 56  splay(frameworkV
1ca40 65 72 73 69 6f 6e 29 2c 0d 0a 20 20 20 20 20 20  ersion),..      
1ca50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ca60 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79        ForDisplay
1ca70 28 66 69 6c 65 4e 61 6d 65 29 29 2c 20 74 72 61  (fileName)), tra
1ca80 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
1ca90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1caa0 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65          continue
1cab0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
1cac0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
1cad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cae0 62 6f 6f 6c 20 6c 6f 63 61 6c 53 61 76 65 64 20  bool localSaved 
1caf0 3d 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20  = false;....    
1cb00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cb10 69 66 20 28 21 63 61 6c 6c 62 61 63 6b 28 0d 0a  if (!callback(..
1cb20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cb30 20 20 20 20 20 20 20 20 20 20 20 20 66 69 6c 65              file
1cb40 4e 61 6d 65 2c 20 69 6e 76 61 72 69 61 6e 74 2c  Name, invariant,
1cb50 20 6e 61 6d 65 2c 20 64 65 73 63 72 69 70 74 69   name, descripti
1cb60 6f 6e 2c 20 74 79 70 65 4e 61 6d 65 2c 0d 0a 20  on, typeName,.. 
1cb70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cb80 20 20 20 20 20 20 20 20 20 20 20 61 73 73 65 6d             assem
1cb90 62 6c 79 4e 61 6d 65 2c 20 63 6c 69 65 6e 74 44  blyName, clientD
1cba0 61 74 61 2c 20 77 68 61 74 49 66 2c 20 76 65 72  ata, whatIf, ver
1cbb0 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  bose,..         
1cbc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cbd0 20 20 20 72 65 66 20 6c 6f 63 61 6c 53 61 76 65     ref localSave
1cbe0 64 2c 20 72 65 66 20 65 72 72 6f 72 29 29 0d 0a  d, ref error))..
1cbf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cc00 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
1cc10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
1cc20 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20  eturn false;..  
1cc30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cc40 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
1cc50 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20           else.. 
1cc60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cc70 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
1cc80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
1cc90 20 28 6c 6f 63 61 6c 53 61 76 65 64 20 26 26 20   (localSaved && 
1cca0 21 73 61 76 65 64 29 0d 0a 20 20 20 20 20 20 20  !saved)..       
1ccb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ccc0 20 20 20 20 20 73 61 76 65 64 20 3d 20 74 72 75       saved = tru
1ccd0 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
1cce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
1ccf0 20 28 76 65 72 62 6f 73 65 29 0d 0a 20 20 20 20   (verbose)..    
1cd00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cd10 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73          TraceOps
1cd20 2e 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20  .Trace(..       
1cd30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cd40 20 20 20 20 20 20 20 20 20 54 72 61 63 65 50 72           TracePr
1cd50 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c 0d 0a  iority.Lowest,..
1cd60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cd70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cd80 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53  traceCallback, S
1cd90 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
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 20 20 20 20 20 20 22                 "
1cdc0 6c 6f 63 61 6c 53 61 76 65 64 20 3d 20 7b 30 7d  localSaved = {0}
1cdd0 2c 20 73 61 76 65 64 20 3d 20 7b 31 7d 22 2c 0d  , saved = {1}",.
1cde0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1cdf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ce00 20 46 6f 72 44 69 73 70 6c 61 79 28 6c 6f 63 61   ForDisplay(loca
1ce10 6c 53 61 76 65 64 29 2c 20 46 6f 72 44 69 73 70  lSaved), ForDisp
1ce20 6c 61 79 28 73 61 76 65 64 29 29 2c 0d 0a 20 20  lay(saved)),..  
1ce30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ce40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
1ce50 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 20  aceCategory);.. 
1ce60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ce70 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
1ce80 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
1ce90 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
1cea0 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75        return tru
1ceb0 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d  e;..        }...
1cec0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
1ced0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1cee0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1cef0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1cf00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1cf10 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  ....        priv
1cf20 61 74 65 20 73 74 61 74 69 63 20 62 6f 6f 6c 20  ate static bool 
1cf30 46 6f 72 45 61 63 68 46 72 61 6d 65 77 6f 72 6b  ForEachFramework
1cf40 52 65 67 69 73 74 72 79 28 0d 0a 20 20 20 20 20  Registry(..     
1cf50 20 20 20 20 20 20 20 46 72 61 6d 65 77 6f 72 6b         Framework
1cf60 4c 69 73 74 20 66 72 61 6d 65 77 6f 72 6b 4c 69  List frameworkLi
1cf70 73 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  st,..           
1cf80 20 46 72 61 6d 65 77 6f 72 6b 52 65 67 69 73 74   FrameworkRegist
1cf90 72 79 43 61 6c 6c 62 61 63 6b 20 63 61 6c 6c 62  ryCallback callb
1cfa0 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ack,..          
1cfb0 20 20 6f 62 6a 65 63 74 20 63 6c 69 65 6e 74 44    object clientD
1cfc0 61 74 61 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ata,..          
1cfd0 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a    bool whatIf,..
1cfe0 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
1cff0 20 76 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20   verbose,..     
1d000 20 20 20 20 20 20 20 72 65 66 20 73 74 72 69 6e         ref strin
1d010 67 20 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20  g error..       
1d020 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
1d030 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  {..            i
1d040 66 20 28 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74  f (frameworkList
1d050 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
1d060 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
1d070 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20            error 
1d080 3d 20 22 69 6e 76 61 6c 69 64 20 66 72 61 6d 65  = "invalid frame
1d090 77 6f 72 6b 20 6c 69 73 74 22 3b 0d 0a 20 20 20  work list";..   
1d0a0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
1d0b0 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20  urn false;..    
1d0c0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
1d0d0 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72           Registr
1d0e0 79 4b 65 79 20 72 6f 6f 74 4b 65 79 20 3d 20 66  yKey rootKey = f
1d0f0 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 52 6f 6f  rameworkList.Roo
1d100 74 4b 65 79 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  tKey;....       
1d110 20 20 20 20 20 69 66 20 28 72 6f 6f 74 4b 65 79       if (rootKey
1d120 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
1d130 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
1d140 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20            error 
1d150 3d 20 22 69 6e 76 61 6c 69 64 20 72 6f 6f 74 20  = "invalid root 
1d160 6b 65 79 22 3b 0d 0a 20 20 20 20 20 20 20 20 20  key";..         
1d170 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
1d180 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lse;..          
1d190 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
1d1a0 20 20 20 69 66 20 28 21 4f 62 6a 65 63 74 2e 52     if (!Object.R
1d1b0 65 66 65 72 65 6e 63 65 45 71 75 61 6c 73 28 72  eferenceEquals(r
1d1c0 6f 6f 74 4b 65 79 2c 20 52 65 67 69 73 74 72 79  ootKey, Registry
1d1d0 2e 43 75 72 72 65 6e 74 55 73 65 72 29 20 26 26  .CurrentUser) &&
1d1e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1d1f0 20 20 21 4f 62 6a 65 63 74 2e 52 65 66 65 72 65    !Object.Refere
1d200 6e 63 65 45 71 75 61 6c 73 28 72 6f 6f 74 4b 65  nceEquals(rootKe
1d210 79 2c 20 52 65 67 69 73 74 72 79 2e 4c 6f 63 61  y, Registry.Loca
1d220 6c 4d 61 63 68 69 6e 65 29 29 0d 0a 20 20 20 20  lMachine))..    
1d230 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
1d240 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72             error
1d250 20 3d 20 22 72 6f 6f 74 20 6b 65 79 20 6d 75 73   = "root key mus
1d260 74 20 62 65 20 70 65 72 2d 75 73 65 72 20 6f 72  t be per-user or
1d270 20 70 65 72 2d 6d 61 63 68 69 6e 65 22 3b 0d 0a   per-machine";..
1d280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d290 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20  return false;.. 
1d2a0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
1d2b0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
1d2c0 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 4e 61  frameworkList.Na
1d2d0 6d 65 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  mes == null)..  
1d2e0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
1d2f0 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
1d300 6f 72 20 3d 20 22 6e 6f 20 66 72 61 6d 65 77 6f  or = "no framewo
1d310 72 6b 20 6e 61 6d 65 73 20 66 6f 75 6e 64 22 3b  rk names found";
1d320 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1d330 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
1d340 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
1d350 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
1d360 20 28 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e   (frameworkList.
1d370 56 65 72 73 69 6f 6e 73 20 3d 3d 20 6e 75 6c 6c  Versions == null
1d380 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
1d390 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1d3a0 20 20 65 72 72 6f 72 20 3d 20 22 6e 6f 20 66 72    error = "no fr
1d3b0 61 6d 65 77 6f 72 6b 20 76 65 72 73 69 6f 6e 73  amework versions
1d3c0 20 66 6f 75 6e 64 22 3b 0d 0a 20 20 20 20 20 20   found";..      
1d3d0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
1d3e0 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20   false;..       
1d3f0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
1d400 20 20 20 20 20 20 69 66 20 28 66 72 61 6d 65 77        if (framew
1d410 6f 72 6b 4c 69 73 74 2e 50 6c 61 74 66 6f 72 6d  orkList.Platform
1d420 4e 61 6d 65 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  Names == null)..
1d430 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
1d440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
1d450 72 72 6f 72 20 3d 20 22 6e 6f 20 70 6c 61 74 66  rror = "no platf
1d460 6f 72 6d 20 6e 61 6d 65 73 20 66 6f 75 6e 64 22  orm names found"
1d470 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
1d480 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
1d490 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
1d4a0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
1d4b0 66 20 28 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74  f (frameworkList
1d4c0 2e 4e 61 6d 65 73 2e 43 6f 75 6e 74 20 21 3d 20  .Names.Count != 
1d4d0 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 50 6c  frameworkList.Pl
1d4e0 61 74 66 6f 72 6d 4e 61 6d 65 73 2e 43 6f 75 6e  atformNames.Coun
1d4f0 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t)..            
1d500 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
1d510 20 20 20 65 72 72 6f 72 20 3d 20 53 74 72 69 6e     error = Strin
1d520 67 2e 46 6f 72 6d 61 74 28 22 66 72 61 6d 65 77  g.Format("framew
1d530 6f 72 6b 20 6e 61 6d 65 20 63 6f 75 6e 74 20 7b  ork name count {
1d540 30 7d 20 64 6f 65 73 20 6e 6f 74 20 22 20 2b 0d  0} does not " +.
1d550 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1d560 20 20 20 20 20 22 6d 61 74 63 68 20 70 6c 61 74       "match plat
1d570 66 6f 72 6d 20 6e 61 6d 65 20 63 6f 75 6e 74 20  form name count 
1d580 7b 31 7d 22 2c 20 66 72 61 6d 65 77 6f 72 6b 4c  {1}", frameworkL
1d590 69 73 74 2e 4e 61 6d 65 73 2e 43 6f 75 6e 74 2c  ist.Names.Count,
1d5a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1d5b0 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 4c        frameworkL
1d5c0 69 73 74 2e 50 6c 61 74 66 6f 72 6d 4e 61 6d 65  ist.PlatformName
1d5d0 73 2e 43 6f 75 6e 74 29 3b 0d 0a 0d 0a 20 20 20  s.Count);....   
1d5e0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
1d5f0 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20  urn false;..    
1d600 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
1d610 20 20 20 20 20 20 20 20 20 66 6f 72 20 28 69 6e           for (in
1d620 74 20 69 6e 64 65 78 20 3d 20 30 3b 20 69 6e 64  t index = 0; ind
1d630 65 78 20 3c 20 66 72 61 6d 65 77 6f 72 6b 4c 69  ex < frameworkLi
1d640 73 74 2e 4e 61 6d 65 73 2e 43 6f 75 6e 74 3b 20  st.Names.Count; 
1d650 69 6e 64 65 78 2b 2b 29 0d 0a 20 20 20 20 20 20  index++)..      
1d660 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
1d670 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
1d680 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
1d690 4e 4f 54 45 3a 20 47 72 61 62 20 74 68 65 20 6e  NOTE: Grab the n
1d6a0 61 6d 65 20 6f 66 20 74 68 65 20 66 72 61 6d 65  ame of the frame
1d6b0 77 6f 72 6b 20 28 65 2e 67 2e 20 22 2e 4e 45 54  work (e.g. ".NET
1d6c0 46 72 61 6d 65 77 6f 72 6b 22 29 0d 0a 20 20 20  Framework")..   
1d6d0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
1d6e0 20 20 20 20 20 20 61 6e 64 20 74 68 65 20 6e 61        and the na
1d6f0 6d 65 20 6f 66 20 74 68 65 20 70 6c 61 74 66 6f  me of the platfo
1d700 72 6d 20 28 65 2e 67 2e 20 22 57 69 6e 64 6f 77  rm (e.g. "Window
1d710 73 43 45 22 29 2e 0d 0a 20 20 20 20 20 20 20 20  sCE")...        
1d720 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
1d730 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
1d740 6e 67 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65  ng frameworkName
1d750 20 3d 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74   = frameworkList
1d760 2e 4e 61 6d 65 73 5b 69 6e 64 65 78 5d 3b 0d 0a  .Names[index];..
1d770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d780 73 74 72 69 6e 67 20 70 6c 61 74 66 6f 72 6d 4e  string platformN
1d790 61 6d 65 20 3d 20 66 72 61 6d 65 77 6f 72 6b 4c  ame = frameworkL
1d7a0 69 73 74 2e 50 6c 61 74 66 6f 72 6d 4e 61 6d 65  ist.PlatformName
1d7b0 73 5b 69 6e 64 65 78 5d 3b 0d 0a 0d 0a 20 20 20  s[index];....   
1d7c0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
1d7d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1d7e0 20 2f 2f 20 4e 4f 54 45 3a 20 47 72 61 62 20 74   // NOTE: Grab t
1d7f0 68 65 20 73 75 70 70 6f 72 74 65 64 20 76 65 72  he supported ver
1d800 73 69 6f 6e 73 20 6f 66 20 74 68 69 73 20 70 61  sions of this pa
1d810 72 74 69 63 75 6c 61 72 0d 0a 20 20 20 20 20 20  rticular..      
1d820 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
1d830 20 20 20 66 72 61 6d 65 77 6f 72 6b 2e 0d 0a 20     framework... 
1d840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1d850 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
1d860 20 20 20 56 65 72 73 69 6f 6e 4c 69 73 74 20 66     VersionList f
1d870 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 4c  rameworkVersionL
1d880 69 73 74 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ist;....        
1d890 20 20 20 20 20 20 20 20 69 66 20 28 21 66 72 61          if (!fra
1d8a0 6d 65 77 6f 72 6b 4c 69 73 74 2e 56 65 72 73 69  meworkList.Versi
1d8b0 6f 6e 73 2e 54 72 79 47 65 74 56 61 6c 75 65 28  ons.TryGetValue(
1d8c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1d8d0 20 20 20 20 20 20 20 20 20 20 66 72 61 6d 65 77            framew
1d8e0 6f 72 6b 4e 61 6d 65 2c 20 6f 75 74 20 66 72 61  orkName, out fra
1d8f0 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 4c 69 73  meworkVersionLis
1d900 74 29 20 7c 7c 0d 0a 20 20 20 20 20 20 20 20 20  t) ||..         
1d910 20 20 20 20 20 20 20 20 20 20 20 28 66 72 61 6d             (fram
1d920 65 77 6f 72 6b 56 65 72 73 69 6f 6e 4c 69 73 74  eworkVersionList
1d930 20 3d 3d 20 6e 75 6c 6c 29 29 0d 0a 20 20 20 20   == null))..    
1d940 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
1d950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d960 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20     continue;..  
1d970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
1d980 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
1d990 20 20 20 66 6f 72 65 61 63 68 20 28 56 65 72 73     foreach (Vers
1d9a0 69 6f 6e 20 66 72 61 6d 65 77 6f 72 6b 56 65 72  ion frameworkVer
1d9b0 73 69 6f 6e 20 69 6e 20 66 72 61 6d 65 77 6f 72  sion in framewor
1d9c0 6b 56 65 72 73 69 6f 6e 4c 69 73 74 29 0d 0a 20  kVersionList).. 
1d9d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
1d9e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1d9f0 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 54        TraceOps.T
1da00 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20  race(..         
1da10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
1da20 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77  racePriority.Low
1da30 65 72 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63  er, traceCallbac
1da40 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  k, String.Format
1da50 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
1da60 20 20 20 20 20 20 20 20 20 20 20 22 66 72 61 6d             "fram
1da70 65 77 6f 72 6b 4e 61 6d 65 20 3d 20 7b 30 7d 2c  eworkName = {0},
1da80 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f   frameworkVersio
1da90 6e 20 3d 20 7b 31 7d 2c 20 22 20 2b 0d 0a 20 20  n = {1}, " +..  
1daa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dab0 20 20 20 20 20 20 22 70 6c 61 74 66 6f 72 6d 4e        "platformN
1dac0 61 6d 65 20 3d 20 7b 32 7d 22 2c 20 46 6f 72 44  ame = {2}", ForD
1dad0 69 73 70 6c 61 79 28 66 72 61 6d 65 77 6f 72 6b  isplay(framework
1dae0 4e 61 6d 65 29 2c 0d 0a 20 20 20 20 20 20 20 20  Name),..        
1daf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1db00 46 6f 72 44 69 73 70 6c 61 79 28 66 72 61 6d 65  ForDisplay(frame
1db10 77 6f 72 6b 56 65 72 73 69 6f 6e 29 2c 0d 0a 20  workVersion),.. 
1db20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1db30 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61         ForDispla
1db40 79 28 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 29 29  y(platformName))
1db50 2c 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29  , traceCategory)
1db60 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
1db70 20 20 20 20 20 20 20 20 20 69 66 20 28 21 48 61           if (!Ha
1db80 76 65 46 72 61 6d 65 77 6f 72 6b 28 0d 0a 20 20  veFramework(..  
1db90 20 20 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 72 6f 6f 74 4b 65            rootKe
1dbb0 79 2c 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65  y, frameworkName
1dbc0 2c 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69  , frameworkVersi
1dbd0 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  on,..           
1dbe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dbf0 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 2c 20 77   platformName, w
1dc00 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 29  hatIf, verbose))
1dc10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1dc20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
1dc30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dc40 20 54 72 61 63 65 4f 70 73 2e 54 72 61 63 65 28   TraceOps.Trace(
1dc50 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f  TracePriority.Lo
1dc60 77 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b  w, traceCallback
1dc70 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
1dc80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
1dc90 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b 20 6e  .NET Framework n
1dca0 6f 74 20 66 6f 75 6e 64 2c 20 73 6b 69 70 70 69  ot found, skippi
1dcb0 6e 67 2e 2e 2e 22 2c 0d 0a 20 20 20 20 20 20 20  ng...",..       
1dcc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dcd0 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f       traceCatego
1dce0 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
1dcf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dd00 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20  continue;..     
1dd10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
1dd20 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1dd30 20 20 20 20 20 20 20 20 69 66 20 28 63 61 6c 6c          if (call
1dd40 62 61 63 6b 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  back == null).. 
1dd50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dd60 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b         continue;
1dd70 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1dd80 20 20 20 20 20 20 20 20 69 66 20 28 21 63 61 6c          if (!cal
1dd90 6c 62 61 63 6b 28 0d 0a 20 20 20 20 20 20 20 20  lback(..        
1dda0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ddb0 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 66 72 61      rootKey, fra
1ddc0 6d 65 77 6f 72 6b 4e 61 6d 65 2c 20 66 72 61 6d  meworkName, fram
1ddd0 65 77 6f 72 6b 56 65 72 73 69 6f 6e 2c 0d 0a 20  eworkVersion,.. 
1dde0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ddf0 20 20 20 20 20 20 20 20 20 20 20 70 6c 61 74 66             platf
1de00 6f 72 6d 4e 61 6d 65 2c 20 63 6c 69 65 6e 74 44  ormName, clientD
1de10 61 74 61 2c 20 77 68 61 74 49 66 2c 20 76 65 72  ata, whatIf, ver
1de20 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  bose,..         
1de30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1de40 20 20 20 72 65 66 20 65 72 72 6f 72 29 29 0d 0a     ref error))..
1de50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1de60 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
1de70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
1de80 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20  eturn false;..  
1de90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dea0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
1deb0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
1dec0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
1ded0 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65       return true
1dee0 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  ;..        }..  
1def0 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
1df00 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
1df10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1df20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1df30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1df40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1df50 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23  ///....        #
1df60 72 65 67 69 6f 6e 20 50 65 72 2d 56 69 73 75 61  region Per-Visua
1df70 6c 20 53 74 75 64 69 6f 20 56 65 72 73 69 6f 6e  l Studio Version
1df80 20 48 61 6e 64 6c 69 6e 67 0d 0a 20 20 20 20 20   Handling..     
1df90 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69     private stati
1dfa0 63 20 76 6f 69 64 20 49 6e 69 74 69 61 6c 69 7a  c void Initializ
1dfb0 65 56 73 4c 69 73 74 28 0d 0a 20 20 20 20 20 20  eVsList(..      
1dfc0 20 20 20 20 20 20 43 6f 6e 66 69 67 75 72 61 74        Configurat
1dfd0 69 6f 6e 20 63 6f 6e 66 69 67 75 72 61 74 69 6f  ion configuratio
1dfe0 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n,..            
1dff0 72 65 66 20 56 73 4c 69 73 74 20 76 73 4c 69 73  ref VsList vsLis
1e000 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29  t..            )
1e010 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
1e020 20 20 20 20 20 20 20 20 20 69 66 20 28 76 73 4c           if (vsL
1e030 69 73 74 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  ist == null)..  
1e040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 76 73                vs
1e050 4c 69 73 74 20 3d 20 6e 65 77 20 56 73 4c 69 73  List = new VsLis
1e060 74 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  t();....        
1e070 20 20 20 20 69 66 20 28 76 73 4c 69 73 74 2e 52      if (vsList.R
1e080 6f 6f 74 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d  ootKey == null).
1e090 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1e0a0 20 76 73 4c 69 73 74 2e 52 6f 6f 74 4b 65 79 20   vsList.RootKey 
1e0b0 3d 20 52 65 67 69 73 74 72 79 2e 4c 6f 63 61 6c  = Registry.Local
1e0c0 4d 61 63 68 69 6e 65 3b 0d 0a 0d 0a 20 20 20 20  Machine;....    
1e0d0 20 20 20 20 20 20 20 20 69 66 20 28 76 73 4c 69          if (vsLi
1e0e0 73 74 2e 56 65 72 73 69 6f 6e 73 20 3d 3d 20 6e  st.Versions == n
1e0f0 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
1e100 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
1e110 20 20 20 20 20 76 73 4c 69 73 74 2e 56 65 72 73       vsList.Vers
1e120 69 6f 6e 73 20 3d 20 6e 65 77 20 56 65 72 73 69  ions = new Versi
1e130 6f 6e 4c 69 73 74 28 29 3b 0d 0a 0d 0a 20 20 20  onList();....   
1e140 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
1e150 76 73 4c 69 73 74 2e 56 65 72 73 69 6f 6e 73 2e  vsList.Versions.
1e160 41 64 64 28 6e 65 77 20 56 65 72 73 69 6f 6e 28  Add(new Version(
1e170 38 2c 20 30 29 29 3b 20 2f 2f 20 56 69 73 75 61  8, 0)); // Visua
1e180 6c 20 53 74 75 64 69 6f 20 32 30 30 35 0d 0a 0d  l Studio 2005...
1e190 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1e1a0 20 69 66 20 28 28 63 6f 6e 66 69 67 75 72 61 74   if ((configurat
1e1b0 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20  ion == null) || 
1e1c0 21 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 4e  !configuration.N
1e1d0 6f 56 73 32 30 30 38 29 0d 0a 20 20 20 20 20 20  oVs2008)..      
1e1e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 76 73                vs
1e1f0 4c 69 73 74 2e 56 65 72 73 69 6f 6e 73 2e 41 64  List.Versions.Ad
1e200 64 28 6e 65 77 20 56 65 72 73 69 6f 6e 28 39 2c  d(new Version(9,
1e210 20 30 29 29 3b 20 2f 2f 20 56 69 73 75 61 6c 20   0)); // Visual 
1e220 53 74 75 64 69 6f 20 32 30 30 38 0d 0a 0d 0a 20  Studio 2008.... 
1e230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
1e240 66 20 28 28 63 6f 6e 66 69 67 75 72 61 74 69 6f  f ((configuratio
1e250 6e 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20 21 63  n == null) || !c
1e260 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 4e 6f 56  onfiguration.NoV
1e270 73 32 30 31 30 29 0d 0a 20 20 20 20 20 20 20 20  s2010)..        
1e280 20 20 20 20 20 20 20 20 20 20 20 20 76 73 4c 69              vsLi
1e290 73 74 2e 56 65 72 73 69 6f 6e 73 2e 41 64 64 28  st.Versions.Add(
1e2a0 6e 65 77 20 56 65 72 73 69 6f 6e 28 31 30 2c 20  new Version(10, 
1e2b0 30 29 29 3b 2f 2f 20 56 69 73 75 61 6c 20 53 74  0));// Visual St
1e2c0 75 64 69 6f 20 32 30 31 30 0d 0a 20 20 20 20 20  udio 2010..     
1e2d0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
1e2e0 20 20 20 20 20 20 20 20 69 66 20 28 76 73 4c 69          if (vsLi
1e2f0 73 74 2e 46 72 61 6d 65 77 6f 72 6b 56 65 72 73  st.FrameworkVers
1e300 69 6f 6e 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  ions == null).. 
1e310 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
1e320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 76 73                vs
1e330 4c 69 73 74 2e 46 72 61 6d 65 77 6f 72 6b 56 65  List.FrameworkVe
1e340 72 73 69 6f 6e 73 20 3d 20 6e 65 77 20 56 65 72  rsions = new Ver
1e350 73 69 6f 6e 4c 69 73 74 4d 61 70 28 29 3b 0d 0a  sionListMap();..
1e360 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1e370 20 20 2f 2f 20 76 73 4c 69 73 74 2e 46 72 61 6d    // vsList.Fram
1e380 65 77 6f 72 6b 56 65 72 73 69 6f 6e 73 2e 41 64  eworkVersions.Ad
1e390 64 28 6e 65 77 20 56 65 72 73 69 6f 6e 28 38 2c  d(new Version(8,
1e3a0 20 30 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20   0),..          
1e3b0 20 20 20 20 20 20 2f 2f 20 20 20 20 20 6e 65 77        //     new
1e3c0 20 56 65 72 73 69 6f 6e 4c 69 73 74 28 6e 65 77   VersionList(new
1e3d0 20 56 65 72 73 69 6f 6e 5b 5d 20 7b 0d 0a 20 20   Version[] {..  
1e3e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
1e3f0 20 20 20 20 20 20 20 20 20 6e 65 77 20 56 65 72           new Ver
1e400 73 69 6f 6e 28 32 2c 20 30 2c 20 35 30 37 32 37  sion(2, 0, 50727
1e410 29 20 7d 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  ) }));....      
1e420 20 20 20 20 20 20 20 20 20 20 69 66 20 28 28 63            if ((c
1e430 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 3d 3d 20  onfiguration == 
1e440 6e 75 6c 6c 29 20 7c 7c 20 21 63 6f 6e 66 69 67  null) || !config
1e450 75 72 61 74 69 6f 6e 2e 4e 6f 56 73 32 30 30 38  uration.NoVs2008
1e460 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
1e470 20 20 20 20 20 20 20 76 73 4c 69 73 74 2e 46 72         vsList.Fr
1e480 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 73 2e  ameworkVersions.
1e490 41 64 64 28 6e 65 77 20 56 65 72 73 69 6f 6e 28  Add(new Version(
1e4a0 39 2c 20 30 29 2c 0d 0a 20 20 20 20 20 20 20 20  9, 0),..        
1e4b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e4c0 6e 65 77 20 56 65 72 73 69 6f 6e 4c 69 73 74 28  new VersionList(
1e4d0 6e 65 77 20 56 65 72 73 69 6f 6e 5b 5d 20 7b 0d  new Version[] {.
1e4e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1e4f0 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 65 77               new
1e500 20 56 65 72 73 69 6f 6e 28 32 2c 20 30 2c 20 35   Version(2, 0, 5
1e510 30 37 32 37 29 20 7d 29 29 3b 0d 0a 0d 0a 20 20  0727) }));....  
1e520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
1e530 20 28 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e   ((configuration
1e540 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20 21 63 6f   == null) || !co
1e550 6e 66 69 67 75 72 61 74 69 6f 6e 2e 4e 6f 56 73  nfiguration.NoVs
1e560 32 30 31 30 29 0d 0a 20 20 20 20 20 20 20 20 20  2010)..         
1e570 20 20 20 20 20 20 20 20 20 20 20 76 73 4c 69 73             vsLis
1e580 74 2e 46 72 61 6d 65 77 6f 72 6b 56 65 72 73 69  t.FrameworkVersi
1e590 6f 6e 73 2e 41 64 64 28 6e 65 77 20 56 65 72 73  ons.Add(new Vers
1e5a0 69 6f 6e 28 31 30 2c 20 30 29 2c 0d 0a 20 20 20  ion(10, 0),..   
1e5b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e5c0 20 20 20 20 20 6e 65 77 20 56 65 72 73 69 6f 6e       new Version
1e5d0 4c 69 73 74 28 6e 65 77 20 56 65 72 73 69 6f 6e  List(new Version
1e5e0 5b 5d 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  [] {..          
1e5f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e600 20 20 6e 65 77 20 56 65 72 73 69 6f 6e 28 32 2c    new Version(2,
1e610 20 30 2c 20 35 30 37 32 37 29 2c 0d 0a 20 20 20   0, 50727),..   
1e620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e630 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 65 77               new
1e640 20 56 65 72 73 69 6f 6e 28 34 2c 20 30 2c 20 33   Version(4, 0, 3
1e650 30 33 31 39 29 20 7d 29 29 3b 0d 0a 20 20 20 20  0319) }));..    
1e660 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
1e670 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
1e680 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e690 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e6a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e6b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e6c0 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
1e6d0 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69     private stati
1e6e0 63 20 62 6f 6f 6c 20 48 61 76 65 56 73 56 65 72  c bool HaveVsVer
1e6f0 73 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20  sion(..         
1e700 20 20 20 52 65 67 69 73 74 72 79 4b 65 79 20 72     RegistryKey r
1e710 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20  ootKey,..       
1e720 20 20 20 20 20 56 65 72 73 69 6f 6e 20 76 73 56       Version vsV
1e730 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20  ersion,..       
1e740 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66       bool whatIf
1e750 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  ,..            b
1e760 6f 6f 6c 20 76 65 72 62 6f 73 65 0d 0a 20 20 20  ool verbose..   
1e770 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
1e780 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
1e790 20 20 20 69 66 20 28 76 73 56 65 72 73 69 6f 6e     if (vsVersion
1e7a0 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
1e7b0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
1e7c0 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20  n false;....    
1e7d0 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 66          string f
1e7e0 6f 72 6d 61 74 20 3d 20 22 53 6f 66 74 77 61 72  ormat = "Softwar
1e7f0 65 5c 5c 4d 69 63 72 6f 73 6f 66 74 5c 5c 56 69  e\\Microsoft\\Vi
1e800 73 75 61 6c 53 74 75 64 69 6f 5c 5c 7b 30 7d 22  sualStudio\\{0}"
1e810 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  ;..            s
1e820 74 72 69 6e 67 20 6b 65 79 4e 61 6d 65 20 3d 20  tring keyName = 
1e830 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 66 6f  String.Format(fo
1e840 72 6d 61 74 2c 20 76 73 56 65 72 73 69 6f 6e 29  rmat, vsVersion)
1e850 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
1e860 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69   using (MockRegi
1e870 73 74 72 79 4b 65 79 20 6b 65 79 20 3d 20 52 65  stryKey key = Re
1e880 67 69 73 74 72 79 48 65 6c 70 65 72 2e 4f 70 65  gistryHelper.Ope
1e890 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20  nSubKey(..      
1e8a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f                ro
1e8b0 6f 74 4b 65 79 2c 20 6b 65 79 4e 61 6d 65 2c 20  otKey, keyName, 
1e8c0 66 61 6c 73 65 2c 20 77 68 61 74 49 66 2c 20 76  false, whatIf, v
1e8d0 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20 20  erbose))..      
1e8e0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
1e8f0 20 20 20 20 20 20 20 20 20 69 66 20 28 6b 65 79           if (key
1e900 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
1e910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
1e920 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a  eturn false;....
1e930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e940 6f 62 6a 65 63 74 20 76 61 6c 75 65 20 3d 20 52  object value = R
1e950 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 47 65  egistryHelper.Ge
1e960 74 56 61 6c 75 65 28 0d 0a 20 20 20 20 20 20 20  tValue(..       
1e970 20 20 20 20 20 20 20 20 20 20 20 20 20 6b 65 79               key
1e980 2c 20 22 49 6e 73 74 61 6c 6c 44 69 72 22 2c 20  , "InstallDir", 
1e990 6e 75 6c 6c 2c 20 77 68 61 74 49 66 2c 20 76 65  null, whatIf, ve
1e9a0 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20  rbose);....     
1e9b0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21             if (!
1e9c0 28 76 61 6c 75 65 20 69 73 20 73 74 72 69 6e 67  (value is string
1e9d0 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
1e9e0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
1e9f0 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  alse;....       
1ea00 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
1ea10 64 69 72 65 63 74 6f 72 79 20 3d 20 28 73 74 72  directory = (str
1ea20 69 6e 67 29 76 61 6c 75 65 3b 0d 0a 0d 0a 20 20  ing)value;....  
1ea30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
1ea40 20 28 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f   (String.IsNullO
1ea50 72 45 6d 70 74 79 28 64 69 72 65 63 74 6f 72 79  rEmpty(directory
1ea60 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
1ea70 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
1ea80 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  alse;....       
1ea90 20 20 20 20 20 20 20 20 20 69 66 20 28 21 44 69           if (!Di
1eaa0 72 65 63 74 6f 72 79 2e 45 78 69 73 74 73 28 64  rectory.Exists(d
1eab0 69 72 65 63 74 6f 72 79 29 29 0d 0a 20 20 20 20  irectory))..    
1eac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ead0 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d  return false;...
1eae0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1eaf0 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20   return true;.. 
1eb00 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
1eb10 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
1eb20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
1eb30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1eb40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1eb50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1eb60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
1eb70 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74        private st
1eb80 61 74 69 63 20 62 6f 6f 6c 20 46 6f 72 45 61 63  atic bool ForEac
1eb90 68 56 73 56 65 72 73 69 6f 6e 52 65 67 69 73 74  hVsVersionRegist
1eba0 72 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ry(..           
1ebb0 20 56 73 4c 69 73 74 20 76 73 4c 69 73 74 2c 0d   VsList vsList,.
1ebc0 0a 20 20 20 20 20 20 20 20 20 20 20 20 56 69 73  .            Vis
1ebd0 75 61 6c 53 74 75 64 69 6f 52 65 67 69 73 74 72  ualStudioRegistr
1ebe0 79 43 61 6c 6c 62 61 63 6b 20 63 61 6c 6c 62 61  yCallback callba
1ebf0 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ck,..           
1ec00 20 50 61 63 6b 61 67 65 20 70 61 63 6b 61 67 65   Package package
1ec10 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6f  ,..            o
1ec20 62 6a 65 63 74 20 63 6c 69 65 6e 74 44 61 74 61  bject clientData
1ec30 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  ,..            b
1ec40 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20  ool whatIf,..   
1ec50 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65           bool ve
1ec60 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20 20  rbose,..        
1ec70 20 20 20 20 72 65 66 20 73 74 72 69 6e 67 20 65      ref string e
1ec80 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20  rror..          
1ec90 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a    )..        {..
1eca0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
1ecb0 76 73 4c 69 73 74 20 3d 3d 20 6e 75 6c 6c 29 0d  vsList == null).
1ecc0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
1ecd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ece0 65 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64  error = "invalid
1ecf0 20 56 53 20 6c 69 73 74 22 3b 0d 0a 20 20 20 20   VS list";..    
1ed00 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
1ed10 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20  rn false;..     
1ed20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
1ed30 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79          Registry
1ed40 4b 65 79 20 72 6f 6f 74 4b 65 79 20 3d 20 76 73  Key rootKey = vs
1ed50 4c 69 73 74 2e 52 6f 6f 74 4b 65 79 3b 0d 0a 0d  List.RootKey;...
1ed60 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
1ed70 28 72 6f 6f 74 4b 65 79 20 3d 3d 20 6e 75 6c 6c  (rootKey == null
1ed80 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
1ed90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1eda0 20 20 65 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c    error = "inval
1edb0 69 64 20 72 6f 6f 74 20 6b 65 79 22 3b 0d 0a 20  id root key";.. 
1edc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
1edd0 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20  eturn false;..  
1ede0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
1edf0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21             if (!
1ee00 4f 62 6a 65 63 74 2e 52 65 66 65 72 65 6e 63 65  Object.Reference
1ee10 45 71 75 61 6c 73 28 72 6f 6f 74 4b 65 79 2c 20  Equals(rootKey, 
1ee20 52 65 67 69 73 74 72 79 2e 43 75 72 72 65 6e 74  Registry.Current
1ee30 55 73 65 72 29 20 26 26 0d 0a 20 20 20 20 20 20  User) &&..      
1ee40 20 20 20 20 20 20 20 20 20 20 21 4f 62 6a 65 63            !Objec
1ee50 74 2e 52 65 66 65 72 65 6e 63 65 45 71 75 61 6c  t.ReferenceEqual
1ee60 73 28 72 6f 6f 74 4b 65 79 2c 20 52 65 67 69 73  s(rootKey, Regis
1ee70 74 72 79 2e 4c 6f 63 61 6c 4d 61 63 68 69 6e 65  try.LocalMachine
1ee80 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
1ee90 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
1eea0 20 20 20 65 72 72 6f 72 20 3d 20 22 72 6f 6f 74     error = "root
1eeb0 20 6b 65 79 20 6d 75 73 74 20 62 65 20 70 65 72   key must be per
1eec0 2d 75 73 65 72 20 6f 72 20 70 65 72 2d 6d 61 63  -user or per-mac
1eed0 68 69 6e 65 22 3b 0d 0a 20 20 20 20 20 20 20 20  hine";..        
1eee0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
1eef0 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alse;..         
1ef00 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
1ef10 20 20 20 20 69 66 20 28 76 73 4c 69 73 74 2e 56      if (vsList.V
1ef20 65 72 73 69 6f 6e 73 20 3d 3d 20 6e 75 6c 6c 29  ersions == null)
1ef30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
1ef40 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1ef50 20 65 72 72 6f 72 20 3d 20 22 6e 6f 20 56 53 20   error = "no VS 
1ef60 76 65 72 73 69 6f 6e 73 20 66 6f 75 6e 64 22 3b  versions found";
1ef70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1ef80 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
1ef90 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
1efa0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 66 6f  ..            fo
1efb0 72 65 61 63 68 20 28 56 65 72 73 69 6f 6e 20 76  reach (Version v
1efc0 73 56 65 72 73 69 6f 6e 20 69 6e 20 76 73 4c 69  sVersion in vsLi
1efd0 73 74 2e 56 65 72 73 69 6f 6e 73 29 0d 0a 20 20  st.Versions)..  
1efe0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
1eff0 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61               Tra
1f000 63 65 4f 70 73 2e 54 72 61 63 65 28 0d 0a 20 20  ceOps.Trace(..  
1f010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f020 20 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e    TracePriority.
1f030 4c 6f 77 65 72 2c 20 74 72 61 63 65 43 61 6c 6c  Lower, traceCall
1f040 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72  back, String.For
1f050 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
1f060 20 20 20 20 20 20 20 20 20 20 22 76 73 56 65 72            "vsVer
1f070 73 69 6f 6e 20 3d 20 7b 30 7d 22 2c 20 46 6f 72  sion = {0}", For
1f080 44 69 73 70 6c 61 79 28 76 73 56 65 72 73 69 6f  Display(vsVersio
1f090 6e 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  n)),..          
1f0a0 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
1f0b0 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20  ategory);....   
1f0c0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
1f0d0 28 21 48 61 76 65 56 73 56 65 72 73 69 6f 6e 28  (!HaveVsVersion(
1f0e0 72 6f 6f 74 4b 65 79 2c 20 76 73 56 65 72 73 69  rootKey, vsVersi
1f0f0 6f 6e 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62  on, whatIf, verb
1f100 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ose))..         
1f110 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
1f120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
1f130 61 63 65 4f 70 73 2e 54 72 61 63 65 28 54 72 61  aceOps.Trace(Tra
1f140 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 2c 20  cePriority.Low, 
1f150 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 0d 0a  traceCallback,..
1f160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f170 20 20 20 20 20 20 20 20 22 56 69 73 75 61 6c 20          "Visual 
1f180 53 74 75 64 69 6f 20 76 65 72 73 69 6f 6e 20 6e  Studio version n
1f190 6f 74 20 66 6f 75 6e 64 2c 20 73 6b 69 70 70 69  ot found, skippi
1f1a0 6e 67 2e 2e 2e 22 2c 0d 0a 20 20 20 20 20 20 20  ng...",..       
1f1b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f1c0 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
1f1d0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1f1e0 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65          continue
1f1f0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
1f200 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
1f210 20 20 20 20 20 20 20 20 69 66 20 28 63 61 6c 6c          if (call
1f220 62 61 63 6b 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  back == null).. 
1f230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f240 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 0d 0a     continue;....
1f250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f260 69 66 20 28 21 63 61 6c 6c 62 61 63 6b 28 0d 0a  if (!callback(..
1f270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f280 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c          rootKey,
1f290 20 76 73 56 65 72 73 69 6f 6e 2c 20 70 61 63 6b   vsVersion, pack
1f2a0 61 67 65 2c 20 63 6c 69 65 6e 74 44 61 74 61 2c  age, clientData,
1f2b0 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20   whatIf,..      
1f2c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f2d0 20 20 76 65 72 62 6f 73 65 2c 20 72 65 66 20 65    verbose, ref e
1f2e0 72 72 6f 72 29 29 0d 0a 20 20 20 20 20 20 20 20  rror))..        
1f2f0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
1f300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
1f310 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20  eturn false;..  
1f320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
1f330 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
1f340 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
1f350 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20  turn true;..    
1f360 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23      }..        #
1f370 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20  endregion....   
1f380 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
1f390 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f3a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f3b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f3c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
1f3d0 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20          #region 
1f3e0 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 46 69  Configuration Fi
1f3f0 6c 65 20 48 61 6e 64 6c 69 6e 67 0d 0a 20 20 20  le Handling..   
1f400 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61       private sta
1f410 74 69 63 20 62 6f 6f 6c 20 41 64 64 44 62 50 72  tic bool AddDbPr
1f420 6f 76 69 64 65 72 46 61 63 74 6f 72 79 28 0d 0a  oviderFactory(..
1f430 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
1f440 6e 67 20 66 69 6c 65 4e 61 6d 65 2c 0d 0a 20 20  ng fileName,..  
1f450 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
1f460 20 69 6e 76 61 72 69 61 6e 74 2c 0d 0a 20 20 20   invariant,..   
1f470 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
1f480 6e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  name,..         
1f490 20 20 20 73 74 72 69 6e 67 20 64 65 73 63 72 69     string descri
1f4a0 70 74 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20  ption,..        
1f4b0 20 20 20 20 73 74 72 69 6e 67 20 74 79 70 65 4e      string typeN
1f4c0 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ame,..          
1f4d0 20 20 41 73 73 65 6d 62 6c 79 4e 61 6d 65 20 61    AssemblyName a
1f4e0 73 73 65 6d 62 6c 79 4e 61 6d 65 2c 0d 0a 20 20  ssemblyName,..  
1f4f0 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77            bool w
1f500 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20  hatIf,..        
1f510 20 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65      bool verbose
1f520 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  ,..            r
1f530 65 66 20 62 6f 6f 6c 20 73 61 76 65 64 2c 0d 0a  ef bool saved,..
1f540 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20              ref 
1f550 73 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20  string error..  
1f560 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
1f570 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
1f580 20 20 20 20 62 6f 6f 6c 20 64 69 72 74 79 20 3d      bool dirty =
1f590 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20   false;..       
1f5a0 20 20 20 20 20 58 6d 6c 44 6f 63 75 6d 65 6e 74       XmlDocument
1f5b0 20 64 6f 63 75 6d 65 6e 74 20 3d 20 6e 65 77 20   document = new 
1f5c0 58 6d 6c 44 6f 63 75 6d 65 6e 74 28 29 3b 0d 0a  XmlDocument();..
1f5d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 64 6f  ..            do
1f5e0 63 75 6d 65 6e 74 2e 50 72 65 73 65 72 76 65 57  cument.PreserveW
1f5f0 68 69 74 65 73 70 61 63 65 20 3d 20 74 72 75 65  hitespace = true
1f600 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 64  ;..            d
1f610 6f 63 75 6d 65 6e 74 2e 4c 6f 61 64 28 66 69 6c  ocument.Load(fil
1f620 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20  eName);....     
1f630 20 20 20 20 20 20 20 58 6d 6c 45 6c 65 6d 65 6e         XmlElemen
1f640 74 20 65 6c 65 6d 65 6e 74 20 3d 20 64 6f 63 75  t element = docu
1f650 6d 65 6e 74 2e 53 65 6c 65 63 74 53 69 6e 67 6c  ment.SelectSingl
1f660 65 4e 6f 64 65 28 53 74 72 69 6e 67 2e 46 6f 72  eNode(String.For
1f670 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
1f680 20 20 20 20 20 20 58 50 61 74 68 46 6f 72 41 64        XPathForAd
1f690 64 45 6c 65 6d 65 6e 74 2c 20 69 6e 76 61 72 69  dElement, invari
1f6a0 61 6e 74 29 29 20 61 73 20 58 6d 6c 45 6c 65 6d  ant)) as XmlElem
1f6b0 65 6e 74 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ent;....        
1f6c0 20 20 20 20 69 66 20 28 65 6c 65 6d 65 6e 74 20      if (element 
1f6d0 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
1f6e0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
1f6f0 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 5b           string[
1f700 5d 20 65 6c 65 6d 65 6e 74 4e 61 6d 65 73 20 3d  ] elementNames =
1f710 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
1f720 20 20 20 20 20 20 20 20 20 20 20 20 22 73 79 73              "sys
1f730 74 65 6d 2e 64 61 74 61 22 2c 20 22 44 62 50 72  tem.data", "DbPr
1f740 6f 76 69 64 65 72 46 61 63 74 6f 72 69 65 73 22  oviderFactories"
1f750 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1f760 20 20 20 20 20 20 7d 3b 0d 0a 0d 0a 20 20 20 20        };....    
1f770 20 20 20 20 20 20 20 20 20 20 20 20 58 6d 6c 45              XmlE
1f780 6c 65 6d 65 6e 74 20 70 72 65 76 69 6f 75 73 45  lement previousE
1f790 6c 65 6d 65 6e 74 20 3d 0d 0a 20 20 20 20 20 20  lement =..      
1f7a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 6f                do
1f7b0 63 75 6d 65 6e 74 2e 44 6f 63 75 6d 65 6e 74 45  cument.DocumentE
1f7c0 6c 65 6d 65 6e 74 3b 20 2f 2a 20 63 6f 6e 66 69  lement; /* confi
1f7d0 67 75 72 61 74 69 6f 6e 20 2a 2f 0d 0a 0d 0a 20  guration */.... 
1f7e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66                 f
1f7f0 6f 72 65 61 63 68 20 28 73 74 72 69 6e 67 20 65  oreach (string e
1f800 6c 65 6d 65 6e 74 4e 61 6d 65 20 69 6e 20 65 6c  lementName in el
1f810 65 6d 65 6e 74 4e 61 6d 65 73 29 0d 0a 20 20 20  ementNames)..   
1f820 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
1f830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f840 20 20 20 20 65 6c 65 6d 65 6e 74 20 3d 20 70 72      element = pr
1f850 65 76 69 6f 75 73 45 6c 65 6d 65 6e 74 2e 53 65  eviousElement.Se
1f860 6c 65 63 74 53 69 6e 67 6c 65 4e 6f 64 65 28 0d  lectSingleNode(.
1f870 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1f880 20 20 20 20 20 20 20 20 20 65 6c 65 6d 65 6e 74           element
1f890 4e 61 6d 65 29 20 61 73 20 58 6d 6c 45 6c 65 6d  Name) as XmlElem
1f8a0 65 6e 74 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ent;....        
1f8b0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
1f8c0 65 6c 65 6d 65 6e 74 20 3d 3d 20 6e 75 6c 6c 29  element == null)
1f8d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1f8e0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
1f8f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f900 20 65 6c 65 6d 65 6e 74 20 3d 20 64 6f 63 75 6d   element = docum
1f910 65 6e 74 2e 43 72 65 61 74 65 45 6c 65 6d 65 6e  ent.CreateElemen
1f920 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
1f930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f940 65 6c 65 6d 65 6e 74 4e 61 6d 65 2c 20 53 74 72  elementName, Str
1f950 69 6e 67 2e 45 6d 70 74 79 29 3b 0d 0a 0d 0a 20  ing.Empty);.... 
1f960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f970 20 20 20 20 20 20 20 70 72 65 76 69 6f 75 73 45         previousE
1f980 6c 65 6d 65 6e 74 2e 41 70 70 65 6e 64 43 68 69  lement.AppendChi
1f990 6c 64 28 65 6c 65 6d 65 6e 74 29 3b 0d 0a 20 20  ld(element);..  
1f9a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f9b0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
1f9c0 20 20 20 20 20 20 20 20 20 20 20 70 72 65 76 69             previ
1f9d0 6f 75 73 45 6c 65 6d 65 6e 74 20 3d 20 65 6c 65  ousElement = ele
1f9e0 6d 65 6e 74 3b 0d 0a 20 20 20 20 20 20 20 20 20  ment;..         
1f9f0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
1fa00 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 65 6d              elem
1fa10 65 6e 74 20 3d 20 64 6f 63 75 6d 65 6e 74 2e 43  ent = document.C
1fa20 72 65 61 74 65 45 6c 65 6d 65 6e 74 28 0d 0a 20  reateElement(.. 
1fa30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fa40 20 20 20 22 61 64 64 22 2c 20 53 74 72 69 6e 67     "add", String
1fa50 2e 45 6d 70 74 79 29 3b 0d 0a 0d 0a 20 20 20 20  .Empty);....    
1fa60 20 20 20 20 20 20 20 20 20 20 20 20 70 72 65 76              prev
1fa70 69 6f 75 73 45 6c 65 6d 65 6e 74 2e 41 70 70 65  iousElement.Appe
1fa80 6e 64 43 68 69 6c 64 28 65 6c 65 6d 65 6e 74 29  ndChild(element)
1fa90 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
1faa0 20 20 20 20 20 64 69 72 74 79 20 3d 20 74 72 75       dirty = tru
1fab0 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
1fac0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
1fad0 20 69 66 20 28 21 53 74 72 69 6e 67 2e 45 71 75   if (!String.Equ
1fae0 61 6c 73 28 65 6c 65 6d 65 6e 74 2e 47 65 74 41  als(element.GetA
1faf0 74 74 72 69 62 75 74 65 28 22 6e 61 6d 65 22 29  ttribute("name")
1fb00 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
1fb10 20 20 20 20 20 20 20 6e 61 6d 65 2c 20 53 74 72         name, Str
1fb20 69 6e 67 43 6f 6d 70 61 72 69 73 6f 6e 2e 49 6e  ingComparison.In
1fb30 76 61 72 69 61 6e 74 43 75 6c 74 75 72 65 29 29  variantCulture))
1fb40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
1fb50 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1fb60 20 65 6c 65 6d 65 6e 74 2e 53 65 74 41 74 74 72   element.SetAttr
1fb70 69 62 75 74 65 28 22 6e 61 6d 65 22 2c 20 6e 61  ibute("name", na
1fb80 6d 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  me);..          
1fb90 20 20 20 20 20 20 64 69 72 74 79 20 3d 20 74 72        dirty = tr
1fba0 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
1fbb0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
1fbc0 20 20 69 66 20 28 21 53 74 72 69 6e 67 2e 45 71    if (!String.Eq
1fbd0 75 61 6c 73 28 65 6c 65 6d 65 6e 74 2e 47 65 74  uals(element.Get
1fbe0 41 74 74 72 69 62 75 74 65 28 22 69 6e 76 61 72  Attribute("invar
1fbf0 69 61 6e 74 22 29 2c 0d 0a 20 20 20 20 20 20 20  iant"),..       
1fc00 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 76               inv
1fc10 61 72 69 61 6e 74 2c 20 53 74 72 69 6e 67 43 6f  ariant, StringCo
1fc20 6d 70 61 72 69 73 6f 6e 2e 49 6e 76 61 72 69 61  mparison.Invaria
1fc30 6e 74 43 75 6c 74 75 72 65 29 29 0d 0a 20 20 20  ntCulture))..   
1fc40 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
1fc50 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 65 6d              elem
1fc60 65 6e 74 2e 53 65 74 41 74 74 72 69 62 75 74 65  ent.SetAttribute
1fc70 28 22 69 6e 76 61 72 69 61 6e 74 22 2c 20 69 6e  ("invariant", in
1fc80 76 61 72 69 61 6e 74 29 3b 0d 0a 20 20 20 20 20  variant);..     
1fc90 20 20 20 20 20 20 20 20 20 20 20 64 69 72 74 79             dirty
1fca0 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20   = true;..      
1fcb0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
1fcc0 20 20 20 20 20 20 20 69 66 20 28 21 53 74 72 69         if (!Stri
1fcd0 6e 67 2e 45 71 75 61 6c 73 28 65 6c 65 6d 65 6e  ng.Equals(elemen
1fce0 74 2e 47 65 74 41 74 74 72 69 62 75 74 65 28 22  t.GetAttribute("
1fcf0 64 65 73 63 72 69 70 74 69 6f 6e 22 29 2c 0d 0a  description"),..
1fd00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fd10 20 20 20 20 64 65 73 63 72 69 70 74 69 6f 6e 2c      description,
1fd20 20 53 74 72 69 6e 67 43 6f 6d 70 61 72 69 73 6f   StringCompariso
1fd30 6e 2e 49 6e 76 61 72 69 61 6e 74 43 75 6c 74 75  n.InvariantCultu
1fd40 72 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  re))..          
1fd50 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
1fd60 20 20 20 20 20 65 6c 65 6d 65 6e 74 2e 53 65 74       element.Set
1fd70 41 74 74 72 69 62 75 74 65 28 22 64 65 73 63 72  Attribute("descr
1fd80 69 70 74 69 6f 6e 22 2c 20 64 65 73 63 72 69 70  iption", descrip
1fd90 74 69 6f 6e 29 3b 0d 0a 20 20 20 20 20 20 20 20  tion);..        
1fda0 20 20 20 20 20 20 20 20 64 69 72 74 79 20 3d 20          dirty = 
1fdb0 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  true;..         
1fdc0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
1fdd0 20 20 20 20 73 74 72 69 6e 67 20 66 75 6c 6c 54      string fullT
1fde0 79 70 65 4e 61 6d 65 20 3d 20 53 74 72 69 6e 67  ypeName = String
1fdf0 2e 46 6f 72 6d 61 74 28 22 7b 30 7d 2c 20 7b 31  .Format("{0}, {1
1fe00 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }",..           
1fe10 20 20 20 20 20 74 79 70 65 4e 61 6d 65 2c 20 61       typeName, a
1fe20 73 73 65 6d 62 6c 79 4e 61 6d 65 29 3b 0d 0a 0d  ssemblyName);...
1fe30 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
1fe40 28 21 53 74 72 69 6e 67 2e 45 71 75 61 6c 73 28  (!String.Equals(
1fe50 65 6c 65 6d 65 6e 74 2e 47 65 74 41 74 74 72 69  element.GetAttri
1fe60 62 75 74 65 28 22 74 79 70 65 22 29 2c 0d 0a 20  bute("type"),.. 
1fe70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fe80 20 20 20 66 75 6c 6c 54 79 70 65 4e 61 6d 65 2c     fullTypeName,
1fe90 20 53 74 72 69 6e 67 43 6f 6d 70 61 72 69 73 6f   StringCompariso
1fea0 6e 2e 49 6e 76 61 72 69 61 6e 74 43 75 6c 74 75  n.InvariantCultu
1feb0 72 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  re))..          
1fec0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
1fed0 20 20 20 20 20 65 6c 65 6d 65 6e 74 2e 53 65 74       element.Set
1fee0 41 74 74 72 69 62 75 74 65 28 22 74 79 70 65 22  Attribute("type"
1fef0 2c 20 66 75 6c 6c 54 79 70 65 4e 61 6d 65 29 3b  , fullTypeName);
1ff00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1ff10 20 20 64 69 72 74 79 20 3d 20 74 72 75 65 3b 0d    dirty = true;.
1ff20 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
1ff30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
1ff40 20 28 64 69 72 74 79 20 7c 7c 20 77 68 61 74 49   (dirty || whatI
1ff50 66 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  f)..            
1ff60 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
1ff70 20 20 20 69 66 20 28 76 65 72 62 6f 73 65 29 0d     if (verbose).
1ff80 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1ff90 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 54 72       TraceOps.Tr
1ffa0 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ace(..          
1ffb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
1ffc0 61 63 65 50 72 69 6f 72 69 74 79 2e 48 69 67 68  acePriority.High
1ffd0 65 73 74 2c 20 74 72 61 63 65 43 61 6c 6c 62 61  est, traceCallba
1ffe0 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ck, String.Forma
1fff0 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
20000 20 20 20 20 20 20 20 20 20 20 20 20 22 65 6c 65              "ele
20010 6d 65 6e 74 20 3d 20 7b 30 7d 22 2c 20 46 6f 72  ment = {0}", For
20020 44 69 73 70 6c 61 79 28 65 6c 65 6d 65 6e 74 29  Display(element)
20030 29 2c 20 74 72 61 63 65 43 61 74 65 67 6f 72 79  ), traceCategory
20040 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
20050 20 20 20 20 20 20 69 66 20 28 21 77 68 61 74 49        if (!whatI
20060 66 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  f)..            
20070 20 20 20 20 20 20 20 20 64 6f 63 75 6d 65 6e 74          document
20080 2e 53 61 76 65 28 66 69 6c 65 4e 61 6d 65 29 3b  .Save(fileName);
20090 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
200a0 20 20 20 20 73 61 76 65 64 20 3d 20 74 72 75 65      saved = true
200b0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
200c0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
200d0 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20  return true;..  
200e0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
200f0 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
20100 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20110 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20120 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20130 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
20140 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74        private st
20150 61 74 69 63 20 62 6f 6f 6c 20 52 65 6d 6f 76 65  atic bool Remove
20160 44 62 50 72 6f 76 69 64 65 72 46 61 63 74 6f 72  DbProviderFactor
20170 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y(..            
20180 73 74 72 69 6e 67 20 66 69 6c 65 4e 61 6d 65 2c  string fileName,
20190 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74  ..            st
201a0 72 69 6e 67 20 69 6e 76 61 72 69 61 6e 74 2c 0d  ring invariant,.
201b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f  .            boo
201c0 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20  l whatIf,..     
201d0 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62         bool verb
201e0 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ose,..          
201f0 20 20 72 65 66 20 62 6f 6f 6c 20 73 61 76 65 64    ref bool saved
20200 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  ,..            r
20210 65 66 20 73 74 72 69 6e 67 20 65 72 72 6f 72 0d  ef string error.
20220 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a  .            )..
20230 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
20240 20 20 20 20 20 20 20 62 6f 6f 6c 20 64 69 72 74         bool dirt
20250 79 20 3d 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20  y = false;..    
20260 20 20 20 20 20 20 20 20 58 6d 6c 44 6f 63 75 6d          XmlDocum
20270 65 6e 74 20 64 6f 63 75 6d 65 6e 74 20 3d 20 6e  ent document = n
20280 65 77 20 58 6d 6c 44 6f 63 75 6d 65 6e 74 28 29  ew XmlDocument()
20290 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
202a0 20 64 6f 63 75 6d 65 6e 74 2e 50 72 65 73 65 72   document.Preser
202b0 76 65 57 68 69 74 65 73 70 61 63 65 20 3d 20 74  veWhitespace = t
202c0 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  rue;..          
202d0 20 20 64 6f 63 75 6d 65 6e 74 2e 4c 6f 61 64 28    document.Load(
202e0 66 69 6c 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20  fileName);....  
202f0 20 20 20 20 20 20 20 20 20 20 58 6d 6c 45 6c 65            XmlEle
20300 6d 65 6e 74 20 65 6c 65 6d 65 6e 74 20 3d 20 64  ment element = d
20310 6f 63 75 6d 65 6e 74 2e 53 65 6c 65 63 74 53 69  ocument.SelectSi
20320 6e 67 6c 65 4e 6f 64 65 28 53 74 72 69 6e 67 2e  ngleNode(String.
20330 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
20340 20 20 20 20 20 20 20 20 20 58 50 61 74 68 46 6f           XPathFo
20350 72 41 64 64 45 6c 65 6d 65 6e 74 2c 20 69 6e 76  rAddElement, inv
20360 61 72 69 61 6e 74 29 29 20 61 73 20 58 6d 6c 45  ariant)) as XmlE
20370 6c 65 6d 65 6e 74 3b 0d 0a 0d 0a 20 20 20 20 20  lement;....     
20380 20 20 20 20 20 20 20 69 66 20 28 65 6c 65 6d 65         if (eleme
20390 6e 74 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  nt != null)..   
203a0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
203b0 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 65 6d              elem
203c0 65 6e 74 2e 50 61 72 65 6e 74 4e 6f 64 65 2e 52  ent.ParentNode.R
203d0 65 6d 6f 76 65 43 68 69 6c 64 28 65 6c 65 6d 65  emoveChild(eleme
203e0 6e 74 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  nt);..          
203f0 20 20 20 20 20 20 64 69 72 74 79 20 3d 20 74 72        dirty = tr
20400 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
20410 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
20420 20 20 65 6c 65 6d 65 6e 74 20 3d 20 64 6f 63 75    element = docu
20430 6d 65 6e 74 2e 53 65 6c 65 63 74 53 69 6e 67 6c  ment.SelectSingl
20440 65 4e 6f 64 65 28 53 74 72 69 6e 67 2e 46 6f 72  eNode(String.For
20450 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
20460 20 20 20 20 20 20 58 50 61 74 68 46 6f 72 52 65        XPathForRe
20470 6d 6f 76 65 45 6c 65 6d 65 6e 74 2c 20 69 6e 76  moveElement, inv
20480 61 72 69 61 6e 74 29 29 20 61 73 20 58 6d 6c 45  ariant)) as XmlE
20490 6c 65 6d 65 6e 74 3b 0d 0a 0d 0a 20 20 20 20 20  lement;....     
204a0 20 20 20 20 20 20 20 69 66 20 28 65 6c 65 6d 65         if (eleme
204b0 6e 74 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  nt != null)..   
204c0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
204d0 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 65 6d              elem
204e0 65 6e 74 2e 50 61 72 65 6e 74 4e 6f 64 65 2e 52  ent.ParentNode.R
204f0 65 6d 6f 76 65 43 68 69 6c 64 28 65 6c 65 6d 65  emoveChild(eleme
20500 6e 74 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  nt);..          
20510 20 20 20 20 20 20 64 69 72 74 79 20 3d 20 74 72        dirty = tr
20520 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
20530 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
20540 20 20 69 66 20 28 64 69 72 74 79 20 7c 7c 20 77    if (dirty || w
20550 68 61 74 49 66 29 0d 0a 20 20 20 20 20 20 20 20  hatIf)..        
20560 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
20570 20 20 20 20 20 20 20 69 66 20 28 76 65 72 62 6f         if (verbo
20580 73 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se)..           
20590 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70           TraceOp
205a0 73 2e 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20  s.Trace(..      
205b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
205c0 20 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e    TracePriority.
205d0 48 69 67 68 65 73 74 2c 20 74 72 61 63 65 43 61  Highest, traceCa
205e0 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46  llback, String.F
205f0 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
20600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20610 22 65 6c 65 6d 65 6e 74 20 3d 20 7b 30 7d 22 2c  "element = {0}",
20620 20 46 6f 72 44 69 73 70 6c 61 79 28 65 6c 65 6d   ForDisplay(elem
20630 65 6e 74 29 29 2c 20 74 72 61 63 65 43 61 74 65  ent)), traceCate
20640 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
20650 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21 77            if (!w
20660 68 61 74 49 66 29 0d 0a 20 20 20 20 20 20 20 20  hatIf)..        
20670 20 20 20 20 20 20 20 20 20 20 20 20 64 6f 63 75              docu
20680 6d 65 6e 74 2e 53 61 76 65 28 66 69 6c 65 4e 61  ment.Save(fileNa
20690 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  me);....        
206a0 20 20 20 20 20 20 20 20 73 61 76 65 64 20 3d 20          saved = 
206b0 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  true;..         
206c0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
206d0 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b      return true;
206e0 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
206f0 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
20700 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20710 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20720 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20730 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
20740 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
20750 65 20 73 74 61 74 69 63 20 62 6f 6f 6c 20 50 72  e static bool Pr
20760 6f 63 65 73 73 44 62 50 72 6f 76 69 64 65 72 46  ocessDbProviderF
20770 61 63 74 6f 72 79 28 0d 0a 20 20 20 20 20 20 20  actory(..       
20780 20 20 20 20 20 73 74 72 69 6e 67 20 66 69 6c 65       string file
20790 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  Name,..         
207a0 20 20 20 73 74 72 69 6e 67 20 69 6e 76 61 72 69     string invari
207b0 61 6e 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ant,..          
207c0 20 20 73 74 72 69 6e 67 20 6e 61 6d 65 2c 0d 0a    string name,..
207d0 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
207e0 6e 67 20 64 65 73 63 72 69 70 74 69 6f 6e 2c 0d  ng description,.
207f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72  .            str
20800 69 6e 67 20 74 79 70 65 4e 61 6d 65 2c 0d 0a 20  ing typeName,.. 
20810 20 20 20 20 20 20 20 20 20 20 20 41 73 73 65 6d             Assem
20820 62 6c 79 4e 61 6d 65 20 61 73 73 65 6d 62 6c 79  blyName assembly
20830 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  Name,..         
20840 20 20 20 6f 62 6a 65 63 74 20 63 6c 69 65 6e 74     object client
20850 44 61 74 61 2c 0d 0a 20 20 20 20 20 20 20 20 20  Data,..         
20860 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d     bool whatIf,.
20870 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f  .            boo
20880 6c 20 76 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20  l verbose,..    
20890 20 20 20 20 20 20 20 20 72 65 66 20 62 6f 6f 6c          ref bool
208a0 20 73 61 76 65 64 2c 0d 0a 20 20 20 20 20 20 20   saved,..       
208b0 20 20 20 20 20 72 65 66 20 73 74 72 69 6e 67 20       ref string 
208c0 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 20  error..         
208d0 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d     )..        {.
208e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 41 6e 79  .            Any
208f0 50 61 69 72 3c 73 74 72 69 6e 67 2c 20 62 6f 6f  Pair<string, boo
20900 6c 3e 20 70 61 69 72 20 3d 20 63 6c 69 65 6e 74  l> pair = client
20910 44 61 74 61 20 61 73 20 41 6e 79 50 61 69 72 3c  Data as AnyPair<
20920 73 74 72 69 6e 67 2c 20 62 6f 6f 6c 3e 3b 0d 0a  string, bool>;..
20930 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
20940 20 28 70 61 69 72 20 3d 3d 20 6e 75 6c 6c 29 0d   (pair == null).
20950 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
20960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20970 65 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64  error = "invalid
20980 20 66 72 61 6d 65 77 6f 72 6b 20 63 6f 6e 66 69   framework confi
20990 67 20 63 61 6c 6c 62 61 63 6b 20 64 61 74 61 22  g callback data"
209a0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
209b0 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
209c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
209d0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
209e0 66 20 28 70 61 69 72 2e 59 29 0d 0a 20 20 20 20  f (pair.Y)..    
209f0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
20a00 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
20a10 6e 20 52 65 6d 6f 76 65 44 62 50 72 6f 76 69 64  n RemoveDbProvid
20a20 65 72 46 61 63 74 6f 72 79 28 0d 0a 20 20 20 20  erFactory(..    
20a30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20a40 66 69 6c 65 4e 61 6d 65 2c 20 69 6e 76 61 72 69  fileName, invari
20a50 61 6e 74 2c 20 77 68 61 74 49 66 2c 20 76 65 72  ant, whatIf, ver
20a60 62 6f 73 65 2c 20 72 65 66 20 73 61 76 65 64 2c  bose, ref saved,
20a70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
20a80 20 20 20 20 20 20 72 65 66 20 65 72 72 6f 72 29        ref error)
20a90 20 26 26 0d 0a 20 20 20 20 20 20 20 20 20 20 20   &&..           
20aa0 20 20 20 20 20 41 64 64 44 62 50 72 6f 76 69 64       AddDbProvid
20ab0 65 72 46 61 63 74 6f 72 79 28 0d 0a 20 20 20 20  erFactory(..    
20ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20ad0 66 69 6c 65 4e 61 6d 65 2c 20 69 6e 76 61 72 69  fileName, invari
20ae0 61 6e 74 2c 20 6e 61 6d 65 2c 20 64 65 73 63 72  ant, name, descr
20af0 69 70 74 69 6f 6e 2c 20 74 79 70 65 4e 61 6d 65  iption, typeName
20b00 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
20b10 20 20 20 20 20 20 20 61 73 73 65 6d 62 6c 79 4e         assemblyN
20b20 61 6d 65 2c 20 77 68 61 74 49 66 2c 20 76 65 72  ame, whatIf, ver
20b30 62 6f 73 65 2c 20 72 65 66 20 73 61 76 65 64 2c  bose, ref saved,
20b40 20 72 65 66 20 65 72 72 6f 72 29 3b 0d 0a 20 20   ref error);..  
20b50 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
20b60 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20           else.. 
20b70 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
20b80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
20b90 74 75 72 6e 20 52 65 6d 6f 76 65 44 62 50 72 6f  turn RemoveDbPro
20ba0 76 69 64 65 72 46 61 63 74 6f 72 79 28 0d 0a 20  viderFactory(.. 
20bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20bc0 20 20 20 66 69 6c 65 4e 61 6d 65 2c 20 69 6e 76     fileName, inv
20bd0 61 72 69 61 6e 74 2c 20 77 68 61 74 49 66 2c 20  ariant, whatIf, 
20be0 76 65 72 62 6f 73 65 2c 20 72 65 66 20 73 61 76  verbose, ref sav
20bf0 65 64 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ed,..           
20c00 20 20 20 20 20 20 20 20 20 72 65 66 20 65 72 72           ref err
20c10 6f 72 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  or);..          
20c20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a    }..        }..
20c30 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
20c40 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  on....        //
20c50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20c60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20c70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20c80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20c90 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
20ca0 20 23 72 65 67 69 6f 6e 20 41 73 73 65 6d 62 6c   #region Assembl
20cb0 79 20 46 6f 6c 64 65 72 73 20 48 61 6e 64 6c 69  y Folders Handli
20cc0 6e 67 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  ng..        priv
20cd0 61 74 65 20 73 74 61 74 69 63 20 73 74 72 69 6e  ate static strin
20ce0 67 20 47 65 74 41 73 73 65 6d 62 6c 79 46 6f 6c  g GetAssemblyFol
20cf0 64 65 72 73 4b 65 79 4e 61 6d 65 28 0d 0a 20 20  dersKeyName(..  
20d00 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
20d10 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c 0d   frameworkName,.
20d20 0a 20 20 20 20 20 20 20 20 20 20 20 20 56 65 72  .            Ver
20d30 73 69 6f 6e 20 66 72 61 6d 65 77 6f 72 6b 56 65  sion frameworkVe
20d40 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20  rsion,..        
20d50 20 20 20 20 73 74 72 69 6e 67 20 70 6c 61 74 66      string platf
20d60 6f 72 6d 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20  ormName..       
20d70 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
20d80 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  {..            s
20d90 74 72 69 6e 67 20 66 6f 72 6d 61 74 20 3d 20 21  tring format = !
20da0 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45  String.IsNullOrE
20db0 6d 70 74 79 28 70 6c 61 74 66 6f 72 6d 4e 61 6d  mpty(platformNam
20dc0 65 29 20 3f 0d 0a 20 20 20 20 20 20 20 20 20 20  e) ?..          
20dd0 20 20 20 20 20 20 22 53 6f 66 74 77 61 72 65 5c        "Software\
20de0 5c 4d 69 63 72 6f 73 6f 66 74 5c 5c 7b 30 7d 5c  \Microsoft\\{0}\
20df0 5c 76 7b 31 7d 5c 5c 7b 32 7d 5c 5c 41 73 73 65  \v{1}\\{2}\\Asse
20e00 6d 62 6c 79 46 6f 6c 64 65 72 73 45 78 22 20 3a  mblyFoldersEx" :
20e10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
20e20 20 20 22 53 6f 66 74 77 61 72 65 5c 5c 4d 69 63    "Software\\Mic
20e30 72 6f 73 6f 66 74 5c 5c 7b 30 7d 5c 5c 76 7b 31  rosoft\\{0}\\v{1
20e40 7d 5c 5c 41 73 73 65 6d 62 6c 79 46 6f 6c 64 65  }\\AssemblyFolde
20e50 72 73 45 78 22 3b 0d 0a 0d 0a 20 20 20 20 20 20  rsEx";....      
20e60 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 74 72        return Str
20e70 69 6e 67 2e 46 6f 72 6d 61 74 28 66 6f 72 6d 61  ing.Format(forma
20e80 74 2c 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65  t, frameworkName
20e90 2c 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69  , frameworkVersi
20ea0 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  on,..           
20eb0 20 20 20 20 20 70 6c 61 74 66 6f 72 6d 4e 61 6d       platformNam
20ec0 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  e);..        }..
20ed0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
20ee0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20ef0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20f00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20f10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20f20 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69  /....        pri
20f30 76 61 74 65 20 73 74 61 74 69 63 20 62 6f 6f 6c  vate static bool
20f40 20 41 64 64 54 6f 41 73 73 65 6d 62 6c 79 46 6f   AddToAssemblyFo
20f50 6c 64 65 72 73 28 0d 0a 20 20 20 20 20 20 20 20  lders(..        
20f60 20 20 20 20 52 65 67 69 73 74 72 79 4b 65 79 20      RegistryKey 
20f70 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20 20 20 20  rootKey,..      
20f80 20 20 20 20 20 20 73 74 72 69 6e 67 20 66 72 61        string fra
20f90 6d 65 77 6f 72 6b 4e 61 6d 65 2c 0d 0a 20 20 20  meworkName,..   
20fa0 20 20 20 20 20 20 20 20 20 56 65 72 73 69 6f 6e           Version
20fb0 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f   frameworkVersio
20fc0 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n,..            
20fd0 73 74 72 69 6e 67 20 70 6c 61 74 66 6f 72 6d 4e  string platformN
20fe0 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ame,..          
20ff0 20 20 73 74 72 69 6e 67 20 73 75 62 4b 65 79 4e    string subKeyN
21000 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ame,..          
21010 20 20 73 74 72 69 6e 67 20 64 69 72 65 63 74 6f    string directo
21020 72 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ry,..           
21030 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20   bool whatIf,.. 
21040 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
21050 76 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20  verbose,..      
21060 20 20 20 20 20 20 72 65 66 20 73 74 72 69 6e 67        ref string
21070 20 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20   error..        
21080 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b      )..        {
21090 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74  ..            st
210a0 72 69 6e 67 20 6b 65 79 4e 61 6d 65 20 3d 20 47  ring keyName = G
210b0 65 74 41 73 73 65 6d 62 6c 79 46 6f 6c 64 65 72  etAssemblyFolder
210c0 73 4b 65 79 4e 61 6d 65 28 0d 0a 20 20 20 20 20  sKeyName(..     
210d0 20 20 20 20 20 20 20 20 20 20 20 66 72 61 6d 65             frame
210e0 77 6f 72 6b 4e 61 6d 65 2c 20 66 72 61 6d 65 77  workName, framew
210f0 6f 72 6b 56 65 72 73 69 6f 6e 2c 20 70 6c 61 74  orkVersion, plat
21100 66 6f 72 6d 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20  formName);....  
21110 20 20 20 20 20 20 20 20 20 20 75 73 69 6e 67 20            using 
21120 28 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79  (MockRegistryKey
21130 20 6b 65 79 20 3d 20 52 65 67 69 73 74 72 79 48   key = RegistryH
21140 65 6c 70 65 72 2e 4f 70 65 6e 53 75 62 4b 65 79  elper.OpenSubKey
21150 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
21160 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20         rootKey, 
21170 6b 65 79 4e 61 6d 65 2c 20 74 72 75 65 2c 20 77  keyName, true, w
21180 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 29  hatIf, verbose))
21190 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
211a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
211b0 20 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c   if (key == null
211c0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
211d0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
211e0 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20            error 
211f0 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  = String.Format(
21200 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
21210 20 20 20 20 20 20 20 20 20 20 22 63 6f 75 6c 64            "could
21220 20 6e 6f 74 20 6f 70 65 6e 20 72 65 67 69 73 74   not open regist
21230 72 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c 7b 31 7d  ry key: {0}\\{1}
21240 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
21250 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74              root
21260 4b 65 79 2c 20 6b 65 79 4e 61 6d 65 29 3b 0d 0a  Key, keyName);..
21270 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
21280 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
21290 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se;..           
212a0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
212b0 20 20 20 20 20 20 20 20 20 20 75 73 69 6e 67 20            using 
212c0 28 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79  (MockRegistryKey
212d0 20 73 75 62 4b 65 79 20 3d 20 52 65 67 69 73 74   subKey = Regist
212e0 72 79 48 65 6c 70 65 72 2e 43 72 65 61 74 65 53  ryHelper.CreateS
212f0 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20  ubKey(..        
21300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21310 6b 65 79 2c 20 73 75 62 4b 65 79 4e 61 6d 65 2c  key, subKeyName,
21320 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65   whatIf, verbose
21330 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
21340 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
21350 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 73             if (s
21360 75 62 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  ubKey == null)..
21370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21380 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
21390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
213a0 72 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f  rror = String.Fo
213b0 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
213c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
213d0 20 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20 63 72     "could not cr
213e0 65 61 74 65 20 72 65 67 69 73 74 72 79 20 6b 65  eate registry ke
213f0 79 3a 20 7b 30 7d 5c 5c 7b 31 7d 22 2c 0d 0a 20  y: {0}\\{1}",.. 
21400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21410 20 20 20 20 20 20 20 20 20 20 20 6b 65 79 2c 20             key, 
21420 73 75 62 4b 65 79 4e 61 6d 65 29 3b 0d 0a 0d 0a  subKeyName);....
21430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21440 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
21450 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alse;..         
21460 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
21470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21480 20 20 20 20 52 65 67 69 73 74 72 79 48 65 6c 70      RegistryHelp
21490 65 72 2e 53 65 74 56 61 6c 75 65 28 0d 0a 20 20  er.SetValue(..  
214a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
214b0 20 20 20 20 20 20 73 75 62 4b 65 79 2c 20 6e 75        subKey, nu
214c0 6c 6c 2c 20 64 69 72 65 63 74 6f 72 79 2c 20 77  ll, directory, w
214d0 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 3b  hatIf, verbose);
214e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
214f0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
21500 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
21510 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a    return true;..
21520 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
21530 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
21540 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21550 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21560 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21570 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
21580 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
21590 73 74 61 74 69 63 20 62 6f 6f 6c 20 52 65 6d 6f  static bool Remo
215a0 76 65 46 72 6f 6d 41 73 73 65 6d 62 6c 79 46 6f  veFromAssemblyFo
215b0 6c 64 65 72 73 28 0d 0a 20 20 20 20 20 20 20 20  lders(..        
215c0 20 20 20 20 52 65 67 69 73 74 72 79 4b 65 79 20      RegistryKey 
215d0 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20 20 20 20  rootKey,..      
215e0 20 20 20 20 20 20 73 74 72 69 6e 67 20 66 72 61        string fra
215f0 6d 65 77 6f 72 6b 4e 61 6d 65 2c 0d 0a 20 20 20  meworkName,..   
21600 20 20 20 20 20 20 20 20 20 56 65 72 73 69 6f 6e           Version
21610 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f   frameworkVersio
21620 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n,..            
21630 73 74 72 69 6e 67 20 70 6c 61 74 66 6f 72 6d 4e  string platformN
21640 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ame,..          
21650 20 20 73 74 72 69 6e 67 20 73 75 62 4b 65 79 4e    string subKeyN
21660 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ame,..          
21670 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a    bool whatIf,..
21680 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
21690 20 76 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20   verbose,..     
216a0 20 20 20 20 20 20 20 72 65 66 20 73 74 72 69 6e         ref strin
216b0 67 20 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20  g error..       
216c0 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
216d0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  {..            s
216e0 74 72 69 6e 67 20 6b 65 79 4e 61 6d 65 20 3d 20  tring keyName = 
216f0 47 65 74 41 73 73 65 6d 62 6c 79 46 6f 6c 64 65  GetAssemblyFolde
21700 72 73 4b 65 79 4e 61 6d 65 28 0d 0a 20 20 20 20  rsKeyName(..    
21710 20 20 20 20 20 20 20 20 20 20 20 20 66 72 61 6d              fram
21720 65 77 6f 72 6b 4e 61 6d 65 2c 20 66 72 61 6d 65  eworkName, frame
21730 77 6f 72 6b 56 65 72 73 69 6f 6e 2c 20 70 6c 61  workVersion, pla
21740 74 66 6f 72 6d 4e 61 6d 65 29 3b 0d 0a 0d 0a 20  tformName);.... 
21750 20 20 20 20 20 20 20 20 20 20 20 75 73 69 6e 67             using
21760 20 28 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65   (MockRegistryKe
21770 79 20 6b 65 79 20 3d 20 52 65 67 69 73 74 72 79  y key = Registry
21780 48 65 6c 70 65 72 2e 4f 70 65 6e 53 75 62 4b 65  Helper.OpenSubKe
21790 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y(..            
217a0 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c          rootKey,
217b0 20 6b 65 79 4e 61 6d 65 2c 20 66 61 6c 73 65 2c   keyName, false,
217c0 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65   whatIf, verbose
217d0 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
217e0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
217f0 20 20 20 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75     if (key == nu
21800 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
21810 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
21820 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
21830 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  r = String.Forma
21840 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
21850 20 20 20 20 20 20 20 20 20 20 20 20 22 63 6f 75              "cou
21860 6c 64 20 6e 6f 74 20 6f 70 65 6e 20 72 65 67 69  ld not open regi
21870 73 74 72 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c 7b  stry key: {0}\\{
21880 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  1}",..          
21890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f                ro
218a0 6f 74 4b 65 79 2c 20 6b 65 79 4e 61 6d 65 29 3b  otKey, keyName);
218b0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
218c0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
218d0 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alse;..         
218e0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
218f0 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69              Regi
21900 73 74 72 79 48 65 6c 70 65 72 2e 44 65 6c 65 74  stryHelper.Delet
21910 65 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20  eSubKey(..      
21920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6b 65                ke
21930 79 2c 20 73 75 62 4b 65 79 4e 61 6d 65 2c 20 77  y, subKeyName, w
21940 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 3b  hatIf, verbose);
21950 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
21960 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  ...            r
21970 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20  eturn true;..   
21980 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
21990 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
219a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
219b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
219c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
219d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
219e0 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61       private sta
219f0 74 69 63 20 62 6f 6f 6c 20 50 72 6f 63 65 73 73  tic bool Process
21a00 41 73 73 65 6d 62 6c 79 46 6f 6c 64 65 72 73 28  AssemblyFolders(
21a10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 52 65  ..            Re
21a20 67 69 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65  gistryKey rootKe
21a30 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y,..            
21a40 73 74 72 69 6e 67 20 66 72 61 6d 65 77 6f 72 6b  string framework
21a50 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  Name,..         
21a60 20 20 20 56 65 72 73 69 6f 6e 20 66 72 61 6d 65     Version frame
21a70 77 6f 72 6b 56 65 72 73 69 6f 6e 2c 0d 0a 20 20  workVersion,..  
21a80 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
21a90 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 2c 0d 0a   platformName,..
21aa0 20 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65              obje
21ab0 63 74 20 63 6c 69 65 6e 74 44 61 74 61 2c 0d 0a  ct clientData,..
21ac0 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
21ad0 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20   whatIf,..      
21ae0 20 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f        bool verbo
21af0 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se,..           
21b00 20 72 65 66 20 73 74 72 69 6e 67 20 65 72 72 6f   ref string erro
21b10 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29  r..            )
21b20 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
21b30 20 20 20 20 20 20 20 20 20 41 6e 79 50 61 69 72           AnyPair
21b40 3c 73 74 72 69 6e 67 2c 20 62 6f 6f 6c 3e 20 70  <string, bool> p
21b50 61 69 72 20 3d 20 63 6c 69 65 6e 74 44 61 74 61  air = clientData
21b60 20 61 73 20 41 6e 79 50 61 69 72 3c 73 74 72 69   as AnyPair<stri
21b70 6e 67 2c 20 62 6f 6f 6c 3e 3b 0d 0a 0d 0a 20 20  ng, bool>;....  
21b80 20 20 20 20 20 20 20 20 20 20 69 66 20 28 70 61            if (pa
21b90 69 72 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ir == null)..   
21ba0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
21bb0 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
21bc0 72 20 3d 20 22 69 6e 76 61 6c 69 64 20 66 72 61  r = "invalid fra
21bd0 6d 65 77 6f 72 6b 20 63 61 6c 6c 62 61 63 6b 20  mework callback 
21be0 64 61 74 61 22 3b 0d 0a 20 20 20 20 20 20 20 20  data";..        
21bf0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
21c00 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alse;..         
21c10 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
21c20 20 20 20 20 69 66 20 28 70 61 69 72 2e 59 29 0d      if (pair.Y).
21c30 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
21c40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21c50 72 65 74 75 72 6e 20 52 65 6d 6f 76 65 46 72 6f  return RemoveFro
21c60 6d 41 73 73 65 6d 62 6c 79 46 6f 6c 64 65 72 73  mAssemblyFolders
21c70 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
21c80 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20         rootKey, 
21c90 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c 20 66  frameworkName, f
21ca0 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 2c  rameworkVersion,
21cb0 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 2c 0d 0a   platformName,..
21cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21cd0 20 20 20 20 4c 65 67 61 63 79 50 72 6f 6a 65 63      LegacyProjec
21ce0 74 4e 61 6d 65 2c 20 77 68 61 74 49 66 2c 20 76  tName, whatIf, v
21cf0 65 72 62 6f 73 65 2c 20 72 65 66 20 65 72 72 6f  erbose, ref erro
21d00 72 29 20 26 26 0d 0a 20 20 20 20 20 20 20 20 20  r) &&..         
21d10 20 20 20 20 20 20 20 41 64 64 54 6f 41 73 73 65         AddToAsse
21d20 6d 62 6c 79 46 6f 6c 64 65 72 73 28 0d 0a 20 20  mblyFolders(..  
21d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21d40 20 20 72 6f 6f 74 4b 65 79 2c 20 66 72 61 6d 65    rootKey, frame
21d50 77 6f 72 6b 4e 61 6d 65 2c 20 66 72 61 6d 65 77  workName, framew
21d60 6f 72 6b 56 65 72 73 69 6f 6e 2c 20 70 6c 61 74  orkVersion, plat
21d70 66 6f 72 6d 4e 61 6d 65 2c 0d 0a 20 20 20 20 20  formName,..     
21d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 50                 P
21d90 72 6f 6a 65 63 74 4e 61 6d 65 2c 20 70 61 69 72  rojectName, pair
21da0 2e 58 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62  .X, whatIf, verb
21db0 6f 73 65 2c 20 72 65 66 20 65 72 72 6f 72 29 3b  ose, ref error);
21dc0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
21dd0 0a 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73  .            els
21de0 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  e..            {
21df0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
21e00 20 20 72 65 74 75 72 6e 20 52 65 6d 6f 76 65 46    return RemoveF
21e10 72 6f 6d 41 73 73 65 6d 62 6c 79 46 6f 6c 64 65  romAssemblyFolde
21e20 72 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  rs(..           
21e30 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79           rootKey
21e40 2c 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c  , frameworkName,
21e50 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f   frameworkVersio
21e60 6e 2c 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 2c  n, platformName,
21e70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
21e80 20 20 20 20 20 20 50 72 6f 6a 65 63 74 4e 61 6d        ProjectNam
21e90 65 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f  e, whatIf, verbo
21ea0 73 65 2c 20 72 65 66 20 65 72 72 6f 72 29 3b 0d  se, ref error);.
21eb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
21ec0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
21ed0 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
21ee0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
21ef0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21f00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21f10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21f20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21f30 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67  ....        #reg
21f40 69 6f 6e 20 56 69 73 75 61 6c 20 53 74 75 64 69  ion Visual Studi
21f50 6f 20 48 61 6e 64 6c 69 6e 67 0d 0a 20 20 20 20  o Handling..    
21f60 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74      private stat
21f70 69 63 20 73 74 72 69 6e 67 20 47 65 74 56 73 4b  ic string GetVsK
21f80 65 79 4e 61 6d 65 28 0d 0a 20 20 20 20 20 20 20  eyName(..       
21f90 20 20 20 20 20 56 65 72 73 69 6f 6e 20 76 73 56       Version vsV
21fa0 65 72 73 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20  ersion..        
21fb0 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b      )..        {
21fc0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
21fd0 20 28 76 73 56 65 72 73 69 6f 6e 20 3d 3d 20 6e   (vsVersion == n
21fe0 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
21ff0 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c        return nul
22000 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  l;....          
22010 20 20 72 65 74 75 72 6e 20 53 74 72 69 6e 67 2e    return String.
22020 46 6f 72 6d 61 74 28 22 53 6f 66 74 77 61 72 65  Format("Software
22030 5c 5c 4d 69 63 72 6f 73 6f 66 74 5c 5c 56 69 73  \\Microsoft\\Vis
22040 75 61 6c 53 74 75 64 69 6f 5c 5c 7b 30 7d 22 2c  ualStudio\\{0}",
22050 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
22060 20 20 76 73 56 65 72 73 69 6f 6e 29 3b 0d 0a 20    vsVersion);.. 
22070 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
22080 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
22090 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
220a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
220b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
220c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
220d0 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 56         #region V
220e0 69 73 75 61 6c 20 53 74 75 64 69 6f 20 56 65 72  isual Studio Ver
220f0 73 69 6f 6e 20 48 61 6e 64 6c 69 6e 67 0d 0a 20  sion Handling.. 
22100 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
22110 74 61 74 69 63 20 62 6f 6f 6c 20 41 64 64 56 73  tatic bool AddVs
22120 56 65 72 73 69 6f 6e 28 0d 0a 20 20 20 20 20 20  Version(..      
22130 20 20 20 20 20 20 52 65 67 69 73 74 72 79 4b 65        RegistryKe
22140 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20 20  y rootKey,..    
22150 20 20 20 20 20 20 20 20 56 65 72 73 69 6f 6e 20          Version 
22160 76 73 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20  vsVersion,..    
22170 20 20 20 20 20 20 20 20 50 61 63 6b 61 67 65 20          Package 
22180 70 61 63 6b 61 67 65 2c 0d 0a 20 20 20 20 20 20  package,..      
22190 20 20 20 20 20 20 6f 62 6a 65 63 74 20 63 6c 69        object cli
221a0 65 6e 74 44 61 74 61 2c 0d 0a 20 20 20 20 20 20  entData,..      
221b0 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49        bool whatI
221c0 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  f,..            
221d0 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 0d 0a 20  bool verbose,.. 
221e0 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20 73             ref s
221f0 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20  tring error..   
22200 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
22210 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
22220 20 20 20 69 66 20 28 76 73 56 65 72 73 69 6f 6e     if (vsVersion
22230 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   != null)..     
22240 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
22250 20 20 20 20 20 20 20 20 20 20 56 73 4c 69 73 74            VsList
22260 20 76 73 4c 69 73 74 20 3d 20 63 6c 69 65 6e 74   vsList = client
22270 44 61 74 61 20 61 73 20 56 73 4c 69 73 74 3b 0d  Data as VsList;.
22280 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
22290 20 20 20 69 66 20 28 76 73 4c 69 73 74 20 21 3d     if (vsList !=
222a0 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
222b0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
222c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
222d0 66 20 28 76 73 4c 69 73 74 2e 49 6e 73 74 61 6c  f (vsList.Instal
222e0 6c 65 64 56 65 72 73 69 6f 6e 73 20 3d 3d 20 6e  ledVersions == n
222f0 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
22300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 76 73                vs
22310 4c 69 73 74 2e 49 6e 73 74 61 6c 6c 65 64 56 65  List.InstalledVe
22320 72 73 69 6f 6e 73 20 3d 20 6e 65 77 20 56 65 72  rsions = new Ver
22330 73 69 6f 6e 4c 69 73 74 28 29 3b 0d 0a 0d 0a 20  sionList();.... 
22340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22350 20 20 20 69 66 20 28 21 76 73 4c 69 73 74 2e 49     if (!vsList.I
22360 6e 73 74 61 6c 6c 65 64 56 65 72 73 69 6f 6e 73  nstalledVersions
22370 2e 43 6f 6e 74 61 69 6e 73 28 76 73 56 65 72 73  .Contains(vsVers
22380 69 6f 6e 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ion))..         
22390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 76                 v
223a0 73 4c 69 73 74 2e 49 6e 73 74 61 6c 6c 65 64 56  sList.InstalledV
223b0 65 72 73 69 6f 6e 73 2e 41 64 64 28 76 73 56 65  ersions.Add(vsVe
223c0 72 73 69 6f 6e 29 3b 0d 0a 20 20 20 20 20 20 20  rsion);..       
223d0 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
223e0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
223f0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
22400 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d  true;..        }
22410 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65  ..        #endre
22420 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20  gion....        
22430 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22440 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22450 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22460 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22470 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
22480 20 20 20 23 72 65 67 69 6f 6e 20 56 69 73 75 61     #region Visua
22490 6c 20 53 74 75 64 69 6f 20 44 61 74 61 20 53 6f  l Studio Data So
224a0 75 72 63 65 20 48 61 6e 64 6c 69 6e 67 0d 0a 20  urce Handling.. 
224b0 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
224c0 74 61 74 69 63 20 62 6f 6f 6c 20 41 64 64 56 73  tatic bool AddVs
224d0 44 61 74 61 53 6f 75 72 63 65 28 0d 0a 20 20 20  DataSource(..   
224e0 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72           Registr
224f0 79 4b 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20  yKey rootKey,.. 
22500 20 20 20 20 20 20 20 20 20 20 20 56 65 72 73 69             Versi
22510 6f 6e 20 76 73 56 65 72 73 69 6f 6e 2c 0d 0a 20  on vsVersion,.. 
22520 20 20 20 20 20 20 20 20 20 20 20 50 61 63 6b 61             Packa
22530 67 65 20 70 61 63 6b 61 67 65 2c 0d 0a 20 20 20  ge package,..   
22540 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68           bool wh
22550 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20  atIf,..         
22560 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c     bool verbose,
22570 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
22580 66 20 73 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a  f string error..
22590 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
225a0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
225b0 20 20 20 20 20 20 69 66 20 28 76 73 56 65 72 73        if (vsVers
225c0 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  ion == null)..  
225d0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
225e0 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
225f0 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64 20 56 53  or = "invalid VS
22600 20 76 65 72 73 69 6f 6e 22 3b 0d 0a 20 20 20 20   version";..    
22610 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
22620 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20  rn false;..     
22630 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
22640 20 20 20 20 20 20 20 20 69 66 20 28 70 61 63 6b          if (pack
22650 61 67 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  age == null)..  
22660 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
22670 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
22680 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64 20 56 53  or = "invalid VS
22690 20 70 61 63 6b 61 67 65 22 3b 0d 0a 20 20 20 20   package";..    
226a0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
226b0 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20  rn false;..     
226c0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
226d0 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6b          string k
226e0 65 79 4e 61 6d 65 20 3d 20 47 65 74 56 73 4b 65  eyName = GetVsKe
226f0 79 4e 61 6d 65 28 76 73 56 65 72 73 69 6f 6e 29  yName(vsVersion)
22700 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
22710 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69   using (MockRegi
22720 73 74 72 79 4b 65 79 20 6b 65 79 20 3d 20 52 65  stryKey key = Re
22730 67 69 73 74 72 79 48 65 6c 70 65 72 2e 4f 70 65  gistryHelper.Ope
22740 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20  nSubKey(..      
22750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f                ro
22760 6f 74 4b 65 79 2c 20 6b 65 79 4e 61 6d 65 2c 20  otKey, keyName, 
22770 66 61 6c 73 65 2c 20 77 68 61 74 49 66 2c 20 76  false, whatIf, v
22780 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20 20  erbose))..      
22790 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
227a0 20 20 20 20 20 20 20 20 20 69 66 20 28 6b 65 79           if (key
227b0 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
227c0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
227d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
227e0 20 20 65 72 72 6f 72 20 3d 20 53 74 72 69 6e 67    error = String
227f0 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  .Format(..      
22800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22810 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20 6f 70 65    "could not ope
22820 6e 20 72 65 67 69 73 74 72 79 20 6b 65 79 3a 20  n registry key: 
22830 7b 30 7d 5c 5c 7b 31 7d 22 2c 0d 0a 20 20 20 20  {0}\\{1}",..    
22840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22850 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 6b 65 79      rootKey, key
22860 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  Name);....      
22870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
22880 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20  turn false;..   
22890 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
228a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
228b0 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67    using (MockReg
228c0 69 73 74 72 79 4b 65 79 20 73 75 62 4b 65 79 20  istryKey subKey 
228d0 3d 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72  = RegistryHelper
228e0 2e 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20  .OpenSubKey(..  
228f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22900 20 20 20 20 20 20 6b 65 79 2c 20 22 44 61 74 61        key, "Data
22910 53 6f 75 72 63 65 73 22 2c 20 74 72 75 65 2c 20  Sources", true, 
22920 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29  whatIf, verbose)
22930 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
22940 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
22950 20 20 20 20 20 20 20 20 20 20 69 66 20 28 73 75            if (su
22960 62 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  bKey == null).. 
22970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22980 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
22990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72                er
229a0 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72  ror = String.For
229b0 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
229c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
229d0 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20 6f 70 65    "could not ope
229e0 6e 20 72 65 67 69 73 74 72 79 20 6b 65 79 3a 20  n registry key: 
229f0 7b 30 7d 5c 5c 44 61 74 61 53 6f 75 72 63 65 73  {0}\\DataSources
22a00 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
22a10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22a20 6b 65 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  key);....       
22a30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22a40 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
22a50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22a60 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
22a70 20 20 20 20 20 20 20 20 20 20 20 20 20 75 73 69               usi
22a80 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73 74 72 79  ng (MockRegistry
22a90 4b 65 79 20 64 61 74 61 53 6f 75 72 63 65 4b 65  Key dataSourceKe
22aa0 79 20 3d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  y =..           
22ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22ac0 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e   RegistryHelper.
22ad0 43 72 65 61 74 65 53 75 62 4b 65 79 28 73 75 62  CreateSubKey(sub
22ae0 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  Key,..          
22af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22b00 20 20 70 61 63 6b 61 67 65 2e 44 61 74 61 53 6f    package.DataSo
22b10 75 72 63 65 49 64 2e 54 6f 53 74 72 69 6e 67 28  urceId.ToString(
22b20 56 73 49 64 46 6f 72 6d 61 74 29 2c 0d 0a 20 20  VsIdFormat),..  
22b30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22b40 20 20 20 20 20 20 20 20 20 20 77 68 61 74 49 66            whatIf
22b50 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a 20 20 20  , verbose))..   
22b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22b70 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
22b80 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
22b90 64 61 74 61 53 6f 75 72 63 65 4b 65 79 20 3d 3d  dataSourceKey ==
22ba0 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
22bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22bc0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
22bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
22be0 72 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f  rror = String.Fo
22bf0 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
22c00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22c10 20 20 20 20 20 20 20 22 63 6f 75 6c 64 20 6e 6f         "could no
22c20 74 20 63 72 65 61 74 65 20 72 65 67 69 73 74 72  t create registr
22c30 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c 7b 31 7d 22  y key: {0}\\{1}"
22c40 2c 20 6b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20  , key,..        
22c50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22c60 20 20 20 20 20 20 20 20 70 61 63 6b 61 67 65 2e          package.
22c70 44 61 74 61 53 6f 75 72 63 65 49 64 2e 54 6f 53  DataSourceId.ToS
22c80 74 72 69 6e 67 28 56 73 49 64 46 6f 72 6d 61 74  tring(VsIdFormat
22c90 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ));....         
22ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22cb0 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
22cc0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
22cd0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
22ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22cf0 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79 48         RegistryH
22d00 65 6c 70 65 72 2e 53 65 74 56 61 6c 75 65 28 0d  elper.SetValue(.
22d10 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
22d20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 61 74               dat
22d30 61 53 6f 75 72 63 65 4b 65 79 2c 20 6e 75 6c 6c  aSourceKey, null
22d40 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  , String.Format(
22d50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
22d60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 7b                "{
22d70 30 7d 20 44 61 74 61 62 61 73 65 20 46 69 6c 65  0} Database File
22d80 22 2c 20 50 72 6f 6a 65 63 74 4e 61 6d 65 29 2c  ", ProjectName),
22d90 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20   whatIf,..      
22da0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22db0 20 20 20 20 20 20 76 65 72 62 6f 73 65 29 3b 0d        verbose);.
22dc0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
22dd0 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73             Regis
22de0 74 72 79 48 65 6c 70 65 72 2e 43 72 65 61 74 65  tryHelper.Create
22df0 53 75 62 4b 65 79 28 64 61 74 61 53 6f 75 72 63  SubKey(dataSourc
22e00 65 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20  eKey,..         
22e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22e20 20 20 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74     String.Format
22e30 28 22 53 75 70 70 6f 72 74 69 6e 67 50 72 6f 76  ("SupportingProv
22e40 69 64 65 72 73 5c 5c 7b 30 7d 22 2c 0d 0a 20 20  iders\\{0}",..  
22e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22e60 20 20 20 20 20 20 20 20 20 20 70 61 63 6b 61 67            packag
22e70 65 2e 44 61 74 61 50 72 6f 76 69 64 65 72 49 64  e.DataProviderId
22e80 2e 54 6f 53 74 72 69 6e 67 28 56 73 49 64 46 6f  .ToString(VsIdFo
22e90 72 6d 61 74 29 29 2c 0d 0a 20 20 20 20 20 20 20  rmat)),..       
22ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22eb0 20 20 20 20 20 77 68 61 74 49 66 2c 20 76 65 72       whatIf, ver
22ec0 62 6f 73 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  bose);..        
22ed0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
22ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
22ef0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
22f00 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  ...            r
22f10 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20  eturn true;..   
22f20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
22f30 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
22f40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22f50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22f60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22f70 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
22f80 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61       private sta
22f90 74 69 63 20 62 6f 6f 6c 20 52 65 6d 6f 76 65 56  tic bool RemoveV
22fa0 73 44 61 74 61 53 6f 75 72 63 65 28 0d 0a 20 20  sDataSource(..  
22fb0 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74            Regist
22fc0 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a  ryKey rootKey,..
22fd0 20 20 20 20 20 20 20 20 20 20 20 20 56 65 72 73              Vers
22fe0 69 6f 6e 20 76 73 56 65 72 73 69 6f 6e 2c 0d 0a  ion vsVersion,..
22ff0 20 20 20 20 20 20 20 20 20 20 20 20 50 61 63 6b              Pack
23000 61 67 65 20 70 61 63 6b 61 67 65 2c 0d 0a 20 20  age package,..  
23010 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77            bool w
23020 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20  hatIf,..        
23030 20 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65      bool verbose
23040 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  ,..            r
23050 65 66 20 73 74 72 69 6e 67 20 65 72 72 6f 72 0d  ef string error.
23060 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a  .            )..
23070 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
23080 20 20 20 20 20 20 20 69 66 20 28 76 73 56 65 72         if (vsVer
23090 73 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  sion == null).. 
230a0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
230b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72                er
230c0 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64 20 56  ror = "invalid V
230d0 53 20 76 65 72 73 69 6f 6e 22 3b 0d 0a 20 20 20  S version";..   
230e0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
230f0 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20  urn false;..    
23100 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
23110 20 20 20 20 20 20 20 20 20 69 66 20 28 70 61 63           if (pac
23120 6b 61 67 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  kage == null).. 
23130 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
23140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72                er
23150 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64 20 56  ror = "invalid V
23160 53 20 70 61 63 6b 61 67 65 22 3b 0d 0a 20 20 20  S package";..   
23170 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
23180 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20  urn false;..    
23190 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
231a0 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
231b0 6b 65 79 4e 61 6d 65 20 3d 20 47 65 74 56 73 4b  keyName = GetVsK
231c0 65 79 4e 61 6d 65 28 76 73 56 65 72 73 69 6f 6e  eyName(vsVersion
231d0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
231e0 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67    using (MockReg
231f0 69 73 74 72 79 4b 65 79 20 6b 65 79 20 3d 20 52  istryKey key = R
23200 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 4f 70  egistryHelper.Op
23210 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20  enSubKey(..     
23220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
23230 6f 6f 74 4b 65 79 2c 20 6b 65 79 4e 61 6d 65 2c  ootKey, keyName,
23240 20 66 61 6c 73 65 2c 20 77 68 61 74 49 66 2c 20   false, whatIf, 
23250 76 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20  verbose))..     
23260 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
23270 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6b 65            if (ke
23280 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  y == null)..    
23290 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
232a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
232b0 20 20 20 65 72 72 6f 72 20 3d 20 53 74 72 69 6e     error = Strin
232c0 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
232d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
232e0 20 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20 6f 70     "could not op
232f0 65 6e 20 72 65 67 69 73 74 72 79 20 6b 65 79 3a  en registry key:
23300 20 7b 30 7d 5c 5c 7b 31 7d 22 2c 0d 0a 20 20 20   {0}\\{1}",..   
23310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23320 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 6b 65       rootKey, ke
23330 79 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20  yName);....     
23340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
23350 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20  eturn false;..  
23360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
23370 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
23380 20 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65     using (MockRe
23390 67 69 73 74 72 79 4b 65 79 20 73 75 62 4b 65 79  gistryKey subKey
233a0 20 3d 20 52 65 67 69 73 74 72 79 48 65 6c 70 65   = RegistryHelpe
233b0 72 2e 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20  r.OpenSubKey(.. 
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 6b 65 79 2c 20 22 44 61 74         key, "Dat
233e0 61 53 6f 75 72 63 65 73 22 2c 20 74 72 75 65 2c  aSources", true,
233f0 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65   whatIf, verbose
23400 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
23410 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
23420 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 73             if (s
23430 75 62 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  ubKey == null)..
23440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23450 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
23460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
23470 72 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f  rror = String.Fo
23480 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
23490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
234a0 20 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20 6f 70     "could not op
234b0 65 6e 20 72 65 67 69 73 74 72 79 20 6b 65 79 3a  en registry key:
234c0 20 7b 30 7d 5c 5c 44 61 74 61 53 6f 75 72 63 65   {0}\\DataSource
234d0 73 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s",..           
234e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
234f0 20 6b 65 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20   key);....      
23500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23510 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
23520 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
23530 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
23540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65                Re
23550 67 69 73 74 72 79 48 65 6c 70 65 72 2e 44 65 6c  gistryHelper.Del
23560 65 74 65 53 75 62 4b 65 79 54 72 65 65 28 0d 0a  eteSubKeyTree(..
23570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23580 20 20 20 20 20 20 20 20 73 75 62 4b 65 79 2c 20          subKey, 
23590 70 61 63 6b 61 67 65 2e 44 61 74 61 53 6f 75 72  package.DataSour
235a0 63 65 49 64 2e 54 6f 53 74 72 69 6e 67 28 56 73  ceId.ToString(Vs
235b0 49 64 46 6f 72 6d 61 74 29 2c 0d 0a 20 20 20 20  IdFormat),..    
235c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
235d0 20 20 20 20 77 68 61 74 49 66 2c 20 76 65 72 62      whatIf, verb
235e0 6f 73 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ose);..         
235f0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
23600 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
23610 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72         return tr
23620 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  ue;..        }..
23630 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
23640 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23650 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23660 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23670 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23680 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69  /....        pri
23690 76 61 74 65 20 73 74 61 74 69 63 20 62 6f 6f 6c  vate static bool
236a0 20 50 72 6f 63 65 73 73 56 73 44 61 74 61 53 6f   ProcessVsDataSo
236b0 75 72 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20  urce(..         
236c0 20 20 20 52 65 67 69 73 74 72 79 4b 65 79 20 72     RegistryKey r
236d0 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20  ootKey,..       
236e0 20 20 20 20 20 56 65 72 73 69 6f 6e 20 76 73 56       Version vsV
236f0 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20  ersion,..       
23700 20 20 20 20 20 50 61 63 6b 61 67 65 20 70 61 63       Package pac
23710 6b 61 67 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  kage,..         
23720 20 20 20 6f 62 6a 65 63 74 20 63 6c 69 65 6e 74     object client
23730 44 61 74 61 2c 0d 0a 20 20 20 20 20 20 20 20 20  Data,..         
23740 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d     bool whatIf,.
23750 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f  .            boo
23760 6c 20 76 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20  l verbose,..    
23770 20 20 20 20 20 20 20 20 72 65 66 20 73 74 72 69          ref stri
23780 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20 20 20 20  ng error..      
23790 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
237a0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
237b0 69 66 20 28 70 61 63 6b 61 67 65 20 3d 3d 20 6e  if (package == n
237c0 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
237d0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
237e0 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 69 6e       error = "in
237f0 76 61 6c 69 64 20 56 53 20 70 61 63 6b 61 67 65  valid VS package
23800 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ";..            
23810 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
23820 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
23830 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
23840 41 6e 79 50 61 69 72 3c 73 74 72 69 6e 67 2c 20  AnyPair<string, 
23850 62 6f 6f 6c 3e 20 70 61 69 72 20 3d 20 63 6c 69  bool> pair = cli
23860 65 6e 74 44 61 74 61 20 61 73 20 41 6e 79 50 61  entData as AnyPa
23870 69 72 3c 73 74 72 69 6e 67 2c 20 62 6f 6f 6c 3e  ir<string, bool>
23880 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
23890 20 69 66 20 28 70 61 69 72 20 3d 3d 20 6e 75 6c   if (pair == nul
238a0 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
238b0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
238c0 20 20 20 65 72 72 6f 72 20 3d 20 22 69 6e 76 61     error = "inva
238d0 6c 69 64 20 56 53 20 63 61 6c 6c 62 61 63 6b 20  lid VS callback 
238e0 64 61 74 61 22 3b 0d 0a 20 20 20 20 20 20 20 20  data";..        
238f0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
23900 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alse;..         
23910 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
23920 20 20 20 20 69 66 20 28 70 61 69 72 2e 59 29 0d      if (pair.Y).
23930 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
23940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23950 72 65 74 75 72 6e 20 41 64 64 56 73 44 61 74 61  return AddVsData
23960 53 6f 75 72 63 65 28 0d 0a 20 20 20 20 20 20 20  Source(..       
23970 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f               roo
23980 74 4b 65 79 2c 20 76 73 56 65 72 73 69 6f 6e 2c  tKey, vsVersion,
23990 20 70 61 63 6b 61 67 65 2c 20 77 68 61 74 49 66   package, whatIf
239a0 2c 20 76 65 72 62 6f 73 65 2c 20 72 65 66 20 65  , verbose, ref e
239b0 72 72 6f 72 29 3b 0d 0a 20 20 20 20 20 20 20 20  rror);..        
239c0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
239d0 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20     else..       
239e0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
239f0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 52          return R
23a00 65 6d 6f 76 65 56 73 44 61 74 61 53 6f 75 72 63  emoveVsDataSourc
23a10 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
23a20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c          rootKey,
23a30 20 76 73 56 65 72 73 69 6f 6e 2c 20 70 61 63 6b   vsVersion, pack
23a40 61 67 65 2c 20 77 68 61 74 49 66 2c 20 76 65 72  age, whatIf, ver
23a50 62 6f 73 65 2c 20 72 65 66 20 65 72 72 6f 72 29  bose, ref error)
23a60 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
23a70 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..   
23a80 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d       #endregion.
23a90 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
23aa0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23ab0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23ac0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23ad0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23ae0 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72  //....        #r
23af0 65 67 69 6f 6e 20 56 69 73 75 61 6c 20 53 74 75  egion Visual Stu
23b00 64 69 6f 20 44 61 74 61 20 50 72 6f 76 69 64 65  dio Data Provide
23b10 72 20 48 61 6e 64 6c 69 6e 67 0d 0a 20 20 20 20  r Handling..    
23b20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74      private stat
23b30 69 63 20 62 6f 6f 6c 20 41 64 64 56 73 44 61 74  ic bool AddVsDat
23b40 61 50 72 6f 76 69 64 65 72 28 0d 0a 20 20 20 20  aProvider(..    
23b50 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79          Registry
23b60 4b 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20  Key rootKey,..  
23b70 20 20 20 20 20 20 20 20 20 20 56 65 72 73 69 6f            Versio
23b80 6e 20 76 73 56 65 72 73 69 6f 6e 2c 0d 0a 20 20  n vsVersion,..  
23b90 20 20 20 20 20 20 20 20 20 20 50 61 63 6b 61 67            Packag
23ba0 65 20 70 61 63 6b 61 67 65 2c 0d 0a 20 20 20 20  e package,..    
23bb0 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 66          string f
23bc0 69 6c 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20  ileName,..      
23bd0 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49        bool whatI
23be0 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  f,..            
23bf0 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 0d 0a 20  bool verbose,.. 
23c00 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20 73             ref s
23c10 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20  tring error..   
23c20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
23c30 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
23c40 20 20 20 69 66 20 28 76 73 56 65 72 73 69 6f 6e     if (vsVersion
23c50 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
23c60 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
23c70 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20            error 
23c80 3d 20 22 69 6e 76 61 6c 69 64 20 56 53 20 76 65  = "invalid VS ve
23c90 72 73 69 6f 6e 22 3b 0d 0a 20 20 20 20 20 20 20  rsion";..       
23ca0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
23cb0 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20  false;..        
23cc0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
23cd0 20 20 20 20 20 69 66 20 28 70 61 63 6b 61 67 65       if (package
23ce0 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
23cf0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
23d00 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20            error 
23d10 3d 20 22 69 6e 76 61 6c 69 64 20 56 53 20 70 61  = "invalid VS pa
23d20 63 6b 61 67 65 22 3b 0d 0a 20 20 20 20 20 20 20  ckage";..       
23d30 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
23d40 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20  false;..        
23d50 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
23d60 20 20 20 20 20 73 74 72 69 6e 67 20 6b 65 79 4e       string keyN
23d70 61 6d 65 20 3d 20 47 65 74 56 73 4b 65 79 4e 61  ame = GetVsKeyNa
23d80 6d 65 28 76 73 56 65 72 73 69 6f 6e 29 3b 0d 0a  me(vsVersion);..
23d90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 75 73  ..            us
23da0 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73 74 72  ing (MockRegistr
23db0 79 4b 65 79 20 6b 65 79 20 3d 20 52 65 67 69 73  yKey key = Regis
23dc0 74 72 79 48 65 6c 70 65 72 2e 4f 70 65 6e 53 75  tryHelper.OpenSu
23dd0 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20  bKey(..         
23de0 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b             rootK
23df0 65 79 2c 20 6b 65 79 4e 61 6d 65 2c 20 66 61 6c  ey, keyName, fal
23e00 73 65 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62  se, whatIf, verb
23e10 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ose))..         
23e20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
23e30 20 20 20 20 20 20 69 66 20 28 6b 65 79 20 3d 3d        if (key ==
23e40 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
23e50 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
23e60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
23e70 72 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f  rror = String.Fo
23e80 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
23e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
23ea0 63 6f 75 6c 64 20 6e 6f 74 20 6f 70 65 6e 20 72  could not open r
23eb0 65 67 69 73 74 72 79 20 6b 65 79 3a 20 7b 30 7d  egistry key: {0}
23ec0 5c 5c 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20  \\{1}",..       
23ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23ee0 20 72 6f 6f 74 4b 65 79 2c 20 6b 65 79 4e 61 6d   rootKey, keyNam
23ef0 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e);....         
23f00 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
23f10 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  n false;..      
23f20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
23f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 75                 u
23f40 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73 74  sing (MockRegist
23f50 72 79 4b 65 79 20 73 75 62 4b 65 79 20 3d 20 52  ryKey subKey = R
23f60 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 4f 70  egistryHelper.Op
23f70 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20  enSubKey(..     
23f80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23f90 20 20 20 6b 65 79 2c 20 22 44 61 74 61 50 72 6f     key, "DataPro
23fa0 76 69 64 65 72 73 22 2c 20 74 72 75 65 2c 20 77  viders", true, w
23fb0 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 29  hatIf, verbose))
23fc0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
23fd0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
23fe0 20 20 20 20 20 20 20 20 20 69 66 20 28 73 75 62           if (sub
23ff0 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  Key == null)..  
24000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24010 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
24020 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
24030 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d  or = String.Form
24040 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
24050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24060 20 22 63 6f 75 6c 64 20 6e 6f 74 20 6f 70 65 6e   "could not open
24070 20 72 65 67 69 73 74 72 79 20 6b 65 79 3a 20 7b   registry key: {
24080 30 7d 5c 5c 44 61 74 61 50 72 6f 76 69 64 65 72  0}\\DataProvider
24090 73 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s",..           
240a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
240b0 20 6b 65 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20   key);....      
240c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
240d0 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
240e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
240f0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
24100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 75 73                us
24110 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73 74 72  ing (MockRegistr
24120 79 4b 65 79 20 64 61 74 61 50 72 6f 76 69 64 65  yKey dataProvide
24130 72 4b 65 79 20 3d 0d 0a 20 20 20 20 20 20 20 20  rKey =..        
24140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24150 20 20 20 20 52 65 67 69 73 74 72 79 48 65 6c 70      RegistryHelp
24160 65 72 2e 43 72 65 61 74 65 53 75 62 4b 65 79 28  er.CreateSubKey(
24170 73 75 62 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20  subKey,..       
24180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24190 20 20 20 20 20 70 61 63 6b 61 67 65 2e 44 61 74       package.Dat
241a0 61 50 72 6f 76 69 64 65 72 49 64 2e 54 6f 53 74  aProviderId.ToSt
241b0 72 69 6e 67 28 56 73 49 64 46 6f 72 6d 61 74 29  ring(VsIdFormat)
241c0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
241d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 77                 w
241e0 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 29  hatIf, verbose))
241f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
24200 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
24210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24220 20 69 66 20 28 64 61 74 61 50 72 6f 76 69 64 65   if (dataProvide
24230 72 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  rKey == null).. 
24240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24250 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
24260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24270 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 53 74        error = St
24280 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
24290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
242a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 63                "c
242b0 6f 75 6c 64 20 6e 6f 74 20 63 72 65 61 74 65 20  ould not create 
242c0 72 65 67 69 73 74 72 79 20 6b 65 79 3a 20 7b 30  registry key: {0
242d0 7d 5c 5c 7b 31 7d 22 2c 20 6b 65 79 2c 0d 0a 20  }\\{1}", key,.. 
242e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
242f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70                 p
24300 61 63 6b 61 67 65 2e 44 61 74 61 50 72 6f 76 69  ackage.DataProvi
24310 64 65 72 49 64 2e 54 6f 53 74 72 69 6e 67 28 56  derId.ToString(V
24320 73 49 64 46 6f 72 6d 61 74 29 29 3b 0d 0a 0d 0a  sIdFormat));....
24330 20 20 20 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 20 72 65 74 75              retu
24350 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20  rn false;..     
24360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24370 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
24380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24390 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 53  RegistryHelper.S
243a0 65 74 56 61 6c 75 65 28 0d 0a 20 20 20 20 20 20  etValue(..      
243b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
243c0 20 20 20 20 20 20 64 61 74 61 50 72 6f 76 69 64        dataProvid
243d0 65 72 4b 65 79 2c 20 6e 75 6c 6c 2c 20 44 65 73  erKey, null, Des
243e0 63 72 69 70 74 69 6f 6e 2c 20 77 68 61 74 49 66  cription, whatIf
243f0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
24400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 76                 v
24410 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20  erbose);....    
24420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24430 20 20 20 20 52 65 67 69 73 74 72 79 48 65 6c 70      RegistryHelp
24440 65 72 2e 53 65 74 56 61 6c 75 65 28 0d 0a 20 20  er.SetValue(..  
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 20 20 20 64 61 74 61 50 72            dataPr
24470 6f 76 69 64 65 72 4b 65 79 2c 20 22 49 6e 76 61  oviderKey, "Inva
24480 72 69 61 6e 74 4e 61 6d 65 22 2c 20 49 6e 76 61  riantName", Inva
24490 72 69 61 6e 74 4e 61 6d 65 2c 0d 0a 20 20 20 20  riantName,..    
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 77 68 61 74 49 66 2c 20          whatIf, 
244c0 76 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20  verbose);....   
244d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
244e0 20 20 20 20 20 52 65 67 69 73 74 72 79 48 65 6c       RegistryHel
244f0 70 65 72 2e 53 65 74 56 61 6c 75 65 28 0d 0a 20  per.SetValue(.. 
24500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24510 20 20 20 20 20 20 20 20 20 20 20 64 61 74 61 50             dataP
24520 72 6f 76 69 64 65 72 4b 65 79 2c 20 22 54 65 63  roviderKey, "Tec
24530 68 6e 6f 6c 6f 67 79 22 2c 0d 0a 20 20 20 20 20  hnology",..     
24540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24550 20 20 20 20 20 20 20 70 61 63 6b 61 67 65 2e 41         package.A
24560 64 6f 4e 65 74 54 65 63 68 6e 6f 6c 6f 67 79 49  doNetTechnologyI
24570 64 2e 54 6f 53 74 72 69 6e 67 28 56 73 49 64 46  d.ToString(VsIdF
24580 6f 72 6d 61 74 29 2c 0d 0a 20 20 20 20 20 20 20  ormat),..       
24590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
245a0 20 20 20 20 20 77 68 61 74 49 66 2c 20 76 65 72       whatIf, ver
245b0 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  bose);....      
245c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
245d0 20 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72    RegistryHelper
245e0 2e 53 65 74 56 61 6c 75 65 28 0d 0a 20 20 20 20  .SetValue(..    
245f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24600 20 20 20 20 20 20 20 20 64 61 74 61 50 72 6f 76          dataProv
24610 69 64 65 72 4b 65 79 2c 20 22 43 6f 64 65 42 61  iderKey, "CodeBa
24620 73 65 22 2c 20 66 69 6c 65 4e 61 6d 65 2c 20 77  se", fileName, w
24630 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20  hatIf,..        
24640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24650 20 20 20 20 76 65 72 62 6f 73 65 29 3b 0d 0a 0d      verbose);...
24660 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
24670 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72           Registr
24680 79 48 65 6c 70 65 72 2e 53 65 74 56 61 6c 75 65  yHelper.SetValue
24690 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
246a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
246b0 61 74 61 50 72 6f 76 69 64 65 72 4b 65 79 2c 20  ataProviderKey, 
246c0 22 46 61 63 74 6f 72 79 53 65 72 76 69 63 65 22  "FactoryService"
246d0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
246e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70                 p
246f0 61 63 6b 61 67 65 2e 53 65 72 76 69 63 65 49 64  ackage.ServiceId
24700 2e 54 6f 53 74 72 69 6e 67 28 56 73 49 64 46 6f  .ToString(VsIdFo
24710 72 6d 61 74 29 2c 20 77 68 61 74 49 66 2c 0d 0a  rmat), whatIf,..
24720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24730 20 20 20 20 20 20 20 20 20 20 20 20 76 65 72 62              verb
24740 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ose);....       
24750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24760 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e   RegistryHelper.
24770 43 72 65 61 74 65 53 75 62 4b 65 79 28 64 61 74  CreateSubKey(dat
24780 61 50 72 6f 76 69 64 65 72 4b 65 79 2c 0d 0a 20  aProviderKey,.. 
24790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
247a0 20 20 20 20 20 20 20 20 20 20 20 22 53 75 70 70             "Supp
247b0 6f 72 74 65 64 4f 62 6a 65 63 74 73 5c 5c 44 61  ortedObjects\\Da
247c0 74 61 43 6f 6e 6e 65 63 74 69 6f 6e 55 49 43 6f  taConnectionUICo
247d0 6e 74 72 6f 6c 22 2c 0d 0a 20 20 20 20 20 20 20  ntrol",..       
247e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
247f0 20 20 20 20 20 77 68 61 74 49 66 2c 20 76 65 72       whatIf, ver
24800 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  bose);....      
24810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24820 20 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72    RegistryHelper
24830 2e 43 72 65 61 74 65 53 75 62 4b 65 79 28 64 61  .CreateSubKey(da
24840 74 61 50 72 6f 76 69 64 65 72 4b 65 79 2c 0d 0a  taProviderKey,..
24850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24860 20 20 20 20 20 20 20 20 20 20 20 20 22 53 75 70              "Sup
24870 70 6f 72 74 65 64 4f 62 6a 65 63 74 73 5c 5c 44  portedObjects\\D
24880 61 74 61 43 6f 6e 6e 65 63 74 69 6f 6e 50 72 6f  ataConnectionPro
24890 70 65 72 74 69 65 73 22 2c 0d 0a 20 20 20 20 20  perties",..     
248a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
248b0 20 20 20 20 20 20 20 77 68 61 74 49 66 2c 20 76         whatIf, v
248c0 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20  erbose);....    
248d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
248e0 20 20 20 20 52 65 67 69 73 74 72 79 48 65 6c 70      RegistryHelp
248f0 65 72 2e 43 72 65 61 74 65 53 75 62 4b 65 79 28  er.CreateSubKey(
24900 64 61 74 61 50 72 6f 76 69 64 65 72 4b 65 79 2c  dataProviderKey,
24910 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
24920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 53                "S
24930 75 70 70 6f 72 74 65 64 4f 62 6a 65 63 74 73 5c  upportedObjects\
24940 5c 44 61 74 61 43 6f 6e 6e 65 63 74 69 6f 6e 53  \DataConnectionS
24950 75 70 70 6f 72 74 22 2c 20 77 68 61 74 49 66 2c  upport", whatIf,
24960 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
24970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 76 65                ve
24980 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20  rbose);....     
24990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
249a0 20 20 20 52 65 67 69 73 74 72 79 48 65 6c 70 65     RegistryHelpe
249b0 72 2e 43 72 65 61 74 65 53 75 62 4b 65 79 28 64  r.CreateSubKey(d
249c0 61 74 61 50 72 6f 76 69 64 65 72 4b 65 79 2c 0d  ataProviderKey,.
249d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
249e0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 53 75               "Su
249f0 70 70 6f 72 74 65 64 4f 62 6a 65 63 74 73 5c 5c  pportedObjects\\
24a00 44 61 74 61 4f 62 6a 65 63 74 53 75 70 70 6f 72  DataObjectSuppor
24a10 74 22 2c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20  t", whatIf,..   
24a20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24a30 20 20 20 20 20 20 20 20 20 76 65 72 62 6f 73 65           verbose
24a40 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
24a50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65                Re
24a60 67 69 73 74 72 79 48 65 6c 70 65 72 2e 43 72 65  gistryHelper.Cre
24a70 61 74 65 53 75 62 4b 65 79 28 64 61 74 61 50 72  ateSubKey(dataPr
24a80 6f 76 69 64 65 72 4b 65 79 2c 0d 0a 20 20 20 20  oviderKey,..    
24a90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24aa0 20 20 20 20 20 20 20 20 22 53 75 70 70 6f 72 74          "Support
24ab0 65 64 4f 62 6a 65 63 74 73 5c 5c 44 61 74 61 56  edObjects\\DataV
24ac0 69 65 77 53 75 70 70 6f 72 74 22 2c 20 77 68 61  iewSupport", wha
24ad0 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  tIf,..          
24ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24af0 20 20 76 65 72 62 6f 73 65 29 3b 0d 0a 20 20 20    verbose);..   
24b00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24b10 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
24b20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
24b30 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
24b40 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b      return true;
24b50 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
24b60 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
24b70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24b80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24b90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24ba0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
24bb0 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
24bc0 65 20 73 74 61 74 69 63 20 62 6f 6f 6c 20 52 65  e static bool Re
24bd0 6d 6f 76 65 56 73 44 61 74 61 50 72 6f 76 69 64  moveVsDataProvid
24be0 65 72 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  er(..           
24bf0 20 52 65 67 69 73 74 72 79 4b 65 79 20 72 6f 6f   RegistryKey roo
24c00 74 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20  tKey,..         
24c10 20 20 20 56 65 72 73 69 6f 6e 20 76 73 56 65 72     Version vsVer
24c20 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20  sion,..         
24c30 20 20 20 50 61 63 6b 61 67 65 20 70 61 63 6b 61     Package packa
24c40 67 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ge,..           
24c50 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20   bool whatIf,.. 
24c60 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
24c70 76 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20  verbose,..      
24c80 20 20 20 20 20 20 72 65 66 20 73 74 72 69 6e 67        ref string
24c90 20 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20   error..        
24ca0 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b      )..        {
24cb0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
24cc0 20 28 76 73 56 65 72 73 69 6f 6e 20 3d 3d 20 6e   (vsVersion == n
24cd0 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
24ce0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
24cf0 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 69 6e       error = "in
24d00 76 61 6c 69 64 20 56 53 20 76 65 72 73 69 6f 6e  valid VS version
24d10 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ";..            
24d20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
24d30 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
24d40 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
24d50 73 74 72 69 6e 67 20 6b 65 79 4e 61 6d 65 20 3d  string keyName =
24d60 20 47 65 74 56 73 4b 65 79 4e 61 6d 65 28 76 73   GetVsKeyName(vs
24d70 56 65 72 73 69 6f 6e 29 3b 0d 0a 0d 0a 20 20 20  Version);....   
24d80 20 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28           using (
24d90 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20  MockRegistryKey 
24da0 6b 65 79 20 3d 20 52 65 67 69 73 74 72 79 48 65  key = RegistryHe
24db0 6c 70 65 72 2e 4f 70 65 6e 53 75 62 4b 65 79 28  lper.OpenSubKey(
24dc0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
24dd0 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 6b        rootKey, k
24de0 65 79 4e 61 6d 65 2c 20 66 61 6c 73 65 2c 20 77  eyName, false, w
24df0 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 29  hatIf, verbose))
24e00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
24e10 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
24e20 20 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c   if (key == null
24e30 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
24e40 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
24e50 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20            error 
24e60 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  = String.Format(
24e70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
24e80 20 20 20 20 20 20 20 20 20 20 22 63 6f 75 6c 64            "could
24e90 20 6e 6f 74 20 6f 70 65 6e 20 72 65 67 69 73 74   not open regist
24ea0 72 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c 7b 31 7d  ry key: {0}\\{1}
24eb0 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
24ec0 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74              root
24ed0 4b 65 79 2c 20 6b 65 79 4e 61 6d 65 29 3b 0d 0a  Key, keyName);..
24ee0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
24ef0 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
24f00 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se;..           
24f10 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
24f20 20 20 20 20 20 20 20 20 20 20 75 73 69 6e 67 20            using 
24f30 28 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79  (MockRegistryKey
24f40 20 73 75 62 4b 65 79 20 3d 20 52 65 67 69 73 74   subKey = Regist
24f50 72 79 48 65 6c 70 65 72 2e 4f 70 65 6e 53 75 62  ryHelper.OpenSub
24f60 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20  Key(..          
24f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6b 65                ke
24f80 79 2c 20 22 44 61 74 61 50 72 6f 76 69 64 65 72  y, "DataProvider
24f90 73 22 2c 20 74 72 75 65 2c 20 77 68 61 74 49 66  s", true, whatIf
24fa0 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a 20 20 20  , verbose))..   
24fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
24fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24fd0 20 20 20 20 69 66 20 28 73 75 62 4b 65 79 20 3d      if (subKey =
24fe0 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
24ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
25000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25010 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
25020 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
25030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25040 20 20 20 20 20 20 20 20 20 20 20 20 22 63 6f 75              "cou
25050 6c 64 20 6e 6f 74 20 6f 70 65 6e 20 72 65 67 69  ld not open regi
25060 73 74 72 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c 44  stry key: {0}\\D
25070 61 74 61 50 72 6f 76 69 64 65 72 73 22 2c 0d 0a  ataProviders",..
25080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25090 20 20 20 20 20 20 20 20 20 20 20 20 6b 65 79 29              key)
250a0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
250b0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
250c0 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20  urn false;..    
250d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
250e0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
250f0 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72           Registr
25100 79 48 65 6c 70 65 72 2e 44 65 6c 65 74 65 53 75  yHelper.DeleteSu
25110 62 4b 65 79 54 72 65 65 28 0d 0a 20 20 20 20 20  bKeyTree(..     
25120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25130 20 20 20 73 75 62 4b 65 79 2c 20 70 61 63 6b 61     subKey, packa
25140 67 65 2e 44 61 74 61 50 72 6f 76 69 64 65 72 49  ge.DataProviderI
25150 64 2e 54 6f 53 74 72 69 6e 67 28 56 73 49 64 46  d.ToString(VsIdF
25160 6f 72 6d 61 74 29 2c 0d 0a 20 20 20 20 20 20 20  ormat),..       
25170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25180 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65   whatIf, verbose
25190 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
251a0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
251b0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
251c0 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b      return true;
251d0 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
251e0 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
251f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25200 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25210 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25220 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
25230 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
25240 65 20 73 74 61 74 69 63 20 62 6f 6f 6c 20 50 72  e static bool Pr
25250 6f 63 65 73 73 56 73 44 61 74 61 50 72 6f 76 69  ocessVsDataProvi
25260 64 65 72 28 0d 0a 20 20 20 20 20 20 20 20 20 20  der(..          
25270 20 20 52 65 67 69 73 74 72 79 4b 65 79 20 72 6f    RegistryKey ro
25280 6f 74 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20  otKey,..        
25290 20 20 20 20 56 65 72 73 69 6f 6e 20 76 73 56 65      Version vsVe
252a0 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20  rsion,..        
252b0 20 20 20 20 50 61 63 6b 61 67 65 20 70 61 63 6b      Package pack
252c0 61 67 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  age,..          
252d0 20 20 6f 62 6a 65 63 74 20 63 6c 69 65 6e 74 44    object clientD
252e0 61 74 61 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ata,..          
252f0 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a    bool whatIf,..
25300 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
25310 20 76 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20   verbose,..     
25320 20 20 20 20 20 20 20 72 65 66 20 73 74 72 69 6e         ref strin
25330 67 20 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20  g error..       
25340 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
25350 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 41  {..            A
25360 6e 79 50 61 69 72 3c 73 74 72 69 6e 67 2c 20 62  nyPair<string, b
25370 6f 6f 6c 3e 20 70 61 69 72 20 3d 20 63 6c 69 65  ool> pair = clie
25380 6e 74 44 61 74 61 20 61 73 20 41 6e 79 50 61 69  ntData as AnyPai
25390 72 3c 73 74 72 69 6e 67 2c 20 62 6f 6f 6c 3e 3b  r<string, bool>;
253a0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
253b0 69 66 20 28 70 61 69 72 20 3d 3d 20 6e 75 6c 6c  if (pair == null
253c0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
253d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
253e0 20 20 65 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c    error = "inval
253f0 69 64 20 56 53 20 63 61 6c 6c 62 61 63 6b 20 64  id VS callback d
25400 61 74 61 22 3b 0d 0a 20 20 20 20 20 20 20 20 20  ata";..         
25410 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
25420 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lse;..          
25430 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
25440 20 20 20 69 66 20 28 70 61 69 72 2e 59 29 0d 0a     if (pair.Y)..
25450 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
25460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
25470 65 74 75 72 6e 20 41 64 64 56 73 44 61 74 61 50  eturn AddVsDataP
25480 72 6f 76 69 64 65 72 28 0d 0a 20 20 20 20 20 20  rovider(..      
25490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f                ro
254a0 6f 74 4b 65 79 2c 20 76 73 56 65 72 73 69 6f 6e  otKey, vsVersion
254b0 2c 20 70 61 63 6b 61 67 65 2c 20 70 61 69 72 2e  , package, pair.
254c0 58 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  X,..            
254d0 20 20 20 20 20 20 20 20 77 68 61 74 49 66 2c 20          whatIf, 
254e0 76 65 72 62 6f 73 65 2c 20 72 65 66 20 65 72 72  verbose, ref err
254f0 6f 72 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  or);..          
25500 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
25510 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20   else..         
25520 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
25530 20 20 20 20 20 20 72 65 74 75 72 6e 20 52 65 6d        return Rem
25540 6f 76 65 56 73 44 61 74 61 50 72 6f 76 69 64 65  oveVsDataProvide
25550 72 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  r(..            
25560 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c          rootKey,
25570 20 76 73 56 65 72 73 69 6f 6e 2c 20 70 61 63 6b   vsVersion, pack
25580 61 67 65 2c 20 77 68 61 74 49 66 2c 0d 0a 20 20  age, whatIf,..  
25590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
255a0 20 20 76 65 72 62 6f 73 65 2c 20 72 65 66 20 65    verbose, ref e
255b0 72 72 6f 72 29 3b 0d 0a 20 20 20 20 20 20 20 20  rror);..        
255c0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d      }..        }
255d0 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65  ..        #endre
255e0 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20  gion....        
255f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25600 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25610 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25620 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25630 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
25640 20 20 20 23 72 65 67 69 6f 6e 20 56 69 73 75 61     #region Visua
25650 6c 20 53 74 75 64 69 6f 20 50 61 63 6b 61 67 65  l Studio Package
25660 20 48 61 6e 64 6c 69 6e 67 0d 0a 20 20 20 20 20   Handling..     
25670 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69     private stati
25680 63 20 76 6f 69 64 20 49 6e 69 74 69 61 6c 69 7a  c void Initializ
25690 65 56 73 50 61 63 6b 61 67 65 28 0d 0a 20 20 20  eVsPackage(..   
256a0 20 20 20 20 20 20 20 20 20 72 65 66 20 50 61 63           ref Pac
256b0 6b 61 67 65 20 70 61 63 6b 61 67 65 0d 0a 20 20  kage package..  
256c0 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
256d0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
256e0 20 20 20 20 69 66 20 28 70 61 63 6b 61 67 65 20      if (package 
256f0 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
25700 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
25710 20 20 20 20 20 20 20 20 20 70 61 63 6b 61 67 65           package
25720 20 3d 20 6e 65 77 20 50 61 63 6b 61 67 65 28 29   = new Package()
25730 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
25740 20 20 20 20 20 70 61 63 6b 61 67 65 2e 41 64 6f       package.Ado
25750 4e 65 74 54 65 63 68 6e 6f 6c 6f 67 79 49 64 20  NetTechnologyId 
25760 3d 20 6e 65 77 20 47 75 69 64 28 0d 0a 20 20 20  = new Guid(..   
25770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25780 20 22 37 37 41 42 39 41 39 44 2d 37 38 42 39 2d   "77AB9A9D-78B9-
25790 34 42 41 37 2d 39 31 41 43 2d 38 37 33 46 35 33  4BA7-91AC-873F53
257a0 33 38 46 31 44 32 22 29 3b 0d 0a 0d 0a 20 20 20  38F1D2");....   
257b0 20 20 20 20 20 20 20 20 20 20 20 20 20 70 61 63               pac
257c0 6b 61 67 65 2e 50 61 63 6b 61 67 65 49 64 20 3d  kage.PackageId =
257d0 20 6e 65 77 20 47 75 69 64 28 0d 0a 20 20 20 20   new Guid(..    
257e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
257f0 22 44 43 42 45 36 43 38 44 2d 30 45 35 37 2d 34  "DCBE6C8D-0E57-4
25800 30 39 39 2d 41 31 38 33 2d 39 38 46 46 37 34 43  099-A183-98FF74C
25810 36 34 44 39 43 22 29 3b 0d 0a 0d 0a 20 20 20 20  64D9C");....    
25820 20 20 20 20 20 20 20 20 20 20 20 20 70 61 63 6b              pack
25830 61 67 65 2e 53 65 72 76 69 63 65 49 64 20 3d 20  age.ServiceId = 
25840 6e 65 77 20 47 75 69 64 28 0d 0a 20 20 20 20 20  new Guid(..     
25850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
25860 44 43 42 45 36 43 38 44 2d 30 45 35 37 2d 34 30  DCBE6C8D-0E57-40
25870 39 39 2d 41 31 38 33 2d 39 38 46 46 37 34 43 36  99-A183-98FF74C6
25880 34 44 39 44 22 29 3b 0d 0a 0d 0a 20 20 20 20 20  4D9D");....     
25890 20 20 20 20 20 20 20 20 20 20 20 70 61 63 6b 61             packa
258a0 67 65 2e 44 61 74 61 53 6f 75 72 63 65 49 64 20  ge.DataSourceId 
258b0 3d 20 6e 65 77 20 47 75 69 64 28 0d 0a 20 20 20  = new Guid(..   
258c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
258d0 20 22 30 45 42 41 41 42 36 45 2d 43 41 38 30 2d   "0EBAAB6E-CA80-
258e0 34 42 34 41 2d 38 44 44 46 2d 43 42 45 36 42 46  4B4A-8DDF-CBE6BF
258f0 30 35 38 43 37 31 22 29 3b 0d 0a 0d 0a 20 20 20  058C71");....   
25900 20 20 20 20 20 20 20 20 20 20 20 20 20 70 61 63               pac
25910 6b 61 67 65 2e 44 61 74 61 50 72 6f 76 69 64 65  kage.DataProvide
25920 72 49 64 20 3d 20 6e 65 77 20 47 75 69 64 28 0d  rId = new Guid(.
25930 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
25940 20 20 20 20 20 22 30 45 42 41 41 42 36 45 2d 43       "0EBAAB6E-C
25950 41 38 30 2d 34 42 34 41 2d 38 44 44 46 2d 43 42  A80-4B4A-8DDF-CB
25960 45 36 42 46 30 35 38 43 37 30 22 29 3b 0d 0a 20  E6BF058C70");.. 
25970 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
25980 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
25990 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
259a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
259b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
259c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
259d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
259e0 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74        private st
259f0 61 74 69 63 20 62 6f 6f 6c 20 41 64 64 56 73 50  atic bool AddVsP
25a00 61 63 6b 61 67 65 28 0d 0a 20 20 20 20 20 20 20  ackage(..       
25a10 20 20 20 20 20 52 65 67 69 73 74 72 79 4b 65 79       RegistryKey
25a20 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20 20 20   rootKey,..     
25a30 20 20 20 20 20 20 20 56 65 72 73 69 6f 6e 20 76         Version v
25a40 73 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20  sVersion,..     
25a50 20 20 20 20 20 20 20 50 61 63 6b 61 67 65 20 70         Package p
25a60 61 63 6b 61 67 65 2c 0d 0a 20 20 20 20 20 20 20  ackage,..       
25a70 20 20 20 20 20 73 74 72 69 6e 67 20 66 69 6c 65       string file
25a80 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  Name,..         
25a90 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d     bool whatIf,.
25aa0 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f  .            boo
25ab0 6c 20 76 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20  l verbose,..    
25ac0 20 20 20 20 20 20 20 20 72 65 66 20 73 74 72 69          ref stri
25ad0 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20 20 20 20  ng error..      
25ae0 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
25af0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
25b00 69 66 20 28 76 73 56 65 72 73 69 6f 6e 20 3d 3d  if (vsVersion ==
25b10 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
25b20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
25b30 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22         error = "
25b40 69 6e 76 61 6c 69 64 20 56 53 20 76 65 72 73 69  invalid VS versi
25b50 6f 6e 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  on";..          
25b60 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
25b70 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se;..           
25b80 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
25b90 20 20 69 66 20 28 70 61 63 6b 61 67 65 20 3d 3d    if (package ==
25ba0 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
25bb0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
25bc0 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22         error = "
25bd0 69 6e 76 61 6c 69 64 20 56 53 20 70 61 63 6b 61  invalid VS packa
25be0 67 65 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ge";..          
25bf0 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
25c00 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se;..           
25c10 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
25c20 20 20 73 74 72 69 6e 67 20 6b 65 79 4e 61 6d 65    string keyName
25c30 20 3d 20 47 65 74 56 73 4b 65 79 4e 61 6d 65 28   = GetVsKeyName(
25c40 76 73 56 65 72 73 69 6f 6e 29 3b 0d 0a 0d 0a 20  vsVersion);.... 
25c50 20 20 20 20 20 20 20 20 20 20 20 75 73 69 6e 67             using
25c60 20 28 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65   (MockRegistryKe
25c70 79 20 6b 65 79 20 3d 20 52 65 67 69 73 74 72 79  y key = Registry
25c80 48 65 6c 70 65 72 2e 4f 70 65 6e 53 75 62 4b 65  Helper.OpenSubKe
25c90 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y(..            
25ca0 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c          rootKey,
25cb0 20 6b 65 79 4e 61 6d 65 2c 20 66 61 6c 73 65 2c   keyName, false,
25cc0 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65   whatIf, verbose
25cd0 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
25ce0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
25cf0 20 20 20 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75     if (key == nu
25d00 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
25d10 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
25d20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
25d30 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  r = String.Forma
25d40 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
25d50 20 20 20 20 20 20 20 20 20 20 20 20 22 63 6f 75              "cou
25d60 6c 64 20 6e 6f 74 20 6f 70 65 6e 20 72 65 67 69  ld not open regi
25d70 73 74 72 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c 7b  stry key: {0}\\{
25d80 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  1}",..          
25d90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f                ro
25da0 6f 74 4b 65 79 2c 20 6b 65 79 4e 61 6d 65 29 3b  otKey, keyName);
25db0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
25dc0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
25dd0 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alse;..         
25de0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
25df0 20 20 20 20 20 20 20 20 20 20 20 20 75 73 69 6e              usin
25e00 67 20 28 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b  g (MockRegistryK
25e10 65 79 20 73 75 62 4b 65 79 20 3d 20 52 65 67 69  ey subKey = Regi
25e20 73 74 72 79 48 65 6c 70 65 72 2e 4f 70 65 6e 53  stryHelper.OpenS
25e30 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20  ubKey(..        
25e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25e50 6b 65 79 2c 20 22 50 61 63 6b 61 67 65 73 22 2c  key, "Packages",
25e60 20 74 72 75 65 2c 20 77 68 61 74 49 66 2c 20 76   true, whatIf, v
25e70 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20 20  erbose))..      
25e80 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
25e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25ea0 20 69 66 20 28 73 75 62 4b 65 79 20 3d 3d 20 6e   if (subKey == n
25eb0 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
25ec0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
25ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25ee0 20 20 20 20 20 65 72 72 6f 72 20 3d 20 53 74 72       error = Str
25ef0 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
25f00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25f10 20 20 20 20 20 20 20 20 20 22 63 6f 75 6c 64 20           "could 
25f20 6e 6f 74 20 6f 70 65 6e 20 72 65 67 69 73 74 72  not open registr
25f30 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c 50 61 63 6b  y key: {0}\\Pack
25f40 61 67 65 73 22 2c 0d 0a 20 20 20 20 20 20 20 20  ages",..        
25f50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25f60 20 20 20 20 6b 65 79 29 3b 0d 0a 0d 0a 20 20 20      key);....   
25f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25f80 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
25f90 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
25fa0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
25fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25fc0 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69   using (MockRegi
25fd0 73 74 72 79 4b 65 79 20 70 61 63 6b 61 67 65 4b  stryKey packageK
25fe0 65 79 20 3d 20 52 65 67 69 73 74 72 79 48 65 6c  ey = RegistryHel
25ff0 70 65 72 2e 43 72 65 61 74 65 53 75 62 4b 65 79  per.CreateSubKey
26000 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
26010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
26020 75 62 4b 65 79 2c 20 70 61 63 6b 61 67 65 2e 50  ubKey, package.P
26030 61 63 6b 61 67 65 49 64 2e 54 6f 53 74 72 69 6e  ackageId.ToStrin
26040 67 28 56 73 49 64 46 6f 72 6d 61 74 29 2c 20 77  g(VsIdFormat), w
26050 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20  hatIf,..        
26060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26070 20 20 20 20 76 65 72 62 6f 73 65 29 29 0d 0a 20      verbose)).. 
26080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26090 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
260a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
260b0 20 28 70 61 63 6b 61 67 65 4b 65 79 20 3d 3d 20   (packageKey == 
260c0 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
260d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
260e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
260f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72                er
26100 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72  ror = String.For
26110 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
26120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26130 20 20 20 20 20 20 22 63 6f 75 6c 64 20 6e 6f 74        "could not
26140 20 63 72 65 61 74 65 20 72 65 67 69 73 74 72 79   create registry
26150 20 6b 65 79 3a 20 7b 30 7d 5c 5c 7b 31 7d 22 2c   key: {0}\\{1}",
26160 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
26170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26180 20 20 6b 65 79 2c 20 70 61 63 6b 61 67 65 2e 50    key, package.P
26190 61 63 6b 61 67 65 49 64 2e 54 6f 53 74 72 69 6e  ackageId.ToStrin
261a0 67 28 56 73 49 64 46 6f 72 6d 61 74 29 29 3b 0d  g(VsIdFormat));.
261b0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
261c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
261d0 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20  eturn false;..  
261e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
261f0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
26200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26210 20 20 20 52 65 67 69 73 74 72 79 48 65 6c 70 65     RegistryHelpe
26220 72 2e 53 65 74 56 61 6c 75 65 28 70 61 63 6b 61  r.SetValue(packa
26230 67 65 4b 65 79 2c 20 6e 75 6c 6c 2c 20 53 74 72  geKey, null, Str
26240 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
26250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26260 20 20 20 20 20 20 20 20 20 22 7b 30 7d 20 44 65           "{0} De
26270 73 69 67 6e 65 72 20 50 61 63 6b 61 67 65 22 2c  signer Package",
26280 20 50 72 6f 6a 65 63 74 4e 61 6d 65 29 2c 20 77   ProjectName), w
26290 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20  hatIf,..        
262a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
262b0 20 20 20 20 76 65 72 62 6f 73 65 29 3b 0d 0a 0d      verbose);...
262c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
262d0 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72           Registr
262e0 79 48 65 6c 70 65 72 2e 53 65 74 56 61 6c 75 65  yHelper.SetValue
262f0 28 70 61 63 6b 61 67 65 4b 65 79 2c 20 22 43 6c  (packageKey, "Cl
26300 61 73 73 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  ass",..         
26310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26320 20 20 20 22 53 51 4c 69 74 65 2e 44 65 73 69 67     "SQLite.Desig
26330 6e 65 72 2e 53 51 4c 69 74 65 50 61 63 6b 61 67  ner.SQLitePackag
26340 65 22 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62  e", whatIf, verb
26350 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ose);....       
26360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26370 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e   RegistryHelper.
26380 53 65 74 56 61 6c 75 65 28 70 61 63 6b 61 67 65  SetValue(package
26390 4b 65 79 2c 20 22 43 6f 64 65 42 61 73 65 22 2c  Key, "CodeBase",
263a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
263b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 69                fi
263c0 6c 65 4e 61 6d 65 2c 20 77 68 61 74 49 66 2c 20  leName, whatIf, 
263d0 76 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20  verbose);....   
263e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
263f0 20 20 20 20 20 52 65 67 69 73 74 72 79 48 65 6c       RegistryHel
26400 70 65 72 2e 53 65 74 56 61 6c 75 65 28 70 61 63  per.SetValue(pac
26410 6b 61 67 65 4b 65 79 2c 20 22 49 44 22 2c 20 34  kageKey, "ID", 4
26420 30 30 2c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20  00, whatIf,..   
26430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26440 20 20 20 20 20 20 20 20 20 76 65 72 62 6f 73 65           verbose
26450 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
26460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65                Re
26470 67 69 73 74 72 79 48 65 6c 70 65 72 2e 53 65 74  gistryHelper.Set
26480 56 61 6c 75 65 28 70 61 63 6b 61 67 65 4b 65 79  Value(packageKey
26490 2c 20 22 49 6e 70 72 6f 63 53 65 72 76 65 72 33  , "InprocServer3
264a0 32 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  2",..           
264b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
264c0 20 50 61 74 68 2e 43 6f 6d 62 69 6e 65 28 45 6e   Path.Combine(En
264d0 76 69 72 6f 6e 6d 65 6e 74 2e 53 79 73 74 65 6d  vironment.System
264e0 44 69 72 65 63 74 6f 72 79 2c 0d 0a 20 20 20 20  Directory,..    
264f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26500 20 20 20 20 20 20 20 20 20 20 20 20 22 6d 73 63              "msc
26510 6f 72 65 65 2e 64 6c 6c 22 29 2c 20 77 68 61 74  oree.dll"), what
26520 49 66 2c 20 76 65 72 62 6f 73 65 29 3b 0d 0a 0d  If, verbose);...
26530 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
26540 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72           Registr
26550 79 48 65 6c 70 65 72 2e 53 65 74 56 61 6c 75 65  yHelper.SetValue
26560 28 70 61 63 6b 61 67 65 4b 65 79 2c 20 22 43 6f  (packageKey, "Co
26570 6d 70 61 6e 79 4e 61 6d 65 22 2c 0d 0a 20 20 20  mpanyName",..   
26580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26590 20 20 20 20 20 20 20 20 20 22 68 74 74 70 3a 2f           "http:/
265a0 2f 73 79 73 74 65 6d 2e 64 61 74 61 2e 73 71 6c  /system.data.sql
265b0 69 74 65 2e 6f 72 67 2f 22 2c 20 77 68 61 74 49  ite.org/", whatI
265c0 66 2c 20 76 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a  f, verbose);....
265d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
265e0 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79          Registry
265f0 48 65 6c 70 65 72 2e 53 65 74 56 61 6c 75 65 28  Helper.SetValue(
26600 70 61 63 6b 61 67 65 4b 65 79 2c 20 22 4d 69 6e  packageKey, "Min
26610 45 64 69 74 69 6f 6e 22 2c 0d 0a 20 20 20 20 20  Edition",..     
26620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26630 20 20 20 20 20 20 20 22 73 74 61 6e 64 61 72 64         "standard
26640 22 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f  ", whatIf, verbo
26650 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  se);....        
26660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26670 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 53  RegistryHelper.S
26680 65 74 56 61 6c 75 65 28 70 61 63 6b 61 67 65 4b  etValue(packageK
26690 65 79 2c 20 22 50 72 6f 64 75 63 74 4e 61 6d 65  ey, "ProductName
266a0 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
266b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
266c0 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 22 7b  String.Format("{
266d0 30 7d 20 44 65 73 69 67 6e 65 72 20 50 61 63 6b  0} Designer Pack
266e0 61 67 65 22 2c 20 50 72 6f 6a 65 63 74 4e 61 6d  age", ProjectNam
266f0 65 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e),..           
26700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26710 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65   whatIf, verbose
26720 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
26730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65                Re
26740 67 69 73 74 72 79 48 65 6c 70 65 72 2e 53 65 74  gistryHelper.Set
26750 56 61 6c 75 65 28 70 61 63 6b 61 67 65 4b 65 79  Value(packageKey
26760 2c 20 22 50 72 6f 64 75 63 74 56 65 72 73 69 6f  , "ProductVersio
26770 6e 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n",..           
26780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26790 20 22 31 2e 30 22 2c 20 77 68 61 74 49 66 2c 20   "1.0", whatIf, 
267a0 76 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20  verbose);....   
267b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
267c0 20 20 20 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b       using (Mock
267d0 52 65 67 69 73 74 72 79 4b 65 79 20 74 6f 6f 6c  RegistryKey tool
267e0 62 6f 78 4b 65 79 20 3d 20 52 65 67 69 73 74 72  boxKey = Registr
267f0 79 48 65 6c 70 65 72 2e 43 72 65 61 74 65 53 75  yHelper.CreateSu
26800 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20  bKey(..         
26810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26820 20 20 20 20 20 20 20 70 61 63 6b 61 67 65 4b 65         packageKe
26830 79 2c 20 22 54 6f 6f 6c 62 6f 78 22 2c 20 77 68  y, "Toolbox", wh
26840 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 29 0d  atIf, verbose)).
26850 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
26860 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
26870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26880 20 20 20 20 20 20 20 20 69 66 20 28 74 6f 6f 6c          if (tool
26890 62 6f 78 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d  boxKey == null).
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 20 20 20 20 7b 0d 0a               {..
268c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
268d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
268e0 65 72 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46  error = String.F
268f0 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
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 20 22 63 6f 75              "cou
26920 6c 64 20 6e 6f 74 20 63 72 65 61 74 65 20 72 65  ld not create re
26930 67 69 73 74 72 79 20 6b 65 79 3a 20 7b 30 7d 5c  gistry key: {0}\
26940 5c 54 6f 6f 6c 62 6f 78 22 2c 0d 0a 20 20 20 20  \Toolbox",..    
26950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26970 70 61 63 6b 61 67 65 4b 65 79 29 3b 0d 0a 0d 0a  packageKey);....
26980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
269a0 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20  return false;.. 
269b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
269c0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
269d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
269e0 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69              Regi
269f0 73 74 72 79 48 65 6c 70 65 72 2e 53 65 74 56 61  stryHelper.SetVa
26a00 6c 75 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  lue(..          
26a10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26a20 20 20 20 20 20 20 74 6f 6f 6c 62 6f 78 4b 65 79        toolboxKey
26a30 2c 20 22 44 65 66 61 75 6c 74 20 49 74 65 6d 73  , "Default Items
26a40 22 2c 20 33 2c 20 77 68 61 74 49 66 2c 0d 0a 20  ", 3, whatIf,.. 
26a50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 76                 v
26a70 65 72 62 6f 73 65 29 3b 0d 0a 20 20 20 20 20 20  erbose);..      
26a80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26a90 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
26aa0 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
26ab0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
26ac0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
26ad0 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69   using (MockRegi
26ae0 73 74 72 79 4b 65 79 20 73 75 62 4b 65 79 20 3d  stryKey subKey =
26af0 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e   RegistryHelper.
26b00 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20  OpenSubKey(..   
26b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26b20 20 20 20 20 20 6b 65 79 2c 20 22 4d 65 6e 75 73       key, "Menus
26b30 22 2c 20 74 72 75 65 2c 20 77 68 61 74 49 66 2c  ", true, whatIf,
26b40 20 76 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 20   verbose))..    
26b50 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
26b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26b70 20 20 20 69 66 20 28 73 75 62 4b 65 79 20 3d 3d     if (subKey ==
26b80 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
26b90 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
26ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26bb0 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 53         error = S
26bc0 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
26bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26be0 20 20 20 20 20 20 20 20 20 20 20 22 63 6f 75 6c             "coul
26bf0 64 20 6e 6f 74 20 6f 70 65 6e 20 72 65 67 69 73  d not open regis
26c00 74 72 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c 4d 65  try key: {0}\\Me
26c10 6e 75 73 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  nus",..         
26c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26c30 20 20 20 6b 65 79 29 3b 0d 0a 0d 0a 20 20 20 20     key);....    
26c40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26c50 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
26c60 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
26c70 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
26c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26c90 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 53  RegistryHelper.S
26ca0 65 74 56 61 6c 75 65 28 0d 0a 20 20 20 20 20 20  etValue(..      
26cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26cc0 20 20 73 75 62 4b 65 79 2c 20 70 61 63 6b 61 67    subKey, packag
26cd0 65 2e 50 61 63 6b 61 67 65 49 64 2e 54 6f 53 74  e.PackageId.ToSt
26ce0 72 69 6e 67 28 56 73 49 64 46 6f 72 6d 61 74 29  ring(VsIdFormat)
26cf0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
26d00 20 20 20 20 20 20 20 20 20 20 20 22 2c 20 31 30             ", 10
26d10 30 30 2c 20 33 22 2c 20 77 68 61 74 49 66 2c 20  00, 3", whatIf, 
26d20 76 65 72 62 6f 73 65 29 3b 0d 0a 20 20 20 20 20  verbose);..     
26d30 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
26d40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26d50 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73  using (MockRegis
26d60 74 72 79 4b 65 79 20 73 75 62 4b 65 79 20 3d 20  tryKey subKey = 
26d70 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 4f  RegistryHelper.O
26d80 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20 20  penSubKey(..    
26d90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26da0 20 20 20 20 6b 65 79 2c 20 22 53 65 72 76 69 63      key, "Servic
26db0 65 73 22 2c 20 74 72 75 65 2c 20 77 68 61 74 49  es", true, whatI
26dc0 66 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a 20 20  f, verbose))..  
26dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
26de0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
26df0 20 20 20 20 20 69 66 20 28 73 75 62 4b 65 79 20       if (subKey 
26e00 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
26e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
26e20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
26e30 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
26e40 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d   String.Format(.
26e50 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
26e60 20 20 20 20 20 20 20 20 20 20 20 20 20 22 63 6f               "co
26e70 75 6c 64 20 6e 6f 74 20 6f 70 65 6e 20 72 65 67  uld not open reg
26e80 69 73 74 72 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c  istry key: {0}\\
26e90 53 65 72 76 69 63 65 73 22 2c 0d 0a 20 20 20 20  Services",..    
26ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26eb0 20 20 20 20 20 20 20 20 6b 65 79 29 3b 0d 0a 0d          key);...
26ec0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
26ed0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
26ee0 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20  false;..        
26ef0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
26f00 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
26f10 20 20 20 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b       using (Mock
26f20 52 65 67 69 73 74 72 79 4b 65 79 20 73 65 72 76  RegistryKey serv
26f30 69 63 65 4b 65 79 20 3d 20 52 65 67 69 73 74 72  iceKey = Registr
26f40 79 48 65 6c 70 65 72 2e 43 72 65 61 74 65 53 75  yHelper.CreateSu
26f50 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20  bKey(..         
26f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26f70 20 20 20 73 75 62 4b 65 79 2c 20 70 61 63 6b 61     subKey, packa
26f80 67 65 2e 53 65 72 76 69 63 65 49 64 2e 54 6f 53  ge.ServiceId.ToS
26f90 74 72 69 6e 67 28 56 73 49 64 46 6f 72 6d 61 74  tring(VsIdFormat
26fa0 29 2c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20  ), whatIf,..    
26fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26fc0 20 20 20 20 20 20 20 20 76 65 72 62 6f 73 65 29          verbose)
26fd0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
26fe0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
26ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27000 20 20 69 66 20 28 73 65 72 76 69 63 65 4b 65 79    if (serviceKey
27010 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
27020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27030 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
27040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27050 20 20 65 72 72 6f 72 20 3d 20 53 74 72 69 6e 67    error = String
27060 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  .Format(..      
27070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27080 20 20 20 20 20 20 20 20 20 20 22 63 6f 75 6c 64            "could
27090 20 6e 6f 74 20 63 72 65 61 74 65 20 72 65 67 69   not create regi
270a0 73 74 72 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c 7b  stry key: {0}\\{
270b0 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  1}",..          
270c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
270d0 20 20 20 20 20 20 6b 65 79 2c 20 70 61 63 6b 61        key, packa
270e0 67 65 2e 53 65 72 76 69 63 65 49 64 2e 54 6f 53  ge.ServiceId.ToS
270f0 74 72 69 6e 67 28 56 73 49 64 46 6f 72 6d 61 74  tring(VsIdFormat
27100 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ));....         
27110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27120 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
27130 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
27140 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
27150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27160 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79 48         RegistryH
27170 65 6c 70 65 72 2e 53 65 74 56 61 6c 75 65 28 73  elper.SetValue(s
27180 65 72 76 69 63 65 4b 65 79 2c 20 6e 75 6c 6c 2c  erviceKey, null,
27190 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
271a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 61                pa
271b0 63 6b 61 67 65 2e 50 61 63 6b 61 67 65 49 64 2e  ckage.PackageId.
271c0 54 6f 53 74 72 69 6e 67 28 56 73 49 64 46 6f 72  ToString(VsIdFor
271d0 6d 61 74 29 2c 20 77 68 61 74 49 66 2c 0d 0a 20  mat), whatIf,.. 
271e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
271f0 20 20 20 20 20 20 20 20 20 20 20 76 65 72 62 6f             verbo
27200 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  se);....        
27210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27220 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 53  RegistryHelper.S
27230 65 74 56 61 6c 75 65 28 73 65 72 76 69 63 65 4b  etValue(serviceK
27240 65 79 2c 20 22 4e 61 6d 65 22 2c 0d 0a 20 20 20  ey, "Name",..   
27250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27260 20 20 20 20 20 20 20 20 20 53 74 72 69 6e 67 2e           String.
27270 46 6f 72 6d 61 74 28 22 7b 30 7d 20 44 65 73 69  Format("{0} Desi
27280 67 6e 65 72 20 53 65 72 76 69 63 65 22 2c 20 50  gner Service", P
27290 72 6f 6a 65 63 74 4e 61 6d 65 29 2c 0d 0a 20 20  rojectName),..  
272a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
272b0 20 20 20 20 20 20 20 20 20 20 77 68 61 74 49 66            whatIf
272c0 2c 20 76 65 72 62 6f 73 65 29 3b 0d 0a 20 20 20  , verbose);..   
272d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
272e0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
272f0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
27300 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
27310 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b      return true;
27320 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
27330 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
27340 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27350 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27360 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27370 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
27380 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
27390 65 20 73 74 61 74 69 63 20 62 6f 6f 6c 20 52 65  e static bool Re
273a0 6d 6f 76 65 56 73 50 61 63 6b 61 67 65 28 0d 0a  moveVsPackage(..
273b0 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69              Regi
273c0 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79 2c  stryKey rootKey,
273d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 56 65  ..            Ve
273e0 72 73 69 6f 6e 20 76 73 56 65 72 73 69 6f 6e 2c  rsion vsVersion,
273f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 50 61  ..            Pa
27400 63 6b 61 67 65 20 70 61 63 6b 61 67 65 2c 0d 0a  ckage package,..
27410 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
27420 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20   whatIf,..      
27430 20 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f        bool verbo
27440 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se,..           
27450 20 72 65 66 20 73 74 72 69 6e 67 20 65 72 72 6f   ref string erro
27460 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29  r..            )
27470 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
27480 20 20 20 20 20 20 20 20 20 69 66 20 28 76 73 56           if (vsV
27490 65 72 73 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 0d  ersion == null).
274a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
274b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
274c0 65 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64  error = "invalid
274d0 20 56 53 20 76 65 72 73 69 6f 6e 22 3b 0d 0a 20   VS version";.. 
274e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
274f0 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20  eturn false;..  
27500 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
27510 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 70             if (p
27520 61 63 6b 61 67 65 20 3d 3d 20 6e 75 6c 6c 29 0d  ackage == null).
27530 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
27540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27550 65 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64  error = "invalid
27560 20 56 53 20 70 61 63 6b 61 67 65 22 3b 0d 0a 20   VS package";.. 
27570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
27580 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20  eturn false;..  
27590 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
275a0 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
275b0 67 20 6b 65 79 4e 61 6d 65 20 3d 20 47 65 74 56  g keyName = GetV
275c0 73 4b 65 79 4e 61 6d 65 28 76 73 56 65 72 73 69  sKeyName(vsVersi
275d0 6f 6e 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  on);....        
275e0 20 20 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52      using (MockR
275f0 65 67 69 73 74 72 79 4b 65 79 20 6b 65 79 20 3d  egistryKey key =
27600 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e   RegistryHelper.
27610 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20  OpenSubKey(..   
27620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27630 20 72 6f 6f 74 4b 65 79 2c 20 6b 65 79 4e 61 6d   rootKey, keyNam
27640 65 2c 20 66 61 6c 73 65 2c 20 77 68 61 74 49 66  e, false, whatIf
27650 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a 20 20 20  , verbose))..   
27660 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
27670 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
27680 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  key == null)..  
27690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
276a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
276b0 20 20 20 20 20 65 72 72 6f 72 20 3d 20 53 74 72       error = Str
276c0 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
276d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
276e0 20 20 20 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20       "could not 
276f0 6f 70 65 6e 20 72 65 67 69 73 74 72 79 20 6b 65  open registry ke
27700 79 3a 20 7b 30 7d 5c 5c 7b 31 7d 22 2c 0d 0a 20  y: {0}\\{1}",.. 
27710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27720 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20         rootKey, 
27730 6b 65 79 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20  keyName);....   
27740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27750 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
27760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27770 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
27780 20 20 20 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b       using (Mock
27790 52 65 67 69 73 74 72 79 4b 65 79 20 73 75 62 4b  RegistryKey subK
277a0 65 79 20 3d 20 52 65 67 69 73 74 72 79 48 65 6c  ey = RegistryHel
277b0 70 65 72 2e 4f 70 65 6e 53 75 62 4b 65 79 28 0d  per.OpenSubKey(.
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 6b 65 79 2c 20 22 50           key, "P
277e0 61 63 6b 61 67 65 73 22 2c 20 74 72 75 65 2c 20  ackages", true, 
277f0 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29  whatIf, verbose)
27800 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
27810 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
27820 20 20 20 20 20 20 20 20 20 20 69 66 20 28 73 75            if (su
27830 62 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  bKey == null).. 
27840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27850 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
27860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72                er
27870 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72  ror = String.For
27880 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
27890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
278a0 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20 6f 70 65    "could not ope
278b0 6e 20 72 65 67 69 73 74 72 79 20 6b 65 79 3a 20  n registry key: 
278c0 7b 30 7d 5c 5c 50 61 63 6b 61 67 65 73 22 2c 0d  {0}\\Packages",.
278d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
278e0 20 20 20 20 20 20 20 20 20 20 20 20 20 6b 65 79               key
278f0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
27900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
27910 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20  turn false;..   
27920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27930 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
27940 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74            Regist
27950 72 79 48 65 6c 70 65 72 2e 44 65 6c 65 74 65 53  ryHelper.DeleteS
27960 75 62 4b 65 79 54 72 65 65 28 0d 0a 20 20 20 20  ubKeyTree(..    
27970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27980 20 20 20 20 6b 65 79 2c 20 70 61 63 6b 61 67 65      key, package
27990 2e 50 61 63 6b 61 67 65 49 64 2e 54 6f 53 74 72  .PackageId.ToStr
279a0 69 6e 67 28 56 73 49 64 46 6f 72 6d 61 74 29 2c  ing(VsIdFormat),
279b0 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20   whatIf,..      
279c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
279d0 20 20 76 65 72 62 6f 73 65 29 3b 0d 0a 20 20 20    verbose);..   
279e0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
279f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
27a00 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67    using (MockReg
27a10 69 73 74 72 79 4b 65 79 20 73 75 62 4b 65 79 20  istryKey subKey 
27a20 3d 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72  = RegistryHelper
27a30 2e 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20  .OpenSubKey(..  
27a40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27a50 20 20 20 20 20 20 6b 65 79 2c 20 22 4d 65 6e 75        key, "Menu
27a60 73 22 2c 20 74 72 75 65 2c 20 77 68 61 74 49 66  s", true, whatIf
27a70 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a 20 20 20  , verbose))..   
27a80 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
27a90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27aa0 20 20 20 20 69 66 20 28 73 75 62 4b 65 79 20 3d      if (subKey =
27ab0 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
27ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
27ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27ae0 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
27af0 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
27b00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27b10 20 20 20 20 20 20 20 20 20 20 20 20 22 63 6f 75              "cou
27b20 6c 64 20 6e 6f 74 20 6f 70 65 6e 20 72 65 67 69  ld not open regi
27b30 73 74 72 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c 4d  stry key: {0}\\M
27b40 65 6e 75 73 22 2c 0d 0a 20 20 20 20 20 20 20 20  enus",..        
27b50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27b60 20 20 20 20 6b 65 79 29 3b 0d 0a 0d 0a 20 20 20      key);....   
27b70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27b80 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
27b90 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
27ba0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
27bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27bc0 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e   RegistryHelper.
27bd0 44 65 6c 65 74 65 56 61 6c 75 65 28 0d 0a 20 20  DeleteValue(..  
27be0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27bf0 20 20 20 20 20 20 73 75 62 4b 65 79 2c 20 70 61        subKey, pa
27c00 63 6b 61 67 65 2e 50 61 63 6b 61 67 65 49 64 2e  ckage.PackageId.
27c10 54 6f 53 74 72 69 6e 67 28 56 73 49 64 46 6f 72  ToString(VsIdFor
27c20 6d 61 74 29 2c 20 77 68 61 74 49 66 2c 0d 0a 20  mat), whatIf,.. 
27c30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27c40 20 20 20 20 20 20 20 76 65 72 62 6f 73 65 29 3b         verbose);
27c50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
27c60 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
27c70 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 4d 6f         using (Mo
27c80 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 73 75  ckRegistryKey su
27c90 62 4b 65 79 20 3d 20 52 65 67 69 73 74 72 79 48  bKey = RegistryH
27ca0 65 6c 70 65 72 2e 4f 70 65 6e 53 75 62 4b 65 79  elper.OpenSubKey
27cb0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
27cc0 20 20 20 20 20 20 20 20 20 20 20 6b 65 79 2c 20             key, 
27cd0 22 53 65 72 76 69 63 65 73 22 2c 20 74 72 75 65  "Services", true
27ce0 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73  , whatIf, verbos
27cf0 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e))..           
27d00 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
27d10 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
27d20 73 75 62 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d  subKey == null).
27d30 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
27d40 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
27d50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27d60 65 72 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46  error = String.F
27d70 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
27d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27d90 20 20 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20 6f      "could not o
27da0 70 65 6e 20 72 65 67 69 73 74 72 79 20 6b 65 79  pen registry key
27db0 3a 20 7b 30 7d 5c 5c 53 65 72 76 69 63 65 73 22  : {0}\\Services"
27dc0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
27dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6b                 k
27de0 65 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ey);....        
27df0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27e00 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20  return false;.. 
27e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27e20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
27e30 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69              Regi
27e40 73 74 72 79 48 65 6c 70 65 72 2e 44 65 6c 65 74  stryHelper.Delet
27e50 65 53 75 62 4b 65 79 54 72 65 65 28 0d 0a 20 20  eSubKeyTree(..  
27e60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27e70 20 20 20 20 20 20 73 75 62 4b 65 79 2c 20 70 61        subKey, pa
27e80 63 6b 61 67 65 2e 53 65 72 76 69 63 65 49 64 2e  ckage.ServiceId.
27e90 54 6f 53 74 72 69 6e 67 28 56 73 49 64 46 6f 72  ToString(VsIdFor
27ea0 6d 61 74 29 2c 20 77 68 61 74 49 66 2c 0d 0a 20  mat), whatIf,.. 
27eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27ec0 20 20 20 20 20 20 20 76 65 72 62 6f 73 65 29 3b         verbose);
27ed0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
27ee0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
27ef0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
27f00 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a    return true;..
27f10 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
27f20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
27f30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27f40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27f50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27f60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
27f70 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
27f80 73 74 61 74 69 63 20 62 6f 6f 6c 20 50 72 6f 63  static bool Proc
27f90 65 73 73 56 73 50 61 63 6b 61 67 65 28 0d 0a 20  essVsPackage(.. 
27fa0 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73             Regis
27fb0 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79 2c 0d  tryKey rootKey,.
27fc0 0a 20 20 20 20 20 20 20 20 20 20 20 20 56 65 72  .            Ver
27fd0 73 69 6f 6e 20 76 73 56 65 72 73 69 6f 6e 2c 0d  sion vsVersion,.
27fe0 0a 20 20 20 20 20 20 20 20 20 20 20 20 50 61 63  .            Pac
27ff0 6b 61 67 65 20 70 61 63 6b 61 67 65 2c 0d 0a 20  kage package,.. 
28000 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63             objec
28010 74 20 63 6c 69 65 6e 74 44 61 74 61 2c 0d 0a 20  t clientData,.. 
28020 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
28030 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20  whatIf,..       
28040 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73       bool verbos
28050 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
28060 72 65 66 20 73 74 72 69 6e 67 20 65 72 72 6f 72  ref string error
28070 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d  ..            ).
28080 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
28090 20 20 20 20 20 20 20 20 41 6e 79 50 61 69 72 3c          AnyPair<
280a0 73 74 72 69 6e 67 2c 20 62 6f 6f 6c 3e 20 70 61  string, bool> pa
280b0 69 72 20 3d 20 63 6c 69 65 6e 74 44 61 74 61 20  ir = clientData 
280c0 61 73 20 41 6e 79 50 61 69 72 3c 73 74 72 69 6e  as AnyPair<strin
280d0 67 2c 20 62 6f 6f 6c 3e 3b 0d 0a 0d 0a 20 20 20  g, bool>;....   
280e0 20 20 20 20 20 20 20 20 20 69 66 20 28 70 61 69           if (pai
280f0 72 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  r == null)..    
28100 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
28110 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72             error
28120 20 3d 20 22 69 6e 76 61 6c 69 64 20 56 53 20 63   = "invalid VS c
28130 61 6c 6c 62 61 63 6b 20 64 61 74 61 22 3b 0d 0a  allback data";..
28140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28150 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20  return false;.. 
28160 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
28170 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
28180 70 61 69 72 2e 59 29 0d 0a 20 20 20 20 20 20 20  pair.Y)..       
28190 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
281a0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 41          return A
281b0 64 64 56 73 50 61 63 6b 61 67 65 28 0d 0a 20 20  ddVsPackage(..  
281c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
281d0 20 20 72 6f 6f 74 4b 65 79 2c 20 76 73 56 65 72    rootKey, vsVer
281e0 73 69 6f 6e 2c 20 70 61 63 6b 61 67 65 2c 20 70  sion, package, p
281f0 61 69 72 2e 58 2c 20 77 68 61 74 49 66 2c 0d 0a  air.X, whatIf,..
28200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28210 20 20 20 20 76 65 72 62 6f 73 65 2c 20 72 65 66      verbose, ref
28220 20 65 72 72 6f 72 29 3b 0d 0a 20 20 20 20 20 20   error);..      
28230 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
28240 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20       else..     
28250 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
28260 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
28270 20 52 65 6d 6f 76 65 56 73 50 61 63 6b 61 67 65   RemoveVsPackage
28280 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
28290 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20         rootKey, 
282a0 76 73 56 65 72 73 69 6f 6e 2c 20 70 61 63 6b 61  vsVersion, packa
282b0 67 65 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62  ge, whatIf, verb
282c0 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ose,..          
282d0 20 20 20 20 20 20 20 20 20 20 72 65 66 20 65 72            ref er
282e0 72 6f 72 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ror);..         
282f0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d     }..        }.
28300 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67  .        #endreg
28310 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20 23 65 6e  ion..        #en
28320 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
28330 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
28340 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28350 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28360 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28370 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
28380 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 41 70        #region Ap
28390 70 6c 69 63 61 74 69 6f 6e 20 45 6e 74 72 79 20  plication Entry 
283a0 50 6f 69 6e 74 0d 0a 20 20 20 20 20 20 20 20 70  Point..        p
283b0 72 69 76 61 74 65 20 73 74 61 74 69 63 20 69 6e  rivate static in
283c0 74 20 4d 61 69 6e 28 0d 0a 20 20 20 20 20 20 20  t Main(..       
283d0 20 20 20 20 20 73 74 72 69 6e 67 5b 5d 20 61 72       string[] ar
283e0 67 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  gs..            
283f0 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
28400 20 20 20 20 20 20 20 20 20 20 43 6f 6e 66 69 67            Config
28410 75 72 61 74 69 6f 6e 20 63 6f 6e 66 69 67 75 72  uration configur
28420 61 74 69 6f 6e 20 3d 20 6e 75 6c 6c 3b 0d 0a 20  ation = null;.. 
28430 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
28440 67 20 65 72 72 6f 72 20 3d 20 6e 75 6c 6c 3b 0d  g error = null;.
28450 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
28460 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28470 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28480 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28490 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
284a0 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
284b0 20 20 23 72 65 67 69 6f 6e 20 43 6f 6d 6d 61 6e    #region Comman
284c0 64 20 4c 69 6e 65 20 50 72 6f 63 65 73 73 69 6e  d Line Processin
284d0 67 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  g..            i
284e0 66 20 28 21 43 6f 6e 66 69 67 75 72 61 74 69 6f  f (!Configuratio
284f0 6e 2e 46 72 6f 6d 41 72 67 73 28 0d 0a 20 20 20  n.FromArgs(..   
28500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28510 20 61 72 67 73 2c 20 74 72 75 65 2c 20 72 65 66   args, true, ref
28520 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2c 20   configuration, 
28530 72 65 66 20 65 72 72 6f 72 29 20 7c 7c 0d 0a 20  ref error) ||.. 
28540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 21                 !
28550 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 50 72  Configuration.Pr
28560 6f 63 65 73 73 28 0d 0a 20 20 20 20 20 20 20 20  ocess(..        
28570 20 20 20 20 20 20 20 20 20 20 20 20 61 72 67 73              args
28580 2c 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2c  , configuration,
28590 20 74 72 75 65 2c 20 72 65 66 20 65 72 72 6f 72   true, ref error
285a0 29 20 7c 7c 0d 0a 20 20 20 20 20 20 20 20 20 20  ) ||..          
285b0 20 20 20 20 20 20 21 43 6f 6e 66 69 67 75 72 61        !Configura
285c0 74 69 6f 6e 2e 43 68 65 63 6b 52 75 6e 74 69 6d  tion.CheckRuntim
285d0 65 56 65 72 73 69 6f 6e 28 0d 0a 20 20 20 20 20  eVersion(..     
285e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
285f0 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2c 20 74 72  onfiguration, tr
28600 75 65 2c 20 72 65 66 20 65 72 72 6f 72 29 29 0d  ue, ref error)).
28610 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
28620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28630 54 72 61 63 65 4f 70 73 2e 53 68 6f 77 4d 65 73  TraceOps.ShowMes
28640 73 61 67 65 28 0d 0a 20 20 20 20 20 20 20 20 20  sage(..         
28650 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
28660 50 72 69 6f 72 69 74 79 2e 48 69 67 68 65 73 74  Priority.Highest
28670 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c  , traceCallback,
28680 20 74 68 69 73 41 73 73 65 6d 62 6c 79 2c 0d 0a   thisAssembly,..
28690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
286a0 20 20 20 20 65 72 72 6f 72 2c 20 74 72 61 63 65      error, trace
286b0 43 61 74 65 67 6f 72 79 2c 20 4d 65 73 73 61 67  Category, Messag
286c0 65 42 6f 78 42 75 74 74 6f 6e 73 2e 4f 4b 2c 0d  eBoxButtons.OK,.
286d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
286e0 20 20 20 20 20 4d 65 73 73 61 67 65 42 6f 78 49       MessageBoxI
286f0 63 6f 6e 2e 45 72 72 6f 72 29 3b 0d 0a 0d 0a 20  con.Error);.... 
28700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
28710 65 74 75 72 6e 20 31 3b 20 2f 2a 20 46 41 49 4c  eturn 1; /* FAIL
28720 55 52 45 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20  URE */..        
28730 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
28740 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
28750 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
28760 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28770 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28780 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28790 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
287a0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
287b0 23 72 65 67 69 6f 6e 20 2e 4e 45 54 20 46 72 61  #region .NET Fra
287c0 6d 65 77 6f 72 6b 20 2f 20 56 69 73 75 61 6c 20  mework / Visual 
287d0 53 74 75 64 69 6f 20 44 61 74 61 0d 0a 20 20 20  Studio Data..   
287e0 20 20 20 20 20 20 20 20 20 50 61 63 6b 61 67 65           Package
287f0 20 70 61 63 6b 61 67 65 20 3d 20 6e 75 6c 6c 3b   package = null;
28800 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 46 72  ..            Fr
28810 61 6d 65 77 6f 72 6b 4c 69 73 74 20 66 72 61 6d  ameworkList fram
28820 65 77 6f 72 6b 4c 69 73 74 20 3d 20 6e 75 6c 6c  eworkList = null
28830 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 56  ;..            V
28840 73 4c 69 73 74 20 76 73 4c 69 73 74 20 3d 20 6e  sList vsList = n
28850 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ull;....        
28860 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
28870 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28880 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28890 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
288a0 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
288b0 20 20 20 20 20 20 20 49 6e 69 74 69 61 6c 69 7a         Initializ
288c0 65 56 73 50 61 63 6b 61 67 65 28 72 65 66 20 70  eVsPackage(ref p
288d0 61 63 6b 61 67 65 29 3b 0d 0a 20 20 20 20 20 20  ackage);..      
288e0 20 20 20 20 20 20 49 6e 69 74 69 61 6c 69 7a 65        Initialize
288f0 46 72 61 6d 65 77 6f 72 6b 4c 69 73 74 28 63 6f  FrameworkList(co
28900 6e 66 69 67 75 72 61 74 69 6f 6e 2c 20 72 65 66  nfiguration, ref
28910 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 29 3b   frameworkList);
28920 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 49 6e  ..            In
28930 69 74 69 61 6c 69 7a 65 56 73 4c 69 73 74 28 63  itializeVsList(c
28940 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2c 20 72 65  onfiguration, re
28950 66 20 76 73 4c 69 73 74 29 3b 0d 0a 20 20 20 20  f vsList);..    
28960 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
28970 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  on....          
28980 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
28990 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
289a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
289b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
289c0 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
289d0 20 20 20 20 20 41 73 73 65 6d 62 6c 79 4e 61 6d       AssemblyNam
289e0 65 20 61 73 73 65 6d 62 6c 79 4e 61 6d 65 20 3d  e assemblyName =
289f0 20 41 73 73 65 6d 62 6c 79 4e 61 6d 65 2e 47 65   AssemblyName.Ge
28a00 74 41 73 73 65 6d 62 6c 79 4e 61 6d 65 28 0d 0a  tAssemblyName(..
28a10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28a20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 43 6f  configuration.Co
28a30 72 65 46 69 6c 65 4e 61 6d 65 29 3b 20 2f 2a 20  reFileName); /* 
28a40 74 68 72 6f 77 20 2a 2f 0d 0a 0d 0a 20 20 20 20  throw */....    
28a50 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
28a60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28a70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28a80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28a90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
28aa0 20 20 20 20 20 20 20 20 20 20 20 41 6e 79 50 61             AnyPa
28ab0 69 72 3c 73 74 72 69 6e 67 2c 20 62 6f 6f 6c 3e  ir<string, bool>
28ac0 20 64 69 72 65 63 74 6f 72 79 50 61 69 72 20 3d   directoryPair =
28ad0 20 6e 65 77 20 41 6e 79 50 61 69 72 3c 73 74 72   new AnyPair<str
28ae0 69 6e 67 2c 20 62 6f 6f 6c 3e 28 0d 0a 20 20 20  ing, bool>(..   
28af0 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
28b00 66 69 67 75 72 61 74 69 6f 6e 2e 44 69 72 65 63  figuration.Direc
28b10 74 6f 72 79 2c 20 63 6f 6e 66 69 67 75 72 61 74  tory, configurat
28b20 69 6f 6e 2e 49 6e 73 74 61 6c 6c 29 3b 0d 0a 0d  ion.Install);...
28b30 0a 20 20 20 20 20 20 20 20 20 20 20 20 41 6e 79  .            Any
28b40 50 61 69 72 3c 73 74 72 69 6e 67 2c 20 62 6f 6f  Pair<string, boo
28b50 6c 3e 20 66 69 6c 65 4e 61 6d 65 50 61 69 72 20  l> fileNamePair 
28b60 3d 20 6e 65 77 20 41 6e 79 50 61 69 72 3c 73 74  = new AnyPair<st
28b70 72 69 6e 67 2c 20 62 6f 6f 6c 3e 28 0d 0a 20 20  ring, bool>(..  
28b80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
28b90 6e 66 69 67 75 72 61 74 69 6f 6e 2e 44 65 73 69  nfiguration.Desi
28ba0 67 6e 65 72 46 69 6c 65 4e 61 6d 65 2c 20 63 6f  gnerFileName, co
28bb0 6e 66 69 67 75 72 61 74 69 6f 6e 2e 49 6e 73 74  nfiguration.Inst
28bc0 61 6c 6c 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  all);....       
28bd0 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
28be0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28bf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28c00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28c10 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
28c20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20          #region 
28c30 2e 4e 45 54 20 47 41 43 20 49 6e 73 74 61 6c 6c  .NET GAC Install
28c40 2f 52 65 6d 6f 76 65 0d 0a 20 20 20 20 20 20 20  /Remove..       
28c50 20 20 20 20 20 69 66 20 28 63 6f 6e 66 69 67 75       if (configu
28c60 72 61 74 69 6f 6e 2e 48 61 73 46 6c 61 67 73 28  ration.HasFlags(
28c70 49 6e 73 74 61 6c 6c 46 6c 61 67 73 2e 47 41 43  InstallFlags.GAC
28c80 2c 20 74 72 75 65 29 29 0d 0a 20 20 20 20 20 20  , true))..      
28c90 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
28ca0 20 20 20 20 20 20 20 20 20 50 75 62 6c 69 73 68           Publish
28cb0 20 70 75 62 6c 69 73 68 20 3d 20 6e 75 6c 6c 3b   publish = null;
28cc0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
28cd0 20 20 20 20 69 66 20 28 21 63 6f 6e 66 69 67 75      if (!configu
28ce0 72 61 74 69 6f 6e 2e 57 68 61 74 49 66 29 0d 0a  ration.WhatIf)..
28cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28d00 20 20 20 20 70 75 62 6c 69 73 68 20 3d 20 6e 65      publish = ne
28d10 77 20 50 75 62 6c 69 73 68 28 29 3b 0d 0a 0d 0a  w Publish();....
28d20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28d30 69 66 20 28 63 6f 6e 66 69 67 75 72 61 74 69 6f  if (configuratio
28d40 6e 2e 49 6e 73 74 61 6c 6c 29 0d 0a 20 20 20 20  n.Install)..    
28d50 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
28d60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28d70 20 20 20 69 66 20 28 21 63 6f 6e 66 69 67 75 72     if (!configur
28d80 61 74 69 6f 6e 2e 57 68 61 74 49 66 29 0d 0a 20  ation.WhatIf).. 
28d90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28da0 20 20 20 20 20 20 20 70 75 62 6c 69 73 68 2e 47         publish.G
28db0 61 63 49 6e 73 74 61 6c 6c 28 63 6f 6e 66 69 67  acInstall(config
28dc0 75 72 61 74 69 6f 6e 2e 43 6f 72 65 46 69 6c 65  uration.CoreFile
28dd0 4e 61 6d 65 29 3b 20 2f 2a 20 74 68 72 6f 77 20  Name); /* throw 
28de0 2a 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  */....          
28df0 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f            TraceO
28e00 70 73 2e 54 72 61 63 65 28 0d 0a 20 20 20 20 20  ps.Trace(..     
28e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28e20 20 20 20 54 72 61 63 65 50 72 69 6f 72 69 74 79     TracePriority
28e30 2e 48 69 67 68 65 73 74 2c 20 74 72 61 63 65 43  .Highest, traceC
28e40 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e  allback, String.
28e50 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
28e60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28e70 20 22 47 61 63 49 6e 73 74 61 6c 6c 3a 20 61 73   "GacInstall: as
28e80 73 65 6d 62 6c 79 50 61 74 68 20 3d 20 7b 30 7d  semblyPath = {0}
28e90 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
28ea0 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44              ForD
28eb0 69 73 70 6c 61 79 28 63 6f 6e 66 69 67 75 72 61  isplay(configura
28ec0 74 69 6f 6e 2e 43 6f 72 65 46 69 6c 65 4e 61 6d  tion.CoreFileNam
28ed0 65 29 29 2c 20 74 72 61 63 65 43 61 74 65 67 6f  e)), traceCatego
28ee0 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
28ef0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
28f00 21 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 57  !configuration.W
28f10 68 61 74 49 66 29 0d 0a 20 20 20 20 20 20 20 20  hatIf)..        
28f20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28f30 70 75 62 6c 69 73 68 2e 47 61 63 49 6e 73 74 61  publish.GacInsta
28f40 6c 6c 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  ll(configuration
28f50 2e 4c 69 6e 71 46 69 6c 65 4e 61 6d 65 29 3b 20  .LinqFileName); 
28f60 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a 0d 0a 20  /* throw */.... 
28f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28f80 20 20 20 54 72 61 63 65 4f 70 73 2e 54 72 61 63     TraceOps.Trac
28f90 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
28fa0 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
28fb0 65 50 72 69 6f 72 69 74 79 2e 48 69 67 68 65 73  ePriority.Highes
28fc0 74 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b  t, traceCallback
28fd0 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  , String.Format(
28fe0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
28ff0 20 20 20 20 20 20 20 20 20 20 22 47 61 63 49 6e            "GacIn
29000 73 74 61 6c 6c 3a 20 61 73 73 65 6d 62 6c 79 50  stall: assemblyP
29010 61 74 68 20 3d 20 7b 30 7d 22 2c 0d 0a 20 20 20  ath = {0}",..   
29020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29030 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28       ForDisplay(
29040 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 4c 69  configuration.Li
29050 6e 71 46 69 6c 65 4e 61 6d 65 29 29 2c 20 74 72  nqFileName)), tr
29060 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 20  aceCategory);.. 
29070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
29080 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
29090 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20    else..        
290a0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
290b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
290c0 66 20 28 21 63 6f 6e 66 69 67 75 72 61 74 69 6f  f (!configuratio
290d0 6e 2e 57 68 61 74 49 66 29 0d 0a 20 20 20 20 20  n.WhatIf)..     
290e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
290f0 20 20 20 70 75 62 6c 69 73 68 2e 47 61 63 52 65     publish.GacRe
29100 6d 6f 76 65 28 63 6f 6e 66 69 67 75 72 61 74 69  move(configurati
29110 6f 6e 2e 4c 69 6e 71 46 69 6c 65 4e 61 6d 65 29  on.LinqFileName)
29120 3b 20 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a 0d  ; /* throw */...
29130 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
29140 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 54 72       TraceOps.Tr
29150 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ace(..          
29160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
29170 61 63 65 50 72 69 6f 72 69 74 79 2e 48 69 67 68  acePriority.High
29180 65 73 74 2c 20 74 72 61 63 65 43 61 6c 6c 62 61  est, traceCallba
29190 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ck, String.Forma
291a0 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
291b0 20 20 20 20 20 20 20 20 20 20 20 20 22 47 61 63              "Gac
291c0 52 65 6d 6f 76 65 3a 20 61 73 73 65 6d 62 6c 79  Remove: assembly
291d0 50 61 74 68 20 3d 20 7b 30 7d 22 2c 0d 0a 20 20  Path = {0}",..  
291e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
291f0 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79        ForDisplay
29200 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 4c  (configuration.L
29210 69 6e 71 46 69 6c 65 4e 61 6d 65 29 29 2c 20 74  inqFileName)), t
29220 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
29230 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
29240 20 20 20 20 20 20 69 66 20 28 21 63 6f 6e 66 69        if (!confi
29250 67 75 72 61 74 69 6f 6e 2e 57 68 61 74 49 66 29  guration.WhatIf)
29260 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
29270 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 73            publis
29280 68 2e 47 61 63 52 65 6d 6f 76 65 28 63 6f 6e 66  h.GacRemove(conf
29290 69 67 75 72 61 74 69 6f 6e 2e 43 6f 72 65 46 69  iguration.CoreFi
292a0 6c 65 4e 61 6d 65 29 3b 20 2f 2a 20 74 68 72 6f  leName); /* thro
292b0 77 20 2a 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  w */....        
292c0 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
292d0 65 4f 70 73 2e 54 72 61 63 65 28 0d 0a 20 20 20  eOps.Trace(..   
292e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
292f0 20 20 20 20 20 54 72 61 63 65 50 72 69 6f 72 69       TracePriori
29300 74 79 2e 48 69 67 68 65 73 74 2c 20 74 72 61 63  ty.Highest, trac
29310 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e  eCallback, Strin
29320 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
29330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29340 20 20 20 22 47 61 63 52 65 6d 6f 76 65 3a 20 61     "GacRemove: a
29350 73 73 65 6d 62 6c 79 50 61 74 68 20 3d 20 7b 30  ssemblyPath = {0
29360 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }",..           
29370 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72               For
29380 44 69 73 70 6c 61 79 28 63 6f 6e 66 69 67 75 72  Display(configur
29390 61 74 69 6f 6e 2e 43 6f 72 65 46 69 6c 65 4e 61  ation.CoreFileNa
293a0 6d 65 29 29 2c 20 74 72 61 63 65 43 61 74 65 67  me)), traceCateg
293b0 6f 72 79 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ory);..         
293c0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
293d0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
293e0 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d       #endregion.
293f0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
29400 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29410 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29420 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29430 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29440 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
29450 20 20 23 72 65 67 69 6f 6e 20 2e 4e 45 54 20 41    #region .NET A
29460 73 73 65 6d 62 6c 79 46 6f 6c 64 65 72 73 0d 0a  ssemblyFolders..
29470 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
29480 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 48 61  configuration.Ha
29490 73 46 6c 61 67 73 28 49 6e 73 74 61 6c 6c 46 6c  sFlags(InstallFl
294a0 61 67 73 2e 41 73 73 65 6d 62 6c 79 46 6f 6c 64  ags.AssemblyFold
294b0 65 72 73 2c 20 74 72 75 65 29 29 0d 0a 20 20 20  ers, true))..   
294c0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
294d0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
294e0 21 46 6f 72 45 61 63 68 46 72 61 6d 65 77 6f 72  !ForEachFramewor
294f0 6b 52 65 67 69 73 74 72 79 28 0d 0a 20 20 20 20  kRegistry(..    
29500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29510 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73      frameworkLis
29520 74 2c 20 50 72 6f 63 65 73 73 41 73 73 65 6d 62  t, ProcessAssemb
29530 6c 79 46 6f 6c 64 65 72 73 2c 0d 0a 20 20 20 20  lyFolders,..    
29540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29550 20 20 20 20 64 69 72 65 63 74 6f 72 79 50 61 69      directoryPai
29560 72 2c 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  r, configuration
29570 2e 57 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20  .WhatIf,..      
29580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29590 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e    configuration.
295a0 56 65 72 62 6f 73 65 2c 20 72 65 66 20 65 72 72  Verbose, ref err
295b0 6f 72 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  or))..          
295c0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
295d0 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61               Tra
295e0 63 65 4f 70 73 2e 53 68 6f 77 4d 65 73 73 61 67  ceOps.ShowMessag
295f0 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
29600 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
29610 65 50 72 69 6f 72 69 74 79 2e 48 69 67 68 65 73  ePriority.Highes
29620 74 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b  t, traceCallback
29630 2c 20 74 68 69 73 41 73 73 65 6d 62 6c 79 2c 0d  , thisAssembly,.
29640 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
29650 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 2c 20           error, 
29660 74 72 61 63 65 43 61 74 65 67 6f 72 79 2c 20 4d  traceCategory, M
29670 65 73 73 61 67 65 42 6f 78 42 75 74 74 6f 6e 73  essageBoxButtons
29680 2e 4f 4b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  .OK,..          
29690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4d 65                Me
296a0 73 73 61 67 65 42 6f 78 49 63 6f 6e 2e 45 72 72  ssageBoxIcon.Err
296b0 6f 72 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  or);....        
296c0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
296d0 72 6e 20 31 3b 20 2f 2a 20 46 41 49 4c 55 52 45  rn 1; /* FAILURE
296e0 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   */..           
296f0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
29700 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
29710 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
29720 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
29730 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29740 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29750 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29760 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29770 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
29780 23 72 65 67 69 6f 6e 20 2e 4e 45 54 20 44 62 50  #region .NET DbP
29790 72 6f 76 69 64 65 72 46 61 63 74 6f 72 79 0d 0a  roviderFactory..
297a0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
297b0 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 48 61  configuration.Ha
297c0 73 46 6c 61 67 73 28 49 6e 73 74 61 6c 6c 46 6c  sFlags(InstallFl
297d0 61 67 73 2e 44 62 50 72 6f 76 69 64 65 72 46 61  ags.DbProviderFa
297e0 63 74 6f 72 79 2c 20 74 72 75 65 29 29 0d 0a 20  ctory, true)).. 
297f0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
29800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f                bo
29810 6f 6c 20 73 61 76 65 64 20 3d 20 66 61 6c 73 65  ol saved = false
29820 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
29830 20 20 20 20 20 69 66 20 28 21 46 6f 72 45 61 63       if (!ForEac
29840 68 46 72 61 6d 65 77 6f 72 6b 43 6f 6e 66 69 67  hFrameworkConfig
29850 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
29860 20 20 20 20 20 20 20 20 20 20 20 66 72 61 6d 65             frame
29870 77 6f 72 6b 4c 69 73 74 2c 20 50 72 6f 63 65 73  workList, Proces
29880 73 44 62 50 72 6f 76 69 64 65 72 46 61 63 74 6f  sDbProviderFacto
29890 72 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ry,..           
298a0 20 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 76               Inv
298b0 61 72 69 61 6e 74 4e 61 6d 65 2c 20 50 72 6f 76  ariantName, Prov
298c0 69 64 65 72 4e 61 6d 65 2c 20 44 65 73 63 72 69  iderName, Descri
298d0 70 74 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20  ption,..        
298e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
298f0 46 61 63 74 6f 72 79 54 79 70 65 4e 61 6d 65 2c  FactoryTypeName,
29900 20 61 73 73 65 6d 62 6c 79 4e 61 6d 65 2c 20 64   assemblyName, d
29910 69 72 65 63 74 6f 72 79 50 61 69 72 2c 0d 0a 20  irectoryPair,.. 
29920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29930 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61         configura
29940 74 69 6f 6e 2e 57 68 61 74 49 66 2c 20 63 6f 6e  tion.WhatIf, con
29950 66 69 67 75 72 61 74 69 6f 6e 2e 56 65 72 62 6f  figuration.Verbo
29960 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se,..           
29970 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66               ref
29980 20 73 61 76 65 64 2c 20 72 65 66 20 65 72 72 6f   saved, ref erro
29990 72 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  r))..           
299a0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
299b0 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
299c0 65 4f 70 73 2e 53 68 6f 77 4d 65 73 73 61 67 65  eOps.ShowMessage
299d0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
299e0 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
299f0 50 72 69 6f 72 69 74 79 2e 48 69 67 68 65 73 74  Priority.Highest
29a00 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c  , traceCallback,
29a10 20 74 68 69 73 41 73 73 65 6d 62 6c 79 2c 0d 0a   thisAssembly,..
29a20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29a30 20 20 20 20 20 20 20 20 65 72 72 6f 72 2c 20 74          error, t
29a40 72 61 63 65 43 61 74 65 67 6f 72 79 2c 20 4d 65  raceCategory, Me
29a50 73 73 61 67 65 42 6f 78 42 75 74 74 6f 6e 73 2e  ssageBoxButtons.
29a60 4f 4b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  OK,..           
29a70 20 20 20 20 20 20 20 20 20 20 20 20 20 4d 65 73               Mes
29a80 73 61 67 65 42 6f 78 49 63 6f 6e 2e 45 72 72 6f  sageBoxIcon.Erro
29a90 72 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  r);....         
29aa0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
29ab0 6e 20 31 3b 20 2f 2a 20 46 41 49 4c 55 52 45 20  n 1; /* FAILURE 
29ac0 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  */..            
29ad0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
29ae0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
29af0 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a    #endregion....
29b00 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
29b10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29b20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29b30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29b40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
29b50 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  ...            #
29b60 72 65 67 69 6f 6e 20 56 53 20 50 61 63 6b 61 67  region VS Packag
29b70 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  e..            i
29b80 66 20 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  f (configuration
29b90 2e 48 61 73 46 6c 61 67 73 28 49 6e 73 74 61 6c  .HasFlags(Instal
29ba0 6c 46 6c 61 67 73 2e 56 73 50 61 63 6b 61 67 65  lFlags.VsPackage
29bb0 2c 20 74 72 75 65 29 29 0d 0a 20 20 20 20 20 20  , true))..      
29bc0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
29bd0 20 20 20 20 20 20 20 20 20 69 66 20 28 21 46 6f           if (!Fo
29be0 72 45 61 63 68 56 73 56 65 72 73 69 6f 6e 52 65  rEachVsVersionRe
29bf0 67 69 73 74 72 79 28 0d 0a 20 20 20 20 20 20 20  gistry(..       
29c00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29c10 20 76 73 4c 69 73 74 2c 20 50 72 6f 63 65 73 73   vsList, Process
29c20 56 73 50 61 63 6b 61 67 65 2c 20 70 61 63 6b 61  VsPackage, packa
29c30 67 65 2c 20 66 69 6c 65 4e 61 6d 65 50 61 69 72  ge, fileNamePair
29c40 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
29c50 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69             confi
29c60 67 75 72 61 74 69 6f 6e 2e 57 68 61 74 49 66 2c  guration.WhatIf,
29c70 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 56   configuration.V
29c80 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20  erbose,..       
29c90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29ca0 20 72 65 66 20 65 72 72 6f 72 29 29 0d 0a 20 20   ref error))..  
29cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
29cc0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
29cd0 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 53 68       TraceOps.Sh
29ce0 6f 77 4d 65 73 73 61 67 65 28 0d 0a 20 20 20 20  owMessage(..    
29cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29d00 20 20 20 20 54 72 61 63 65 50 72 69 6f 72 69 74      TracePriorit
29d10 79 2e 48 69 67 68 65 73 74 2c 20 74 72 61 63 65  y.Highest, trace
29d20 43 61 6c 6c 62 61 63 6b 2c 20 74 68 69 73 41 73  Callback, thisAs
29d30 73 65 6d 62 6c 79 2c 0d 0a 20 20 20 20 20 20 20  sembly,..       
29d40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29d50 20 65 72 72 6f 72 2c 20 74 72 61 63 65 43 61 74   error, traceCat
29d60 65 67 6f 72 79 2c 20 4d 65 73 73 61 67 65 42 6f  egory, MessageBo
29d70 78 42 75 74 74 6f 6e 73 2e 4f 4b 2c 0d 0a 20 20  xButtons.OK,..  
29d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29d90 20 20 20 20 20 20 4d 65 73 73 61 67 65 42 6f 78        MessageBox
29da0 49 63 6f 6e 2e 45 72 72 6f 72 29 3b 0d 0a 0d 0a  Icon.Error);....
29db0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29dc0 20 20 20 20 72 65 74 75 72 6e 20 31 3b 20 2f 2a      return 1; /*
29dd0 20 46 41 49 4c 55 52 45 20 2a 2f 0d 0a 20 20 20   FAILURE */..   
29de0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
29df0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
29e00 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 72             #endr
29e10 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20  egion....       
29e20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
29e30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29e40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29e50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29e60 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
29e70 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20          #region 
29e80 56 53 20 44 61 74 61 53 6f 75 72 63 65 0d 0a 20  VS DataSource.. 
29e90 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 63             if (c
29ea0 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 48 61 73  onfiguration.Has
29eb0 46 6c 61 67 73 28 49 6e 73 74 61 6c 6c 46 6c 61  Flags(InstallFla
29ec0 67 73 2e 56 73 44 61 74 61 53 6f 75 72 63 65 2c  gs.VsDataSource,
29ed0 20 74 72 75 65 29 29 0d 0a 20 20 20 20 20 20 20   true))..       
29ee0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
29ef0 20 20 20 20 20 20 20 20 69 66 20 28 21 46 6f 72          if (!For
29f00 45 61 63 68 56 73 56 65 72 73 69 6f 6e 52 65 67  EachVsVersionReg
29f10 69 73 74 72 79 28 0d 0a 20 20 20 20 20 20 20 20  istry(..        
29f20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29f30 76 73 4c 69 73 74 2c 20 50 72 6f 63 65 73 73 56  vsList, ProcessV
29f40 73 44 61 74 61 53 6f 75 72 63 65 2c 20 70 61 63  sDataSource, pac
29f50 6b 61 67 65 2c 20 66 69 6c 65 4e 61 6d 65 50 61  kage, fileNamePa
29f60 69 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ir,..           
29f70 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
29f80 66 69 67 75 72 61 74 69 6f 6e 2e 57 68 61 74 49  figuration.WhatI
29f90 66 2c 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  f, configuration
29fa0 2e 56 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20  .Verbose,..     
29fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29fc0 20 20 20 72 65 66 20 65 72 72 6f 72 29 29 0d 0a     ref error))..
29fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29fe0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
29ff0 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e         TraceOps.
2a000 53 68 6f 77 4d 65 73 73 61 67 65 28 0d 0a 20 20  ShowMessage(..  
2a010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a020 20 20 20 20 20 20 54 72 61 63 65 50 72 69 6f 72        TracePrior
2a030 69 74 79 2e 48 69 67 68 65 73 74 2c 20 74 72 61  ity.Highest, tra
2a040 63 65 43 61 6c 6c 62 61 63 6b 2c 20 74 68 69 73  ceCallback, this
2a050 41 73 73 65 6d 62 6c 79 2c 0d 0a 20 20 20 20 20  Assembly,..     
2a060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a070 20 20 20 65 72 72 6f 72 2c 20 74 72 61 63 65 43     error, traceC
2a080 61 74 65 67 6f 72 79 2c 20 4d 65 73 73 61 67 65  ategory, Message
2a090 42 6f 78 42 75 74 74 6f 6e 73 2e 4f 4b 2c 0d 0a  BoxButtons.OK,..
2a0a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a0b0 20 20 20 20 20 20 20 20 4d 65 73 73 61 67 65 42          MessageB
2a0c0 6f 78 49 63 6f 6e 2e 45 72 72 6f 72 29 3b 0d 0a  oxIcon.Error);..
2a0d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2a0e0 20 20 20 20 20 20 72 65 74 75 72 6e 20 31 3b 20        return 1; 
2a0f0 2f 2a 20 46 41 49 4c 55 52 45 20 2a 2f 0d 0a 20  /* FAILURE */.. 
2a100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
2a110 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
2a120 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e  .            #en
2a130 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
2a140 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
2a150 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a160 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a170 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a180 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
2a190 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f            #regio
2a1a0 6e 20 56 53 20 44 61 74 61 50 72 6f 76 69 64 65  n VS DataProvide
2a1b0 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  r..            i
2a1c0 66 20 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  f (configuration
2a1d0 2e 48 61 73 46 6c 61 67 73 28 49 6e 73 74 61 6c  .HasFlags(Instal
2a1e0 6c 46 6c 61 67 73 2e 56 73 44 61 74 61 50 72 6f  lFlags.VsDataPro
2a1f0 76 69 64 65 72 2c 20 74 72 75 65 29 29 0d 0a 20  vider, true)).. 
2a200 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
2a210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
2a220 20 28 21 46 6f 72 45 61 63 68 56 73 56 65 72 73   (!ForEachVsVers
2a230 69 6f 6e 52 65 67 69 73 74 72 79 28 0d 0a 20 20  ionRegistry(..  
2a240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a250 20 20 20 20 20 20 76 73 4c 69 73 74 2c 20 50 72        vsList, Pr
2a260 6f 63 65 73 73 56 73 44 61 74 61 50 72 6f 76 69  ocessVsDataProvi
2a270 64 65 72 2c 20 70 61 63 6b 61 67 65 2c 20 66 69  der, package, fi
2a280 6c 65 4e 61 6d 65 50 61 69 72 2c 0d 0a 20 20 20  leNamePair,..   
2a290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a2a0 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69       configurati
2a2b0 6f 6e 2e 57 68 61 74 49 66 2c 20 63 6f 6e 66 69  on.WhatIf, confi
2a2c0 67 75 72 61 74 69 6f 6e 2e 56 65 72 62 6f 73 65  guration.Verbose
2a2d0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
2a2e0 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20 65             ref e
2a2f0 72 72 6f 72 29 29 0d 0a 20 20 20 20 20 20 20 20  rror))..        
2a300 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
2a310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
2a320 72 61 63 65 4f 70 73 2e 53 68 6f 77 4d 65 73 73  raceOps.ShowMess
2a330 61 67 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  age(..          
2a340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
2a350 61 63 65 50 72 69 6f 72 69 74 79 2e 48 69 67 68  acePriority.High
2a360 65 73 74 2c 20 74 72 61 63 65 43 61 6c 6c 62 61  est, traceCallba
2a370 63 6b 2c 20 74 68 69 73 41 73 73 65 6d 62 6c 79  ck, thisAssembly
2a380 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
2a390 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72             error
2a3a0 2c 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 2c  , traceCategory,
2a3b0 20 4d 65 73 73 61 67 65 42 6f 78 42 75 74 74 6f   MessageBoxButto
2a3c0 6e 73 2e 4f 4b 2c 0d 0a 20 20 20 20 20 20 20 20  ns.OK,..        
2a3d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a3e0 4d 65 73 73 61 67 65 42 6f 78 49 63 6f 6e 2e 45  MessageBoxIcon.E
2a3f0 72 72 6f 72 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  rror);....      
2a400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
2a410 74 75 72 6e 20 31 3b 20 2f 2a 20 46 41 49 4c 55  turn 1; /* FAILU
2a420 52 45 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20  RE */..         
2a430 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
2a440 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
2a450 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d       #endregion.
2a460 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
2a470 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a480 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a490 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a4a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a4b0 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
2a4c0 20 20 23 72 65 67 69 6f 6e 20 4c 6f 67 20 53 75    #region Log Su
2a4d0 6d 6d 61 72 79 0d 0a 20 20 20 20 20 20 20 20 20  mmary..         
2a4e0 20 20 20 54 72 61 63 65 4f 70 73 2e 54 72 61 63     TraceOps.Trac
2a4f0 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
2a500 20 20 20 20 54 72 61 63 65 50 72 69 6f 72 69 74      TracePriorit
2a510 79 2e 48 69 67 68 65 72 2c 20 74 72 61 63 65 43  y.Higher, traceC
2a520 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e  allback, String.
2a530 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
2a540 20 20 20 20 20 20 20 20 20 22 73 75 62 4b 65 79           "subKey
2a550 73 43 72 65 61 74 65 64 20 3d 20 7b 30 7d 2c 20  sCreated = {0}, 
2a560 73 75 62 4b 65 79 73 44 65 6c 65 74 65 64 20 3d  subKeysDeleted =
2a570 20 7b 31 7d 2c 20 22 20 2b 0d 0a 20 20 20 20 20   {1}, " +..     
2a580 20 20 20 20 20 20 20 20 20 20 20 22 6b 65 79 56             "keyV
2a590 61 6c 75 65 73 53 65 74 20 3d 20 7b 32 7d 2c 20  aluesSet = {2}, 
2a5a0 6b 65 79 56 61 6c 75 65 73 44 65 6c 65 74 65 64  keyValuesDeleted
2a5b0 20 3d 20 7b 33 7d 22 2c 0d 0a 20 20 20 20 20 20   = {3}",..      
2a5c0 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73            ForDis
2a5d0 70 6c 61 79 28 52 65 67 69 73 74 72 79 48 65 6c  play(RegistryHel
2a5e0 70 65 72 2e 53 75 62 4b 65 79 73 43 72 65 61 74  per.SubKeysCreat
2a5f0 65 64 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ed),..          
2a600 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79        ForDisplay
2a610 28 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e  (RegistryHelper.
2a620 53 75 62 4b 65 79 73 44 65 6c 65 74 65 64 29 2c  SubKeysDeleted),
2a630 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2a640 20 20 46 6f 72 44 69 73 70 6c 61 79 28 52 65 67    ForDisplay(Reg
2a650 69 73 74 72 79 48 65 6c 70 65 72 2e 4b 65 79 56  istryHelper.KeyV
2a660 61 6c 75 65 73 53 65 74 29 2c 0d 0a 20 20 20 20  aluesSet),..    
2a670 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44              ForD
2a680 69 73 70 6c 61 79 28 52 65 67 69 73 74 72 79 48  isplay(RegistryH
2a690 65 6c 70 65 72 2e 4b 65 79 56 61 6c 75 65 73 44  elper.KeyValuesD
2a6a0 65 6c 65 74 65 64 29 29 2c 0d 0a 20 20 20 20 20  eleted)),..     
2a6b0 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
2a6c0 43 61 74 65 67 6f 72 79 29 3b 0d 0a 20 20 20 20  Category);..    
2a6d0 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
2a6e0 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  on....          
2a6f0 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
2a700 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a710 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a720 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a730 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
2a740 20 20 20 20 20 72 65 74 75 72 6e 20 30 3b 20 2f       return 0; /
2a750 2a 20 53 55 43 43 45 53 53 20 2a 2f 0d 0a 20 20  * SUCCESS */..  
2a760 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
2a770 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 20 20 20   #endregion..   
2a780 20 7d 0d 0a 20 20 20 20 23 65 6e 64 72 65 67 69   }..    #endregi
2a790 6f 6e 0d 0a 7d 0d 0a                             on..}..