System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact 79ce62664456e27597be56615c2ddd7e7cc515c3:


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 3b 0d 0a 75 73 69 6e 67 20   System;..using 
0090: 53 79 73 74 65 6d 2e 43 6f 6c 6c 65 63 74 69 6f  System.Collectio
00a0: 6e 73 2e 47 65 6e 65 72 69 63 3b 0d 0a 75 73 69  ns.Generic;..usi
00b0: 6e 67 20 53 79 73 74 65 6d 2e 44 69 61 67 6e 6f  ng System.Diagno
00c0: 73 74 69 63 73 3b 0d 0a 75 73 69 6e 67 20 53 79  stics;..using Sy
00d0: 73 74 65 6d 2e 45 6e 74 65 72 70 72 69 73 65 53  stem.EnterpriseS
00e0: 65 72 76 69 63 65 73 2e 49 6e 74 65 72 6e 61 6c  ervices.Internal
00f0: 3b 0d 0a 75 73 69 6e 67 20 53 79 73 74 65 6d 2e  ;..using System.
0100: 49 4f 3b 0d 0a 75 73 69 6e 67 20 53 79 73 74 65  IO;..using Syste
0110: 6d 2e 52 65 66 6c 65 63 74 69 6f 6e 3b 0d 0a 75  m.Reflection;..u
0120: 73 69 6e 67 20 53 79 73 74 65 6d 2e 52 75 6e 74  sing System.Runt
0130: 69 6d 65 2e 43 6f 6d 70 69 6c 65 72 53 65 72 76  ime.CompilerServ
0140: 69 63 65 73 3b 0d 0a 0d 0a 23 69 66 20 57 49 4e  ices;....#if WIN
0150: 44 4f 57 53 0d 0a 75 73 69 6e 67 20 53 79 73 74  DOWS..using Syst
0160: 65 6d 2e 52 75 6e 74 69 6d 65 2e 49 6e 74 65 72  em.Runtime.Inter
0170: 6f 70 53 65 72 76 69 63 65 73 3b 0d 0a 23 65 6e  opServices;..#en
0180: 64 69 66 0d 0a 0d 0a 75 73 69 6e 67 20 53 79 73  dif....using Sys
0190: 74 65 6d 2e 53 65 63 75 72 69 74 79 3b 0d 0a 0d  tem.Security;...
01a0: 0a 23 69 66 20 4e 45 54 5f 32 30 0d 0a 75 73 69  .#if NET_20..usi
01b0: 6e 67 20 53 79 73 74 65 6d 2e 53 65 63 75 72 69  ng System.Securi
01c0: 74 79 2e 50 65 72 6d 69 73 73 69 6f 6e 73 3b 0d  ty.Permissions;.
01d0: 0a 23 65 6e 64 69 66 0d 0a 0d 0a 75 73 69 6e 67  .#endif....using
01e0: 20 53 79 73 74 65 6d 2e 54 68 72 65 61 64 69 6e   System.Threadin
01f0: 67 3b 0d 0a 75 73 69 6e 67 20 53 79 73 74 65 6d  g;..using System
0200: 2e 57 69 6e 64 6f 77 73 2e 46 6f 72 6d 73 3b 0d  .Windows.Forms;.
0210: 0a 75 73 69 6e 67 20 53 79 73 74 65 6d 2e 58 6d  .using System.Xm
0220: 6c 3b 0d 0a 75 73 69 6e 67 20 4d 69 63 72 6f 73  l;..using Micros
0230: 6f 66 74 2e 57 69 6e 33 32 3b 0d 0a 0d 0a 6e 61  oft.Win32;....na
0240: 6d 65 73 70 61 63 65 20 53 79 73 74 65 6d 2e 44  mespace System.D
0250: 61 74 61 2e 53 51 4c 69 74 65 0d 0a 7b 0d 0a 20  ata.SQLite..{.. 
0260: 20 20 20 23 72 65 67 69 6f 6e 20 50 75 62 6c 69     #region Publi
0270: 63 20 44 65 6c 65 67 61 74 65 73 0d 0a 20 20 20  c Delegates..   
0280: 20 69 6e 74 65 72 6e 61 6c 20 64 65 6c 65 67 61   internal delega
0290: 74 65 20 76 6f 69 64 20 54 72 61 63 65 43 61 6c  te void TraceCal
02a0: 6c 62 61 63 6b 28 0d 0a 20 20 20 20 20 20 20 20  lback(..        
02b0: 73 74 72 69 6e 67 20 6d 65 73 73 61 67 65 2c 0d  string message,.
02c0: 0a 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20  .        string 
02d0: 63 61 74 65 67 6f 72 79 0d 0a 20 20 20 20 29 3b  category..    );
02e0: 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f  ....    ////////
02f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0300: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0310: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0320: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0330: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72  ///....    inter
0340: 6e 61 6c 20 64 65 6c 65 67 61 74 65 20 62 6f 6f  nal delegate boo
0350: 6c 20 46 72 61 6d 65 77 6f 72 6b 43 6f 6e 66 69  l FrameworkConfi
0360: 67 43 61 6c 6c 62 61 63 6b 28 0d 0a 20 20 20 20  gCallback(..    
0370: 20 20 20 20 73 74 72 69 6e 67 20 66 69 6c 65 4e      string fileN
0380: 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 73 74  ame,..        st
0390: 72 69 6e 67 20 69 6e 76 61 72 69 61 6e 74 2c 0d  ring invariant,.
03a0: 0a 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20  .        string 
03b0: 6e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 73  name,..        s
03c0: 74 72 69 6e 67 20 64 65 73 63 72 69 70 74 69 6f  tring descriptio
03d0: 6e 2c 0d 0a 20 20 20 20 20 20 20 20 73 74 72 69  n,..        stri
03e0: 6e 67 20 74 79 70 65 4e 61 6d 65 2c 0d 0a 20 20  ng typeName,..  
03f0: 20 20 20 20 20 20 41 73 73 65 6d 62 6c 79 4e 61        AssemblyNa
0400: 6d 65 20 61 73 73 65 6d 62 6c 79 4e 61 6d 65 2c  me assemblyName,
0410: 0d 0a 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74  ..        object
0420: 20 63 6c 69 65 6e 74 44 61 74 61 2c 0d 0a 20 20   clientData,..  
0430: 20 20 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34        bool wow64
0440: 2c 0d 0a 20 20 20 20 20 20 20 20 62 6f 6f 6c 20  ,..        bool 
0450: 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 2c 0d  throwOnMissing,.
0460: 0a 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68  .        bool wh
0470: 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 62  atIf,..        b
0480: 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 0d 0a 20 20  ool verbose,..  
0490: 20 20 20 20 20 20 72 65 66 20 62 6f 6f 6c 20 73        ref bool s
04a0: 61 76 65 64 2c 0d 0a 20 20 20 20 20 20 20 20 72  aved,..        r
04b0: 65 66 20 73 74 72 69 6e 67 20 65 72 72 6f 72 0d  ef string error.
04c0: 0a 20 20 20 20 29 3b 0d 0a 0d 0a 20 20 20 20 2f  .    );....    /
04d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
04e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
04f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0500: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0510: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
0520: 20 20 69 6e 74 65 72 6e 61 6c 20 64 65 6c 65 67    internal deleg
0530: 61 74 65 20 62 6f 6f 6c 20 46 72 61 6d 65 77 6f  ate bool Framewo
0540: 72 6b 52 65 67 69 73 74 72 79 43 61 6c 6c 62 61  rkRegistryCallba
0550: 63 6b 28 0d 0a 20 20 20 20 20 20 20 20 49 6e 73  ck(..        Ins
0560: 74 61 6c 6c 65 72 2e 4d 6f 63 6b 52 65 67 69 73  taller.MockRegis
0570: 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79 2c 0d  tryKey rootKey,.
0580: 0a 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20  .        string 
0590: 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c 0d 0a  frameworkName,..
05a0: 20 20 20 20 20 20 20 20 56 65 72 73 69 6f 6e 20          Version 
05b0: 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e  frameworkVersion
05c0: 2c 0d 0a 20 20 20 20 20 20 20 20 73 74 72 69 6e  ,..        strin
05d0: 67 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 2c 0d  g platformName,.
05e0: 0a 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20  .        object 
05f0: 63 6c 69 65 6e 74 44 61 74 61 2c 0d 0a 20 20 20  clientData,..   
0600: 20 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34 2c       bool wow64,
0610: 0d 0a 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 74  ..        bool t
0620: 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 2c 0d 0a  hrowOnMissing,..
0630: 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61          bool wha
0640: 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 62 6f  tIf,..        bo
0650: 6f 6c 20 76 65 72 62 6f 73 65 2c 0d 0a 20 20 20  ol verbose,..   
0660: 20 20 20 20 20 72 65 66 20 73 74 72 69 6e 67 20       ref string 
0670: 65 72 72 6f 72 0d 0a 20 20 20 20 29 3b 0d 0a 0d  error..    );...
0680: 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  .    ///////////
0690: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
06a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
06b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
06c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
06d0: 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
06e0: 20 64 65 6c 65 67 61 74 65 20 62 6f 6f 6c 20 56   delegate bool V
06f0: 69 73 75 61 6c 53 74 75 64 69 6f 52 65 67 69 73  isualStudioRegis
0700: 74 72 79 43 61 6c 6c 62 61 63 6b 28 0d 0a 20 20  tryCallback(..  
0710: 20 20 20 20 20 20 49 6e 73 74 61 6c 6c 65 72 2e        Installer.
0720: 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20  MockRegistryKey 
0730: 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20 20 20 20  rootKey,..      
0740: 20 20 56 65 72 73 69 6f 6e 20 76 73 56 65 72 73    Version vsVers
0750: 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 49 6e  ion,..        In
0760: 73 74 61 6c 6c 65 72 2e 50 61 63 6b 61 67 65 20  staller.Package 
0770: 70 61 63 6b 61 67 65 2c 0d 0a 20 20 20 20 20 20  package,..      
0780: 20 20 6f 62 6a 65 63 74 20 63 6c 69 65 6e 74 44    object clientD
0790: 61 74 61 2c 0d 0a 20 20 20 20 20 20 20 20 62 6f  ata,..        bo
07a0: 6f 6c 20 77 6f 77 36 34 2c 0d 0a 20 20 20 20 20  ol wow64,..     
07b0: 20 20 20 62 6f 6f 6c 20 74 68 72 6f 77 4f 6e 4d     bool throwOnM
07c0: 69 73 73 69 6e 67 2c 0d 0a 20 20 20 20 20 20 20  issing,..       
07d0: 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20   bool whatIf,.. 
07e0: 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62         bool verb
07f0: 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 72 65  ose,..        re
0800: 66 20 73 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a  f string error..
0810: 20 20 20 20 29 3b 0d 0a 20 20 20 20 23 65 6e 64      );..    #end
0820: 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 2f 2f  region....    //
0830: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0840: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0850: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0860: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0870: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
0880: 20 23 72 65 67 69 6f 6e 20 50 75 62 6c 69 63 20   #region Public 
0890: 45 6e 75 6d 65 72 61 74 69 6f 6e 73 0d 0a 20 20  Enumerations..  
08a0: 20 20 5b 46 6c 61 67 73 28 29 5d 0d 0a 20 20 20    [Flags()]..   
08b0: 20 70 75 62 6c 69 63 20 65 6e 75 6d 20 49 6e 73   public enum Ins
08c0: 74 61 6c 6c 46 6c 61 67 73 0d 0a 20 20 20 20 7b  tallFlags..    {
08d0: 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f  ..        #regio
08e0: 6e 20 4e 6f 72 6d 61 6c 20 46 6c 61 67 73 0d 0a  n Normal Flags..
08f0: 20 20 20 20 20 20 20 20 4e 6f 6e 65 20 3d 20 30          None = 0
0900: 78 30 2c 0d 0a 20 20 20 20 20 20 20 20 47 6c 6f  x0,..        Glo
0910: 62 61 6c 41 73 73 65 6d 62 6c 79 43 61 63 68 65  balAssemblyCache
0920: 20 3d 20 30 78 31 2c 0d 0a 20 20 20 20 20 20 20   = 0x1,..       
0930: 20 41 73 73 65 6d 62 6c 79 46 6f 6c 64 65 72 73   AssemblyFolders
0940: 20 3d 20 30 78 32 2c 0d 0a 20 20 20 20 20 20 20   = 0x2,..       
0950: 20 44 62 50 72 6f 76 69 64 65 72 46 61 63 74 6f   DbProviderFacto
0960: 72 79 20 3d 20 30 78 34 2c 0d 0a 20 20 20 20 20  ry = 0x4,..     
0970: 20 20 20 56 73 50 61 63 6b 61 67 65 20 3d 20 30     VsPackage = 0
0980: 78 38 2c 0d 0a 20 20 20 20 20 20 20 20 56 73 50  x8,..        VsP
0990: 61 63 6b 61 67 65 47 6c 6f 62 61 6c 41 73 73 65  ackageGlobalAsse
09a0: 6d 62 6c 79 43 61 63 68 65 20 3d 20 30 78 31 30  mblyCache = 0x10
09b0: 2c 0d 0a 20 20 20 20 20 20 20 20 56 73 44 61 74  ,..        VsDat
09c0: 61 53 6f 75 72 63 65 20 3d 20 30 78 32 30 2c 0d  aSource = 0x20,.
09d0: 0a 20 20 20 20 20 20 20 20 56 73 44 61 74 61 50  .        VsDataP
09e0: 72 6f 76 69 64 65 72 20 3d 20 30 78 34 30 2c 0d  rovider = 0x40,.
09f0: 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67  .        #endreg
0a00: 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  ion....        /
0a10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0a20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0a30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0a40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0a50: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
0a60: 20 20 23 72 65 67 69 6f 6e 20 43 6f 6d 70 6f 73    #region Compos
0a70: 69 74 65 20 46 6c 61 67 73 0d 0a 20 20 20 20 20  ite Flags..     
0a80: 20 20 20 46 72 61 6d 65 77 6f 72 6b 20 3d 20 47     Framework = G
0a90: 6c 6f 62 61 6c 41 73 73 65 6d 62 6c 79 43 61 63  lobalAssemblyCac
0aa0: 68 65 20 7c 20 41 73 73 65 6d 62 6c 79 46 6f 6c  he | AssemblyFol
0ab0: 64 65 72 73 20 7c 0d 0a 20 20 20 20 20 20 20 20  ders |..        
0ac0: 20 20 20 20 20 20 20 20 20 20 20 20 44 62 50 72              DbPr
0ad0: 6f 76 69 64 65 72 46 61 63 74 6f 72 79 2c 0d 0a  oviderFactory,..
0ae0: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
0af0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0b00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0b10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0b20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0b30: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 56 73 20  /....        Vs 
0b40: 3d 20 56 73 50 61 63 6b 61 67 65 20 7c 20 56 73  = VsPackage | Vs
0b50: 50 61 63 6b 61 67 65 47 6c 6f 62 61 6c 41 73 73  PackageGlobalAss
0b60: 65 6d 62 6c 79 43 61 63 68 65 20 7c 20 56 73 44  emblyCache | VsD
0b70: 61 74 61 53 6f 75 72 63 65 20 7c 0d 0a 20 20 20  ataSource |..   
0b80: 20 20 20 20 20 20 20 20 20 20 56 73 44 61 74 61            VsData
0b90: 50 72 6f 76 69 64 65 72 2c 0d 0a 0d 0a 20 20 20  Provider,....   
0ba0: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
0bb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0bc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0bd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0be0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
0bf0: 20 20 20 20 20 20 20 20 41 6c 6c 20 3d 20 46 72          All = Fr
0c00: 61 6d 65 77 6f 72 6b 20 7c 20 56 73 2c 0d 0a 0d  amework | Vs,...
0c10: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
0c20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0c30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0c40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0c50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0c60: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 41 6c 6c 45  ....        AllE
0c70: 78 63 65 70 74 47 6c 6f 62 61 6c 41 73 73 65 6d  xceptGlobalAssem
0c80: 62 6c 79 43 61 63 68 65 20 3d 20 41 6c 6c 20 26  blyCache = All &
0c90: 20 7e 28 47 6c 6f 62 61 6c 41 73 73 65 6d 62 6c   ~(GlobalAssembl
0ca0: 79 43 61 63 68 65 20 7c 0d 0a 20 20 20 20 20 20  yCache |..      
0cb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0cc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0cd0: 20 56 73 50 61 63 6b 61 67 65 47 6c 6f 62 61 6c   VsPackageGlobal
0ce0: 41 73 73 65 6d 62 6c 79 43 61 63 68 65 29 2c 0d  AssemblyCache),.
0cf0: 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67  .        #endreg
0d00: 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  ion....        /
0d10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0d20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0d30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0d40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0d50: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
0d60: 20 20 44 65 66 61 75 6c 74 20 3d 20 41 6c 6c 0d    Default = All.
0d70: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f  .    }....    //
0d80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0d90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0da0: 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20  /////////....   
0dd0: 20 5b 46 6c 61 67 73 28 29 5d 0d 0a 20 20 20 20   [Flags()]..    
0de0: 70 75 62 6c 69 63 20 65 6e 75 6d 20 54 72 61 63  public enum Trac
0df0: 65 50 72 69 6f 72 69 74 79 0d 0a 20 20 20 20 7b  ePriority..    {
0e00: 0d 0a 20 20 20 20 20 20 20 20 4e 6f 6e 65 20 3d  ..        None =
0e10: 20 30 78 30 2c 0d 0a 20 20 20 20 20 20 20 20 4c   0x0,..        L
0e20: 6f 77 65 73 74 20 3d 20 30 78 31 2c 0d 0a 20 20  owest = 0x1,..  
0e30: 20 20 20 20 20 20 4c 6f 77 65 72 20 3d 20 30 78        Lower = 0x
0e40: 32 2c 0d 0a 20 20 20 20 20 20 20 20 4c 6f 77 20  2,..        Low 
0e50: 3d 20 30 78 34 2c 0d 0a 20 20 20 20 20 20 20 20  = 0x4,..        
0e60: 4d 65 64 69 75 6d 4c 6f 77 20 3d 20 30 78 38 2c  MediumLow = 0x8,
0e70: 0d 0a 20 20 20 20 20 20 20 20 4d 65 64 69 75 6d  ..        Medium
0e80: 20 3d 20 30 78 31 30 2c 0d 0a 20 20 20 20 20 20   = 0x10,..      
0e90: 20 20 4d 65 64 69 75 6d 48 69 67 68 20 3d 20 30    MediumHigh = 0
0ea0: 78 32 30 2c 0d 0a 20 20 20 20 20 20 20 20 48 69  x20,..        Hi
0eb0: 67 68 20 3d 20 30 78 34 30 2c 0d 0a 20 20 20 20  gh = 0x40,..    
0ec0: 20 20 20 20 48 69 67 68 65 72 20 3d 20 30 78 38      Higher = 0x8
0ed0: 30 2c 0d 0a 20 20 20 20 20 20 20 20 48 69 67 68  0,..        High
0ee0: 65 73 74 20 3d 20 30 78 31 30 30 2c 0d 0a 20 20  est = 0x100,..  
0ef0: 20 20 20 20 20 20 44 65 66 61 75 6c 74 20 3d 20        Default = 
0f00: 4d 65 64 69 75 6d 0d 0a 20 20 20 20 7d 0d 0a 20  Medium..    }.. 
0f10: 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
0f20: 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  .    ///////////
0f30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0f40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0f50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0f60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0f70: 0d 0a 0d 0a 20 20 20 20 23 72 65 67 69 6f 6e 20  ....    #region 
0f80: 49 6e 73 74 61 6c 6c 65 72 20 43 6c 61 73 73 0d  Installer Class.
0f90: 0a 23 69 66 20 21 4e 45 54 5f 32 30 0d 0a 20 20  .#if !NET_20..  
0fa0: 20 20 5b 53 65 63 75 72 69 74 79 43 72 69 74 69    [SecurityCriti
0fb0: 63 61 6c 28 29 5d 0d 0a 23 65 6c 73 65 0d 0a 20  cal()]..#else.. 
0fc0: 20 20 20 5b 53 65 63 75 72 69 74 79 50 65 72 6d     [SecurityPerm
0fd0: 69 73 73 69 6f 6e 28 53 65 63 75 72 69 74 79 41  ission(SecurityA
0fe0: 63 74 69 6f 6e 2e 4c 69 6e 6b 44 65 6d 61 6e 64  ction.LinkDemand
0ff0: 2c 20 55 6e 6d 61 6e 61 67 65 64 43 6f 64 65 20  , UnmanagedCode 
1000: 3d 20 74 72 75 65 29 5d 0d 0a 23 65 6e 64 69 66  = true)]..#endif
1010: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 73  ..    internal s
1020: 74 61 74 69 63 20 63 6c 61 73 73 20 49 6e 73 74  tatic class Inst
1030: 61 6c 6c 65 72 0d 0a 20 20 20 20 7b 0d 0a 20 20  aller..    {..  
1040: 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 55 6e        #region Un
1050: 73 61 66 65 20 4e 61 74 69 76 65 20 4d 65 74 68  safe Native Meth
1060: 6f 64 73 20 43 6c 61 73 73 0d 0a 20 20 20 20 20  ods Class..     
1070: 20 20 20 5b 53 75 70 70 72 65 73 73 55 6e 6d 61     [SuppressUnma
1080: 6e 61 67 65 64 43 6f 64 65 53 65 63 75 72 69 74  nagedCodeSecurit
1090: 79 28 29 5d 0d 0a 20 20 20 20 20 20 20 20 70 72  y()]..        pr
10a0: 69 76 61 74 65 20 73 65 61 6c 65 64 20 63 6c 61  ivate sealed cla
10b0: 73 73 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d  ss UnsafeNativeM
10c0: 65 74 68 6f 64 73 0d 0a 20 20 20 20 20 20 20 20  ethods..        
10d0: 7b 0d 0a 23 69 66 20 57 49 4e 44 4f 57 53 0d 0a  {..#if WINDOWS..
10e0: 20 20 20 20 20 20 20 20 20 20 20 20 23 72 65 67              #reg
10f0: 69 6f 6e 20 4e 61 74 69 76 65 20 57 69 6e 33 32  ion Native Win32
1100: 20 43 6f 6e 73 74 61 6e 74 73 0d 0a 20 20 20 20   Constants..    
1110: 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
1120: 63 6f 6e 73 74 20 69 6e 74 20 4d 41 58 5f 50 41  const int MAX_PA
1130: 54 48 20 3d 20 32 36 30 3b 0d 0a 0d 0a 20 20 20  TH = 260;....   
1140: 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
1150: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1160: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1170: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1180: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
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 69 6e 74 20 43 53  ate const int CS
11b0: 49 44 4c 5f 53 59 53 54 45 4d 58 38 36 20 3d 20  IDL_SYSTEMX86 = 
11c0: 30 78 30 30 32 39 3b 0d 0a 0d 0a 20 20 20 20 20  0x0029;....     
11d0: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
11e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1200: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1210: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
1220: 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
1230: 65 20 63 6f 6e 73 74 20 69 6e 74 20 53 48 47 46  e const int SHGF
1240: 50 5f 54 59 50 45 5f 43 55 52 52 45 4e 54 20 3d  P_TYPE_CURRENT =
1250: 20 30 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20   0;....         
1260: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
1270: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1280: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1290: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12a0: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
12b0: 20 20 20 20 20 20 70 72 69 76 61 74 65 20 63 6f        private co
12c0: 6e 73 74 20 69 6e 74 20 53 5f 4f 4b 20 3d 20 30  nst int S_OK = 0
12d0: 3b 20 2f 2a 20 48 52 45 53 55 4c 54 20 2a 2f 0d  ; /* HRESULT */.
12e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e  .            #en
12f0: 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
1300: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
1310: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1320: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1330: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1340: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
1350: 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f            #regio
1360: 6e 20 4e 61 74 69 76 65 20 57 69 6e 64 6f 77 73  n Native Windows
1370: 20 4d 65 74 68 6f 64 73 0d 0a 20 20 20 20 20 20   Methods..      
1380: 20 20 20 20 20 20 5b 44 6c 6c 49 6d 70 6f 72 74        [DllImport
1390: 28 22 73 68 66 6f 6c 64 65 72 2e 64 6c 6c 22 2c  ("shfolder.dll",
13a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
13b0: 20 20 43 61 6c 6c 69 6e 67 43 6f 6e 76 65 6e 74    CallingConvent
13c0: 69 6f 6e 20 3d 20 43 61 6c 6c 69 6e 67 43 6f 6e  ion = CallingCon
13d0: 76 65 6e 74 69 6f 6e 2e 57 69 6e 61 70 69 2c 0d  vention.Winapi,.
13e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
13f0: 20 43 68 61 72 53 65 74 20 3d 20 43 68 61 72 53   CharSet = CharS
1400: 65 74 2e 41 75 74 6f 2c 20 42 65 73 74 46 69 74  et.Auto, BestFit
1410: 4d 61 70 70 69 6e 67 20 3d 20 66 61 6c 73 65 2c  Mapping = false,
1420: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1430: 20 20 54 68 72 6f 77 4f 6e 55 6e 6d 61 70 70 61    ThrowOnUnmappa
1440: 62 6c 65 43 68 61 72 20 3d 20 74 72 75 65 2c 20  bleChar = true, 
1450: 53 65 74 4c 61 73 74 45 72 72 6f 72 20 3d 20 74  SetLastError = t
1460: 72 75 65 29 5d 0d 0a 20 20 20 20 20 20 20 20 20  rue)]..         
1470: 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69     private stati
1480: 63 20 65 78 74 65 72 6e 20 69 6e 74 20 53 48 47  c extern int SHG
1490: 65 74 46 6f 6c 64 65 72 50 61 74 68 28 0d 0a 20  etFolderPath(.. 
14a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 49                 I
14b0: 6e 74 50 74 72 20 68 57 6e 64 4f 77 6e 65 72 2c  ntPtr hWndOwner,
14c0: 20 69 6e 74 20 6e 46 6f 6c 64 65 72 2c 20 49 6e   int nFolder, In
14d0: 74 50 74 72 20 68 54 6f 6b 65 6e 2c 20 75 69 6e  tPtr hToken, uin
14e0: 74 20 66 6c 61 67 73 2c 0d 0a 20 20 20 20 20 20  t flags,..      
14f0: 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72            IntPtr
1500: 20 62 75 66 66 65 72 20 2f 2a 20 3e 3d 20 4d 41   buffer /* >= MA
1510: 58 5f 50 41 54 48 20 2a 2f 29 3b 0d 0a 20 20 20  X_PATH */);..   
1520: 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67           #endreg
1530: 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ion....         
1540: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
1550: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1560: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1570: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1580: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
1590: 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 75        #region Pu
15a0: 62 6c 69 63 20 57 72 61 70 70 65 72 20 4d 65 74  blic Wrapper Met
15b0: 68 6f 64 73 0d 0a 20 20 20 20 20 20 20 20 20 20  hods..          
15c0: 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20    public static 
15d0: 73 74 72 69 6e 67 20 47 65 74 53 79 73 74 65 6d  string GetSystem
15e0: 44 69 72 65 63 74 6f 72 79 28 29 0d 0a 20 20 20  Directory()..   
15f0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
1600: 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 50              IntP
1610: 74 72 20 62 75 66 66 65 72 20 3d 20 49 6e 74 50  tr buffer = IntP
1620: 74 72 2e 5a 65 72 6f 3b 0d 0a 0d 0a 20 20 20 20  tr.Zero;....    
1630: 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79 0d              try.
1640: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1650: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
1660: 20 20 20 20 20 20 20 20 62 75 66 66 65 72 20 3d          buffer =
1670: 20 4d 61 72 73 68 61 6c 2e 41 6c 6c 6f 63 43 6f   Marshal.AllocCo
1680: 54 61 73 6b 4d 65 6d 28 0d 0a 20 20 20 20 20 20  TaskMem(..      
1690: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16a0: 20 20 73 69 7a 65 6f 66 28 63 68 61 72 29 20 2a    sizeof(char) *
16b0: 20 28 4d 41 58 5f 50 41 54 48 20 2b 20 31 29 29   (MAX_PATH + 1))
16c0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
16d0: 20 20 20 20 20 20 20 20 20 69 66 20 28 62 75 66           if (buf
16e0: 66 65 72 20 21 3d 20 49 6e 74 50 74 72 2e 5a 65  fer != IntPtr.Ze
16f0: 72 6f 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ro)..           
1700: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
1710: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1720: 20 20 20 20 69 66 20 28 53 48 47 65 74 46 6f 6c      if (SHGetFol
1730: 64 65 72 50 61 74 68 28 49 6e 74 50 74 72 2e 5a  derPath(IntPtr.Z
1740: 65 72 6f 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ero,..          
1750: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1760: 20 20 20 20 20 20 43 53 49 44 4c 5f 53 59 53 54        CSIDL_SYST
1770: 45 4d 58 38 36 2c 20 49 6e 74 50 74 72 2e 5a 65  EMX86, IntPtr.Ze
1780: 72 6f 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ro,..           
1790: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17a0: 20 20 20 20 20 53 48 47 46 50 5f 54 59 50 45 5f       SHGFP_TYPE_
17b0: 43 55 52 52 45 4e 54 2c 20 62 75 66 66 65 72 29  CURRENT, buffer)
17c0: 20 3d 3d 20 53 5f 4f 4b 29 0d 0a 20 20 20 20 20   == S_OK)..     
17d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17e0: 20 20 20 7b 0d 0a 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 20 20                  
1800: 20 20 72 65 74 75 72 6e 20 4d 61 72 73 68 61 6c    return Marshal
1810: 2e 50 74 72 54 6f 53 74 72 69 6e 67 41 75 74 6f  .PtrToStringAuto
1820: 28 62 75 66 66 65 72 29 3b 0d 0a 20 20 20 20 20  (buffer);..     
1830: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1840: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
1850: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
1860: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
1870: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1880: 63 61 74 63 68 20 28 45 78 63 65 70 74 69 6f 6e  catch (Exception
1890: 20 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20   e)..           
18a0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
18b0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
18c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18d0: 20 20 20 20 2f 2f 20 54 4f 44 4f 3a 20 49 73 20      // TODO: Is 
18e0: 74 68 69 73 20 74 68 65 20 72 69 67 68 74 20 65  this the right e
18f0: 72 72 6f 72 20 68 61 6e 64 6c 69 6e 67 20 73 6f  rror handling so
1900: 6c 75 74 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20  lution..        
1910: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
1920: 20 20 20 20 20 74 6f 20 75 73 65 20 61 74 20 74       to use at t
1930: 68 69 73 20 70 6f 69 6e 74 3f 0d 0a 20 20 20 20  his point?..    
1940: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1950: 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
1960: 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73          TraceOps
1970: 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 54  .DebugAndTrace(T
1980: 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4d 65 64  racePriority.Med
1990: 69 75 6d 48 69 67 68 2c 0d 0a 20 20 20 20 20 20  iumHigh,..      
19a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19b0: 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c    debugCallback,
19c0: 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20   traceCallback, 
19d0: 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
19e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19f0: 20 20 20 20 20 20 20 20 22 43 6f 75 6c 64 20 6e          "Could n
1a00: 6f 74 20 67 65 74 20 73 79 73 74 65 6d 20 64 69  ot get system di
1a10: 72 65 63 74 6f 72 79 3a 20 7b 30 7d 22 2c 20 65  rectory: {0}", e
1a20: 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
1a30: 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
1a40: 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
1a50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a60: 20 20 20 74 68 72 6f 77 3b 0d 0a 20 20 20 20 20     throw;..     
1a70: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
1a80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 69                fi
1a90: 6e 61 6c 6c 79 0d 0a 20 20 20 20 20 20 20 20 20  nally..         
1aa0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
1ab0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
1ac0: 20 28 62 75 66 66 65 72 20 21 3d 20 49 6e 74 50   (buffer != IntP
1ad0: 74 72 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20  tr.Zero)..      
1ae0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
1af0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1b00: 20 20 20 20 20 20 20 20 20 4d 61 72 73 68 61 6c           Marshal
1b10: 2e 46 72 65 65 43 6f 54 61 73 6b 4d 65 6d 28 62  .FreeCoTaskMem(b
1b20: 75 66 66 65 72 29 3b 0d 0a 20 20 20 20 20 20 20  uffer);..       
1b30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b40: 20 62 75 66 66 65 72 20 3d 20 49 6e 74 50 74 72   buffer = IntPtr
1b50: 2e 5a 65 72 6f 3b 0d 0a 20 20 20 20 20 20 20 20  .Zero;..        
1b60: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
1b70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
1b80: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1b90: 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b      return null;
1ba0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
1bb0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e  .            #en
1bc0: 64 72 65 67 69 6f 6e 0d 0a 23 65 6e 64 69 66 0d  dregion..#endif.
1bd0: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
1be0: 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
1bf0: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
1c00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c40: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65  /....        #re
1c50: 67 69 6f 6e 20 50 72 69 76 61 74 65 20 48 65 6c  gion Private Hel
1c60: 70 65 72 20 43 6c 61 73 73 65 73 0d 0a 20 20 20  per Classes..   
1c70: 20 20 20 20 20 23 72 65 67 69 6f 6e 20 41 6e 79       #region Any
1c80: 50 61 69 72 20 43 6c 61 73 73 0d 0a 20 20 20 20  Pair Class..    
1c90: 20 20 20 20 70 72 69 76 61 74 65 20 73 65 61 6c      private seal
1ca0: 65 64 20 63 6c 61 73 73 20 41 6e 79 50 61 69 72  ed class AnyPair
1cb0: 3c 54 31 2c 20 54 32 3e 0d 0a 20 20 20 20 20 20  <T1, T2>..      
1cc0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
1cd0: 20 23 72 65 67 69 6f 6e 20 50 75 62 6c 69 63 20   #region Public 
1ce0: 43 6f 6e 73 74 72 75 63 74 6f 72 73 0d 0a 20 20  Constructors..  
1cf0: 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
1d00: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 57 41 52            // WAR
1d10: 4e 49 4e 47 3a 20 54 68 69 73 20 63 6f 6e 73 74  NING: This const
1d20: 72 75 63 74 6f 72 20 70 72 6f 64 75 63 65 73 20  ructor produces 
1d30: 61 6e 20 69 6d 6d 75 74 61 62 6c 65 20 22 65 6d  an immutable "em
1d40: 70 74 79 22 20 70 61 69 72 0d 0a 20 20 20 20 20  pty" pair..     
1d50: 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
1d60: 20 20 20 6f 62 6a 65 63 74 2e 0d 0a 20 20 20 20     object...    
1d70: 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
1d80: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 41          public A
1d90: 6e 79 50 61 69 72 28 29 0d 0a 20 20 20 20 20 20  nyPair()..      
1da0: 20 20 20 20 20 20 20 20 20 20 3a 20 62 61 73 65            : base
1db0: 28 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ()..            
1dc0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
1dd0: 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67     // do nothing
1de0: 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ...            }
1df0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1e00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e40: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
1e50: 20 20 20 70 75 62 6c 69 63 20 41 6e 79 50 61 69     public AnyPai
1e60: 72 28 54 31 20 78 29 0d 0a 20 20 20 20 20 20 20  r(T1 x)..       
1e70: 20 20 20 20 20 20 20 20 20 3a 20 74 68 69 73 28           : this(
1e80: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
1e90: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1ea0: 20 20 74 68 69 73 2e 78 20 3d 20 78 3b 0d 0a 20    this.x = x;.. 
1eb0: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
1ec0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
1ed0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ee0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ef0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
1f10: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
1f20: 75 62 6c 69 63 20 41 6e 79 50 61 69 72 28 54 31  ublic AnyPair(T1
1f30: 20 78 2c 20 54 32 20 79 29 0d 0a 20 20 20 20 20   x, T2 y)..     
1f40: 20 20 20 20 20 20 20 20 20 20 20 3a 20 74 68 69             : thi
1f50: 73 28 78 29 0d 0a 20 20 20 20 20 20 20 20 20 20  s(x)..          
1f60: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
1f70: 20 20 20 20 20 74 68 69 73 2e 79 20 3d 20 79 3b       this.y = y;
1f80: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
1f90: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e  .            #en
1fa0: 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
1fb0: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
1fc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
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 0d 0a 0d 0a 20 20  //////////....  
2000: 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f            #regio
2010: 6e 20 50 75 62 6c 69 63 20 50 72 6f 70 65 72 74  n Public Propert
2020: 69 65 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ies..           
2030: 20 70 72 69 76 61 74 65 20 54 31 20 78 3b 0d 0a   private T1 x;..
2040: 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
2050: 69 63 20 54 31 20 58 0d 0a 20 20 20 20 20 20 20  ic T1 X..       
2060: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
2070: 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65          get { re
2080: 74 75 72 6e 20 78 3b 20 7d 0d 0a 20 20 20 20 20  turn x; }..     
2090: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
20a0: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
20b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
20f0: 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
2100: 74 65 20 54 32 20 79 3b 0d 0a 20 20 20 20 20 20  te T2 y;..      
2110: 20 20 20 20 20 20 70 75 62 6c 69 63 20 54 32 20        public T2 
2120: 59 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  Y..            {
2130: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2140: 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 79    get { return y
2150: 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
2160: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
2170: 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 20 20 20 20  #endregion..    
2180: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23      }..        #
2190: 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20  endregion....   
21a0: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
21b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a  ////////////....
21f0: 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20          #region 
2200: 54 72 61 63 65 4f 70 73 20 43 6c 61 73 73 0d 0a  TraceOps Class..
2210: 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
2220: 73 74 61 74 69 63 20 63 6c 61 73 73 20 54 72 61  static class Tra
2230: 63 65 4f 70 73 0d 0a 20 20 20 20 20 20 20 20 7b  ceOps..        {
2240: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 72  ..            #r
2250: 65 67 69 6f 6e 20 50 72 69 76 61 74 65 20 43 6f  egion Private Co
2260: 6e 73 74 61 6e 74 73 0d 0a 20 20 20 20 20 20 20  nstants..       
2270: 20 20 20 20 20 70 72 69 76 61 74 65 20 63 6f 6e       private con
2280: 73 74 20 73 74 72 69 6e 67 20 44 65 66 61 75 6c  st string Defaul
2290: 74 44 65 62 75 67 46 6f 72 6d 61 74 20 3d 20 22  tDebugFormat = "
22a0: 23 7b 30 7d 20 40 20 7b 31 7d 3a 20 7b 32 7d 22  #{0} @ {1}: {2}"
22b0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ;..            p
22c0: 72 69 76 61 74 65 20 63 6f 6e 73 74 20 73 74 72  rivate const str
22d0: 69 6e 67 20 44 65 66 61 75 6c 74 54 72 61 63 65  ing DefaultTrace
22e0: 46 6f 72 6d 61 74 20 3d 20 22 23 7b 30 7d 20 40  Format = "#{0} @
22f0: 20 7b 31 7d 3a 20 7b 32 7d 22 3b 0d 0a 0d 0a 20   {1}: {2}";.... 
2300: 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
2310: 74 65 20 63 6f 6e 73 74 20 73 74 72 69 6e 67 20  te const string 
2320: 49 73 6f 38 36 30 31 44 61 74 65 54 69 6d 65 4f  Iso8601DateTimeO
2330: 75 74 70 75 74 46 6f 72 6d 61 74 20 3d 0d 0a 20  utputFormat =.. 
2340: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
2350: 79 79 79 79 2e 4d 4d 2e 64 64 54 48 48 3a 6d 6d  yyyy.MM.ddTHH:mm
2360: 3a 73 73 2e 66 66 66 66 66 66 66 22 3b 0d 0a 20  :ss.fffffff";.. 
2370: 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 72             #endr
2380: 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20  egion....       
2390: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
23a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23d0: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
23e0: 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20          #region 
23f0: 50 72 69 76 61 74 65 20 53 74 61 74 69 63 20 44  Private Static D
2400: 61 74 61 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ata..           
2410: 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
2420: 6f 62 6a 65 63 74 20 73 79 6e 63 52 6f 6f 74 20  object syncRoot 
2430: 3d 20 6e 65 77 20 6f 62 6a 65 63 74 28 29 3b 0d  = new object();.
2440: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69  .            pri
2450: 76 61 74 65 20 73 74 61 74 69 63 20 6c 6f 6e 67  vate static long
2460: 20 6e 65 78 74 44 65 62 75 67 49 64 3b 0d 0a 20   nextDebugId;.. 
2470: 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
2480: 74 65 20 73 74 61 74 69 63 20 6c 6f 6e 67 20 6e  te static long n
2490: 65 78 74 54 72 61 63 65 49 64 3b 0d 0a 20 20 20  extTraceId;..   
24a0: 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65           private
24b0: 20 73 74 61 74 69 63 20 49 4c 69 73 74 3c 54 72   static IList<Tr
24c0: 61 63 65 4c 69 73 74 65 6e 65 72 3e 20 64 65 62  aceListener> deb
24d0: 75 67 4c 69 73 74 65 6e 65 72 73 3b 0d 0a 20 20  ugListeners;..  
24e0: 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
24f0: 65 20 73 74 61 74 69 63 20 54 72 61 63 65 50 72  e static TracePr
2500: 69 6f 72 69 74 79 20 64 65 62 75 67 50 72 69 6f  iority debugPrio
2510: 72 69 74 79 20 3d 20 54 72 61 63 65 50 72 69 6f  rity = TracePrio
2520: 72 69 74 79 2e 44 65 66 61 75 6c 74 3b 0d 0a 20  rity.Default;.. 
2530: 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
2540: 74 65 20 73 74 61 74 69 63 20 54 72 61 63 65 50  te static TraceP
2550: 72 69 6f 72 69 74 79 20 74 72 61 63 65 50 72 69  riority tracePri
2560: 6f 72 69 74 79 20 3d 20 54 72 61 63 65 50 72 69  ority = TracePri
2570: 6f 72 69 74 79 2e 44 65 66 61 75 6c 74 3b 0d 0a  ority.Default;..
2580: 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
2590: 61 74 65 20 73 74 61 74 69 63 20 73 74 72 69 6e  ate static strin
25a0: 67 20 64 65 62 75 67 46 6f 72 6d 61 74 20 3d 20  g debugFormat = 
25b0: 44 65 66 61 75 6c 74 44 65 62 75 67 46 6f 72 6d  DefaultDebugForm
25c0: 61 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at;..           
25d0: 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
25e0: 73 74 72 69 6e 67 20 74 72 61 63 65 46 6f 72 6d  string traceForm
25f0: 61 74 20 3d 20 44 65 66 61 75 6c 74 54 72 61 63  at = DefaultTrac
2600: 65 46 6f 72 6d 61 74 3b 0d 0a 20 20 20 20 20 20  eFormat;..      
2610: 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
2620: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2630: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2640: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2650: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2660: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2670: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
2680: 20 20 20 23 72 65 67 69 6f 6e 20 50 75 62 6c 69     #region Publi
2690: 63 20 53 74 61 74 69 63 20 50 72 6f 70 65 72 74  c Static Propert
26a0: 69 65 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ies..           
26b0: 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 54   public static T
26c0: 72 61 63 65 50 72 69 6f 72 69 74 79 20 44 65 62  racePriority Deb
26d0: 75 67 50 72 69 6f 72 69 74 79 0d 0a 20 20 20 20  ugPriority..    
26e0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
26f0: 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b             get {
2700: 20 6c 6f 63 6b 20 28 73 79 6e 63 52 6f 6f 74 29   lock (syncRoot)
2710: 20 7b 20 72 65 74 75 72 6e 20 64 65 62 75 67 50   { return debugP
2720: 72 69 6f 72 69 74 79 3b 20 7d 20 7d 0d 0a 20 20  riority; } }..  
2730: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65                se
2740: 74 20 7b 20 6c 6f 63 6b 20 28 73 79 6e 63 52 6f  t { lock (syncRo
2750: 6f 74 29 20 7b 20 64 65 62 75 67 50 72 69 6f 72  ot) { debugPrior
2760: 69 74 79 20 3d 20 76 61 6c 75 65 3b 20 7d 20 7d  ity = value; } }
2770: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
2780: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
2790: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27d0: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
27e0: 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20    public static 
27f0: 54 72 61 63 65 50 72 69 6f 72 69 74 79 20 54 72  TracePriority Tr
2800: 61 63 65 50 72 69 6f 72 69 74 79 0d 0a 20 20 20  acePriority..   
2810: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
2820: 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20              get 
2830: 7b 20 6c 6f 63 6b 20 28 73 79 6e 63 52 6f 6f 74  { lock (syncRoot
2840: 29 20 7b 20 72 65 74 75 72 6e 20 74 72 61 63 65  ) { return trace
2850: 50 72 69 6f 72 69 74 79 3b 20 7d 20 7d 0d 0a 20  Priority; } }.. 
2860: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
2870: 65 74 20 7b 20 6c 6f 63 6b 20 28 73 79 6e 63 52  et { lock (syncR
2880: 6f 6f 74 29 20 7b 20 74 72 61 63 65 50 72 69 6f  oot) { tracePrio
2890: 72 69 74 79 20 3d 20 76 61 6c 75 65 3b 20 7d 20  rity = value; } 
28a0: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
28b0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
28c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2900: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
2910: 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63     public static
2920: 20 73 74 72 69 6e 67 20 44 65 62 75 67 46 6f 72   string DebugFor
2930: 6d 61 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20  mat..           
2940: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
2950: 20 20 20 20 67 65 74 20 7b 20 6c 6f 63 6b 20 28      get { lock (
2960: 73 79 6e 63 52 6f 6f 74 29 20 7b 20 72 65 74 75  syncRoot) { retu
2970: 72 6e 20 64 65 62 75 67 46 6f 72 6d 61 74 3b 20  rn debugFormat; 
2980: 7d 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  } }..           
2990: 20 20 20 20 20 73 65 74 20 7b 20 6c 6f 63 6b 20       set { lock 
29a0: 28 73 79 6e 63 52 6f 6f 74 29 20 7b 20 64 65 62  (syncRoot) { deb
29b0: 75 67 46 6f 72 6d 61 74 20 3d 20 76 61 6c 75 65  ugFormat = value
29c0: 3b 20 7d 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  ; } }..         
29d0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
29e0: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
29f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a20: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
2a30: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74         public st
2a40: 61 74 69 63 20 73 74 72 69 6e 67 20 54 72 61 63  atic string Trac
2a50: 65 46 6f 72 6d 61 74 0d 0a 20 20 20 20 20 20 20  eFormat..       
2a60: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
2a70: 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 6c 6f          get { lo
2a80: 63 6b 20 28 73 79 6e 63 52 6f 6f 74 29 20 7b 20  ck (syncRoot) { 
2a90: 72 65 74 75 72 6e 20 74 72 61 63 65 46 6f 72 6d  return traceForm
2aa0: 61 74 3b 20 7d 20 7d 0d 0a 20 20 20 20 20 20 20  at; } }..       
2ab0: 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 6c           set { l
2ac0: 6f 63 6b 20 28 73 79 6e 63 52 6f 6f 74 29 20 7b  ock (syncRoot) {
2ad0: 20 74 72 61 63 65 46 6f 72 6d 61 74 20 3d 20 76   traceFormat = v
2ae0: 61 6c 75 65 3b 20 7d 20 7d 0d 0a 20 20 20 20 20  alue; } }..     
2af0: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
2b00: 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
2b10: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2b20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b60: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
2b70: 20 20 20 23 72 65 67 69 6f 6e 20 49 6e 74 65 72     #region Inter
2b80: 61 63 74 69 76 65 20 53 75 70 70 6f 72 74 20 4d  active Support M
2b90: 65 74 68 6f 64 73 0d 0a 20 20 20 20 20 20 20 20  ethods..        
2ba0: 20 20 20 20 5b 4d 65 74 68 6f 64 49 6d 70 6c 28      [MethodImpl(
2bb0: 4d 65 74 68 6f 64 49 6d 70 6c 4f 70 74 69 6f 6e  MethodImplOption
2bc0: 73 2e 4e 6f 49 6e 6c 69 6e 69 6e 67 29 5d 0d 0a  s.NoInlining)]..
2bd0: 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
2be0: 69 63 20 73 74 61 74 69 63 20 44 69 61 6c 6f 67  ic static Dialog
2bf0: 52 65 73 75 6c 74 20 53 68 6f 77 4d 65 73 73 61  Result ShowMessa
2c00: 67 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ge(..           
2c10: 20 20 20 20 20 54 72 61 63 65 50 72 69 6f 72 69       TracePriori
2c20: 74 79 20 74 72 61 63 65 50 72 69 6f 72 69 74 79  ty tracePriority
2c30: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
2c40: 20 20 20 54 72 61 63 65 43 61 6c 6c 62 61 63 6b     TraceCallback
2c50: 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d   debugCallback,.
2c60: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2c70: 20 54 72 61 63 65 43 61 6c 6c 62 61 63 6b 20 74   TraceCallback t
2c80: 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20  raceCallback,.. 
2c90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 41                 A
2ca0: 73 73 65 6d 62 6c 79 20 61 73 73 65 6d 62 6c 79  ssembly assembly
2cb0: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
2cc0: 20 20 20 73 74 72 69 6e 67 20 6d 65 73 73 61 67     string messag
2cd0: 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
2ce0: 20 20 20 20 73 74 72 69 6e 67 20 63 61 74 65 67      string categ
2cf0: 6f 72 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ory,..          
2d00: 20 20 20 20 20 20 4d 65 73 73 61 67 65 42 6f 78        MessageBox
2d10: 42 75 74 74 6f 6e 73 20 62 75 74 74 6f 6e 73 2c  Buttons buttons,
2d20: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2d30: 20 20 4d 65 73 73 61 67 65 42 6f 78 49 63 6f 6e    MessageBoxIcon
2d40: 20 69 63 6f 6e 0d 0a 20 20 20 20 20 20 20 20 20   icon..         
2d50: 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
2d60: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
2d70: 20 20 20 20 20 20 20 20 20 44 69 61 6c 6f 67 52           DialogR
2d80: 65 73 75 6c 74 20 72 65 73 75 6c 74 20 3d 20 44  esult result = D
2d90: 69 61 6c 6f 67 52 65 73 75 6c 74 2e 4f 4b 3b 0d  ialogResult.OK;.
2da0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
2db0: 20 20 20 44 65 62 75 67 41 6e 64 54 72 61 63 65     DebugAndTrace
2dc0: 28 74 72 61 63 65 50 72 69 6f 72 69 74 79 2c 0d  (tracePriority,.
2dd0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2de0: 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61       debugCallba
2df0: 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63  ck, traceCallbac
2e00: 6b 2c 20 6d 65 73 73 61 67 65 2c 20 63 61 74 65  k, message, cate
2e10: 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
2e20: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 53 79            if (Sy
2e30: 73 74 65 6d 49 6e 66 6f 72 6d 61 74 69 6f 6e 2e  stemInformation.
2e40: 55 73 65 72 49 6e 74 65 72 61 63 74 69 76 65 29  UserInteractive)
2e50: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2e60: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
2e70: 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
2e80: 74 69 74 6c 65 20 3d 20 47 65 74 41 73 73 65 6d  title = GetAssem
2e90: 62 6c 79 54 69 74 6c 65 28 61 73 73 65 6d 62 6c  blyTitle(assembl
2ea0: 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
2eb0: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 74             if (t
2ec0: 69 74 6c 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  itle == null).. 
2ed0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ee0: 20 20 20 20 20 20 20 74 69 74 6c 65 20 3d 20 41         title = A
2ef0: 70 70 6c 69 63 61 74 69 6f 6e 2e 50 72 6f 64 75  pplication.Produ
2f00: 63 74 4e 61 6d 65 3b 0d 0a 0d 0a 20 20 20 20 20  ctName;....     
2f10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
2f20: 65 73 75 6c 74 20 3d 20 4d 65 73 73 61 67 65 42  esult = MessageB
2f30: 6f 78 2e 53 68 6f 77 28 6d 65 73 73 61 67 65 2c  ox.Show(message,
2f40: 20 74 69 74 6c 65 2c 20 62 75 74 74 6f 6e 73 2c   title, buttons,
2f50: 20 69 63 6f 6e 29 3b 0d 0a 0d 0a 20 20 20 20 20   icon);....     
2f60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 44                 D
2f70: 65 62 75 67 41 6e 64 54 72 61 63 65 28 74 72 61  ebugAndTrace(tra
2f80: 63 65 50 72 69 6f 72 69 74 79 2c 0d 0a 20 20 20  cePriority,..   
2f90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fa0: 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61       debugCallba
2fb0: 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63  ck, traceCallbac
2fc0: 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  k, String.Format
2fd0: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
2fe0: 20 20 20 20 20 20 20 20 20 20 20 22 55 73 65 72             "User
2ff0: 20 63 68 6f 69 63 65 20 6f 66 20 7b 30 7d 2e 22   choice of {0}."
3000: 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 72 65 73  , ForDisplay(res
3010: 75 6c 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20  ult)),..        
3020: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3030: 63 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  category);....  
3040: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3050: 20 20 72 65 74 75 72 6e 20 72 65 73 75 6c 74 3b    return result;
3060: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
3070: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
3080: 20 20 20 20 20 20 20 44 65 62 75 67 41 6e 64 54         DebugAndT
3090: 72 61 63 65 28 74 72 61 63 65 50 72 69 6f 72 69  race(tracePriori
30a0: 74 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ty,..           
30b0: 20 20 20 20 20 20 20 20 20 64 65 62 75 67 43 61           debugCa
30c0: 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c  llback, traceCal
30d0: 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f  lback, String.Fo
30e0: 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
30f0: 20 20 20 20 20 20 20 20 20 20 20 22 44 65 66 61             "Defa
3100: 75 6c 74 20 63 68 6f 69 63 65 20 6f 66 20 7b 30  ult choice of {0
3110: 7d 2e 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28  }.", ForDisplay(
3120: 72 65 73 75 6c 74 29 29 2c 0d 0a 20 20 20 20 20  result)),..     
3130: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
3140: 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20  ategory);....   
3150: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
3160: 75 72 6e 20 72 65 73 75 6c 74 3b 0d 0a 20 20 20  urn result;..   
3170: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
3180: 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
3190: 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  on....          
31a0: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
31b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31e0: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
31f0: 20 20 20 20 20 23 72 65 67 69 6f 6e 20 54 72 61       #region Tra
3200: 63 69 6e 67 20 53 75 70 70 6f 72 74 20 4d 65 74  cing Support Met
3210: 68 6f 64 73 0d 0a 20 20 20 20 20 20 20 20 20 20  hods..          
3220: 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20    public static 
3230: 76 6f 69 64 20 53 65 74 75 70 44 65 62 75 67 4c  void SetupDebugL
3240: 69 73 74 65 6e 65 72 73 28 29 0d 0a 20 20 20 20  isteners()..    
3250: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
3260: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 64             if (d
3270: 65 62 75 67 4c 69 73 74 65 6e 65 72 73 20 3d 3d  ebugListeners ==
3280: 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
3290: 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62 75              debu
32a0: 67 4c 69 73 74 65 6e 65 72 73 20 3d 20 6e 65 77  gListeners = new
32b0: 20 4c 69 73 74 3c 54 72 61 63 65 4c 69 73 74 65   List<TraceListe
32c0: 6e 65 72 3e 28 29 3b 0d 0a 0d 0a 20 20 20 20 20  ner>();....     
32d0: 20 20 20 20 20 20 20 20 20 20 20 64 65 62 75 67             debug
32e0: 4c 69 73 74 65 6e 65 72 73 2e 41 64 64 28 6e 65  Listeners.Add(ne
32f0: 77 20 43 6f 6e 73 6f 6c 65 54 72 61 63 65 4c 69  w ConsoleTraceLi
3300: 73 74 65 6e 65 72 28 29 29 3b 0d 0a 20 20 20 20  stener());..    
3310: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
3320: 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
3330: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3340: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3350: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3360: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
3370: 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
3380: 69 63 20 73 74 61 74 69 63 20 6c 6f 6e 67 20 4e  ic static long N
3390: 65 78 74 44 65 62 75 67 49 64 28 29 0d 0a 20 20  extDebugId()..  
33a0: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
33b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
33c0: 75 72 6e 20 49 6e 74 65 72 6c 6f 63 6b 65 64 2e  urn Interlocked.
33d0: 49 6e 63 72 65 6d 65 6e 74 28 72 65 66 20 6e 65  Increment(ref ne
33e0: 78 74 44 65 62 75 67 49 64 29 3b 0d 0a 20 20 20  xtDebugId);..   
33f0: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
3400: 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
3410: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3420: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3430: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3440: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
3450: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
3460: 6c 69 63 20 73 74 61 74 69 63 20 6c 6f 6e 67 20  lic static long 
3470: 4e 65 78 74 54 72 61 63 65 49 64 28 29 0d 0a 20  NextTraceId().. 
3480: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
3490: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
34a0: 74 75 72 6e 20 49 6e 74 65 72 6c 6f 63 6b 65 64  turn Interlocked
34b0: 2e 49 6e 63 72 65 6d 65 6e 74 28 72 65 66 20 6e  .Increment(ref n
34c0: 65 78 74 54 72 61 63 65 49 64 29 3b 0d 0a 20 20  extTraceId);..  
34d0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
34e0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
34f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3500: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3510: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3520: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
3530: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
3540: 62 6c 69 63 20 73 74 61 74 69 63 20 73 74 72 69  blic static stri
3550: 6e 67 20 54 69 6d 65 53 74 61 6d 70 28 44 61 74  ng TimeStamp(Dat
3560: 65 54 69 6d 65 20 64 61 74 65 54 69 6d 65 29 0d  eTime dateTime).
3570: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
3580: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3590: 72 65 74 75 72 6e 20 64 61 74 65 54 69 6d 65 2e  return dateTime.
35a0: 54 6f 53 74 72 69 6e 67 28 49 73 6f 38 36 30 31  ToString(Iso8601
35b0: 44 61 74 65 54 69 6d 65 4f 75 74 70 75 74 46 6f  DateTimeOutputFo
35c0: 72 6d 61 74 29 3b 0d 0a 20 20 20 20 20 20 20 20  rmat);..        
35d0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
35e0: 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f  ////////////////
3620: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
3630: 20 20 20 20 20 20 20 20 5b 4d 65 74 68 6f 64 49          [MethodI
3640: 6d 70 6c 28 4d 65 74 68 6f 64 49 6d 70 6c 4f 70  mpl(MethodImplOp
3650: 74 69 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e 69 6e 67  tions.NoInlining
3660: 29 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  )]..            
3670: 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 73  private static s
3680: 74 72 69 6e 67 20 47 65 74 4d 65 74 68 6f 64 4e  tring GetMethodN
3690: 61 6d 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ame(..          
36a0: 20 20 20 20 20 20 53 74 61 63 6b 54 72 61 63 65        StackTrace
36b0: 20 73 74 61 63 6b 54 72 61 63 65 2c 0d 0a 20 20   stackTrace,..  
36c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e                in
36d0: 74 20 6c 65 76 65 6c 0d 0a 20 20 20 20 20 20 20  t level..       
36e0: 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
36f0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
3700: 20 20 20 20 20 20 20 20 20 20 20 74 72 79 0d 0a             try..
3710: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3720: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
3730: 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
3740: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
3750: 2f 20 4e 4f 54 45 3a 20 49 66 20 61 20 76 61 6c  / NOTE: If a val
3760: 69 64 20 73 74 61 63 6b 20 74 72 61 63 65 20 77  id stack trace w
3770: 61 73 20 6e 6f 74 20 73 75 70 70 6c 69 65 64 20  as not supplied 
3780: 62 79 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20  by the..        
3790: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
37a0: 20 20 20 20 20 63 61 6c 6c 65 72 2c 20 63 72 65       caller, cre
37b0: 61 74 65 20 6f 6e 65 20 6e 6f 77 20 62 61 73 65  ate one now base
37c0: 64 20 6f 6e 20 74 68 65 20 63 75 72 72 65 6e 74  d on the current
37d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
37e0: 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 65        //       e
37f0: 78 65 63 75 74 69 6f 6e 20 73 74 61 63 6b 2e 0d  xecution stack..
3800: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
3810: 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
3820: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
3830: 28 73 74 61 63 6b 54 72 61 63 65 20 3d 3d 20 6e  (stackTrace == n
3840: 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
3850: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
3860: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3870: 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
3880: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3890: 20 2f 2f 20 4e 4f 54 45 3a 20 47 72 61 62 20 74   // NOTE: Grab t
38a0: 68 65 20 63 75 72 72 65 6e 74 20 65 78 65 63 75  he current execu
38b0: 74 69 6f 6e 20 73 74 61 63 6b 2e 0d 0a 20 20 20  tion stack...   
38c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38d0: 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
38e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38f0: 20 73 74 61 63 6b 54 72 61 63 65 20 3d 20 6e 65   stackTrace = ne
3900: 77 20 53 74 61 63 6b 54 72 61 63 65 28 29 3b 0d  w StackTrace();.
3910: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
3920: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
3930: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3940: 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20         // NOTE: 
3950: 41 6c 77 61 79 73 20 73 6b 69 70 20 74 68 69 73  Always skip this
3960: 20 63 61 6c 6c 20 66 72 61 6d 65 20 77 68 65 6e   call frame when
3970: 20 77 65 20 63 61 70 74 75 72 65 0d 0a 20 20 20   we capture..   
3980: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3990: 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 74 68       //       th
39a0: 65 20 73 74 61 63 6b 20 74 72 61 63 65 2e 0d 0a  e stack trace...
39b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
39c0: 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
39d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
39e0: 20 20 20 20 6c 65 76 65 6c 2b 2b 3b 0d 0a 20 20      level++;..  
39f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3a00: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
3a10: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
3a20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3a30: 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 47 65 74 20     // NOTE: Get 
3a40: 74 68 65 20 73 70 65 63 69 66 69 65 64 20 73 74  the specified st
3a50: 61 63 6b 20 66 72 61 6d 65 20 28 61 6c 77 61 79  ack frame (alway
3a60: 73 20 61 64 64 20 6f 6e 65 20 74 6f 0d 0a 20 20  s add one to..  
3a70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3a80: 20 20 2f 2f 20 20 20 20 20 20 20 73 6b 69 70 20    //       skip 
3a90: 74 68 69 73 20 6d 65 74 68 6f 64 29 2e 0d 0a 20  this method)... 
3aa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3ab0: 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
3ac0: 20 20 20 20 20 20 20 20 20 20 20 53 74 61 63 6b             Stack
3ad0: 46 72 61 6d 65 20 73 74 61 63 6b 46 72 61 6d 65  Frame stackFrame
3ae0: 20 3d 20 73 74 61 63 6b 54 72 61 63 65 2e 47 65   = stackTrace.Ge
3af0: 74 46 72 61 6d 65 28 6c 65 76 65 6c 29 3b 0d 0a  tFrame(level);..
3b00: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
3b10: 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
3b20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
3b30: 20 4e 4f 54 45 3a 20 47 65 74 20 74 68 65 20 6d   NOTE: Get the m
3b40: 65 74 68 6f 64 20 66 6f 72 20 74 68 65 20 73 74  ethod for the st
3b50: 61 63 6b 20 66 72 61 6d 65 2e 0d 0a 20 20 20 20  ack frame...    
3b60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3b70: 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
3b80: 20 20 20 20 20 20 20 20 4d 65 74 68 6f 64 42 61          MethodBa
3b90: 73 65 20 6d 65 74 68 6f 64 42 61 73 65 20 3d 20  se methodBase = 
3ba0: 73 74 61 63 6b 46 72 61 6d 65 2e 47 65 74 4d 65  stackFrame.GetMe
3bb0: 74 68 6f 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20  thod();....     
3bc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
3bd0: 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
3be0: 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20         // NOTE: 
3bf0: 47 65 74 20 74 68 65 20 74 79 70 65 20 66 6f 72  Get the type for
3c00: 20 74 68 65 20 6d 65 74 68 6f 64 2e 0d 0a 20 20   the method...  
3c10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3c20: 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
3c30: 20 20 20 20 20 20 20 20 20 20 54 79 70 65 20 74            Type t
3c40: 79 70 65 20 3d 20 6d 65 74 68 6f 64 42 61 73 65  ype = methodBase
3c50: 2e 44 65 63 6c 61 72 69 6e 67 54 79 70 65 3b 0d  .DeclaringType;.
3c60: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
3c70: 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
3c80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
3c90: 2f 20 4e 4f 54 45 3a 20 47 65 74 20 74 68 65 20  / NOTE: Get the 
3ca0: 6e 61 6d 65 20 6f 66 20 74 68 65 20 6d 65 74 68  name of the meth
3cb0: 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  od...           
3cc0: 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
3cd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3ce0: 20 73 74 72 69 6e 67 20 6e 61 6d 65 20 3d 20 6d   string name = m
3cf0: 65 74 68 6f 64 42 61 73 65 2e 4e 61 6d 65 3b 0d  ethodBase.Name;.
3d00: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
3d10: 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
3d20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
3d30: 2f 20 4e 4f 54 45 3a 20 52 65 74 75 72 6e 20 74  / NOTE: Return t
3d40: 68 65 20 70 72 6f 70 65 72 6c 79 20 66 6f 72 6d  he properly form
3d50: 61 74 74 65 64 20 72 65 73 75 6c 74 2e 0d 0a 20  atted result... 
3d60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3d70: 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
3d80: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
3d90: 6e 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  n String.Format(
3da0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
3db0: 20 20 20 20 20 20 20 20 20 20 22 7b 30 7d 7b 31            "{0}{1
3dc0: 7d 7b 32 7d 22 2c 20 74 79 70 65 2e 4e 61 6d 65  }{2}", type.Name
3dd0: 2c 20 54 79 70 65 2e 44 65 6c 69 6d 69 74 65 72  , Type.Delimiter
3de0: 2c 20 6e 61 6d 65 29 3b 0d 0a 20 20 20 20 20 20  , name);..      
3df0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
3e00: 20 20 20 20 20 20 20 20 20 20 20 20 20 63 61 74               cat
3e10: 63 68 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ch..            
3e20: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
3e30: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f             // do
3e40: 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20   nothing...     
3e50: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
3e60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3e70: 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 20 20  return null;..  
3e80: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
3e90: 20 20 20 20 20 20 20 20 20 20 20 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 2f  ////////////////
3ec0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3ed0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
3ee0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
3ef0: 62 6c 69 63 20 73 74 61 74 69 63 20 76 6f 69 64  blic static void
3f00: 20 44 65 62 75 67 43 6f 72 65 28 0d 0a 20 20 20   DebugCore(..   
3f10: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72               str
3f20: 69 6e 67 20 6d 65 73 73 61 67 65 2c 0d 0a 20 20  ing message,..  
3f30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
3f40: 72 69 6e 67 20 63 61 74 65 67 6f 72 79 0d 0a 20  ring category.. 
3f50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29                 )
3f60: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
3f70: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
3f80: 20 6c 6f 63 6b 20 28 73 79 6e 63 52 6f 6f 74 29   lock (syncRoot)
3f90: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
3fa0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
3fb0: 20 20 20 20 20 20 20 20 20 69 66 20 28 64 65 62           if (deb
3fc0: 75 67 4c 69 73 74 65 6e 65 72 73 20 21 3d 20 6e  ugListeners != n
3fd0: 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
3fe0: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
3ff0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4000: 20 20 20 20 20 66 6f 72 65 61 63 68 20 28 54 72       foreach (Tr
4010: 61 63 65 4c 69 73 74 65 6e 65 72 20 6c 69 73 74  aceListener list
4020: 65 6e 65 72 20 69 6e 20 64 65 62 75 67 4c 69 73  ener in debugLis
4030: 74 65 6e 65 72 73 29 0d 0a 20 20 20 20 20 20 20  teners)..       
4040: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4050: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
4060: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4070: 6c 69 73 74 65 6e 65 72 2e 57 72 69 74 65 4c 69  listener.WriteLi
4080: 6e 65 28 6d 65 73 73 61 67 65 2c 20 63 61 74 65  ne(message, cate
4090: 67 6f 72 79 29 3b 0d 0a 20 20 20 20 20 20 20 20  gory);..        
40a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
40b0: 20 20 20 20 6c 69 73 74 65 6e 65 72 2e 46 6c 75      listener.Flu
40c0: 73 68 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  sh();..         
40d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
40e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
40f0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
4100: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
4110: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
4120: 20 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4160: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
4170: 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
4180: 69 63 20 73 74 61 74 69 63 20 76 6f 69 64 20 54  ic static void T
4190: 72 61 63 65 43 6f 72 65 28 0d 0a 20 20 20 20 20  raceCore(..     
41a0: 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
41b0: 67 20 6d 65 73 73 61 67 65 2c 0d 0a 20 20 20 20  g message,..    
41c0: 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
41d0: 6e 67 20 63 61 74 65 67 6f 72 79 0d 0a 20 20 20  ng category..   
41e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a               )..
41f0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
4200: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6c                 l
4210: 6f 63 6b 20 28 73 79 6e 63 52 6f 6f 74 29 0d 0a  ock (syncRoot)..
4220: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4230: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
4240: 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
4250: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
4260: 2f 20 4e 4f 54 45 3a 20 57 72 69 74 65 20 74 68  / NOTE: Write th
4270: 65 20 6d 65 73 73 61 67 65 20 74 6f 20 61 6c 6c  e message to all
4280: 20 74 68 65 20 61 63 74 69 76 65 20 74 72 61 63   the active trac
4290: 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..             
42a0: 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
42b0: 6c 69 73 74 65 6e 65 72 73 2e 0d 0a 20 20 20 20  listeners...    
42c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
42d0: 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
42e0: 20 20 20 20 20 20 20 20 54 72 61 63 65 2e 57 72          Trace.Wr
42f0: 69 74 65 4c 69 6e 65 28 6d 65 73 73 61 67 65 2c  iteLine(message,
4300: 20 63 61 74 65 67 6f 72 79 29 3b 0d 0a 20 20 20   category);..   
4310: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4320: 20 54 72 61 63 65 2e 46 6c 75 73 68 28 29 3b 0d   Trace.Flush();.
4330: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
4340: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
4350: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
4360: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
4370: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4380: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4390: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
43a0: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
43b0: 20 20 20 20 5b 4d 65 74 68 6f 64 49 6d 70 6c 28      [MethodImpl(
43c0: 4d 65 74 68 6f 64 49 6d 70 6c 4f 70 74 69 6f 6e  MethodImplOption
43d0: 73 2e 4e 6f 49 6e 6c 69 6e 69 6e 67 29 5d 0d 0a  s.NoInlining)]..
43e0: 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
43f0: 69 63 20 73 74 61 74 69 63 20 73 74 72 69 6e 67  ic static string
4400: 20 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 0d   DebugAndTrace(.
4410: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
4420: 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 20 74   TracePriority t
4430: 72 61 63 65 50 72 69 6f 72 69 74 79 2c 0d 0a 20  racePriority,.. 
4440: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
4450: 72 61 63 65 43 61 6c 6c 62 61 63 6b 20 64 65 62  raceCallback deb
4460: 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20  ugCallback,..   
4470: 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61               Tra
4480: 63 65 43 61 6c 6c 62 61 63 6b 20 74 72 61 63 65  ceCallback trace
4490: 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20  Callback,..     
44a0: 20 20 20 20 20 20 20 20 20 20 20 45 78 63 65 70             Excep
44b0: 74 69 6f 6e 20 65 78 63 65 70 74 69 6f 6e 2c 0d  tion exception,.
44c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
44d0: 20 73 74 72 69 6e 67 20 63 61 74 65 67 6f 72 79   string category
44e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
44f0: 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20    )..           
4500: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
4510: 20 20 20 20 69 66 20 28 65 78 63 65 70 74 69 6f      if (exceptio
4520: 6e 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  n != null)..    
4530: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4540: 72 65 74 75 72 6e 20 44 65 62 75 67 41 6e 64 54  return DebugAndT
4550: 72 61 63 65 28 74 72 61 63 65 50 72 69 6f 72 69  race(tracePriori
4560: 74 79 2c 20 64 65 62 75 67 43 61 6c 6c 62 61 63  ty, debugCallbac
4570: 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  k,..            
4580: 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
4590: 65 43 61 6c 6c 62 61 63 6b 2c 20 6e 65 77 20 53  eCallback, new S
45a0: 74 61 63 6b 54 72 61 63 65 28 65 78 63 65 70 74  tackTrace(except
45b0: 69 6f 6e 2c 20 74 72 75 65 29 2c 20 30 2c 0d 0a  ion, true), 0,..
45c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
45d0: 20 20 20 20 20 20 20 20 65 78 63 65 70 74 69 6f          exceptio
45e0: 6e 2e 54 6f 53 74 72 69 6e 67 28 29 2c 20 63 61  n.ToString(), ca
45f0: 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
4600: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
4610: 72 6e 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20  rn null;..      
4620: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
4630: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
4640: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4650: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4660: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4670: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
4680: 20 20 20 20 20 20 20 20 20 20 5b 4d 65 74 68 6f            [Metho
4690: 64 49 6d 70 6c 28 4d 65 74 68 6f 64 49 6d 70 6c  dImpl(MethodImpl
46a0: 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e 69  Options.NoInlini
46b0: 6e 67 29 5d 0d 0a 20 20 20 20 20 20 20 20 20 20  ng)]..          
46c0: 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20    public static 
46d0: 73 74 72 69 6e 67 20 44 65 62 75 67 41 6e 64 54  string DebugAndT
46e0: 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20  race(..         
46f0: 20 20 20 20 20 20 20 54 72 61 63 65 50 72 69 6f         TracePrio
4700: 72 69 74 79 20 74 72 61 63 65 50 72 69 6f 72 69  rity tracePriori
4710: 74 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ty,..           
4720: 20 20 20 20 20 54 72 61 63 65 43 61 6c 6c 62 61       TraceCallba
4730: 63 6b 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b  ck debugCallback
4740: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
4750: 20 20 20 54 72 61 63 65 43 61 6c 6c 62 61 63 6b     TraceCallback
4760: 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 0d   traceCallback,.
4770: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
4780: 20 73 74 72 69 6e 67 20 6d 65 73 73 61 67 65 2c   string message,
4790: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
47a0: 20 20 73 74 72 69 6e 67 20 63 61 74 65 67 6f 72    string categor
47b0: 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  y..             
47c0: 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20     )..          
47d0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
47e0: 20 20 20 20 20 72 65 74 75 72 6e 20 44 65 62 75       return Debu
47f0: 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 20 20 20  gAndTrace(..    
4800: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4810: 74 72 61 63 65 50 72 69 6f 72 69 74 79 2c 20 64  tracePriority, d
4820: 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72  ebugCallback, tr
4830: 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 6e 75 6c  aceCallback, nul
4840: 6c 2c 20 31 2c 0d 0a 20 20 20 20 20 20 20 20 20  l, 1,..         
4850: 20 20 20 20 20 20 20 20 20 20 20 6d 65 73 73 61             messa
4860: 67 65 2c 20 63 61 74 65 67 6f 72 79 29 3b 0d 0a  ge, category);..
4870: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
4880: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
4890: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
48a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
48b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
48c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
48d0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
48e0: 5b 4d 65 74 68 6f 64 49 6d 70 6c 28 4d 65 74 68  [MethodImpl(Meth
48f0: 6f 64 49 6d 70 6c 4f 70 74 69 6f 6e 73 2e 4e 6f  odImplOptions.No
4900: 49 6e 6c 69 6e 69 6e 67 29 5d 0d 0a 20 20 20 20  Inlining)]..    
4910: 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
4920: 73 74 61 74 69 63 20 73 74 72 69 6e 67 20 44 65  static string De
4930: 62 75 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 20  bugAndTrace(..  
4940: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
4950: 61 63 65 50 72 69 6f 72 69 74 79 20 74 72 61 63  acePriority trac
4960: 65 50 72 69 6f 72 69 74 79 2c 0d 0a 20 20 20 20  ePriority,..    
4970: 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
4980: 65 43 61 6c 6c 62 61 63 6b 20 64 65 62 75 67 43  eCallback debugC
4990: 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20  allback,..      
49a0: 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 43            TraceC
49b0: 61 6c 6c 62 61 63 6b 20 74 72 61 63 65 43 61 6c  allback traceCal
49c0: 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20  lback,..        
49d0: 20 20 20 20 20 20 20 20 53 74 61 63 6b 54 72 61          StackTra
49e0: 63 65 20 73 74 61 63 6b 54 72 61 63 65 2c 0d 0a  ce stackTrace,..
49f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4a00: 69 6e 74 20 6c 65 76 65 6c 2c 0d 0a 20 20 20 20  int level,..    
4a10: 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
4a20: 6e 67 20 6d 65 73 73 61 67 65 2c 0d 0a 20 20 20  ng message,..   
4a30: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72               str
4a40: 69 6e 67 20 63 61 74 65 67 6f 72 79 0d 0a 20 20  ing category..  
4a50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d                ).
4a60: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
4a70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4a80: 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
4a90: 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 41 6c 77      // NOTE: Alw
4aa0: 61 79 73 20 73 6b 69 70 20 74 68 69 73 20 63 61  ays skip this ca
4ab0: 6c 6c 20 66 72 61 6d 65 20 69 66 20 74 68 65 20  ll frame if the 
4ac0: 73 74 61 63 6b 20 74 72 61 63 65 20 69 73 0d 0a  stack trace is..
4ad0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4ae0: 2f 2f 20 20 20 20 20 20 20 67 6f 69 6e 67 20 74  //       going t
4af0: 6f 20 62 65 20 63 61 70 74 75 72 65 64 20 62 79  o be captured by
4b00: 20 47 65 74 4d 65 74 68 6f 64 4e 61 6d 65 2e 0d   GetMethodName..
4b10: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
4b20: 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
4b30: 20 20 20 20 20 69 66 20 28 73 74 61 63 6b 54 72       if (stackTr
4b40: 61 63 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  ace == null)..  
4b50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4b60: 20 20 6c 65 76 65 6c 2b 2b 3b 0d 0a 0d 0a 20 20    level++;....  
4b70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
4b80: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
4b90: 20 20 2f 2f 20 4e 4f 54 45 3a 20 46 6f 72 6d 61    // NOTE: Forma
4ba0: 74 20 74 68 65 20 6d 65 73 73 61 67 65 20 66 6f  t the message fo
4bb0: 72 20 64 69 73 70 6c 61 79 20 28 6f 6e 63 65 29  r display (once)
4bc0: 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
4bd0: 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
4be0: 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 66 6f         string fo
4bf0: 72 6d 61 74 74 65 64 20 3d 20 53 74 72 69 6e 67  rmatted = String
4c00: 2e 46 6f 72 6d 61 74 28 22 7b 30 7d 3a 20 7b 31  .Format("{0}: {1
4c10: 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }",..           
4c20: 20 20 20 20 20 20 20 20 20 47 65 74 4d 65 74 68           GetMeth
4c30: 6f 64 4e 61 6d 65 28 73 74 61 63 6b 54 72 61 63  odName(stackTrac
4c40: 65 2c 20 6c 65 76 65 6c 29 2c 20 6d 65 73 73 61  e, level), messa
4c50: 67 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ge);....        
4c60: 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
4c70: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e              // N
4c80: 4f 54 45 3a 20 49 66 20 74 68 65 20 64 65 62 75  OTE: If the debu
4c90: 67 20 63 61 6c 6c 62 61 63 6b 20 69 73 20 69 6e  g callback is in
4ca0: 76 61 6c 69 64 20 6f 72 20 74 68 65 20 74 72 61  valid or the tra
4cb0: 63 65 20 70 72 69 6f 72 69 74 79 0d 0a 20 20 20  ce priority..   
4cc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
4cd0: 20 20 20 20 20 20 6f 66 20 74 68 69 73 20 6d 65        of this me
4ce0: 73 73 61 67 65 20 69 73 20 6c 65 73 73 20 74 68  ssage is less th
4cf0: 61 6e 20 77 68 61 74 20 77 65 20 63 75 72 72 65  an what we curre
4d00: 6e 74 6c 79 20 77 61 6e 74 20 74 6f 0d 0a 20 20  ntly want to..  
4d10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
4d20: 20 20 20 20 20 20 20 64 65 62 75 67 2c 20 73 6b         debug, sk
4d30: 69 70 20 69 74 2e 0d 0a 20 20 20 20 20 20 20 20  ip it...        
4d40: 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
4d50: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
4d60: 28 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 20 21  (debugCallback !
4d70: 3d 20 6e 75 6c 6c 29 20 26 26 0d 0a 20 20 20 20  = null) &&..    
4d80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4d90: 28 74 72 61 63 65 50 72 69 6f 72 69 74 79 20 3e  (tracePriority >
4da0: 3d 20 44 65 62 75 67 50 72 69 6f 72 69 74 79 29  = DebugPriority)
4db0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
4dc0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
4dd0: 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
4de0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4df0: 20 20 2f 2f 20 4e 4f 54 45 3a 20 49 6e 76 6f 6b    // NOTE: Invok
4e00: 65 20 74 68 65 20 64 65 62 75 67 20 63 61 6c 6c  e the debug call
4e10: 62 61 63 6b 20 77 69 74 68 20 74 68 65 20 66 6f  back with the fo
4e20: 72 6d 61 74 74 65 64 0d 0a 20 20 20 20 20 20 20  rmatted..       
4e30: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
4e40: 20 20 20 20 20 20 6d 65 73 73 61 67 65 20 61 6e        message an
4e50: 64 20 74 68 65 20 63 61 74 65 67 6f 72 79 20 73  d the category s
4e60: 70 65 63 69 66 69 65 64 20 62 79 20 74 68 65 0d  pecified by the.
4e70: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
4e80: 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 63 61       //       ca
4e90: 6c 6c 65 72 2e 0d 0a 20 20 20 20 20 20 20 20 20  ller...         
4ea0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
4eb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4ec0: 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b     debugCallback
4ed0: 28 66 6f 72 6d 61 74 74 65 64 2c 20 63 61 74 65  (formatted, cate
4ee0: 67 6f 72 79 29 3b 0d 0a 20 20 20 20 20 20 20 20  gory);..        
4ef0: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
4f00: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
4f10: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
4f20: 20 2f 2f 20 4e 4f 54 45 3a 20 49 66 20 74 68 65   // NOTE: If the
4f30: 20 74 72 61 63 65 20 63 61 6c 6c 62 61 63 6b 20   trace callback 
4f40: 69 73 20 69 6e 76 61 6c 69 64 20 6f 72 20 74 68  is invalid or th
4f50: 65 20 74 72 61 63 65 20 70 72 69 6f 72 69 74 79  e trace priority
4f60: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
4f70: 20 20 2f 2f 20 20 20 20 20 20 20 6f 66 20 74 68    //       of th
4f80: 69 73 20 6d 65 73 73 61 67 65 20 69 73 20 6c 65  is message is le
4f90: 73 73 20 74 68 61 6e 20 77 68 61 74 20 77 65 20  ss than what we 
4fa0: 63 75 72 72 65 6e 74 6c 79 20 77 61 6e 74 20 74  currently want t
4fb0: 6f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  o..             
4fc0: 20 20 20 2f 2f 20 20 20 20 20 20 20 74 72 61 63     //       trac
4fd0: 65 2c 20 73 6b 69 70 20 69 74 2e 0d 0a 20 20 20  e, skip it...   
4fe0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
4ff0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
5000: 20 69 66 20 28 28 74 72 61 63 65 43 61 6c 6c 62   if ((traceCallb
5010: 61 63 6b 20 21 3d 20 6e 75 6c 6c 29 20 26 26 0d  ack != null) &&.
5020: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
5030: 20 20 20 20 20 28 74 72 61 63 65 50 72 69 6f 72       (tracePrior
5040: 69 74 79 20 3e 3d 20 54 72 61 63 65 50 72 69 6f  ity >= TracePrio
5050: 72 69 74 79 29 29 0d 0a 20 20 20 20 20 20 20 20  rity))..        
5060: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
5070: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
5080: 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
5090: 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20         // NOTE: 
50a0: 49 6e 76 6f 6b 65 20 74 68 65 20 74 72 61 63 65  Invoke the trace
50b0: 20 63 61 6c 6c 62 61 63 6b 20 77 69 74 68 20 74   callback with t
50c0: 68 65 20 66 6f 72 6d 61 74 74 65 64 0d 0a 20 20  he formatted..  
50d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
50e0: 20 20 2f 2f 20 20 20 20 20 20 20 6d 65 73 73 61    //       messa
50f0: 67 65 20 61 6e 64 20 74 68 65 20 63 61 74 65 67  ge and the categ
5100: 6f 72 79 20 73 70 65 63 69 66 69 65 64 20 62 79  ory specified by
5110: 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 20 20   the..          
5120: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
5130: 20 20 20 63 61 6c 6c 65 72 2e 0d 0a 20 20 20 20     caller...    
5140: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5150: 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
5160: 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c          traceCal
5170: 6c 62 61 63 6b 28 66 6f 72 6d 61 74 74 65 64 2c  lback(formatted,
5180: 20 63 61 74 65 67 6f 72 79 29 3b 0d 0a 20 20 20   category);..   
5190: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
51a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
51b0: 20 20 72 65 74 75 72 6e 20 6d 65 73 73 61 67 65    return message
51c0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
51d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 65  ..            #e
51e0: 6e 64 72 65 67 69 6f 6e 0d 0a 20 20 20 20 20 20  ndregion..      
51f0: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e    }..        #en
5200: 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
5210: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
5220: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5230: 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20  //////////....  
5260: 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 4d 6f        #region Mo
5270: 63 6b 52 65 67 69 73 74 72 79 20 43 6c 61 73 73  ckRegistry Class
5280: 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
5290: 65 20 73 65 61 6c 65 64 20 63 6c 61 73 73 20 4d  e sealed class M
52a0: 6f 63 6b 52 65 67 69 73 74 72 79 20 3a 20 49 44  ockRegistry : ID
52b0: 69 73 70 6f 73 61 62 6c 65 0d 0a 20 20 20 20 20  isposable..     
52c0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
52d0: 20 20 23 72 65 67 69 6f 6e 20 50 75 62 6c 69 63    #region Public
52e0: 20 43 6f 6e 73 74 72 75 63 74 6f 72 73 0d 0a 20   Constructors.. 
52f0: 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
5300: 63 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 28 29  c MockRegistry()
5310: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
5320: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
5330: 20 77 68 61 74 49 66 20 3d 20 74 72 75 65 3b 0d   whatIf = true;.
5340: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
5350: 20 72 65 61 64 4f 6e 6c 79 20 3d 20 74 72 75 65   readOnly = true
5360: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
5370: 20 20 20 73 61 66 65 20 3d 20 74 72 75 65 3b 0d     safe = true;.
5380: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
5390: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
53a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
53b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
53c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
53d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
53e0: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
53f0: 20 70 75 62 6c 69 63 20 4d 6f 63 6b 52 65 67 69   public MockRegi
5400: 73 74 72 79 28 0d 0a 20 20 20 20 20 20 20 20 20  stry(..         
5410: 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74         bool what
5420: 49 66 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  If..            
5430: 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20      )..         
5440: 20 20 20 20 20 20 20 3a 20 74 68 69 73 28 29 0d         : this().
5450: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
5460: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5470: 74 68 69 73 2e 77 68 61 74 49 66 20 3d 20 77 68  this.whatIf = wh
5480: 61 74 49 66 3b 0d 0a 20 20 20 20 20 20 20 20 20  atIf;..         
5490: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
54a0: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
54b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
54c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
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 0d 0a 0d 0a 20 20 20 20 20  ///////....     
54f0: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 4d 6f         public Mo
5500: 63 6b 52 65 67 69 73 74 72 79 28 0d 0a 20 20 20  ckRegistry(..   
5510: 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f               boo
5520: 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20  l whatIf,..     
5530: 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
5540: 72 65 61 64 4f 6e 6c 79 0d 0a 20 20 20 20 20 20  readOnly..      
5550: 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
5560: 20 20 20 20 20 20 20 20 20 20 20 20 20 3a 20 74               : t
5570: 68 69 73 28 77 68 61 74 49 66 29 0d 0a 20 20 20  his(whatIf)..   
5580: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
5590: 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73              this
55a0: 2e 72 65 61 64 4f 6e 6c 79 20 3d 20 72 65 61 64  .readOnly = read
55b0: 4f 6e 6c 79 3b 0d 0a 20 20 20 20 20 20 20 20 20  Only;..         
55c0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
55d0: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
55e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
55f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5600: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5610: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
5620: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 4d 6f         public Mo
5630: 63 6b 52 65 67 69 73 74 72 79 28 0d 0a 20 20 20  ckRegistry(..   
5640: 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f               boo
5650: 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20  l whatIf,..     
5660: 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
5670: 72 65 61 64 4f 6e 6c 79 2c 0d 0a 20 20 20 20 20  readOnly,..     
5680: 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
5690: 73 61 66 65 0d 0a 20 20 20 20 20 20 20 20 20 20  safe..          
56a0: 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
56b0: 20 20 20 20 20 20 20 20 20 3a 20 74 68 69 73 28           : this(
56c0: 77 68 61 74 49 66 2c 20 72 65 61 64 4f 6e 6c 79  whatIf, readOnly
56d0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
56e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
56f0: 20 20 74 68 69 73 2e 73 61 66 65 20 3d 20 73 61    this.safe = sa
5700: 66 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  fe;..           
5710: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
5720: 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20  #endregion....  
5730: 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
5740: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5750: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5760: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5770: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
5780: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 72 65  .            #re
5790: 67 69 6f 6e 20 50 75 62 6c 69 63 20 50 72 6f 70  gion Public Prop
57a0: 65 72 74 69 65 73 0d 0a 20 20 20 20 20 20 20 20  erties..        
57b0: 20 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c      private bool
57c0: 20 77 68 61 74 49 66 3b 0d 0a 20 20 20 20 20 20   whatIf;..      
57d0: 20 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f        public boo
57e0: 6c 20 57 68 61 74 49 66 0d 0a 20 20 20 20 20 20  l WhatIf..      
57f0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
5800: 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 43           get { C
5810: 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 20  heckDisposed(); 
5820: 72 65 74 75 72 6e 20 77 68 61 74 49 66 3b 20 7d  return whatIf; }
5830: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
5840: 20 20 73 65 74 20 7b 20 43 68 65 63 6b 44 69 73    set { CheckDis
5850: 70 6f 73 65 64 28 29 3b 20 77 68 61 74 49 66 20  posed(); whatIf 
5860: 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20  = value; }..    
5870: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
5880: 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
5890: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
58a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
58b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
58c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
58d0: 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
58e0: 61 74 65 20 62 6f 6f 6c 20 72 65 61 64 4f 6e 6c  ate bool readOnl
58f0: 79 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y;..            
5900: 70 75 62 6c 69 63 20 62 6f 6f 6c 20 52 65 61 64  public bool Read
5910: 4f 6e 6c 79 0d 0a 20 20 20 20 20 20 20 20 20 20  Only..          
5920: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
5930: 20 20 20 20 20 67 65 74 20 7b 20 43 68 65 63 6b       get { Check
5940: 44 69 73 70 6f 73 65 64 28 29 3b 20 72 65 74 75  Disposed(); retu
5950: 72 6e 20 72 65 61 64 4f 6e 6c 79 3b 20 7d 0d 0a  rn readOnly; }..
5960: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5970: 73 65 74 20 7b 20 43 68 65 63 6b 44 69 73 70 6f  set { CheckDispo
5980: 73 65 64 28 29 3b 20 72 65 61 64 4f 6e 6c 79 20  sed(); readOnly 
5990: 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20  = value; }..    
59a0: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
59b0: 20 20 20 20 20 20 20 20 20 2f 2f 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 0d 0a 0d 0a  ////////////....
5a00: 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
5a10: 61 74 65 20 62 6f 6f 6c 20 73 61 66 65 3b 0d 0a  ate bool safe;..
5a20: 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
5a30: 69 63 20 62 6f 6f 6c 20 53 61 66 65 0d 0a 20 20  ic bool Safe..  
5a40: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
5a50: 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74               get
5a60: 20 7b 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64   { CheckDisposed
5a70: 28 29 3b 20 72 65 74 75 72 6e 20 73 61 66 65 3b  (); return safe;
5a80: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
5a90: 20 20 20 20 73 65 74 20 7b 20 43 68 65 63 6b 44      set { CheckD
5aa0: 69 73 70 6f 73 65 64 28 29 3b 20 73 61 66 65 20  isposed(); safe 
5ab0: 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20  = value; }..    
5ac0: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
5ad0: 20 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f  ////////////////
5b00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5b10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
5b20: 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
5b30: 61 74 65 20 4d 6f 63 6b 52 65 67 69 73 74 72 79  ate MockRegistry
5b40: 4b 65 79 20 63 6c 61 73 73 65 73 52 6f 6f 74 3b  Key classesRoot;
5b50: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
5b60: 62 6c 69 63 20 4d 6f 63 6b 52 65 67 69 73 74 72  blic MockRegistr
5b70: 79 4b 65 79 20 43 6c 61 73 73 65 73 52 6f 6f 74  yKey ClassesRoot
5b80: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
5b90: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
5ba0: 20 67 65 74 0d 0a 20 20 20 20 20 20 20 20 20 20   get..          
5bb0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
5bc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 43 68 65               Che
5bd0: 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 0d  ckDisposed();...
5be0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
5bf0: 20 20 20 20 20 69 66 20 28 63 6c 61 73 73 65 73       if (classes
5c00: 52 6f 6f 74 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  Root == null).. 
5c10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5c20: 20 20 20 20 20 20 20 63 6c 61 73 73 65 73 52 6f         classesRo
5c30: 6f 74 20 3d 20 6e 65 77 20 4d 6f 63 6b 52 65 67  ot = new MockReg
5c40: 69 73 74 72 79 4b 65 79 28 0d 0a 20 20 20 20 20  istryKey(..     
5c50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5c60: 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79 2e         Registry.
5c70: 43 6c 61 73 73 65 73 52 6f 6f 74 2c 20 77 68 61  ClassesRoot, wha
5c80: 74 49 66 2c 20 72 65 61 64 4f 6e 6c 79 2c 20 73  tIf, readOnly, s
5c90: 61 66 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  afe);....       
5ca0: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
5cb0: 75 72 6e 20 63 6c 61 73 73 65 73 52 6f 6f 74 3b  urn classesRoot;
5cc0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
5cd0: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
5ce0: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
5cf0: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
5d00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5d10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5d20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5d30: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
5d40: 20 20 20 20 20 70 72 69 76 61 74 65 20 4d 6f 63       private Moc
5d50: 6b 52 65 67 69 73 74 72 79 4b 65 79 20 63 75 72  kRegistryKey cur
5d60: 72 65 6e 74 43 6f 6e 66 69 67 3b 0d 0a 20 20 20  rentConfig;..   
5d70: 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
5d80: 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20  MockRegistryKey 
5d90: 43 75 72 72 65 6e 74 43 6f 6e 66 69 67 0d 0a 20  CurrentConfig.. 
5da0: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
5db0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65                ge
5dc0: 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  t..             
5dd0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
5de0: 20 20 20 20 20 20 20 20 20 20 43 68 65 63 6b 44            CheckD
5df0: 69 73 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20 20  isposed();....  
5e00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5e10: 20 20 69 66 20 28 63 75 72 72 65 6e 74 43 6f 6e    if (currentCon
5e20: 66 69 67 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  fig == null)..  
5e30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5e40: 20 20 20 20 20 20 63 75 72 72 65 6e 74 43 6f 6e        currentCon
5e50: 66 69 67 20 3d 20 6e 65 77 20 4d 6f 63 6b 52 65  fig = new MockRe
5e60: 67 69 73 74 72 79 4b 65 79 28 0d 0a 20 20 20 20  gistryKey(..    
5e70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5e80: 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79          Registry
5e90: 2e 43 75 72 72 65 6e 74 43 6f 6e 66 69 67 2c 20  .CurrentConfig, 
5ea0: 77 68 61 74 49 66 2c 20 72 65 61 64 4f 6e 6c 79  whatIf, readOnly
5eb0: 2c 20 73 61 66 65 29 3b 0d 0a 0d 0a 20 20 20 20  , safe);....    
5ec0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5ed0: 72 65 74 75 72 6e 20 63 75 72 72 65 6e 74 43 6f  return currentCo
5ee0: 6e 66 69 67 3b 0d 0a 20 20 20 20 20 20 20 20 20  nfig;..         
5ef0: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
5f00: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
5f10: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
5f20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5f30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5f40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5f50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
5f60: 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
5f70: 65 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65  e MockRegistryKe
5f80: 79 20 63 75 72 72 65 6e 74 55 73 65 72 3b 0d 0a  y currentUser;..
5f90: 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
5fa0: 69 63 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b  ic MockRegistryK
5fb0: 65 79 20 43 75 72 72 65 6e 74 55 73 65 72 0d 0a  ey CurrentUser..
5fc0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
5fd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67                 g
5fe0: 65 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  et..            
5ff0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
6000: 20 20 20 20 20 20 20 20 20 20 20 43 68 65 63 6b             Check
6010: 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20  Disposed();.... 
6020: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6030: 20 20 20 69 66 20 28 63 75 72 72 65 6e 74 55 73     if (currentUs
6040: 65 72 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  er == null)..   
6050: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6060: 20 20 20 20 20 63 75 72 72 65 6e 74 55 73 65 72       currentUser
6070: 20 3d 20 6e 65 77 20 4d 6f 63 6b 52 65 67 69 73   = new MockRegis
6080: 74 72 79 4b 65 79 28 0d 0a 20 20 20 20 20 20 20  tryKey(..       
6090: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
60a0: 20 20 20 20 20 52 65 67 69 73 74 72 79 2e 43 75       Registry.Cu
60b0: 72 72 65 6e 74 55 73 65 72 2c 20 77 68 61 74 49  rrentUser, whatI
60c0: 66 2c 20 72 65 61 64 4f 6e 6c 79 2c 20 73 61 66  f, readOnly, saf
60d0: 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e);....         
60e0: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
60f0: 6e 20 63 75 72 72 65 6e 74 55 73 65 72 3b 0d 0a  n currentUser;..
6100: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6110: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
6120: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
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 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6160: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6170: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
6180: 20 20 20 70 72 69 76 61 74 65 20 4d 6f 63 6b 52     private MockR
6190: 65 67 69 73 74 72 79 4b 65 79 20 64 79 6e 44 61  egistryKey dynDa
61a0: 74 61 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ta;..           
61b0: 20 70 75 62 6c 69 63 20 4d 6f 63 6b 52 65 67 69   public MockRegi
61c0: 73 74 72 79 4b 65 79 20 44 79 6e 44 61 74 61 0d  stryKey DynData.
61d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
61e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
61f0: 67 65 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20  get..           
6200: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
6210: 20 20 20 20 20 20 20 20 20 20 20 20 43 68 65 63              Chec
6220: 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a  kDisposed();....
6230: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6240: 20 20 20 20 69 66 20 28 64 79 6e 44 61 74 61 20      if (dynData 
6250: 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
6260: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6270: 20 20 64 79 6e 44 61 74 61 20 3d 20 6e 65 77 20    dynData = new 
6280: 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 28  MockRegistryKey(
6290: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
62a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65                Re
62b0: 67 69 73 74 72 79 2e 44 79 6e 44 61 74 61 2c 20  gistry.DynData, 
62c0: 77 68 61 74 49 66 2c 20 72 65 61 64 4f 6e 6c 79  whatIf, readOnly
62d0: 2c 20 73 61 66 65 29 3b 0d 0a 0d 0a 20 20 20 20  , safe);....    
62e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
62f0: 72 65 74 75 72 6e 20 64 79 6e 44 61 74 61 3b 0d  return dynData;.
6300: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
6310: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
6320: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
6330: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
6340: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6350: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6360: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6370: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
6380: 20 20 20 20 70 72 69 76 61 74 65 20 4d 6f 63 6b      private Mock
6390: 52 65 67 69 73 74 72 79 4b 65 79 20 6c 6f 63 61  RegistryKey loca
63a0: 6c 4d 61 63 68 69 6e 65 3b 0d 0a 20 20 20 20 20  lMachine;..     
63b0: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 4d 6f         public Mo
63c0: 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 4c 6f  ckRegistryKey Lo
63d0: 63 61 6c 4d 61 63 68 69 6e 65 0d 0a 20 20 20 20  calMachine..    
63e0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
63f0: 20 20 20 20 20 20 20 20 20 20 20 67 65 74 0d 0a             get..
6400: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6410: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
6420: 20 20 20 20 20 20 20 43 68 65 63 6b 44 69 73 70         CheckDisp
6430: 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20  osed();....     
6440: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
6450: 66 20 28 6c 6f 63 61 6c 4d 61 63 68 69 6e 65 20  f (localMachine 
6460: 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
6470: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6480: 20 20 6c 6f 63 61 6c 4d 61 63 68 69 6e 65 20 3d    localMachine =
6490: 20 6e 65 77 20 4d 6f 63 6b 52 65 67 69 73 74 72   new MockRegistr
64a0: 79 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20  yKey(..         
64b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
64c0: 20 20 20 52 65 67 69 73 74 72 79 2e 4c 6f 63 61     Registry.Loca
64d0: 6c 4d 61 63 68 69 6e 65 2c 20 77 68 61 74 49 66  lMachine, whatIf
64e0: 2c 20 72 65 61 64 4f 6e 6c 79 2c 20 73 61 66 65  , readOnly, safe
64f0: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
6500: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
6510: 20 6c 6f 63 61 6c 4d 61 63 68 69 6e 65 3b 0d 0a   localMachine;..
6520: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6530: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
6540: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
6550: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6560: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6570: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6580: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6590: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
65a0: 20 20 20 70 72 69 76 61 74 65 20 4d 6f 63 6b 52     private MockR
65b0: 65 67 69 73 74 72 79 4b 65 79 20 70 65 72 66 6f  egistryKey perfo
65c0: 72 6d 61 6e 63 65 44 61 74 61 3b 0d 0a 20 20 20  rmanceData;..   
65d0: 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
65e0: 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20  MockRegistryKey 
65f0: 50 65 72 66 6f 72 6d 61 6e 63 65 44 61 74 61 0d  PerformanceData.
6600: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
6610: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6620: 67 65 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20  get..           
6630: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
6640: 20 20 20 20 20 20 20 20 20 20 20 20 43 68 65 63              Chec
6650: 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a  kDisposed();....
6660: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6670: 20 20 20 20 69 66 20 28 70 65 72 66 6f 72 6d 61      if (performa
6680: 6e 63 65 44 61 74 61 20 3d 3d 20 6e 75 6c 6c 29  nceData == null)
6690: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
66a0: 20 20 20 20 20 20 20 20 20 20 70 65 72 66 6f 72            perfor
66b0: 6d 61 6e 63 65 44 61 74 61 20 3d 20 6e 65 77 20  manceData = new 
66c0: 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 28  MockRegistryKey(
66d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
66e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65                Re
66f0: 67 69 73 74 72 79 2e 50 65 72 66 6f 72 6d 61 6e  gistry.Performan
6700: 63 65 44 61 74 61 2c 20 77 68 61 74 49 66 2c 20  ceData, whatIf, 
6710: 72 65 61 64 4f 6e 6c 79 2c 20 73 61 66 65 29 3b  readOnly, safe);
6720: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
6730: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 70          return p
6740: 65 72 66 6f 72 6d 61 6e 63 65 44 61 74 61 3b 0d  erformanceData;.
6750: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
6760: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
6770: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
6780: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
6790: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
67a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
67b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
67c0: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
67d0: 20 20 20 20 70 72 69 76 61 74 65 20 4d 6f 63 6b      private Mock
67e0: 52 65 67 69 73 74 72 79 4b 65 79 20 75 73 65 72  RegistryKey user
67f0: 73 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  s;..            
6800: 70 75 62 6c 69 63 20 4d 6f 63 6b 52 65 67 69 73  public MockRegis
6810: 74 72 79 4b 65 79 20 55 73 65 72 73 0d 0a 20 20  tryKey Users..  
6820: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
6830: 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74               get
6840: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
6850: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
6860: 20 20 20 20 20 20 20 20 20 43 68 65 63 6b 44 69           CheckDi
6870: 73 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20 20 20  sposed();....   
6880: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6890: 20 69 66 20 28 75 73 65 72 73 20 3d 3d 20 6e 75   if (users == nu
68a0: 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
68b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 75 73 65               use
68c0: 72 73 20 3d 20 6e 65 77 20 4d 6f 63 6b 52 65 67  rs = new MockReg
68d0: 69 73 74 72 79 4b 65 79 28 0d 0a 20 20 20 20 20  istryKey(..     
68e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
68f0: 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79 2e         Registry.
6900: 55 73 65 72 73 2c 20 77 68 61 74 49 66 2c 20 72  Users, whatIf, r
6910: 65 61 64 4f 6e 6c 79 2c 20 73 61 66 65 29 3b 0d  eadOnly, safe);.
6920: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
6930: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 75 73         return us
6940: 65 72 73 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ers;..          
6950: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
6960: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
6970: 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
6980: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
6990: 2f 2f 2f 2f 2f 2f 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 2f 2f 2f 2f 2f 2f  ////////////////
69c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
69d0: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
69e0: 20 23 72 65 67 69 6f 6e 20 50 75 62 6c 69 63 20   #region Public 
69f0: 22 52 65 67 69 73 74 72 79 22 20 4d 65 74 68 6f  "Registry" Metho
6a00: 64 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ds..            
6a10: 70 75 62 6c 69 63 20 6f 62 6a 65 63 74 20 47 65  public object Ge
6a20: 74 56 61 6c 75 65 28 0d 0a 20 20 20 20 20 20 20  tValue(..       
6a30: 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
6a40: 6b 65 79 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20  keyName,..      
6a50: 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
6a60: 20 76 61 6c 75 65 4e 61 6d 65 2c 0d 0a 20 20 20   valueName,..   
6a70: 20 20 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a               obj
6a80: 65 63 74 20 64 65 66 61 75 6c 74 56 61 6c 75 65  ect defaultValue
6a90: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
6aa0: 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20    )..           
6ab0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
6ac0: 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65      CheckDispose
6ad0: 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  d();....        
6ae0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 52          return R
6af0: 65 67 69 73 74 72 79 2e 47 65 74 56 61 6c 75 65  egistry.GetValue
6b00: 28 6b 65 79 4e 61 6d 65 2c 20 76 61 6c 75 65 4e  (keyName, valueN
6b10: 61 6d 65 2c 20 64 65 66 61 75 6c 74 56 61 6c 75  ame, defaultValu
6b20: 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e);..           
6b30: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
6b40: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
6b50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6b60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6b70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6b80: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
6b90: 20 20 20 20 20 70 75 62 6c 69 63 20 76 6f 69 64       public void
6ba0: 20 53 65 74 56 61 6c 75 65 28 0d 0a 20 20 20 20   SetValue(..    
6bb0: 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
6bc0: 6e 67 20 6b 65 79 4e 61 6d 65 2c 0d 0a 20 20 20  ng keyName,..   
6bd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72               str
6be0: 69 6e 67 20 76 61 6c 75 65 4e 61 6d 65 2c 0d 0a  ing valueName,..
6bf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6c00: 6f 62 6a 65 63 74 20 76 61 6c 75 65 0d 0a 20 20  object value..  
6c10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d                ).
6c20: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
6c30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6c40: 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b  CheckDisposed();
6c50: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
6c60: 20 20 43 68 65 63 6b 52 65 61 64 4f 6e 6c 79 28    CheckReadOnly(
6c70: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
6c80: 20 20 20 20 20 20 69 66 20 28 21 77 68 61 74 49        if (!whatI
6c90: 66 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  f)..            
6ca0: 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79          Registry
6cb0: 2e 53 65 74 56 61 6c 75 65 28 6b 65 79 4e 61 6d  .SetValue(keyNam
6cc0: 65 2c 20 76 61 6c 75 65 4e 61 6d 65 2c 20 76 61  e, valueName, va
6cd0: 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  lue);..         
6ce0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
6cf0: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
6d00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6d10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6d20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6d30: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
6d40: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 76 6f         public vo
6d50: 69 64 20 53 65 74 56 61 6c 75 65 28 0d 0a 20 20  id SetValue(..  
6d60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
6d70: 72 69 6e 67 20 6b 65 79 4e 61 6d 65 2c 0d 0a 20  ring keyName,.. 
6d80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
6d90: 74 72 69 6e 67 20 76 61 6c 75 65 4e 61 6d 65 2c  tring valueName,
6da0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
6db0: 20 20 6f 62 6a 65 63 74 20 76 61 6c 75 65 2c 0d    object value,.
6dc0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
6dd0: 20 52 65 67 69 73 74 72 79 56 61 6c 75 65 4b 69   RegistryValueKi
6de0: 6e 64 20 76 61 6c 75 65 4b 69 6e 64 0d 0a 20 20  nd valueKind..  
6df0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d                ).
6e00: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
6e10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6e20: 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b  CheckDisposed();
6e30: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
6e40: 20 20 43 68 65 63 6b 52 65 61 64 4f 6e 6c 79 28    CheckReadOnly(
6e50: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
6e60: 20 20 20 20 20 20 69 66 20 28 21 77 68 61 74 49        if (!whatI
6e70: 66 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  f)..            
6e80: 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79          Registry
6e90: 2e 53 65 74 56 61 6c 75 65 28 6b 65 79 4e 61 6d  .SetValue(keyNam
6ea0: 65 2c 20 76 61 6c 75 65 4e 61 6d 65 2c 20 76 61  e, valueName, va
6eb0: 6c 75 65 2c 20 76 61 6c 75 65 4b 69 6e 64 29 3b  lue, valueKind);
6ec0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
6ed0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e  .            #en
6ee0: 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
6ef0: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
6f00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6f10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6f20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6f30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
6f40: 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f            #regio
6f50: 6e 20 50 72 69 76 61 74 65 20 4d 65 74 68 6f 64  n Private Method
6f60: 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  s..            p
6f70: 72 69 76 61 74 65 20 76 6f 69 64 20 43 68 65 63  rivate void Chec
6f80: 6b 52 65 61 64 4f 6e 6c 79 28 29 0d 0a 20 20 20  kReadOnly()..   
6f90: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
6fa0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
6fb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6fc0: 2f 2f 20 4e 4f 54 45 3a 20 49 6e 20 22 72 65 61  // NOTE: In "rea
6fd0: 64 2d 6f 6e 6c 79 22 20 6d 6f 64 65 2c 20 77 65  d-only" mode, we
6fe0: 20 64 69 73 61 6c 6c 6f 77 20 61 6c 6c 20 77 72   disallow all wr
6ff0: 69 74 65 20 61 63 63 65 73 73 2e 0d 0a 20 20 20  ite access...   
7000: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
7010: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
7020: 20 69 66 20 28 21 72 65 61 64 4f 6e 6c 79 29 0d   if (!readOnly).
7030: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
7040: 20 20 20 20 20 72 65 74 75 72 6e 3b 0d 0a 0d 0a       return;....
7050: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7060: 74 68 72 6f 77 20 6e 65 77 20 49 6e 76 61 6c 69  throw new Invali
7070: 64 4f 70 65 72 61 74 69 6f 6e 45 78 63 65 70 74  dOperationExcept
7080: 69 6f 6e 28 29 3b 0d 0a 20 20 20 20 20 20 20 20  ion();..        
7090: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
70a0: 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
70b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
70c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
70d0: 2f 2f 2f 2f 2f 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: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
7110: 23 72 65 67 69 6f 6e 20 49 44 69 73 70 6f 73 61  #region IDisposa
7120: 62 6c 65 20 22 50 61 74 74 65 72 6e 22 20 4d 65  ble "Pattern" Me
7130: 6d 62 65 72 73 0d 0a 20 20 20 20 20 20 20 20 20  mbers..         
7140: 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20     private bool 
7150: 64 69 73 70 6f 73 65 64 3b 0d 0a 20 20 20 20 20  disposed;..     
7160: 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 76         private v
7170: 6f 69 64 20 43 68 65 63 6b 44 69 73 70 6f 73 65  oid CheckDispose
7180: 64 28 29 20 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d  d() /* throw */.
7190: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
71a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
71b0: 69 66 20 28 21 64 69 73 70 6f 73 65 64 29 0d 0a  if (!disposed)..
71c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
71d0: 20 20 20 20 72 65 74 75 72 6e 3b 0d 0a 0d 0a 20      return;.... 
71e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
71f0: 68 72 6f 77 20 6e 65 77 20 4f 62 6a 65 63 74 44  hrow new ObjectD
7200: 69 73 70 6f 73 65 64 45 78 63 65 70 74 69 6f 6e  isposedException
7210: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
7220: 20 20 20 20 20 20 20 74 79 70 65 6f 66 28 4d 6f         typeof(Mo
7230: 63 6b 52 65 67 69 73 74 72 79 29 2e 4e 61 6d 65  ckRegistry).Name
7240: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
7250: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
7260: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
7270: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7280: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7290: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
72a0: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
72b0: 20 20 20 20 70 72 69 76 61 74 65 20 2f 2a 20 70      private /* p
72c0: 72 6f 74 65 63 74 65 64 20 76 69 72 74 75 61 6c  rotected virtual
72d0: 20 2a 2f 20 76 6f 69 64 20 44 69 73 70 6f 73 65   */ void Dispose
72e0: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
72f0: 20 20 20 62 6f 6f 6c 20 64 69 73 70 6f 73 69 6e     bool disposin
7300: 67 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  g..             
7310: 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20     )..          
7320: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
7330: 20 20 20 20 20 69 66 20 28 21 64 69 73 70 6f 73       if (!dispos
7340: 65 64 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ed)..           
7350: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
7360: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
7370: 64 69 73 70 6f 73 69 6e 67 29 0d 0a 20 20 20 20  disposing)..    
7380: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7390: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
73a0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
73b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
73c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
73d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
73e0: 20 20 20 20 20 20 20 20 20 2f 2f 20 64 69 73 70           // disp
73f0: 6f 73 65 20 6d 61 6e 61 67 65 64 20 72 65 73 6f  ose managed reso
7400: 75 72 63 65 73 20 68 65 72 65 2e 2e 2e 0d 0a 20  urces here..... 
7410: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7420: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
7430: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7440: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
7450: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7460: 20 20 20 20 20 20 20 69 66 20 28 63 6c 61 73 73         if (class
7470: 65 73 52 6f 6f 74 20 21 3d 20 6e 75 6c 6c 29 0d  esRoot != null).
7480: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
7490: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
74a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
74b0: 20 20 20 20 20 20 20 20 63 6c 61 73 73 65 73 52          classesR
74c0: 6f 6f 74 2e 43 6c 6f 73 65 28 29 3b 0d 0a 20 20  oot.Close();..  
74d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
74e0: 20 20 20 20 20 20 20 20 20 20 63 6c 61 73 73 65            classe
74f0: 73 52 6f 6f 74 20 3d 20 6e 75 6c 6c 3b 0d 0a 20  sRoot = null;.. 
7500: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7510: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
7520: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7530: 20 20 20 20 69 66 20 28 63 75 72 72 65 6e 74 43      if (currentC
7540: 6f 6e 66 69 67 20 21 3d 20 6e 75 6c 6c 29 0d 0a  onfig != null)..
7550: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7560: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
7570: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7580: 20 20 20 20 20 20 20 63 75 72 72 65 6e 74 43 6f         currentCo
7590: 6e 66 69 67 2e 43 6c 6f 73 65 28 29 3b 0d 0a 20  nfig.Close();.. 
75a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
75b0: 20 20 20 20 20 20 20 20 20 20 20 63 75 72 72 65             curre
75c0: 6e 74 43 6f 6e 66 69 67 20 3d 20 6e 75 6c 6c 3b  ntConfig = null;
75d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
75e0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
75f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7600: 20 20 20 20 20 20 20 69 66 20 28 63 75 72 72 65         if (curre
7610: 6e 74 55 73 65 72 20 21 3d 20 6e 75 6c 6c 29 0d  ntUser != null).
7620: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
7630: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
7640: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7650: 20 20 20 20 20 20 20 20 63 75 72 72 65 6e 74 55          currentU
7660: 73 65 72 2e 43 6c 6f 73 65 28 29 3b 0d 0a 20 20  ser.Close();..  
7670: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7680: 20 20 20 20 20 20 20 20 20 20 63 75 72 72 65 6e            curren
7690: 74 55 73 65 72 20 3d 20 6e 75 6c 6c 3b 0d 0a 20  tUser = null;.. 
76a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
76b0: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
76c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
76d0: 20 20 20 20 69 66 20 28 64 79 6e 44 61 74 61 20      if (dynData 
76e0: 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  != null)..      
76f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7700: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
7710: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7720: 20 64 79 6e 44 61 74 61 2e 43 6c 6f 73 65 28 29   dynData.Close()
7730: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
7740: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
7750: 79 6e 44 61 74 61 20 3d 20 6e 75 6c 6c 3b 0d 0a  ynData = null;..
7760: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7770: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
7780: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7790: 20 20 20 20 20 69 66 20 28 6c 6f 63 61 6c 4d 61       if (localMa
77a0: 63 68 69 6e 65 20 21 3d 20 6e 75 6c 6c 29 0d 0a  chine != null)..
77b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
77c0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
77d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
77e0: 20 20 20 20 20 20 20 6c 6f 63 61 6c 4d 61 63 68         localMach
77f0: 69 6e 65 2e 43 6c 6f 73 65 28 29 3b 0d 0a 20 20  ine.Close();..  
7800: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7810: 20 20 20 20 20 20 20 20 20 20 6c 6f 63 61 6c 4d            localM
7820: 61 63 68 69 6e 65 20 3d 20 6e 75 6c 6c 3b 0d 0a  achine = null;..
7830: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7840: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
7850: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7860: 20 20 20 20 20 69 66 20 28 70 65 72 66 6f 72 6d       if (perform
7870: 61 6e 63 65 44 61 74 61 20 21 3d 20 6e 75 6c 6c  anceData != null
7880: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
7890: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
78a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
78b0: 20 20 20 20 20 20 20 20 20 20 70 65 72 66 6f 72            perfor
78c0: 6d 61 6e 63 65 44 61 74 61 2e 43 6c 6f 73 65 28  manceData.Close(
78d0: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
78e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
78f0: 70 65 72 66 6f 72 6d 61 6e 63 65 44 61 74 61 20  performanceData 
7900: 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20  = null;..       
7910: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7920: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
7930: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
7940: 20 28 75 73 65 72 73 20 21 3d 20 6e 75 6c 6c 29   (users != null)
7950: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
7960: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
7970: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7980: 20 20 20 20 20 20 20 20 20 75 73 65 72 73 2e 43           users.C
7990: 6c 6f 73 65 28 29 3b 0d 0a 20 20 20 20 20 20 20  lose();..       
79a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
79b0: 20 20 20 20 20 75 73 65 72 73 20 3d 20 6e 75 6c       users = nul
79c0: 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l;..            
79d0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
79e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
79f0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
7a00: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
7a10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7a20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7a30: 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
7a40: 20 20 20 20 20 20 20 20 2f 2f 20 72 65 6c 65 61          // relea
7a50: 73 65 20 75 6e 6d 61 6e 61 67 65 64 20 72 65 73  se unmanaged res
7a60: 6f 75 72 63 65 73 20 68 65 72 65 2e 2e 2e 0d 0a  ources here.....
7a70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7a80: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
7a90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7aa0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
7ab0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7ac0: 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
7ad0: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54            // NOT
7ae0: 45 3a 20 54 68 69 73 20 6f 62 6a 65 63 74 20 69  E: This object i
7af0: 73 20 6e 6f 77 20 64 69 73 70 6f 73 65 64 2e 0d  s now disposed..
7b00: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
7b10: 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
7b20: 20 20 20 20 20 20 20 20 20 20 20 20 20 64 69 73               dis
7b30: 70 6f 73 65 64 20 3d 20 74 72 75 65 3b 0d 0a 20  posed = true;.. 
7b40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
7b50: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
7b60: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e  .            #en
7b70: 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
7b80: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
7b90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7ba0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7bb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7bc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
7bd0: 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f            #regio
7be0: 6e 20 49 44 69 73 70 6f 73 61 62 6c 65 20 4d 65  n IDisposable Me
7bf0: 6d 62 65 72 73 0d 0a 20 20 20 20 20 20 20 20 20  mbers..         
7c00: 20 20 20 70 75 62 6c 69 63 20 76 6f 69 64 20 44     public void D
7c10: 69 73 70 6f 73 65 28 29 0d 0a 20 20 20 20 20 20  ispose()..      
7c20: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
7c30: 20 20 20 20 20 20 20 20 20 44 69 73 70 6f 73 65           Dispose
7c40: 28 74 72 75 65 29 3b 0d 0a 20 20 20 20 20 20 20  (true);..       
7c50: 20 20 20 20 20 20 20 20 20 47 43 2e 53 75 70 70           GC.Supp
7c60: 72 65 73 73 46 69 6e 61 6c 69 7a 65 28 74 68 69  ressFinalize(thi
7c70: 73 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s);..           
7c80: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
7c90: 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20  #endregion....  
7ca0: 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
7cb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7cc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7cd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7ce0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
7cf0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 72 65  .            #re
7d00: 67 69 6f 6e 20 44 65 73 74 72 75 63 74 6f 72 0d  gion Destructor.
7d10: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7e 4d 6f  .            ~Mo
7d20: 63 6b 52 65 67 69 73 74 72 79 28 29 0d 0a 20 20  ckRegistry()..  
7d30: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
7d40: 20 20 20 20 20 20 20 20 20 20 20 20 20 44 69 73               Dis
7d50: 70 6f 73 65 28 66 61 6c 73 65 29 3b 0d 0a 20 20  pose(false);..  
7d60: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
7d70: 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67           #endreg
7d80: 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  ion..        }..
7d90: 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
7da0: 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  on....        //
7db0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7dc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7dd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7de0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7df0: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
7e00: 20 23 72 65 67 69 6f 6e 20 4d 6f 63 6b 52 65 67   #region MockReg
7e10: 69 73 74 72 79 4b 65 79 20 43 6c 61 73 73 0d 0a  istryKey Class..
7e20: 20 20 20 20 20 20 20 20 69 6e 74 65 72 6e 61 6c          internal
7e30: 20 73 65 61 6c 65 64 20 63 6c 61 73 73 20 4d 6f   sealed class Mo
7e40: 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 3a 20  ckRegistryKey : 
7e50: 49 44 69 73 70 6f 73 61 62 6c 65 0d 0a 20 20 20  IDisposable..   
7e60: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
7e70: 20 20 20 20 23 72 65 67 69 6f 6e 20 50 72 69 76      #region Priv
7e80: 61 74 65 20 43 6f 6e 73 74 72 75 63 74 6f 72 73  ate Constructors
7e90: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
7ea0: 69 76 61 74 65 20 4d 6f 63 6b 52 65 67 69 73 74  ivate MockRegist
7eb0: 72 79 4b 65 79 28 29 0d 0a 20 20 20 20 20 20 20  ryKey()..       
7ec0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
7ed0: 20 20 20 20 20 20 20 20 77 68 61 74 49 66 20 3d          whatIf =
7ee0: 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20   true;..        
7ef0: 20 20 20 20 20 20 20 20 72 65 61 64 4f 6e 6c 79          readOnly
7f00: 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20   = true;..      
7f10: 20 20 20 20 20 20 20 20 20 20 73 61 66 65 20 3d            safe =
7f20: 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20   true;..        
7f30: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
7f40: 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
7f50: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
7f60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7f70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7f80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7f90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7fa0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
7fb0: 23 72 65 67 69 6f 6e 20 50 75 62 6c 69 63 20 43  #region Public C
7fc0: 6f 6e 73 74 72 75 63 74 6f 72 73 0d 0a 20 20 20  onstructors..   
7fd0: 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
7fe0: 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 28  MockRegistryKey(
7ff0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
8000: 20 20 52 65 67 69 73 74 72 79 4b 65 79 20 6b 65    RegistryKey ke
8010: 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  y..             
8020: 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20     )..          
8030: 20 20 20 20 20 20 3a 20 74 68 69 73 28 29 0d 0a        : this()..
8040: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
8050: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
8060: 68 69 73 2e 6b 65 79 20 3d 20 6b 65 79 3b 0d 0a  his.key = key;..
8070: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
8080: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
8090: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
80a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
80b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
80c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
80d0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
80e0: 70 75 62 6c 69 63 20 4d 6f 63 6b 52 65 67 69 73  public MockRegis
80f0: 74 72 79 4b 65 79 28 0d 0a 20 20 20 20 20 20 20  tryKey(..       
8100: 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72           Registr
8110: 79 4b 65 79 20 6b 65 79 2c 0d 0a 20 20 20 20 20  yKey key,..     
8120: 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
8130: 67 20 73 75 62 4b 65 79 4e 61 6d 65 0d 0a 20 20  g subKeyName..  
8140: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d                ).
8150: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
8160: 20 3a 20 74 68 69 73 28 6b 65 79 29 0d 0a 20 20   : this(key)..  
8170: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
8180: 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69               thi
8190: 73 2e 73 75 62 4b 65 79 4e 61 6d 65 20 3d 20 73  s.subKeyName = s
81a0: 75 62 4b 65 79 4e 61 6d 65 3b 0d 0a 20 20 20 20  ubKeyName;..    
81b0: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
81c0: 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
81d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
81e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
81f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8200: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
8210: 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
8220: 69 63 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b  ic MockRegistryK
8230: 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ey(..           
8240: 20 20 20 20 20 52 65 67 69 73 74 72 79 4b 65 79       RegistryKey
8250: 20 6b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20   key,..         
8260: 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 73 75         string su
8270: 62 4b 65 79 4e 61 6d 65 2c 0d 0a 20 20 20 20 20  bKeyName,..     
8280: 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
8290: 77 68 61 74 49 66 0d 0a 20 20 20 20 20 20 20 20  whatIf..        
82a0: 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
82b0: 20 20 20 20 20 20 20 20 20 20 20 3a 20 74 68 69             : thi
82c0: 73 28 6b 65 79 2c 20 73 75 62 4b 65 79 4e 61 6d  s(key, subKeyNam
82d0: 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e)..            
82e0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
82f0: 20 20 20 74 68 69 73 2e 77 68 61 74 49 66 20 3d     this.whatIf =
8300: 20 77 68 61 74 49 66 3b 0d 0a 20 20 20 20 20 20   whatIf;..      
8310: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
8320: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
8330: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8340: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8350: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8360: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
8370: 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
8380: 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79   MockRegistryKey
8390: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
83a0: 20 20 20 52 65 67 69 73 74 72 79 4b 65 79 20 6b     RegistryKey k
83b0: 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ey,..           
83c0: 20 20 20 20 20 73 74 72 69 6e 67 20 73 75 62 4b       string subK
83d0: 65 79 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20  eyName,..       
83e0: 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68           bool wh
83f0: 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20  atIf,..         
8400: 20 20 20 20 20 20 20 62 6f 6f 6c 20 72 65 61 64         bool read
8410: 4f 6e 6c 79 0d 0a 20 20 20 20 20 20 20 20 20 20  Only..          
8420: 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
8430: 20 20 20 20 20 20 20 20 20 3a 20 74 68 69 73 28           : this(
8440: 6b 65 79 2c 20 73 75 62 4b 65 79 4e 61 6d 65 2c  key, subKeyName,
8450: 20 77 68 61 74 49 66 29 0d 0a 20 20 20 20 20 20   whatIf)..      
8460: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
8470: 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 72 65           this.re
8480: 61 64 4f 6e 6c 79 20 3d 20 72 65 61 64 4f 6e 6c  adOnly = readOnl
8490: 79 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y;..            
84a0: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
84b0: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
84c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
84d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
84e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
84f0: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
8500: 20 20 20 20 70 75 62 6c 69 63 20 4d 6f 63 6b 52      public MockR
8510: 65 67 69 73 74 72 79 4b 65 79 28 0d 0a 20 20 20  egistryKey(..   
8520: 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67               Reg
8530: 69 73 74 72 79 4b 65 79 20 6b 65 79 2c 0d 0a 20  istryKey key,.. 
8540: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
8550: 74 72 69 6e 67 20 73 75 62 4b 65 79 4e 61 6d 65  tring subKeyName
8560: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
8570: 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d     bool whatIf,.
8580: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
8590: 20 62 6f 6f 6c 20 72 65 61 64 4f 6e 6c 79 2c 0d   bool readOnly,.
85a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
85b0: 20 62 6f 6f 6c 20 73 61 66 65 0d 0a 20 20 20 20   bool safe..    
85c0: 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
85d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3a                 :
85e0: 20 74 68 69 73 28 6b 65 79 2c 20 73 75 62 4b 65   this(key, subKe
85f0: 79 4e 61 6d 65 2c 20 77 68 61 74 49 66 2c 20 72  yName, whatIf, r
8600: 65 61 64 4f 6e 6c 79 29 0d 0a 20 20 20 20 20 20  eadOnly)..      
8610: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
8620: 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 73 61           this.sa
8630: 66 65 20 3d 20 73 61 66 65 3b 0d 0a 20 20 20 20  fe = safe;..    
8640: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
8650: 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
8660: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8670: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8680: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8690: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
86a0: 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
86b0: 69 63 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b  ic MockRegistryK
86c0: 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ey(..           
86d0: 20 20 20 20 20 52 65 67 69 73 74 72 79 4b 65 79       RegistryKey
86e0: 20 6b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20   key,..         
86f0: 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74         bool what
8700: 49 66 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  If..            
8710: 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20      )..         
8720: 20 20 20 20 20 20 20 3a 20 74 68 69 73 28 6b 65         : this(ke
8730: 79 2c 20 6e 75 6c 6c 2c 20 77 68 61 74 49 66 29  y, null, whatIf)
8740: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
8750: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
8760: 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d   // do nothing..
8770: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
8780: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
8790: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
87a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
87b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
87c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
87d0: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
87e0: 20 70 75 62 6c 69 63 20 4d 6f 63 6b 52 65 67 69   public MockRegi
87f0: 73 74 72 79 4b 65 79 28 0d 0a 20 20 20 20 20 20  stryKey(..      
8800: 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74            Regist
8810: 72 79 4b 65 79 20 6b 65 79 2c 0d 0a 20 20 20 20  ryKey key,..    
8820: 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
8830: 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20   whatIf,..      
8840: 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 72            bool r
8850: 65 61 64 4f 6e 6c 79 0d 0a 20 20 20 20 20 20 20  eadOnly..       
8860: 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
8870: 20 20 20 20 20 20 20 20 20 20 20 20 3a 20 74 68              : th
8880: 69 73 28 6b 65 79 2c 20 6e 75 6c 6c 2c 20 77 68  is(key, null, wh
8890: 61 74 49 66 2c 20 72 65 61 64 4f 6e 6c 79 29 0d  atIf, readOnly).
88a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
88b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
88c0: 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a  // do nothing...
88d0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
88e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
88f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8900: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8910: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8920: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8930: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
8940: 70 75 62 6c 69 63 20 4d 6f 63 6b 52 65 67 69 73  public MockRegis
8950: 74 72 79 4b 65 79 28 0d 0a 20 20 20 20 20 20 20  tryKey(..       
8960: 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72           Registr
8970: 79 4b 65 79 20 6b 65 79 2c 0d 0a 20 20 20 20 20  yKey key,..     
8980: 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
8990: 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20  whatIf,..       
89a0: 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 72 65           bool re
89b0: 61 64 4f 6e 6c 79 2c 0d 0a 20 20 20 20 20 20 20  adOnly,..       
89c0: 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 73 61           bool sa
89d0: 66 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  fe..            
89e0: 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20      )..         
89f0: 20 20 20 20 20 20 20 3a 20 74 68 69 73 28 6b 65         : this(ke
8a00: 79 2c 20 6e 75 6c 6c 2c 20 77 68 61 74 49 66 2c  y, null, whatIf,
8a10: 20 72 65 61 64 4f 6e 6c 79 2c 20 73 61 66 65 29   readOnly, safe)
8a20: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
8a30: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
8a40: 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d   // do nothing..
8a50: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
8a60: 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64              #end
8a70: 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20  region....      
8a80: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
8a90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8aa0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8ab0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8ac0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
8ad0: 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e           #region
8ae0: 20 50 75 62 6c 69 63 20 4d 65 74 68 6f 64 73 0d   Public Methods.
8af0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
8b00: 6c 69 63 20 76 6f 69 64 20 43 6c 6f 73 65 28 29  lic void Close()
8b10: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
8b20: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
8b30: 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
8b40: 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 4e 6f       // NOTE: No
8b50: 20 64 69 73 70 6f 73 65 64 20 63 68 65 63 6b 20   disposed check 
8b60: 68 65 72 65 20 62 65 63 61 75 73 65 20 63 61 6c  here because cal
8b70: 6c 69 6e 67 20 74 68 69 73 20 6d 65 74 68 6f 64  ling this method
8b80: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
8b90: 20 20 2f 2f 20 20 20 20 20 20 20 73 68 6f 75 6c    //       shoul
8ba0: 64 20 62 65 20 6a 75 73 74 20 6c 69 6b 65 20 63  d be just like c
8bb0: 61 6c 6c 69 6e 67 20 44 69 73 70 6f 73 65 2e 0d  alling Dispose..
8bc0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
8bd0: 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
8be0: 20 20 20 20 20 44 69 73 70 6f 73 65 28 74 72 75       Dispose(tru
8bf0: 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e);..           
8c00: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
8c10: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
8c20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8c30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8c40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8c50: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
8c60: 20 20 20 20 20 70 75 62 6c 69 63 20 4d 6f 63 6b       public Mock
8c70: 52 65 67 69 73 74 72 79 4b 65 79 20 43 72 65 61  RegistryKey Crea
8c80: 74 65 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20  teSubKey(..     
8c90: 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
8ca0: 67 20 73 75 62 4b 65 79 4e 61 6d 65 0d 0a 20 20  g subKeyName..  
8cb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d                ).
8cc0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
8cd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8ce0: 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b  CheckDisposed();
8cf0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
8d00: 20 20 43 68 65 63 6b 52 65 61 64 4f 6e 6c 79 28    CheckReadOnly(
8d10: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
8d20: 20 20 20 20 20 20 69 66 20 28 6b 65 79 20 3d 3d        if (key ==
8d30: 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
8d40: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
8d50: 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20  rn null;....    
8d60: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
8d70: 77 68 61 74 49 66 29 0d 0a 20 20 20 20 20 20 20  whatIf)..       
8d80: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
8d90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8da0: 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
8db0: 20 20 20 20 20 20 20 20 2f 2f 20 48 41 43 4b 3a          // HACK:
8dc0: 20 41 74 74 65 6d 70 74 20 74 6f 20 6f 70 65 6e   Attempt to open
8dd0: 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20 73   the specified s
8de0: 75 62 2d 6b 65 79 2e 20 20 49 66 20 74 68 69 73  ub-key.  If this
8df0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
8e00: 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 66        //       f
8e10: 61 69 6c 73 2c 20 77 65 20 77 69 6c 6c 20 73 69  ails, we will si
8e20: 6d 70 6c 79 20 72 65 74 75 72 6e 20 74 68 65 20  mply return the 
8e30: 77 72 61 70 70 65 64 20 72 6f 6f 74 20 6b 65 79  wrapped root key
8e40: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
8e50: 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 69        //       i
8e60: 74 73 65 6c 66 20 73 69 6e 63 65 20 6e 6f 20 77  tself since no w
8e70: 72 69 74 65 73 20 61 72 65 20 61 6c 6c 6f 77 65  rites are allowe
8e80: 64 20 69 6e 20 27 77 68 61 74 2d 69 66 27 0d 0a  d in 'what-if'..
8e90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8ea0: 20 20 20 20 2f 2f 20 20 20 20 20 20 20 6d 6f 64      //       mod
8eb0: 65 20 61 6e 79 68 6f 77 2e 0d 0a 20 20 20 20 20  e anyhow...     
8ec0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
8ed0: 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
8ee0: 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79 4b         RegistryK
8ef0: 65 79 20 73 75 62 4b 65 79 20 3d 20 6b 65 79 2e  ey subKey = key.
8f00: 4f 70 65 6e 53 75 62 4b 65 79 28 73 75 62 4b 65  OpenSubKey(subKe
8f10: 79 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20  yName);....     
8f20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
8f30: 65 74 75 72 6e 20 28 73 75 62 4b 65 79 20 21 3d  eturn (subKey !=
8f40: 20 6e 75 6c 6c 29 20 3f 0d 0a 20 20 20 20 20 20   null) ?..      
8f50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8f60: 20 20 6e 65 77 20 4d 6f 63 6b 52 65 67 69 73 74    new MockRegist
8f70: 72 79 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20  ryKey(..        
8f80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8f90: 20 20 20 20 20 20 20 20 73 75 62 4b 65 79 2c 20          subKey, 
8fa0: 77 68 61 74 49 66 2c 20 72 65 61 64 4f 6e 6c 79  whatIf, readOnly
8fb0: 2c 20 73 61 66 65 29 20 3a 0d 0a 20 20 20 20 20  , safe) :..     
8fc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8fd0: 20 20 20 6e 65 77 20 4d 6f 63 6b 52 65 67 69 73     new MockRegis
8fe0: 74 72 79 4b 65 79 28 0d 0a 20 20 20 20 20 20 20  tryKey(..       
8ff0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9000: 20 20 20 20 20 20 20 20 20 6b 65 79 2c 20 73 75           key, su
9010: 62 4b 65 79 4e 61 6d 65 2c 20 77 68 61 74 49 66  bKeyName, whatIf
9020: 2c 20 72 65 61 64 4f 6e 6c 79 2c 20 73 61 66 65  , readOnly, safe
9030: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
9040: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
9050: 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20         else..   
9060: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
9070: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9080: 20 20 20 20 72 65 74 75 72 6e 20 6e 65 77 20 4d      return new M
9090: 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 28 0d  ockRegistryKey(.
90a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
90b0: 20 20 20 20 20 20 20 20 20 6b 65 79 2e 43 72 65           key.Cre
90c0: 61 74 65 53 75 62 4b 65 79 28 73 75 62 4b 65 79  ateSubKey(subKey
90d0: 4e 61 6d 65 29 2c 20 77 68 61 74 49 66 2c 20 72  Name), whatIf, r
90e0: 65 61 64 4f 6e 6c 79 2c 20 73 61 66 65 29 3b 0d  eadOnly, safe);.
90f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
9100: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
9110: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
9120: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
9130: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9140: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9150: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9160: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
9170: 20 20 20 20 70 75 62 6c 69 63 20 76 6f 69 64 20      public void 
9180: 44 65 6c 65 74 65 53 75 62 4b 65 79 28 0d 0a 20  DeleteSubKey(.. 
9190: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
91a0: 74 72 69 6e 67 20 73 75 62 4b 65 79 4e 61 6d 65  tring subKeyName
91b0: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
91c0: 20 20 20 62 6f 6f 6c 20 74 68 72 6f 77 4f 6e 4d     bool throwOnM
91d0: 69 73 73 69 6e 67 0d 0a 20 20 20 20 20 20 20 20  issing..        
91e0: 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
91f0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
9200: 20 20 20 20 20 20 20 20 20 20 43 68 65 63 6b 44            CheckD
9210: 69 73 70 6f 73 65 64 28 29 3b 0d 0a 20 20 20 20  isposed();..    
9220: 20 20 20 20 20 20 20 20 20 20 20 20 43 68 65 63              Chec
9230: 6b 52 65 61 64 4f 6e 6c 79 28 29 3b 0d 0a 0d 0a  kReadOnly();....
9240: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9250: 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29  if (key == null)
9260: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
9270: 20 20 20 20 20 20 72 65 74 75 72 6e 3b 0d 0a 0d        return;...
9280: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
9290: 20 69 66 20 28 21 77 68 61 74 49 66 29 0d 0a 20   if (!whatIf).. 
92a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
92b0: 20 20 20 6b 65 79 2e 44 65 6c 65 74 65 53 75 62     key.DeleteSub
92c0: 4b 65 79 28 73 75 62 4b 65 79 4e 61 6d 65 2c 20  Key(subKeyName, 
92d0: 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 29 3b  throwOnMissing);
92e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
92f0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
9300: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9310: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9320: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9330: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9340: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
9350: 20 20 70 75 62 6c 69 63 20 76 6f 69 64 20 44 65    public void De
9360: 6c 65 74 65 53 75 62 4b 65 79 54 72 65 65 28 0d  leteSubKeyTree(.
9370: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
9380: 20 73 74 72 69 6e 67 20 73 75 62 4b 65 79 4e 61   string subKeyNa
9390: 6d 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  me..            
93a0: 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20      )..         
93b0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
93c0: 20 20 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f        CheckDispo
93d0: 73 65 64 28 29 3b 0d 0a 20 20 20 20 20 20 20 20  sed();..        
93e0: 20 20 20 20 20 20 20 20 43 68 65 63 6b 52 65 61          CheckRea
93f0: 64 4f 6e 6c 79 28 29 3b 0d 0a 0d 0a 20 20 20 20  dOnly();....    
9400: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
9410: 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  key == null)..  
9420: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9430: 20 20 72 65 74 75 72 6e 3b 0d 0a 0d 0a 20 20 20    return;....   
9440: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
9450: 28 21 77 68 61 74 49 66 29 0d 0a 20 20 20 20 20  (!whatIf)..     
9460: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6b                 k
9470: 65 79 2e 44 65 6c 65 74 65 53 75 62 4b 65 79 54  ey.DeleteSubKeyT
9480: 72 65 65 28 73 75 62 4b 65 79 4e 61 6d 65 29 3b  ree(subKeyName);
9490: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
94a0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
94b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
94c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
94d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
94e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
94f0: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
9500: 20 20 70 75 62 6c 69 63 20 76 6f 69 64 20 44 65    public void De
9510: 6c 65 74 65 56 61 6c 75 65 28 0d 0a 20 20 20 20  leteValue(..    
9520: 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
9530: 6e 67 20 6e 61 6d 65 2c 0d 0a 20 20 20 20 20 20  ng name,..      
9540: 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 74            bool t
9550: 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 0d 0a 20  hrowOnMissing.. 
9560: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29                 )
9570: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
9580: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
9590: 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29   CheckDisposed()
95a0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
95b0: 20 20 20 43 68 65 63 6b 52 65 61 64 4f 6e 6c 79     CheckReadOnly
95c0: 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ();....         
95d0: 20 20 20 20 20 20 20 69 66 20 28 6b 65 79 20 3d         if (key =
95e0: 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
95f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
9600: 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  urn;....        
9610: 20 20 20 20 20 20 20 20 69 66 20 28 21 77 68 61          if (!wha
9620: 74 49 66 29 0d 0a 20 20 20 20 20 20 20 20 20 20  tIf)..          
9630: 20 20 20 20 20 20 20 20 20 20 6b 65 79 2e 44 65            key.De
9640: 6c 65 74 65 56 61 6c 75 65 28 6e 61 6d 65 2c 20  leteValue(name, 
9650: 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 29 3b  throwOnMissing);
9660: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
9670: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
9680: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9690: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
96a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
96b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
96c0: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
96d0: 20 20 70 75 62 6c 69 63 20 73 74 72 69 6e 67 5b    public string[
96e0: 5d 20 47 65 74 53 75 62 4b 65 79 4e 61 6d 65 73  ] GetSubKeyNames
96f0: 28 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ()..            
9700: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
9710: 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64     CheckDisposed
9720: 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ();....         
9730: 20 20 20 20 20 20 20 69 66 20 28 6b 65 79 20 3d         if (key =
9740: 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
9750: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
9760: 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20  urn null;....   
9770: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
9780: 75 72 6e 20 6b 65 79 2e 47 65 74 53 75 62 4b 65  urn key.GetSubKe
9790: 79 4e 61 6d 65 73 28 29 3b 0d 0a 20 20 20 20 20  yNames();..     
97a0: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
97b0: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
97c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
97d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
97e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
97f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
9800: 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
9810: 63 20 6f 62 6a 65 63 74 20 47 65 74 56 61 6c 75  c object GetValu
9820: 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
9830: 20 20 20 20 73 74 72 69 6e 67 20 6e 61 6d 65 2c      string name,
9840: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
9850: 20 20 6f 62 6a 65 63 74 20 64 65 66 61 75 6c 74    object default
9860: 56 61 6c 75 65 0d 0a 20 20 20 20 20 20 20 20 20  Value..         
9870: 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
9880: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
9890: 20 20 20 20 20 20 20 20 20 43 68 65 63 6b 44 69           CheckDi
98a0: 73 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20 20 20  sposed();....   
98b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
98c0: 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  (key == null).. 
98d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
98e0: 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d     return null;.
98f0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
9900: 20 20 20 72 65 74 75 72 6e 20 6b 65 79 2e 47 65     return key.Ge
9910: 74 56 61 6c 75 65 28 6e 61 6d 65 2c 20 64 65 66  tValue(name, def
9920: 61 75 6c 74 56 61 6c 75 65 29 3b 0d 0a 20 20 20  aultValue);..   
9930: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
9940: 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
9950: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9960: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9970: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9980: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
9990: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
99a0: 6c 69 63 20 4d 6f 63 6b 52 65 67 69 73 74 72 79  lic MockRegistry
99b0: 4b 65 79 20 4f 70 65 6e 53 75 62 4b 65 79 28 0d  Key OpenSubKey(.
99c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
99d0: 20 73 74 72 69 6e 67 20 73 75 62 4b 65 79 4e 61   string subKeyNa
99e0: 6d 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  me..            
99f0: 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20      )..         
9a00: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
9a10: 20 20 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f        CheckDispo
9a20: 73 65 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  sed();....      
9a30: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
9a40: 20 4f 70 65 6e 53 75 62 4b 65 79 28 73 75 62 4b   OpenSubKey(subK
9a50: 65 79 4e 61 6d 65 2c 20 66 61 6c 73 65 29 3b 0d  eyName, false);.
9a60: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
9a70: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
9a80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9a90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9aa0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9ab0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9ac0: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
9ad0: 20 70 75 62 6c 69 63 20 4d 6f 63 6b 52 65 67 69   public MockRegi
9ae0: 73 74 72 79 4b 65 79 20 4f 70 65 6e 53 75 62 4b  stryKey OpenSubK
9af0: 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ey(..           
9b00: 20 20 20 20 20 73 74 72 69 6e 67 20 73 75 62 4b       string subK
9b10: 65 79 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20  eyName,..       
9b20: 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 72           bool wr
9b30: 69 74 61 62 6c 65 0d 0a 20 20 20 20 20 20 20 20  itable..        
9b40: 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
9b50: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
9b60: 20 20 20 20 20 20 20 20 20 20 43 68 65 63 6b 44            CheckD
9b70: 69 73 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20 20  isposed();....  
9b80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
9b90: 20 28 77 72 69 74 61 62 6c 65 29 0d 0a 20 20 20   (writable)..   
9ba0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9bb0: 20 43 68 65 63 6b 52 65 61 64 4f 6e 6c 79 28 29   CheckReadOnly()
9bc0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
9bd0: 20 20 20 20 20 69 66 20 28 6b 65 79 20 3d 3d 20       if (key == 
9be0: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
9bf0: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
9c00: 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20  n null;....     
9c10: 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73             Regis
9c20: 74 72 79 4b 65 79 20 73 75 62 4b 65 79 20 3d 20  tryKey subKey = 
9c30: 6b 65 79 2e 4f 70 65 6e 53 75 62 4b 65 79 28 0d  key.OpenSubKey(.
9c40: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
9c50: 20 20 20 20 20 73 75 62 4b 65 79 4e 61 6d 65 2c       subKeyName,
9c60: 20 77 68 61 74 49 66 20 3f 20 66 61 6c 73 65 20   whatIf ? false 
9c70: 3a 20 77 72 69 74 61 62 6c 65 29 3b 0d 0a 0d 0a  : writable);....
9c80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9c90: 72 65 74 75 72 6e 20 28 73 75 62 4b 65 79 20 21  return (subKey !
9ca0: 3d 20 6e 75 6c 6c 29 20 3f 0d 0a 20 20 20 20 20  = null) ?..     
9cb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e                 n
9cc0: 65 77 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b  ew MockRegistryK
9cd0: 65 79 28 73 75 62 4b 65 79 2c 20 77 68 61 74 49  ey(subKey, whatI
9ce0: 66 2c 20 72 65 61 64 4f 6e 6c 79 2c 20 73 61 66  f, readOnly, saf
9cf0: 65 29 20 3a 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20  e) : null;..    
9d00: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
9d10: 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
9d20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
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 0d 0a 0d 0a  ////////////....
9d60: 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
9d70: 69 63 20 76 6f 69 64 20 53 65 74 56 61 6c 75 65  ic void SetValue
9d80: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
9d90: 20 20 20 73 74 72 69 6e 67 20 6e 61 6d 65 2c 0d     string name,.
9da0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
9db0: 20 6f 62 6a 65 63 74 20 76 61 6c 75 65 0d 0a 20   object value.. 
9dc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29                 )
9dd0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
9de0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
9df0: 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29   CheckDisposed()
9e00: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
9e10: 20 20 20 43 68 65 63 6b 52 65 61 64 4f 6e 6c 79     CheckReadOnly
9e20: 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ();....         
9e30: 20 20 20 20 20 20 20 69 66 20 28 6b 65 79 20 3d         if (key =
9e40: 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
9e50: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
9e60: 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  urn;....        
9e70: 20 20 20 20 20 20 20 20 69 66 20 28 21 77 68 61          if (!wha
9e80: 74 49 66 29 0d 0a 20 20 20 20 20 20 20 20 20 20  tIf)..          
9e90: 20 20 20 20 20 20 20 20 20 20 6b 65 79 2e 53 65            key.Se
9ea0: 74 56 61 6c 75 65 28 6e 61 6d 65 2c 20 76 61 6c  tValue(name, val
9eb0: 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ue);..          
9ec0: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
9ed0: 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20   #endregion.... 
9ee0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
9ef0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9f00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9f10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9f20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
9f30: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 72  ..            #r
9f40: 65 67 69 6f 6e 20 50 75 62 6c 69 63 20 50 72 6f  egion Public Pro
9f50: 70 65 72 74 69 65 73 0d 0a 20 20 20 20 20 20 20  perties..       
9f60: 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 72 69       public stri
9f70: 6e 67 20 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20  ng Name..       
9f80: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
9f90: 20 20 20 20 20 20 20 20 67 65 74 0d 0a 20 20 20          get..   
9fa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
9fb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9fc0: 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65      CheckDispose
9fd0: 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  d();....        
9fe0: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
9ff0: 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  key == null)..  
a000: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a010: 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c        return nul
a020: 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  l;....          
a030: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
a040: 20 21 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f   !String.IsNullO
a050: 72 45 6d 70 74 79 28 73 75 62 4b 65 79 4e 61 6d  rEmpty(subKeyNam
a060: 65 29 20 3f 0d 0a 20 20 20 20 20 20 20 20 20 20  e) ?..          
a070: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 74                St
a080: 72 69 6e 67 2e 46 6f 72 6d 61 74 28 22 7b 30 7d  ring.Format("{0}
a090: 5c 5c 7b 31 7d 22 2c 20 6b 65 79 2e 4e 61 6d 65  \\{1}", key.Name
a0a0: 2c 20 73 75 62 4b 65 79 4e 61 6d 65 29 20 3a 0d  , subKeyName) :.
a0b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
a0c0: 20 20 20 20 20 20 20 20 20 6b 65 79 2e 4e 61 6d           key.Nam
a0d0: 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
a0e0: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
a0f0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
a100: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
a110: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20  ///////....     
a150: 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 52         private R
a160: 65 67 69 73 74 72 79 4b 65 79 20 6b 65 79 3b 0d  egistryKey key;.
a170: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
a180: 6c 69 63 20 52 65 67 69 73 74 72 79 4b 65 79 20  lic RegistryKey 
a190: 4b 65 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20  Key..           
a1a0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
a1b0: 20 20 20 20 67 65 74 20 7b 20 43 68 65 63 6b 44      get { CheckD
a1c0: 69 73 70 6f 73 65 64 28 29 3b 20 43 68 65 63 6b  isposed(); Check
a1d0: 53 61 66 65 28 29 3b 20 72 65 74 75 72 6e 20 6b  Safe(); return k
a1e0: 65 79 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  ey; }..         
a1f0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
a200: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
a210: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a220: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a230: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a240: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
a250: 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
a260: 74 72 69 6e 67 20 73 75 62 4b 65 79 4e 61 6d 65  tring subKeyName
a270: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ;..            p
a280: 75 62 6c 69 63 20 73 74 72 69 6e 67 20 53 75 62  ublic string Sub
a290: 4b 65 79 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20  KeyName..       
a2a0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
a2b0: 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 43 68          get { Ch
a2c0: 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 20 72  eckDisposed(); r
a2d0: 65 74 75 72 6e 20 73 75 62 4b 65 79 4e 61 6d 65  eturn subKeyName
a2e0: 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
a2f0: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
a300: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
a310: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a320: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a330: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a340: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
a350: 20 20 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f       private boo
a360: 6c 20 77 68 61 74 49 66 3b 0d 0a 20 20 20 20 20  l whatIf;..     
a370: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f         public bo
a380: 6f 6c 20 57 68 61 74 49 66 0d 0a 20 20 20 20 20  ol WhatIf..     
a390: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
a3a0: 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20            get { 
a3b0: 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b  CheckDisposed();
a3c0: 20 72 65 74 75 72 6e 20 77 68 61 74 49 66 3b 20   return whatIf; 
a3d0: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
a3e0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
a3f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a400: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a410: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a420: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a430: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
a440: 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20     private bool 
a450: 72 65 61 64 4f 6e 6c 79 3b 0d 0a 20 20 20 20 20  readOnly;..     
a460: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f         public bo
a470: 6f 6c 20 52 65 61 64 4f 6e 6c 79 0d 0a 20 20 20  ol ReadOnly..   
a480: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
a490: 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20              get 
a4a0: 7b 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28  { CheckDisposed(
a4b0: 29 3b 20 72 65 74 75 72 6e 20 72 65 61 64 4f 6e  ); return readOn
a4c0: 6c 79 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  ly; }..         
a4d0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
a4e0: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
a4f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a500: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a510: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a520: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
a530: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f         public bo
a540: 6f 6c 20 73 61 66 65 3b 0d 0a 20 20 20 20 20 20  ol safe;..      
a550: 20 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f        public boo
a560: 6c 20 53 61 66 65 0d 0a 20 20 20 20 20 20 20 20  l Safe..        
a570: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
a580: 20 20 20 20 20 20 20 67 65 74 20 7b 20 43 68 65         get { Che
a590: 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 20 72 65  ckDisposed(); re
a5a0: 74 75 72 6e 20 73 61 66 65 3b 20 7d 0d 0a 20 20  turn safe; }..  
a5b0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
a5c0: 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67           #endreg
a5d0: 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ion....         
a5e0: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
a5f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a600: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a610: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a620: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
a630: 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 72        #region Pr
a640: 69 76 61 74 65 20 4d 65 74 68 6f 64 73 0d 0a 20  ivate Methods.. 
a650: 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
a660: 74 65 20 76 6f 69 64 20 43 68 65 63 6b 52 65 61  te void CheckRea
a670: 64 4f 6e 6c 79 28 29 0d 0a 20 20 20 20 20 20 20  dOnly()..       
a680: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
a690: 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
a6a0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e              // N
a6b0: 4f 54 45 3a 20 49 6e 20 22 72 65 61 64 2d 6f 6e  OTE: In "read-on
a6c0: 6c 79 22 20 6d 6f 64 65 2c 20 77 65 20 64 69 73  ly" mode, we dis
a6d0: 61 6c 6c 6f 77 20 61 6c 6c 20 77 72 69 74 65 20  allow all write 
a6e0: 61 63 63 65 73 73 2e 0d 0a 20 20 20 20 20 20 20  access...       
a6f0: 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
a700: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
a710: 28 21 72 65 61 64 4f 6e 6c 79 29 0d 0a 20 20 20  (!readOnly)..   
a720: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a730: 20 72 65 74 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20   return;....    
a740: 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f              thro
a750: 77 20 6e 65 77 20 49 6e 76 61 6c 69 64 4f 70 65  w new InvalidOpe
a760: 72 61 74 69 6f 6e 45 78 63 65 70 74 69 6f 6e 28  rationException(
a770: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
a780: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
a790: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
a7a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a7b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a7c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a7d0: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
a7e0: 20 20 20 20 70 72 69 76 61 74 65 20 76 6f 69 64      private void
a7f0: 20 43 68 65 63 6b 53 61 66 65 28 29 0d 0a 20 20   CheckSafe()..  
a800: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
a810: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
a820: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
a830: 20 2f 2f 20 4e 4f 54 45 3a 20 49 6e 20 22 73 61   // NOTE: In "sa
a840: 66 65 22 20 6d 6f 64 65 2c 20 77 65 20 64 69 73  fe" mode, we dis
a850: 61 6c 6c 6f 77 20 61 6c 6c 20 64 69 72 65 63 74  allow all direct
a860: 20 61 63 63 65 73 73 20 74 6f 20 74 68 65 0d 0a   access to the..
a870: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a880: 2f 2f 20 20 20 20 20 20 20 63 6f 6e 74 61 69 6e  //       contain
a890: 65 64 20 72 65 67 69 73 74 72 79 20 6b 65 79 2e  ed registry key.
a8a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
a8b0: 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
a8c0: 20 20 20 20 20 20 69 66 20 28 21 73 61 66 65 29        if (!safe)
a8d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
a8e0: 20 20 20 20 20 20 72 65 74 75 72 6e 3b 0d 0a 0d        return;...
a8f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
a900: 20 74 68 72 6f 77 20 6e 65 77 20 49 6e 76 61 6c   throw new Inval
a910: 69 64 4f 70 65 72 61 74 69 6f 6e 45 78 63 65 70  idOperationExcep
a920: 74 69 6f 6e 28 29 3b 0d 0a 20 20 20 20 20 20 20  tion();..       
a930: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
a940: 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
a950: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
a960: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a970: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a980: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a990: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a9a0: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
a9b0: 20 23 72 65 67 69 6f 6e 20 53 79 73 74 65 6d 2e   #region System.
a9c0: 4f 62 6a 65 63 74 20 4f 76 65 72 72 69 64 65 73  Object Overrides
a9d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
a9e0: 62 6c 69 63 20 6f 76 65 72 72 69 64 65 20 73 74  blic override st
a9f0: 72 69 6e 67 20 54 6f 53 74 72 69 6e 67 28 29 0d  ring ToString().
aa00: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
aa10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
aa20: 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b  CheckDisposed();
aa30: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
aa40: 20 20 20 20 72 65 74 75 72 6e 20 74 68 69 73 2e      return this.
aa50: 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  Name;..         
aa60: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
aa70: 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a    #endregion....
aa80: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
aa90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
aaa0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
aab0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
aac0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
aad0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  ...            #
aae0: 72 65 67 69 6f 6e 20 49 6d 70 6c 69 63 69 74 20  region Implicit 
aaf0: 43 6f 6e 76 65 72 73 69 6f 6e 20 4f 70 65 72 61  Conversion Opera
ab00: 74 6f 72 73 0d 0a 20 20 20 20 20 20 20 20 20 20  tors..          
ab10: 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
ab20: 20 20 2f 2f 20 42 55 47 42 55 47 3a 20 52 65 6d    // BUGBUG: Rem
ab30: 6f 76 65 20 6d 65 3f 20 20 54 68 69 73 20 73 68  ove me?  This sh
ab40: 6f 75 6c 64 20 62 65 20 73 61 66 65 20 62 65 63  ould be safe bec
ab50: 61 75 73 65 20 69 6e 20 27 77 68 61 74 2d 69 66  ause in 'what-if
ab60: 27 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  '..            /
ab70: 2f 20 20 20 20 20 20 20 20 20 6d 6f 64 65 20 61  /         mode a
ab80: 6c 6c 20 6b 65 79 73 20 61 72 65 20 6f 70 65 6e  ll keys are open
ab90: 65 64 20 72 65 61 64 2d 6f 6e 6c 79 2e 0d 0a 20  ed read-only... 
aba0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
abb0: 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
abc0: 63 20 73 74 61 74 69 63 20 69 6d 70 6c 69 63 69  c static implici
abd0: 74 20 6f 70 65 72 61 74 6f 72 20 52 65 67 69 73  t operator Regis
abe0: 74 72 79 4b 65 79 28 0d 0a 20 20 20 20 20 20 20  tryKey(..       
abf0: 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65 67           MockReg
ac00: 69 73 74 72 79 4b 65 79 20 6b 65 79 0d 0a 20 20  istryKey key..  
ac10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d                ).
ac20: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
ac30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ac40: 72 65 74 75 72 6e 20 28 6b 65 79 20 21 3d 20 6e  return (key != n
ac50: 75 6c 6c 29 20 3f 20 6b 65 79 2e 4b 65 79 20 3a  ull) ? key.Key :
ac60: 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20   null;..        
ac70: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
ac80: 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
ac90: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
aca0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
acb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
acc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
acd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ace0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
acf0: 23 72 65 67 69 6f 6e 20 49 44 69 73 70 6f 73 61  #region IDisposa
ad00: 62 6c 65 20 22 50 61 74 74 65 72 6e 22 20 4d 65  ble "Pattern" Me
ad10: 6d 62 65 72 73 0d 0a 20 20 20 20 20 20 20 20 20  mbers..         
ad20: 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20     private bool 
ad30: 64 69 73 70 6f 73 65 64 3b 0d 0a 20 20 20 20 20  disposed;..     
ad40: 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 76         private v
ad50: 6f 69 64 20 43 68 65 63 6b 44 69 73 70 6f 73 65  oid CheckDispose
ad60: 64 28 29 20 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d  d() /* throw */.
ad70: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
ad80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ad90: 69 66 20 28 21 64 69 73 70 6f 73 65 64 29 0d 0a  if (!disposed)..
ada0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
adb0: 20 20 20 20 72 65 74 75 72 6e 3b 0d 0a 0d 0a 20      return;.... 
adc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
add0: 68 72 6f 77 20 6e 65 77 20 4f 62 6a 65 63 74 44  hrow new ObjectD
ade0: 69 73 70 6f 73 65 64 45 78 63 65 70 74 69 6f 6e  isposedException
adf0: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
ae00: 20 20 20 20 20 20 20 74 79 70 65 6f 66 28 4d 6f         typeof(Mo
ae10: 63 6b 52 65 67 69 73 74 72 79 4b 65 79 29 2e 4e  ckRegistryKey).N
ae20: 61 6d 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ame);..         
ae30: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
ae40: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
ae50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ae60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ae70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ae80: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
ae90: 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 2f         private /
aea0: 2a 20 70 72 6f 74 65 63 74 65 64 20 76 69 72 74  * protected virt
aeb0: 75 61 6c 20 2a 2f 20 76 6f 69 64 20 44 69 73 70  ual */ void Disp
aec0: 6f 73 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ose(..          
aed0: 20 20 20 20 20 20 62 6f 6f 6c 20 64 69 73 70 6f        bool dispo
aee0: 73 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 20 20  sing..          
aef0: 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
af00: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
af10: 20 20 20 20 20 20 20 20 69 66 20 28 21 64 69 73          if (!dis
af20: 70 6f 73 65 64 29 0d 0a 20 20 20 20 20 20 20 20  posed)..        
af30: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
af40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
af50: 66 20 28 64 69 73 70 6f 73 69 6e 67 29 0d 0a 20  f (disposing).. 
af60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
af70: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
af80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
af90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
afa0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
afb0: 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
afc0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64              // d
afd0: 69 73 70 6f 73 65 20 6d 61 6e 61 67 65 64 20 72  ispose managed r
afe0: 65 73 6f 75 72 63 65 73 20 68 65 72 65 2e 2e 2e  esources here...
aff0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
b000: 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
b010: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b020: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
b030: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
b040: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6b 65            if (ke
b050: 79 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  y != null)..    
b060: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b070: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
b080: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b090: 20 20 20 6b 65 79 2e 43 6c 6f 73 65 28 29 3b 0d     key.Close();.
b0a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
b0b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 6b 65 79               key
b0c0: 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20   = null;..      
b0d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b0e0: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
b0f0: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
b100: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b110: 20 20 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 0d 0a 20 20 20 20 20 20  ////////..      
b140: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
b150: 20 72 65 6c 65 61 73 65 20 75 6e 6d 61 6e 61 67   release unmanag
b160: 65 64 20 72 65 73 6f 75 72 63 65 73 20 68 65 72  ed resources her
b170: 65 2e 2e 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  e.....          
b180: 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
b190: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b1a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b1b0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
b1c0: 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
b1d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b1e0: 2f 2f 20 4e 4f 54 45 3a 20 54 68 69 73 20 6f 62  // NOTE: This ob
b1f0: 6a 65 63 74 20 69 73 20 6e 6f 77 20 64 69 73 70  ject is now disp
b200: 6f 73 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 20  osed...         
b210: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
b220: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b230: 20 20 20 64 69 73 70 6f 73 65 64 20 3d 20 74 72     disposed = tr
b240: 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
b250: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
b260: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
b270: 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
b280: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
b290: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b2a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b2b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b2c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b2d0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
b2e0: 23 72 65 67 69 6f 6e 20 49 44 69 73 70 6f 73 61  #region IDisposa
b2f0: 62 6c 65 20 4d 65 6d 62 65 72 73 0d 0a 20 20 20  ble Members..   
b300: 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
b310: 76 6f 69 64 20 44 69 73 70 6f 73 65 28 29 0d 0a  void Dispose()..
b320: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
b330: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 44                 D
b340: 69 73 70 6f 73 65 28 74 72 75 65 29 3b 0d 0a 20  ispose(true);.. 
b350: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 47                 G
b360: 43 2e 53 75 70 70 72 65 73 73 46 69 6e 61 6c 69  C.SuppressFinali
b370: 7a 65 28 74 68 69 73 29 3b 0d 0a 20 20 20 20 20  ze(this);..     
b380: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
b390: 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
b3a0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
b3b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b3c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b3d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b3e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b3f0: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
b400: 20 20 20 23 72 65 67 69 6f 6e 20 44 65 73 74 72     #region Destr
b410: 75 63 74 6f 72 0d 0a 20 20 20 20 20 20 20 20 20  uctor..         
b420: 20 20 20 7e 4d 6f 63 6b 52 65 67 69 73 74 72 79     ~MockRegistry
b430: 4b 65 79 28 29 0d 0a 20 20 20 20 20 20 20 20 20  Key()..         
b440: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
b450: 20 20 20 20 20 20 44 69 73 70 6f 73 65 28 66 61        Dispose(fa
b460: 6c 73 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  lse);..         
b470: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
b480: 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 20 20    #endregion..  
b490: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
b4a0: 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20   #endregion.... 
b4b0: 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
b500: 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f  ..        #regio
b510: 6e 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72  n RegistryHelper
b520: 20 43 6c 61 73 73 0d 0a 20 20 20 20 20 20 20 20   Class..        
b530: 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 63  private static c
b540: 6c 61 73 73 20 52 65 67 69 73 74 72 79 48 65 6c  lass RegistryHel
b550: 70 65 72 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  per..        {..
b560: 20 20 20 20 20 20 20 20 20 20 20 20 23 72 65 67              #reg
b570: 69 6f 6e 20 50 75 62 6c 69 63 20 53 74 61 74 69  ion Public Stati
b580: 63 20 50 72 6f 70 65 72 74 69 65 73 0d 0a 20 20  c Properties..  
b590: 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
b5a0: 65 20 73 74 61 74 69 63 20 69 6e 74 20 73 75 62  e static int sub
b5b0: 4b 65 79 73 43 72 65 61 74 65 64 3b 0d 0a 20 20  KeysCreated;..  
b5c0: 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
b5d0: 20 73 74 61 74 69 63 20 69 6e 74 20 53 75 62 4b   static int SubK
b5e0: 65 79 73 43 72 65 61 74 65 64 0d 0a 20 20 20 20  eysCreated..    
b5f0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
b600: 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b             get {
b610: 20 72 65 74 75 72 6e 20 73 75 62 4b 65 79 73 43   return subKeysC
b620: 72 65 61 74 65 64 3b 20 7d 0d 0a 20 20 20 20 20  reated; }..     
b630: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
b640: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
b650: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b660: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b670: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b680: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
b690: 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
b6a0: 74 65 20 73 74 61 74 69 63 20 69 6e 74 20 73 75  te static int su
b6b0: 62 4b 65 79 73 44 65 6c 65 74 65 64 3b 0d 0a 20  bKeysDeleted;.. 
b6c0: 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
b6d0: 63 20 73 74 61 74 69 63 20 69 6e 74 20 53 75 62  c static int Sub
b6e0: 4b 65 79 73 44 65 6c 65 74 65 64 0d 0a 20 20 20  KeysDeleted..   
b6f0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
b700: 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20              get 
b710: 7b 20 72 65 74 75 72 6e 20 73 75 62 4b 65 79 73  { return subKeys
b720: 44 65 6c 65 74 65 64 3b 20 7d 0d 0a 20 20 20 20  Deleted; }..    
b730: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
b740: 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
b750: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b760: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b770: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b780: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
b790: 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
b7a0: 61 74 65 20 73 74 61 74 69 63 20 69 6e 74 20 6b  ate static int k
b7b0: 65 79 56 61 6c 75 65 73 53 65 74 3b 0d 0a 20 20  eyValuesSet;..  
b7c0: 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
b7d0: 20 73 74 61 74 69 63 20 69 6e 74 20 4b 65 79 56   static int KeyV
b7e0: 61 6c 75 65 73 53 65 74 0d 0a 20 20 20 20 20 20  aluesSet..      
b7f0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
b800: 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72           get { r
b810: 65 74 75 72 6e 20 6b 65 79 56 61 6c 75 65 73 53  eturn keyValuesS
b820: 65 74 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  et; }..         
b830: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
b840: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
b850: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b860: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b870: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b880: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
b890: 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
b8a0: 74 61 74 69 63 20 69 6e 74 20 6b 65 79 56 61 6c  tatic int keyVal
b8b0: 75 65 73 44 65 6c 65 74 65 64 3b 0d 0a 20 20 20  uesDeleted;..   
b8c0: 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
b8d0: 73 74 61 74 69 63 20 69 6e 74 20 4b 65 79 56 61  static int KeyVa
b8e0: 6c 75 65 73 44 65 6c 65 74 65 64 0d 0a 20 20 20  luesDeleted..   
b8f0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
b900: 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20              get 
b910: 7b 20 72 65 74 75 72 6e 20 6b 65 79 56 61 6c 75  { return keyValu
b920: 65 73 44 65 6c 65 74 65 64 3b 20 7d 0d 0a 20 20  esDeleted; }..  
b930: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
b940: 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67           #endreg
b950: 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ion....         
b960: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
b970: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b980: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b990: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b9a0: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
b9b0: 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 75        #region Pu
b9c0: 62 6c 69 63 20 53 74 61 74 69 63 20 4d 65 74 68  blic Static Meth
b9d0: 6f 64 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ods..           
b9e0: 20 5b 4d 65 74 68 6f 64 49 6d 70 6c 28 4d 65 74   [MethodImpl(Met
b9f0: 68 6f 64 49 6d 70 6c 4f 70 74 69 6f 6e 73 2e 4e  hodImplOptions.N
ba00: 6f 49 6e 6c 69 6e 69 6e 67 29 5d 0d 0a 20 20 20  oInlining)]..   
ba10: 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
ba20: 73 74 61 74 69 63 20 4d 6f 63 6b 52 65 67 69 73  static MockRegis
ba30: 74 72 79 4b 65 79 20 4f 70 65 6e 53 75 62 4b 65  tryKey OpenSubKe
ba40: 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y(..            
ba50: 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79      MockRegistry
ba60: 4b 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20  Key rootKey,..  
ba70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
ba80: 72 69 6e 67 20 73 75 62 4b 65 79 4e 61 6d 65 2c  ring subKeyName,
ba90: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
baa0: 20 20 62 6f 6f 6c 20 77 72 69 74 61 62 6c 65 2c    bool writable,
bab0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
bac0: 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a    bool whatIf,..
bad0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bae0: 62 6f 6f 6c 20 76 65 72 62 6f 73 65 0d 0a 20 20  bool verbose..  
baf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d                ).
bb00: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
bb10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bb20: 69 66 20 28 72 6f 6f 74 4b 65 79 20 3d 3d 20 6e  if (rootKey == n
bb30: 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
bb40: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
bb50: 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20   null;....      
bb60: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76 65            if (ve
bb70: 72 62 6f 73 65 29 0d 0a 20 20 20 20 20 20 20 20  rbose)..        
bb80: 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
bb90: 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61  eOps.DebugAndTra
bba0: 63 65 28 77 72 69 74 61 62 6c 65 20 3f 0d 0a 20  ce(writable ?.. 
bbb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bbc0: 20 20 20 20 20 20 20 54 72 61 63 65 50 72 69 6f         TracePrio
bbd0: 72 69 74 79 2e 48 69 67 68 65 73 74 20 3a 20 54  rity.Highest : T
bbe0: 72 61 63 65 50 72 69 6f 72 69 74 79 2e 48 69 67  racePriority.Hig
bbf0: 68 65 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  her,..          
bc00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65                de
bc10: 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61  bugCallback, tra
bc20: 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69  ceCallback, Stri
bc30: 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ng.Format(..    
bc40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bc50: 20 20 20 20 22 72 6f 6f 74 4b 65 79 20 3d 20 7b      "rootKey = {
bc60: 30 7d 2c 20 73 75 62 4b 65 79 4e 61 6d 65 20 3d  0}, subKeyName =
bc70: 20 7b 31 7d 2c 20 77 72 69 74 61 62 6c 65 20 3d   {1}, writable =
bc80: 20 7b 32 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20   {2}",..        
bc90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bca0: 46 6f 72 44 69 73 70 6c 61 79 28 72 6f 6f 74 4b  ForDisplay(rootK
bcb0: 65 79 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28  ey), ForDisplay(
bcc0: 73 75 62 4b 65 79 4e 61 6d 65 29 2c 0d 0a 20 20  subKeyName),..  
bcd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bce0: 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79        ForDisplay
bcf0: 28 77 72 69 74 61 62 6c 65 29 29 2c 20 74 72 61  (writable)), tra
bd00: 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
bd10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bd20: 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
bd30: 20 20 20 20 2f 2f 20 48 41 43 4b 3a 20 41 6c 77      // HACK: Alw
bd40: 61 79 73 20 66 6f 72 62 69 64 20 77 72 69 74 61  ays forbid writa
bd50: 62 6c 65 20 61 63 63 65 73 73 20 77 68 65 6e 20  ble access when 
bd60: 6f 70 65 72 61 74 69 6e 67 20 69 6e 0d 0a 20 20  operating in..  
bd70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
bd80: 20 20 20 20 20 20 20 27 77 68 61 74 2d 69 66 27         'what-if'
bd90: 20 6d 6f 64 65 2e 0d 0a 20 20 20 20 20 20 20 20   mode...        
bda0: 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
bdb0: 20 20 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b              Mock
bdc0: 52 65 67 69 73 74 72 79 4b 65 79 20 6b 65 79 20  RegistryKey key 
bdd0: 3d 20 72 6f 6f 74 4b 65 79 2e 4f 70 65 6e 53 75  = rootKey.OpenSu
bde0: 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20  bKey(..         
bdf0: 20 20 20 20 20 20 20 20 20 20 20 73 75 62 4b 65             subKe
be00: 79 4e 61 6d 65 2c 20 77 68 61 74 49 66 20 3f 20  yName, whatIf ? 
be10: 66 61 6c 73 65 20 3a 20 77 72 69 74 61 62 6c 65  false : writable
be20: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
be30: 20 20 20 20 20 20 72 65 74 75 72 6e 20 28 6b 65        return (ke
be40: 79 20 21 3d 20 6e 75 6c 6c 29 20 3f 0d 0a 20 20  y != null) ?..  
be50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
be60: 20 20 6e 65 77 20 4d 6f 63 6b 52 65 67 69 73 74    new MockRegist
be70: 72 79 4b 65 79 28 6b 65 79 2c 20 77 68 61 74 49  ryKey(key, whatI
be80: 66 2c 20 66 61 6c 73 65 2c 20 66 61 6c 73 65 29  f, false, false)
be90: 20 3a 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20   : null;..      
bea0: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
beb0: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
bec0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bed0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bee0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bef0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
bf00: 20 20 20 20 20 20 20 20 20 20 5b 4d 65 74 68 6f            [Metho
bf10: 64 49 6d 70 6c 28 4d 65 74 68 6f 64 49 6d 70 6c  dImpl(MethodImpl
bf20: 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e 69  Options.NoInlini
bf30: 6e 67 29 5d 0d 0a 20 20 20 20 20 20 20 20 20 20  ng)]..          
bf40: 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20    public static 
bf50: 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20  MockRegistryKey 
bf60: 43 72 65 61 74 65 53 75 62 4b 65 79 28 0d 0a 20  CreateSubKey(.. 
bf70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4d                 M
bf80: 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 72  ockRegistryKey r
bf90: 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20  ootKey,..       
bfa0: 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
bfb0: 73 75 62 4b 65 79 4e 61 6d 65 2c 0d 0a 20 20 20  subKeyName,..   
bfc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f               boo
bfd0: 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20  l whatIf,..     
bfe0: 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
bff0: 76 65 72 62 6f 73 65 0d 0a 20 20 20 20 20 20 20  verbose..       
c000: 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
c010: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
c020: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 72             if (r
c030: 6f 6f 74 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d  ootKey == null).
c040: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
c050: 20 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c       return null
c060: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
c070: 20 20 20 20 20 69 66 20 28 76 65 72 62 6f 73 65       if (verbose
c080: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
c090: 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e         TraceOps.
c0a0: 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 54 72  DebugAndTrace(Tr
c0b0: 61 63 65 50 72 69 6f 72 69 74 79 2e 48 69 67 68  acePriority.High
c0c0: 65 73 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  est,..          
c0d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65                de
c0e0: 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61  bugCallback, tra
c0f0: 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69  ceCallback, Stri
c100: 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ng.Format(..    
c110: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c120: 20 20 20 20 22 72 6f 6f 74 4b 65 79 20 3d 20 7b      "rootKey = {
c130: 30 7d 2c 20 73 75 62 4b 65 79 4e 61 6d 65 20 3d  0}, subKeyName =
c140: 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20   {1}",..        
c150: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c160: 46 6f 72 44 69 73 70 6c 61 79 28 72 6f 6f 74 4b  ForDisplay(rootK
c170: 65 79 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28  ey), ForDisplay(
c180: 73 75 62 4b 65 79 4e 61 6d 65 29 29 2c 0d 0a 20  subKeyName)),.. 
c190: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c1a0: 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65         traceCate
c1b0: 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
c1c0: 20 20 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20            try.. 
c1d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
c1e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
c1f0: 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
c200: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
c210: 20 48 41 43 4b 3a 20 41 6c 77 61 79 73 20 6f 70   HACK: Always op
c220: 65 6e 20 61 20 6b 65 79 2c 20 72 61 74 68 65 72  en a key, rather
c230: 20 74 68 61 6e 20 63 72 65 61 74 69 6e 67 20 6f   than creating o
c240: 6e 65 20 77 68 65 6e 0d 0a 20 20 20 20 20 20 20  ne when..       
c250: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
c260: 20 20 20 20 20 20 6f 70 65 72 61 74 69 6e 67 20        operating 
c270: 69 6e 20 27 77 68 61 74 2d 69 66 27 20 6d 6f 64  in 'what-if' mod
c280: 65 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e...            
c290: 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
c2a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c2b0: 69 66 20 28 77 68 61 74 49 66 29 0d 0a 20 20 20  if (whatIf)..   
c2c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c2d0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
c2e0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
c2f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c300: 20 20 20 20 20 20 20 20 2f 2f 20 48 41 43 4b 3a          // HACK:
c310: 20 41 74 74 65 6d 70 74 20 74 6f 20 6f 70 65 6e   Attempt to open
c320: 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20 73   the specified s
c330: 75 62 2d 6b 65 79 2e 20 20 49 66 0d 0a 20 20 20  ub-key.  If..   
c340: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c350: 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 74 68       //       th
c360: 69 73 20 66 61 69 6c 73 2c 20 77 65 20 77 69 6c  is fails, we wil
c370: 6c 20 73 69 6d 70 6c 79 20 72 65 74 75 72 6e 20  l simply return 
c380: 74 68 65 20 72 6f 6f 74 0d 0a 20 20 20 20 20 20  the root..      
c390: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c3a0: 20 20 2f 2f 20 20 20 20 20 20 20 6b 65 79 20 69    //       key i
c3b0: 74 73 65 6c 66 20 73 69 6e 63 65 20 6e 6f 20 77  tself since no w
c3c0: 72 69 74 65 73 20 61 72 65 20 61 6c 6c 6f 77 65  rites are allowe
c3d0: 64 20 69 6e 0d 0a 20 20 20 20 20 20 20 20 20 20  d in..          
c3e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
c3f0: 20 20 20 20 20 20 20 27 77 68 61 74 2d 69 66 27         'what-if'
c400: 20 6d 6f 64 65 20 61 6e 79 68 6f 77 2e 0d 0a 20   mode anyhow... 
c410: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c420: 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
c430: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c440: 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b     MockRegistryK
c450: 65 79 20 6b 65 79 20 3d 20 72 6f 6f 74 4b 65 79  ey key = rootKey
c460: 2e 4f 70 65 6e 53 75 62 4b 65 79 28 73 75 62 4b  .OpenSubKey(subK
c470: 65 79 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20  eyName);....    
c480: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c490: 20 20 20 20 72 65 74 75 72 6e 20 28 6b 65 79 20      return (key 
c4a0: 21 3d 20 6e 75 6c 6c 29 20 3f 0d 0a 20 20 20 20  != null) ?..    
c4b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c4c0: 20 20 20 20 20 20 20 20 6b 65 79 20 3a 20 6e 65          key : ne
c4d0: 77 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65  w MockRegistryKe
c4e0: 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y(..            
c4f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c500: 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 73 75 62      rootKey, sub
c510: 4b 65 79 4e 61 6d 65 2c 20 77 68 61 74 49 66 2c  KeyName, whatIf,
c520: 20 66 61 6c 73 65 2c 20 66 61 6c 73 65 29 3b 0d   false, false);.
c530: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
c540: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
c550: 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65              else
c560: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
c570: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
c580: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c590: 20 72 65 74 75 72 6e 20 6e 65 77 20 4d 6f 63 6b   return new Mock
c5a0: 52 65 67 69 73 74 72 79 4b 65 79 28 0d 0a 20 20  RegistryKey(..  
c5b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c5c0: 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65            rootKe
c5d0: 79 2e 43 72 65 61 74 65 53 75 62 4b 65 79 28 73  y.CreateSubKey(s
c5e0: 75 62 4b 65 79 4e 61 6d 65 29 2c 20 77 68 61 74  ubKeyName), what
c5f0: 49 66 2c 20 66 61 6c 73 65 2c 0d 0a 20 20 20 20  If, false,..    
c600: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c610: 20 20 20 20 20 20 20 20 66 61 6c 73 65 29 3b 0d          false);.
c620: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
c630: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
c640: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
c650: 20 20 20 20 20 20 20 20 20 20 20 66 69 6e 61 6c             final
c660: 6c 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ly..            
c670: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
c680: 20 20 20 20 20 20 20 20 20 20 20 73 75 62 4b 65             subKe
c690: 79 73 43 72 65 61 74 65 64 2b 2b 3b 0d 0a 20 20  ysCreated++;..  
c6a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
c6b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
c6c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
c6d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c6e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c6f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c700: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c710: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
c720: 20 5b 4d 65 74 68 6f 64 49 6d 70 6c 28 4d 65 74   [MethodImpl(Met
c730: 68 6f 64 49 6d 70 6c 4f 70 74 69 6f 6e 73 2e 4e  hodImplOptions.N
c740: 6f 49 6e 6c 69 6e 69 6e 67 29 5d 0d 0a 20 20 20  oInlining)]..   
c750: 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
c760: 73 74 61 74 69 63 20 76 6f 69 64 20 44 65 6c 65  static void Dele
c770: 74 65 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20  teSubKey(..     
c780: 20 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52             MockR
c790: 65 67 69 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b  egistryKey rootK
c7a0: 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ey,..           
c7b0: 20 20 20 20 20 73 74 72 69 6e 67 20 73 75 62 4b       string subK
c7c0: 65 79 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20  eyName,..       
c7d0: 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 74 68           bool th
c7e0: 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 2c 0d 0a 20  rowOnMissing,.. 
c7f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62                 b
c800: 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20  ool whatIf,..   
c810: 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f               boo
c820: 6c 20 76 65 72 62 6f 73 65 0d 0a 20 20 20 20 20  l verbose..     
c830: 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
c840: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
c850: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
c860: 28 72 6f 6f 74 4b 65 79 20 3d 3d 20 6e 75 6c 6c  (rootKey == null
c870: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
c880: 20 20 20 20 20 20 20 72 65 74 75 72 6e 3b 0d 0a         return;..
c890: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
c8a0: 20 20 69 66 20 28 76 65 72 62 6f 73 65 29 0d 0a    if (verbose)..
c8b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c8c0: 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62      TraceOps.Deb
c8d0: 75 67 41 6e 64 54 72 61 63 65 28 54 72 61 63 65  ugAndTrace(Trace
c8e0: 50 72 69 6f 72 69 74 79 2e 48 69 67 68 65 73 74  Priority.Highest
c8f0: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
c900: 20 20 20 20 20 20 20 20 20 20 20 64 65 62 75 67             debug
c910: 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43  Callback, traceC
c920: 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e  allback, String.
c930: 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
c940: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c950: 20 22 72 6f 6f 74 4b 65 79 20 3d 20 7b 30 7d 2c   "rootKey = {0},
c960: 20 73 75 62 4b 65 79 4e 61 6d 65 20 3d 20 7b 31   subKeyName = {1
c970: 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }",..           
c980: 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72               For
c990: 44 69 73 70 6c 61 79 28 72 6f 6f 74 4b 65 79 29  Display(rootKey)
c9a0: 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 73 75 62  , ForDisplay(sub
c9b0: 4b 65 79 4e 61 6d 65 29 29 2c 0d 0a 20 20 20 20  KeyName)),..    
c9c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c9d0: 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72      traceCategor
c9e0: 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
c9f0: 20 20 20 20 20 20 20 69 66 20 28 21 77 68 61 74         if (!what
ca00: 49 66 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  If)..           
ca10: 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79           rootKey
ca20: 2e 44 65 6c 65 74 65 53 75 62 4b 65 79 28 73 75  .DeleteSubKey(su
ca30: 62 4b 65 79 4e 61 6d 65 2c 20 74 68 72 6f 77 4f  bKeyName, throwO
ca40: 6e 4d 69 73 73 69 6e 67 29 3b 0d 0a 0d 0a 20 20  nMissing);....  
ca50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 75                su
ca60: 62 4b 65 79 73 44 65 6c 65 74 65 64 2b 2b 3b 0d  bKeysDeleted++;.
ca70: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
ca80: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
ca90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
caa0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cab0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cac0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cad0: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
cae0: 20 5b 4d 65 74 68 6f 64 49 6d 70 6c 28 4d 65 74   [MethodImpl(Met
caf0: 68 6f 64 49 6d 70 6c 4f 70 74 69 6f 6e 73 2e 4e  hodImplOptions.N
cb00: 6f 49 6e 6c 69 6e 69 6e 67 29 5d 0d 0a 20 20 20  oInlining)]..   
cb10: 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
cb20: 73 74 61 74 69 63 20 76 6f 69 64 20 44 65 6c 65  static void Dele
cb30: 74 65 53 75 62 4b 65 79 54 72 65 65 28 0d 0a 20  teSubKeyTree(.. 
cb40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4d                 M
cb50: 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 72  ockRegistryKey r
cb60: 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20  ootKey,..       
cb70: 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
cb80: 73 75 62 4b 65 79 4e 61 6d 65 2c 0d 0a 20 20 20  subKeyName,..   
cb90: 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f               boo
cba0: 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20  l whatIf,..     
cbb0: 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
cbc0: 76 65 72 62 6f 73 65 0d 0a 20 20 20 20 20 20 20  verbose..       
cbd0: 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
cbe0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
cbf0: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 72             if (r
cc00: 6f 6f 74 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d  ootKey == null).
cc10: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
cc20: 20 20 20 20 20 72 65 74 75 72 6e 3b 0d 0a 0d 0a       return;....
cc30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cc40: 69 66 20 28 76 65 72 62 6f 73 65 29 0d 0a 20 20  if (verbose)..  
cc50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cc60: 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67    TraceOps.Debug
cc70: 41 6e 64 54 72 61 63 65 28 54 72 61 63 65 50 72  AndTrace(TracePr
cc80: 69 6f 72 69 74 79 2e 48 69 67 68 65 73 74 2c 0d  iority.Highest,.
cc90: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
cca0: 20 20 20 20 20 20 20 20 20 64 65 62 75 67 43 61           debugCa
ccb0: 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c  llback, traceCal
ccc0: 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f  lback, String.Fo
ccd0: 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
cce0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
ccf0: 72 6f 6f 74 4b 65 79 20 3d 20 7b 30 7d 2c 20 73  rootKey = {0}, s
cd00: 75 62 4b 65 79 4e 61 6d 65 20 3d 20 7b 31 7d 22  ubKeyName = {1}"
cd10: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
cd20: 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69             ForDi
cd30: 73 70 6c 61 79 28 72 6f 6f 74 4b 65 79 29 2c 20  splay(rootKey), 
cd40: 46 6f 72 44 69 73 70 6c 61 79 28 73 75 62 4b 65  ForDisplay(subKe
cd50: 79 4e 61 6d 65 29 29 2c 0d 0a 20 20 20 20 20 20  yName)),..      
cd60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cd70: 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29    traceCategory)
cd80: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
cd90: 20 20 20 20 20 69 66 20 28 21 77 68 61 74 49 66       if (!whatIf
cda0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
cdb0: 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2e 44         rootKey.D
cdc0: 65 6c 65 74 65 53 75 62 4b 65 79 54 72 65 65 28  eleteSubKeyTree(
cdd0: 73 75 62 4b 65 79 4e 61 6d 65 29 3b 0d 0a 0d 0a  subKeyName);....
cde0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cdf0: 73 75 62 4b 65 79 73 44 65 6c 65 74 65 64 2b 2b  subKeysDeleted++
ce00: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
ce10: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
ce20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ce30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ce40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ce50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ce60: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
ce70: 20 20 20 5b 4d 65 74 68 6f 64 49 6d 70 6c 28 4d     [MethodImpl(M
ce80: 65 74 68 6f 64 49 6d 70 6c 4f 70 74 69 6f 6e 73  ethodImplOptions
ce90: 2e 4e 6f 49 6e 6c 69 6e 69 6e 67 29 5d 0d 0a 20  .NoInlining)].. 
cea0: 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
ceb0: 63 20 73 74 61 74 69 63 20 73 74 72 69 6e 67 5b  c static string[
cec0: 5d 20 47 65 74 53 75 62 4b 65 79 4e 61 6d 65 73  ] GetSubKeyNames
ced0: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
cee0: 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b     MockRegistryK
cef0: 65 79 20 6b 65 79 2c 0d 0a 20 20 20 20 20 20 20  ey key,..       
cf00: 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68           bool wh
cf10: 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20  atIf,..         
cf20: 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62         bool verb
cf30: 6f 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ose..           
cf40: 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
cf50: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
cf60: 20 20 20 20 20 20 20 69 66 20 28 6b 65 79 20 3d         if (key =
cf70: 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
cf80: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
cf90: 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20  urn null;....   
cfa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
cfb0: 28 76 65 72 62 6f 73 65 29 0d 0a 20 20 20 20 20  (verbose)..     
cfc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
cfd0: 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64  raceOps.DebugAnd
cfe0: 54 72 61 63 65 28 54 72 61 63 65 50 72 69 6f 72  Trace(TracePrior
cff0: 69 74 79 2e 48 69 67 68 2c 0d 0a 20 20 20 20 20  ity.High,..     
d000: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d010: 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b     debugCallback
d020: 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c  , traceCallback,
d030: 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d   String.Format(.
d040: 0a 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 22 6b 65 79 20 3d 20           "key = 
d060: 7b 30 7d 22 2c 20 46 6f 72 44 69 73 70 6c 61 79  {0}", ForDisplay
d070: 28 6b 65 79 29 29 2c 20 74 72 61 63 65 43 61 74  (key)), traceCat
d080: 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  egory);....     
d090: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
d0a0: 6e 20 6b 65 79 2e 47 65 74 53 75 62 4b 65 79 4e  n key.GetSubKeyN
d0b0: 61 6d 65 73 28 29 3b 0d 0a 20 20 20 20 20 20 20  ames();..       
d0c0: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
d0d0: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
d0e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d0f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d100: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d110: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
d120: 20 20 20 20 20 20 20 20 20 5b 4d 65 74 68 6f 64           [Method
d130: 49 6d 70 6c 28 4d 65 74 68 6f 64 49 6d 70 6c 4f  Impl(MethodImplO
d140: 70 74 69 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e 69 6e  ptions.NoInlinin
d150: 67 29 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  g)]..           
d160: 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 6f   public static o
d170: 62 6a 65 63 74 20 47 65 74 56 61 6c 75 65 28 0d  bject GetValue(.
d180: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
d190: 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79   MockRegistryKey
d1a0: 20 6b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20   key,..         
d1b0: 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6e 61         string na
d1c0: 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me,..           
d1d0: 20 20 20 20 20 6f 62 6a 65 63 74 20 64 65 66 61       object defa
d1e0: 75 6c 74 56 61 6c 75 65 2c 0d 0a 20 20 20 20 20  ultValue,..     
d1f0: 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
d200: 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20  whatIf,..       
d210: 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65           bool ve
d220: 72 62 6f 73 65 0d 0a 20 20 20 20 20 20 20 20 20  rbose..         
d230: 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
d240: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
d250: 20 20 20 20 20 20 20 20 20 69 66 20 28 6b 65 79           if (key
d260: 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
d270: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
d280: 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20  eturn null;.... 
d290: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
d2a0: 66 20 28 76 65 72 62 6f 73 65 29 0d 0a 20 20 20  f (verbose)..   
d2b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d2c0: 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41   TraceOps.DebugA
d2d0: 6e 64 54 72 61 63 65 28 54 72 61 63 65 50 72 69  ndTrace(TracePri
d2e0: 6f 72 69 74 79 2e 48 69 67 68 2c 0d 0a 20 20 20  ority.High,..   
d2f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d300: 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61       debugCallba
d310: 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63  ck, traceCallbac
d320: 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  k, String.Format
d330: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
d340: 20 20 20 20 20 20 20 20 20 20 20 22 6b 65 79 20             "key 
d350: 3d 20 7b 30 7d 2c 20 6e 61 6d 65 20 3d 20 7b 31  = {0}, name = {1
d360: 7d 2c 20 64 65 66 61 75 6c 74 56 61 6c 75 65 20  }, defaultValue 
d370: 3d 20 7b 32 7d 22 2c 0d 0a 20 20 20 20 20 20 20  = {2}",..       
d380: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d390: 20 46 6f 72 44 69 73 70 6c 61 79 28 6b 65 79 29   ForDisplay(key)
d3a0: 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 6e 61 6d  , ForDisplay(nam
d3b0: 65 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e),..           
d3c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72               For
d3d0: 44 69 73 70 6c 61 79 28 64 65 66 61 75 6c 74 56  Display(defaultV
d3e0: 61 6c 75 65 29 29 2c 20 74 72 61 63 65 43 61 74  alue)), traceCat
d3f0: 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  egory);....     
d400: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
d410: 6e 20 6b 65 79 2e 47 65 74 56 61 6c 75 65 28 6e  n key.GetValue(n
d420: 61 6d 65 2c 20 64 65 66 61 75 6c 74 56 61 6c 75  ame, defaultValu
d430: 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e);..           
d440: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
d450: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
d460: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d470: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d480: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d490: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
d4a0: 20 20 20 20 20 5b 4d 65 74 68 6f 64 49 6d 70 6c       [MethodImpl
d4b0: 28 4d 65 74 68 6f 64 49 6d 70 6c 4f 70 74 69 6f  (MethodImplOptio
d4c0: 6e 73 2e 4e 6f 49 6e 6c 69 6e 69 6e 67 29 5d 0d  ns.NoInlining)].
d4d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
d4e0: 6c 69 63 20 73 74 61 74 69 63 20 76 6f 69 64 20  lic static void 
d4f0: 53 65 74 56 61 6c 75 65 28 0d 0a 20 20 20 20 20  SetValue(..     
d500: 20 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52             MockR
d510: 65 67 69 73 74 72 79 4b 65 79 20 6b 65 79 2c 0d  egistryKey key,.
d520: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
d530: 20 73 74 72 69 6e 67 20 6e 61 6d 65 2c 0d 0a 20   string name,.. 
d540: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6f                 o
d550: 62 6a 65 63 74 20 76 61 6c 75 65 2c 0d 0a 20 20  bject value,..  
d560: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f                bo
d570: 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20  ol whatIf,..    
d580: 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
d590: 20 76 65 72 62 6f 73 65 0d 0a 20 20 20 20 20 20   verbose..      
d5a0: 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
d5b0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
d5c0: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
d5d0: 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  key == null)..  
d5e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d5f0: 20 20 72 65 74 75 72 6e 3b 0d 0a 0d 0a 20 20 20    return;....   
d600: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
d610: 28 76 65 72 62 6f 73 65 29 0d 0a 20 20 20 20 20  (verbose)..     
d620: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
d630: 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64  raceOps.DebugAnd
d640: 54 72 61 63 65 28 54 72 61 63 65 50 72 69 6f 72  Trace(TracePrior
d650: 69 74 79 2e 48 69 67 68 65 73 74 2c 0d 0a 20 20  ity.Highest,..  
d660: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d670: 20 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62        debugCallb
d680: 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61  ack, traceCallba
d690: 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ck, String.Forma
d6a0: 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
d6b0: 20 20 20 20 20 20 20 20 20 20 20 20 22 6b 65 79              "key
d6c0: 20 3d 20 7b 30 7d 2c 20 6e 61 6d 65 20 3d 20 7b   = {0}, name = {
d6d0: 31 7d 2c 20 76 61 6c 75 65 20 3d 20 7b 32 7d 22  1}, value = {2}"
d6e0: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
d6f0: 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69             ForDi
d700: 73 70 6c 61 79 28 6b 65 79 29 2c 20 46 6f 72 44  splay(key), ForD
d710: 69 73 70 6c 61 79 28 6e 61 6d 65 29 2c 20 46 6f  isplay(name), Fo
d720: 72 44 69 73 70 6c 61 79 28 76 61 6c 75 65 29 29  rDisplay(value))
d730: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
d740: 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
d750: 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
d760: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
d770: 20 28 21 77 68 61 74 49 66 29 0d 0a 20 20 20 20   (!whatIf)..    
d780: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d790: 6b 65 79 2e 53 65 74 56 61 6c 75 65 28 6e 61 6d  key.SetValue(nam
d7a0: 65 2c 20 76 61 6c 75 65 29 3b 0d 0a 0d 0a 20 20  e, value);....  
d7b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6b 65                ke
d7c0: 79 56 61 6c 75 65 73 53 65 74 2b 2b 3b 0d 0a 20  yValuesSet++;.. 
d7d0: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
d7e0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
d7f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d800: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d810: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d820: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
d830: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b  ...            [
d840: 4d 65 74 68 6f 64 49 6d 70 6c 28 4d 65 74 68 6f  MethodImpl(Metho
d850: 64 49 6d 70 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49  dImplOptions.NoI
d860: 6e 6c 69 6e 69 6e 67 29 5d 0d 0a 20 20 20 20 20  nlining)]..     
d870: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74         public st
d880: 61 74 69 63 20 76 6f 69 64 20 44 65 6c 65 74 65  atic void Delete
d890: 56 61 6c 75 65 28 0d 0a 20 20 20 20 20 20 20 20  Value(..        
d8a0: 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65 67 69          MockRegi
d8b0: 73 74 72 79 4b 65 79 20 6b 65 79 2c 0d 0a 20 20  stryKey key,..  
d8c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
d8d0: 72 69 6e 67 20 6e 61 6d 65 2c 0d 0a 20 20 20 20  ring name,..    
d8e0: 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
d8f0: 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 2c   throwOnMissing,
d900: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
d910: 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a    bool whatIf,..
d920: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d930: 62 6f 6f 6c 20 76 65 72 62 6f 73 65 0d 0a 20 20  bool verbose..  
d940: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d                ).
d950: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
d960: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d970: 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29  if (key == null)
d980: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
d990: 20 20 20 20 20 20 72 65 74 75 72 6e 3b 0d 0a 0d        return;...
d9a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
d9b0: 20 69 66 20 28 76 65 72 62 6f 73 65 29 0d 0a 20   if (verbose).. 
d9c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d9d0: 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75     TraceOps.Debu
d9e0: 67 41 6e 64 54 72 61 63 65 28 54 72 61 63 65 50  gAndTrace(TraceP
d9f0: 72 69 6f 72 69 74 79 2e 48 69 67 68 65 73 74 2c  riority.Highest,
da00: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
da10: 20 20 20 20 20 20 20 20 20 20 64 65 62 75 67 43            debugC
da20: 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61  allback, traceCa
da30: 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46  llback, String.F
da40: 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
da50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
da60: 22 6b 65 79 20 3d 20 7b 30 7d 2c 20 6e 61 6d 65  "key = {0}, name
da70: 20 3d 20 7b 31 7d 22 2c 20 46 6f 72 44 69 73 70   = {1}", ForDisp
da80: 6c 61 79 28 6b 65 79 29 2c 0d 0a 20 20 20 20 20  lay(key),..     
da90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
daa0: 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 6e 61     ForDisplay(na
dab0: 6d 65 29 29 2c 20 74 72 61 63 65 43 61 74 65 67  me)), traceCateg
dac0: 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
dad0: 20 20 20 20 20 20 20 20 20 69 66 20 28 21 77 68           if (!wh
dae0: 61 74 49 66 29 0d 0a 20 20 20 20 20 20 20 20 20  atIf)..         
daf0: 20 20 20 20 20 20 20 20 20 20 20 6b 65 79 2e 44             key.D
db00: 65 6c 65 74 65 56 61 6c 75 65 28 6e 61 6d 65 2c  eleteValue(name,
db10: 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 29   throwOnMissing)
db20: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
db30: 20 20 20 20 20 6b 65 79 56 61 6c 75 65 73 44 65       keyValuesDe
db40: 6c 65 74 65 64 2b 2b 3b 0d 0a 20 20 20 20 20 20  leted++;..      
db50: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
db60: 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d       #endregion.
db70: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
db80: 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
db90: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
dba0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
dbb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
dbc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
dbd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
dbe0: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65  /....        #re
dbf0: 67 69 6f 6e 20 53 74 72 69 6e 67 4c 69 73 74 20  gion StringList 
dc00: 43 6c 61 73 73 0d 0a 20 20 20 20 20 20 20 20 70  Class..        p
dc10: 72 69 76 61 74 65 20 73 65 61 6c 65 64 20 63 6c  rivate sealed cl
dc20: 61 73 73 20 53 74 72 69 6e 67 4c 69 73 74 20 3a  ass StringList :
dc30: 20 4c 69 73 74 3c 73 74 72 69 6e 67 3e 0d 0a 20   List<string>.. 
dc40: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
dc50: 20 20 20 20 20 20 70 75 62 6c 69 63 20 53 74 72        public Str
dc60: 69 6e 67 4c 69 73 74 28 29 0d 0a 20 20 20 20 20  ingList()..     
dc70: 20 20 20 20 20 20 20 20 20 20 20 3a 20 62 61 73             : bas
dc80: 65 28 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e()..           
dc90: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
dca0: 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e      // do nothin
dcb0: 67 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  g...            
dcc0: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
dcd0: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
dce0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
dcf0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
dd00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
dd10: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
dd20: 20 20 20 20 70 75 62 6c 69 63 20 53 74 72 69 6e      public Strin
dd30: 67 4c 69 73 74 28 49 45 6e 75 6d 65 72 61 62 6c  gList(IEnumerabl
dd40: 65 3c 73 74 72 69 6e 67 3e 20 63 6f 6c 6c 65 63  e<string> collec
dd50: 74 69 6f 6e 29 0d 0a 20 20 20 20 20 20 20 20 20  tion)..         
dd60: 20 20 20 20 20 20 20 3a 20 62 61 73 65 28 63 6f         : base(co
dd70: 6c 6c 65 63 74 69 6f 6e 29 0d 0a 20 20 20 20 20  llection)..     
dd80: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
dd90: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20            // do 
dda0: 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20  nothing...      
ddb0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
ddc0: 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64   }..        #end
ddd0: 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20  region....      
dde0: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
ddf0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
de00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
de10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
de20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
de30: 20 20 20 20 20 23 72 65 67 69 6f 6e 20 53 74 72       #region Str
de40: 69 6e 67 44 69 63 74 69 6f 6e 61 72 79 20 43 6c  ingDictionary Cl
de50: 61 73 73 0d 0a 20 20 20 20 20 20 20 20 70 72 69  ass..        pri
de60: 76 61 74 65 20 73 65 61 6c 65 64 20 63 6c 61 73  vate sealed clas
de70: 73 20 53 74 72 69 6e 67 44 69 63 74 69 6f 6e 61  s StringDictiona
de80: 72 79 20 3a 20 44 69 63 74 69 6f 6e 61 72 79 3c  ry : Dictionary<
de90: 73 74 72 69 6e 67 2c 20 73 74 72 69 6e 67 3e 0d  string, string>.
dea0: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
deb0: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 53          public S
dec0: 74 72 69 6e 67 44 69 63 74 69 6f 6e 61 72 79 28  tringDictionary(
ded0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
dee0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
def0: 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e    // do nothing.
df00: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
df10: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
df20: 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
df30: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
df40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
df50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
df60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
df70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
df80: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65  /....        #re
df90: 67 69 6f 6e 20 56 65 72 73 69 6f 6e 4c 69 73 74  gion VersionList
dfa0: 20 43 6c 61 73 73 0d 0a 20 20 20 20 20 20 20 20   Class..        
dfb0: 70 72 69 76 61 74 65 20 73 65 61 6c 65 64 20 63  private sealed c
dfc0: 6c 61 73 73 20 56 65 72 73 69 6f 6e 4c 69 73 74  lass VersionList
dfd0: 20 3a 20 4c 69 73 74 3c 56 65 72 73 69 6f 6e 3e   : List<Version>
dfe0: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
dff0: 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
e000: 56 65 72 73 69 6f 6e 4c 69 73 74 28 29 0d 0a 20  VersionList().. 
e010: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3a                 :
e020: 20 62 61 73 65 28 29 0d 0a 20 20 20 20 20 20 20   base()..       
e030: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
e040: 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f          // do no
e050: 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20  thing...        
e060: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
e070: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
e080: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e090: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e0a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e0b0: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
e0c0: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 56          public V
e0d0: 65 72 73 69 6f 6e 4c 69 73 74 28 49 45 6e 75 6d  ersionList(IEnum
e0e0: 65 72 61 62 6c 65 3c 56 65 72 73 69 6f 6e 3e 20  erable<Version> 
e0f0: 63 6f 6c 6c 65 63 74 69 6f 6e 29 0d 0a 20 20 20  collection)..   
e100: 20 20 20 20 20 20 20 20 20 20 20 20 20 3a 20 62               : b
e110: 61 73 65 28 63 6f 6c 6c 65 63 74 69 6f 6e 29 0d  ase(collection).
e120: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
e130: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e140: 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a  // do nothing...
e150: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
e160: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
e170: 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a    #endregion....
e180: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
e190: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e1a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e1b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e1c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
e1d0: 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69  ...        #regi
e1e0: 6f 6e 20 56 65 72 73 69 6f 6e 4d 61 70 20 43 6c  on VersionMap Cl
e1f0: 61 73 73 0d 0a 20 20 20 20 20 20 20 20 70 72 69  ass..        pri
e200: 76 61 74 65 20 73 65 61 6c 65 64 20 63 6c 61 73  vate sealed clas
e210: 73 20 56 65 72 73 69 6f 6e 4d 61 70 20 3a 20 44  s VersionMap : D
e220: 69 63 74 69 6f 6e 61 72 79 3c 73 74 72 69 6e 67  ictionary<string
e230: 2c 20 56 65 72 73 69 6f 6e 4c 69 73 74 3e 0d 0a  , VersionList>..
e240: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
e250: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 56 65         public Ve
e260: 72 73 69 6f 6e 4d 61 70 28 29 0d 0a 20 20 20 20  rsionMap()..    
e270: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
e280: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f             // do
e290: 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20   nothing...     
e2a0: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
e2b0: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e    }..        #en
e2c0: 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
e2d0: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
e2e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e2f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e300: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e310: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
e320: 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 61        #region Pa
e330: 63 6b 61 67 65 20 43 6c 61 73 73 0d 0a 20 20 20  ckage Class..   
e340: 20 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 73 65       internal se
e350: 61 6c 65 64 20 63 6c 61 73 73 20 50 61 63 6b 61  aled class Packa
e360: 67 65 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  ge..        {.. 
e370: 20 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69             #regi
e380: 6f 6e 20 50 75 62 6c 69 63 20 43 6f 6e 73 74 72  on Public Constr
e390: 75 63 74 6f 72 73 0d 0a 20 20 20 20 20 20 20 20  uctors..        
e3a0: 20 20 20 20 70 75 62 6c 69 63 20 50 61 63 6b 61      public Packa
e3b0: 67 65 28 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ge()..          
e3c0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
e3d0: 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69       // do nothi
e3e0: 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ng...           
e3f0: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
e400: 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20  #endregion....  
e410: 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
e420: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e430: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e440: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e450: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
e460: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 72 65  .            #re
e470: 67 69 6f 6e 20 50 75 62 6c 69 63 20 50 72 6f 70  gion Public Prop
e480: 65 72 74 69 65 73 0d 0a 20 20 20 20 20 20 20 20  erties..        
e490: 20 20 20 20 70 72 69 76 61 74 65 20 41 73 73 65      private Asse
e4a0: 6d 62 6c 79 4e 61 6d 65 20 61 73 73 65 6d 62 6c  mblyName assembl
e4b0: 79 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20  yName;..        
e4c0: 20 20 20 20 70 75 62 6c 69 63 20 41 73 73 65 6d      public Assem
e4d0: 62 6c 79 4e 61 6d 65 20 41 73 73 65 6d 62 6c 79  blyName Assembly
e4e0: 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 20 20  Name..          
e4f0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
e500: 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72       get { retur
e510: 6e 20 61 73 73 65 6d 62 6c 79 4e 61 6d 65 3b 20  n assemblyName; 
e520: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
e530: 20 20 20 73 65 74 20 7b 20 61 73 73 65 6d 62 6c     set { assembl
e540: 79 4e 61 6d 65 20 3d 20 76 61 6c 75 65 3b 20 7d  yName = value; }
e550: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
e560: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
e570: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e580: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e590: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e5a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e5b0: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
e5c0: 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 67    private bool g
e5d0: 6c 6f 62 61 6c 41 73 73 65 6d 62 6c 79 43 61 63  lobalAssemblyCac
e5e0: 68 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  he;..           
e5f0: 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 47 6c 6f   public bool Glo
e600: 62 61 6c 41 73 73 65 6d 62 6c 79 43 61 63 68 65  balAssemblyCache
e610: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
e620: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
e630: 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 67 6c   get { return gl
e640: 6f 62 61 6c 41 73 73 65 6d 62 6c 79 43 61 63 68  obalAssemblyCach
e650: 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  e; }..          
e660: 20 20 20 20 20 20 73 65 74 20 7b 20 67 6c 6f 62        set { glob
e670: 61 6c 41 73 73 65 6d 62 6c 79 43 61 63 68 65 20  alAssemblyCache 
e680: 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20  = value; }..    
e690: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
e6a0: 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
e6b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e6c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e6d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e6e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
e6f0: 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
e700: 61 74 65 20 47 75 69 64 20 70 61 63 6b 61 67 65  ate Guid package
e710: 49 64 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  Id;..           
e720: 20 70 75 62 6c 69 63 20 47 75 69 64 20 50 61 63   public Guid Pac
e730: 6b 61 67 65 49 64 0d 0a 20 20 20 20 20 20 20 20  kageId..        
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 67 65 74 20 7b 20 72 65 74         get { ret
e760: 75 72 6e 20 70 61 63 6b 61 67 65 49 64 3b 20 7d  urn packageId; }
e770: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
e780: 20 20 73 65 74 20 7b 20 70 61 63 6b 61 67 65 49    set { packageI
e790: 64 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20  d = value; }..  
e7a0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
e7b0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
e7c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e7d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e7e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e7f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
e800: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
e810: 69 76 61 74 65 20 47 75 69 64 20 73 65 72 76 69  ivate Guid servi
e820: 63 65 49 64 3b 0d 0a 20 20 20 20 20 20 20 20 20  ceId;..         
e830: 20 20 20 70 75 62 6c 69 63 20 47 75 69 64 20 53     public Guid S
e840: 65 72 76 69 63 65 49 64 0d 0a 20 20 20 20 20 20  erviceId..      
e850: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
e860: 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72           get { r
e870: 65 74 75 72 6e 20 73 65 72 76 69 63 65 49 64 3b  eturn serviceId;
e880: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
e890: 20 20 20 20 73 65 74 20 7b 20 73 65 72 76 69 63      set { servic
e8a0: 65 49 64 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a  eId = value; }..
e8b0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
e8c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
e8d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e8e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e8f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e900: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e910: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
e920: 70 72 69 76 61 74 65 20 47 75 69 64 20 64 61 74  private Guid dat
e930: 61 53 6f 75 72 63 65 49 64 3b 0d 0a 20 20 20 20  aSourceId;..    
e940: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 47          public G
e950: 75 69 64 20 44 61 74 61 53 6f 75 72 63 65 49 64  uid DataSourceId
e960: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
e970: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
e980: 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 64 61   get { return da
e990: 74 61 53 6f 75 72 63 65 49 64 3b 20 7d 0d 0a 20  taSourceId; }.. 
e9a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
e9b0: 65 74 20 7b 20 64 61 74 61 53 6f 75 72 63 65 49  et { dataSourceI
e9c0: 64 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20  d = value; }..  
e9d0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
e9e0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
e9f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ea00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ea10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ea20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
ea30: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
ea40: 69 76 61 74 65 20 47 75 69 64 20 64 61 74 61 50  ivate Guid dataP
ea50: 72 6f 76 69 64 65 72 49 64 3b 0d 0a 20 20 20 20  roviderId;..    
ea60: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 47          public G
ea70: 75 69 64 20 44 61 74 61 50 72 6f 76 69 64 65 72  uid DataProvider
ea80: 49 64 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  Id..            
ea90: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
eaa0: 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20     get { return 
eab0: 64 61 74 61 50 72 6f 76 69 64 65 72 49 64 3b 20  dataProviderId; 
eac0: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
ead0: 20 20 20 73 65 74 20 7b 20 64 61 74 61 50 72 6f     set { dataPro
eae0: 76 69 64 65 72 49 64 20 3d 20 76 61 6c 75 65 3b  viderId = value;
eaf0: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
eb00: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
eb10: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
eb20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
eb30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
eb40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
eb50: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
eb60: 20 20 20 20 70 72 69 76 61 74 65 20 47 75 69 64      private Guid
eb70: 20 61 64 6f 4e 65 74 54 65 63 68 6e 6f 6c 6f 67   adoNetTechnolog
eb80: 79 49 64 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  yId;..          
eb90: 20 20 70 75 62 6c 69 63 20 47 75 69 64 20 41 64    public Guid Ad
eba0: 6f 4e 65 74 54 65 63 68 6e 6f 6c 6f 67 79 49 64  oNetTechnologyId
ebb0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
ebc0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
ebd0: 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 61 64   get { return ad
ebe0: 6f 4e 65 74 54 65 63 68 6e 6f 6c 6f 67 79 49 64  oNetTechnologyId
ebf0: 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
ec00: 20 20 20 20 20 73 65 74 20 7b 20 61 64 6f 4e 65       set { adoNe
ec10: 74 54 65 63 68 6e 6f 6c 6f 67 79 49 64 20 3d 20  tTechnologyId = 
ec20: 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20  value; }..      
ec30: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
ec40: 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d       #endregion.
ec50: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
ec60: 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
ec70: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
ec80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ec90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
eca0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ecb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ecc0: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65  /....        #re
ecd0: 67 69 6f 6e 20 43 6f 6e 66 69 67 75 72 61 74 69  gion Configurati
ece0: 6f 6e 20 43 6c 61 73 73 0d 0a 20 20 20 20 20 20  on Class..      
ecf0: 20 20 70 72 69 76 61 74 65 20 73 65 61 6c 65 64    private sealed
ed00: 20 63 6c 61 73 73 20 43 6f 6e 66 69 67 75 72 61   class Configura
ed10: 74 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20 7b 0d  tion..        {.
ed20: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 72 65  .            #re
ed30: 67 69 6f 6e 20 50 72 69 76 61 74 65 20 43 6f 6e  gion Private Con
ed40: 73 74 61 6e 74 73 0d 0a 20 20 20 20 20 20 20 20  stants..        
ed50: 20 20 20 20 70 72 69 76 61 74 65 20 63 6f 6e 73      private cons
ed60: 74 20 63 68 61 72 20 53 77 69 74 63 68 20 3d 20  t char Switch = 
ed70: 27 2d 27 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  '-';..          
ed80: 20 20 70 72 69 76 61 74 65 20 63 6f 6e 73 74 20    private const 
ed90: 63 68 61 72 20 41 6c 74 53 77 69 74 63 68 20 3d  char AltSwitch =
eda0: 20 27 2f 27 3b 0d 0a 0d 0a 20 20 20 20 20 20 20   '/';....       
edb0: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
edc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
edd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ede0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
edf0: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
ee00: 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
ee10: 73 74 61 74 69 63 20 72 65 61 64 6f 6e 6c 79 20  static readonly 
ee20: 63 68 61 72 5b 5d 20 53 77 69 74 63 68 43 68 61  char[] SwitchCha
ee30: 72 73 20 3d 20 7b 0d 0a 20 20 20 20 20 20 20 20  rs = {..        
ee40: 20 20 20 20 20 20 20 20 53 77 69 74 63 68 2c 20          Switch, 
ee50: 41 6c 74 53 77 69 74 63 68 0d 0a 20 20 20 20 20  AltSwitch..     
ee60: 20 20 20 20 20 20 20 7d 3b 0d 0a 20 20 20 20 20         };..     
ee70: 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f         #endregio
ee80: 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n....           
ee90: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
eea0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
eeb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
eec0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
eed0: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
eee0: 20 20 20 20 23 72 65 67 69 6f 6e 20 50 72 69 76      #region Priv
eef0: 61 74 65 20 43 6f 6e 73 74 72 75 63 74 6f 72 73  ate Constructors
ef00: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
ef10: 69 76 61 74 65 20 43 6f 6e 66 69 67 75 72 61 74  ivate Configurat
ef20: 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ion(..          
ef30: 20 20 20 20 20 20 41 73 73 65 6d 62 6c 79 20 61        Assembly a
ef40: 73 73 65 6d 62 6c 79 2c 0d 0a 20 20 20 20 20 20  ssembly,..      
ef50: 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
ef60: 20 6c 6f 67 46 69 6c 65 4e 61 6d 65 2c 0d 0a 20   logFileName,.. 
ef70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
ef80: 74 72 69 6e 67 20 64 69 72 65 63 74 6f 72 79 2c  tring directory,
ef90: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
efa0: 20 20 73 74 72 69 6e 67 20 63 6f 72 65 46 69 6c    string coreFil
efb0: 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20  eName,..        
efc0: 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6c          string l
efd0: 69 6e 71 46 69 6c 65 4e 61 6d 65 2c 0d 0a 20 20  inqFileName,..  
efe0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
eff0: 72 69 6e 67 20 64 65 73 69 67 6e 65 72 46 69 6c  ring designerFil
f000: 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20  eName,..        
f010: 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 72          string r
f020: 65 67 69 73 74 72 79 56 65 72 73 69 6f 6e 2c 0d  egistryVersion,.
f030: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
f040: 20 73 74 72 69 6e 67 20 63 6f 6e 66 69 67 56 65   string configVe
f050: 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20  rsion,..        
f060: 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 64          string d
f070: 65 62 75 67 46 6f 72 6d 61 74 2c 0d 0a 20 20 20  ebugFormat,..   
f080: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72               str
f090: 69 6e 67 20 74 72 61 63 65 46 6f 72 6d 61 74 2c  ing traceFormat,
f0a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
f0b0: 20 20 49 6e 73 74 61 6c 6c 46 6c 61 67 73 20 69    InstallFlags i
f0c0: 6e 73 74 61 6c 6c 46 6c 61 67 73 2c 0d 0a 20 20  nstallFlags,..  
f0d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
f0e0: 61 63 65 50 72 69 6f 72 69 74 79 20 64 65 62 75  acePriority debu
f0f0: 67 50 72 69 6f 72 69 74 79 2c 0d 0a 20 20 20 20  gPriority,..    
f100: 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
f110: 65 50 72 69 6f 72 69 74 79 20 74 72 61 63 65 50  ePriority traceP
f120: 72 69 6f 72 69 74 79 2c 0d 0a 20 20 20 20 20 20  riority,..      
f130: 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 69            bool i
f140: 6e 73 74 61 6c 6c 2c 0d 0a 20 20 20 20 20 20 20  nstall,..       
f150: 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 6f           bool wo
f160: 77 36 34 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  w64,..          
f170: 20 20 20 20 20 20 62 6f 6f 6c 20 6e 6f 52 75 6e        bool noRun
f180: 74 69 6d 65 56 65 72 73 69 6f 6e 2c 0d 0a 20 20  timeVersion,..  
f190: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f                bo
f1a0: 6f 6c 20 6e 6f 44 65 73 6b 74 6f 70 2c 0d 0a 20  ol noDesktop,.. 
f1b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62                 b
f1c0: 6f 6f 6c 20 6e 6f 43 6f 6d 70 61 63 74 2c 0d 0a  ool noCompact,..
f1d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f1e0: 62 6f 6f 6c 20 6e 6f 4e 65 74 46 78 32 30 2c 0d  bool noNetFx20,.
f1f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
f200: 20 62 6f 6f 6c 20 6e 6f 4e 65 74 46 78 34 30 2c   bool noNetFx40,
f210: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
f220: 20 20 62 6f 6f 6c 20 6e 6f 4e 65 74 46 78 34 35    bool noNetFx45
f230: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
f240: 20 20 20 62 6f 6f 6c 20 6e 6f 56 73 32 30 30 35     bool noVs2005
f250: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
f260: 20 20 20 62 6f 6f 6c 20 6e 6f 56 73 32 30 30 38     bool noVs2008
f270: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
f280: 20 20 20 62 6f 6f 6c 20 6e 6f 56 73 32 30 31 30     bool noVs2010
f290: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
f2a0: 20 20 20 62 6f 6f 6c 20 6e 6f 56 73 32 30 31 32     bool noVs2012
f2b0: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
f2c0: 20 20 20 62 6f 6f 6c 20 6e 6f 54 72 61 63 65 2c     bool noTrace,
f2d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
f2e0: 20 20 62 6f 6f 6c 20 6e 6f 43 6f 6e 73 6f 6c 65    bool noConsole
f2f0: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
f300: 20 20 20 62 6f 6f 6c 20 6e 6f 4c 6f 67 2c 0d 0a     bool noLog,..
f310: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f320: 62 6f 6f 6c 20 74 68 72 6f 77 4f 6e 4d 69 73 73  bool throwOnMiss
f330: 69 6e 67 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ing,..          
f340: 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49        bool whatI
f350: 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  f,..            
f360: 20 20 20 20 62 6f 6f 6c 20 64 65 62 75 67 2c 0d      bool debug,.
f370: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
f380: 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 0d 0a   bool verbose,..
f390: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f3a0: 62 6f 6f 6c 20 63 6f 6e 66 69 72 6d 0d 0a 20 20  bool confirm..  
f3b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d                ).
f3c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
f3d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f3e0: 74 68 69 73 2e 61 73 73 65 6d 62 6c 79 20 3d 20  this.assembly = 
f3f0: 61 73 73 65 6d 62 6c 79 3b 0d 0a 20 20 20 20 20  assembly;..     
f400: 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e             this.
f410: 6c 6f 67 46 69 6c 65 4e 61 6d 65 20 3d 20 6c 6f  logFileName = lo
f420: 67 46 69 6c 65 4e 61 6d 65 3b 0d 0a 20 20 20 20  gFileName;..    
f430: 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73              this
f440: 2e 64 69 72 65 63 74 6f 72 79 20 3d 20 64 69 72  .directory = dir
f450: 65 63 74 6f 72 79 3b 0d 0a 20 20 20 20 20 20 20  ectory;..       
f460: 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 63 6f           this.co
f470: 72 65 46 69 6c 65 4e 61 6d 65 20 3d 20 63 6f 72  reFileName = cor
f480: 65 46 69 6c 65 4e 61 6d 65 3b 0d 0a 20 20 20 20  eFileName;..    
f490: 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73              this
f4a0: 2e 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 20 3d 20  .linqFileName = 
f4b0: 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 3b 0d 0a 20  linqFileName;.. 
f4c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
f4d0: 68 69 73 2e 64 65 73 69 67 6e 65 72 46 69 6c 65  his.designerFile
f4e0: 4e 61 6d 65 20 3d 20 64 65 73 69 67 6e 65 72 46  Name = designerF
f4f0: 69 6c 65 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20  ileName;..      
f500: 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 72            this.r
f510: 65 67 69 73 74 72 79 56 65 72 73 69 6f 6e 20 3d  egistryVersion =
f520: 20 72 65 67 69 73 74 72 79 56 65 72 73 69 6f 6e   registryVersion
f530: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
f540: 20 20 20 74 68 69 73 2e 63 6f 6e 66 69 67 56 65     this.configVe
f550: 72 73 69 6f 6e 20 3d 20 63 6f 6e 66 69 67 56 65  rsion = configVe
f560: 72 73 69 6f 6e 3b 0d 0a 20 20 20 20 20 20 20 20  rsion;..        
f570: 20 20 20 20 20 20 20 20 74 68 69 73 2e 64 65 62          this.deb
f580: 75 67 46 6f 72 6d 61 74 20 3d 20 64 65 62 75 67  ugFormat = debug
f590: 46 6f 72 6d 61 74 3b 0d 0a 20 20 20 20 20 20 20  Format;..       
f5a0: 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 74 72           this.tr
f5b0: 61 63 65 46 6f 72 6d 61 74 20 3d 20 74 72 61 63  aceFormat = trac
f5c0: 65 46 6f 72 6d 61 74 3b 0d 0a 20 20 20 20 20 20  eFormat;..      
f5d0: 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 69            this.i
f5e0: 6e 73 74 61 6c 6c 46 6c 61 67 73 20 3d 20 69 6e  nstallFlags = in
f5f0: 73 74 61 6c 6c 46 6c 61 67 73 3b 0d 0a 20 20 20  stallFlags;..   
f600: 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69               thi
f610: 73 2e 64 65 62 75 67 50 72 69 6f 72 69 74 79 20  s.debugPriority 
f620: 3d 20 64 65 62 75 67 50 72 69 6f 72 69 74 79 3b  = debugPriority;
f630: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
f640: 20 20 74 68 69 73 2e 74 72 61 63 65 50 72 69 6f    this.tracePrio
f650: 72 69 74 79 20 3d 20 74 72 61 63 65 50 72 69 6f  rity = tracePrio
f660: 72 69 74 79 3b 0d 0a 20 20 20 20 20 20 20 20 20  rity;..         
f670: 20 20 20 20 20 20 20 74 68 69 73 2e 69 6e 73 74         this.inst
f680: 61 6c 6c 20 3d 20 69 6e 73 74 61 6c 6c 3b 0d 0a  all = install;..
f690: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f6a0: 74 68 69 73 2e 77 6f 77 36 34 20 3d 20 77 6f 77  this.wow64 = wow
f6b0: 36 34 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  64;..           
f6c0: 20 20 20 20 20 74 68 69 73 2e 6e 6f 52 75 6e 74       this.noRunt
f6d0: 69 6d 65 56 65 72 73 69 6f 6e 20 3d 20 6e 6f 52  imeVersion = noR
f6e0: 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 3b 0d 0a  untimeVersion;..
f6f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f700: 74 68 69 73 2e 6e 6f 44 65 73 6b 74 6f 70 20 3d  this.noDesktop =
f710: 20 6e 6f 44 65 73 6b 74 6f 70 3b 0d 0a 20 20 20   noDesktop;..   
f720: 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69               thi
f730: 73 2e 6e 6f 43 6f 6d 70 61 63 74 20 3d 20 6e 6f  s.noCompact = no
f740: 43 6f 6d 70 61 63 74 3b 0d 0a 20 20 20 20 20 20  Compact;..      
f750: 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 6e            this.n
f760: 6f 4e 65 74 46 78 32 30 20 3d 20 6e 6f 4e 65 74  oNetFx20 = noNet
f770: 46 78 32 30 3b 0d 0a 20 20 20 20 20 20 20 20 20  Fx20;..         
f780: 20 20 20 20 20 20 20 74 68 69 73 2e 6e 6f 4e 65         this.noNe
f790: 74 46 78 34 30 20 3d 20 6e 6f 4e 65 74 46 78 34  tFx40 = noNetFx4
f7a0: 30 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  0;..            
f7b0: 20 20 20 20 74 68 69 73 2e 6e 6f 4e 65 74 46 78      this.noNetFx
f7c0: 34 35 20 3d 20 6e 6f 4e 65 74 46 78 34 35 3b 0d  45 = noNetFx45;.
f7d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
f7e0: 20 74 68 69 73 2e 6e 6f 56 73 32 30 30 35 20 3d   this.noVs2005 =
f7f0: 20 6e 6f 56 73 32 30 30 35 3b 0d 0a 20 20 20 20   noVs2005;..    
f800: 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73              this
f810: 2e 6e 6f 56 73 32 30 30 38 20 3d 20 6e 6f 56 73  .noVs2008 = noVs
f820: 32 30 30 38 3b 0d 0a 20 20 20 20 20 20 20 20 20  2008;..         
f830: 20 20 20 20 20 20 20 74 68 69 73 2e 6e 6f 56 73         this.noVs
f840: 32 30 31 30 20 3d 20 6e 6f 56 73 32 30 31 30 3b  2010 = noVs2010;
f850: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
f860: 20 20 74 68 69 73 2e 6e 6f 56 73 32 30 31 32 20    this.noVs2012 
f870: 3d 20 6e 6f 56 73 32 30 31 32 3b 0d 0a 20 20 20  = noVs2012;..   
f880: 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69               thi
f890: 73 2e 6e 6f 54 72 61 63 65 20 3d 20 6e 6f 54 72  s.noTrace = noTr
f8a0: 61 63 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ace;..          
f8b0: 20 20 20 20 20 20 74 68 69 73 2e 6e 6f 43 6f 6e        this.noCon
f8c0: 73 6f 6c 65 20 3d 20 6e 6f 43 6f 6e 73 6f 6c 65  sole = noConsole
f8d0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
f8e0: 20 20 20 74 68 69 73 2e 6e 6f 4c 6f 67 20 3d 20     this.noLog = 
f8f0: 6e 6f 4c 6f 67 3b 0d 0a 20 20 20 20 20 20 20 20  noLog;..        
f900: 20 20 20 20 20 20 20 20 74 68 69 73 2e 74 68 72          this.thr
f910: 6f 77 4f 6e 4d 69 73 73 69 6e 67 20 3d 20 74 68  owOnMissing = th
f920: 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 3b 0d 0a 20  rowOnMissing;.. 
f930: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
f940: 68 69 73 2e 77 68 61 74 49 66 20 3d 20 77 68 61  his.whatIf = wha
f950: 74 49 66 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  tIf;..          
f960: 20 20 20 20 20 20 74 68 69 73 2e 64 65 62 75 67        this.debug
f970: 20 3d 20 64 65 62 75 67 3b 0d 0a 20 20 20 20 20   = debug;..     
f980: 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e             this.
f990: 76 65 72 62 6f 73 65 20 3d 20 76 65 72 62 6f 73  verbose = verbos
f9a0: 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
f9b0: 20 20 20 20 74 68 69 73 2e 63 6f 6e 66 69 72 6d      this.confirm
f9c0: 20 3d 20 63 6f 6e 66 69 72 6d 3b 0d 0a 20 20 20   = confirm;..   
f9d0: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
f9e0: 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
f9f0: 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  on....          
fa00: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
fa10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fa20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fa30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fa40: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
fa50: 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 72 69       #region Pri
fa60: 76 61 74 65 20 53 74 61 74 69 63 20 4d 65 74 68  vate Static Meth
fa70: 6f 64 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ods..           
fa80: 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
fa90: 76 6f 69 64 20 47 65 74 44 65 66 61 75 6c 74 46  void GetDefaultF
faa0: 69 6c 65 4e 61 6d 65 73 28 0d 0a 20 20 20 20 20  ileNames(..     
fab0: 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20 73             ref s
fac0: 74 72 69 6e 67 20 64 69 72 65 63 74 6f 72 79 2c  tring directory,
fad0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
fae0: 20 20 72 65 66 20 73 74 72 69 6e 67 20 63 6f 72    ref string cor
faf0: 65 46 69 6c 65 4e 61 6d 65 2c 0d 0a 20 20 20 20  eFileName,..    
fb00: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20              ref 
fb10: 73 74 72 69 6e 67 20 6c 69 6e 71 46 69 6c 65 4e  string linqFileN
fb20: 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ame,..          
fb30: 20 20 20 20 20 20 72 65 66 20 73 74 72 69 6e 67        ref string
fb40: 20 64 65 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d   designerFileNam
fb50: 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..             
fb60: 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20     )..          
fb70: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
fb80: 20 20 20 20 20 69 66 20 28 74 68 69 73 41 73 73       if (thisAss
fb90: 65 6d 62 6c 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  embly == null)..
fba0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fbb0: 20 20 20 20 72 65 74 75 72 6e 3b 0d 0a 0d 0a 20      return;.... 
fbc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
fbd0: 69 72 65 63 74 6f 72 79 20 3d 20 50 61 74 68 2e  irectory = Path.
fbe0: 47 65 74 44 69 72 65 63 74 6f 72 79 4e 61 6d 65  GetDirectoryName
fbf0: 28 74 68 69 73 41 73 73 65 6d 62 6c 79 2e 4c 6f  (thisAssembly.Lo
fc00: 63 61 74 69 6f 6e 29 3b 0d 0a 0d 0a 20 20 20 20  cation);....    
fc10: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
fc20: 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45  String.IsNullOrE
fc30: 6d 70 74 79 28 64 69 72 65 63 74 6f 72 79 29 29  mpty(directory))
fc40: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
fc50: 20 20 20 20 20 20 72 65 74 75 72 6e 3b 0d 0a 0d        return;...
fc60: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
fc70: 20 63 6f 72 65 46 69 6c 65 4e 61 6d 65 20 3d 20   coreFileName = 
fc80: 50 61 74 68 2e 43 6f 6d 62 69 6e 65 28 64 69 72  Path.Combine(dir
fc90: 65 63 74 6f 72 79 2c 0d 0a 20 20 20 20 20 20 20  ectory,..       
fca0: 20 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 73               Ins
fcb0: 74 61 6c 6c 65 72 2e 43 6f 72 65 46 69 6c 65 4e  taller.CoreFileN
fcc0: 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ame);....       
fcd0: 20 20 20 20 20 20 20 20 20 6c 69 6e 71 46 69 6c           linqFil
fce0: 65 4e 61 6d 65 20 3d 20 50 61 74 68 2e 43 6f 6d  eName = Path.Com
fcf0: 62 69 6e 65 28 64 69 72 65 63 74 6f 72 79 2c 0d  bine(directory,.
fd00: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
fd10: 20 20 20 20 20 49 6e 73 74 61 6c 6c 65 72 2e 4c       Installer.L
fd20: 69 6e 71 46 69 6c 65 4e 61 6d 65 29 3b 0d 0a 0d  inqFileName);...
fd30: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
fd40: 20 64 65 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d   designerFileNam
fd50: 65 20 3d 20 50 61 74 68 2e 43 6f 6d 62 69 6e 65  e = Path.Combine
fd60: 28 64 69 72 65 63 74 6f 72 79 2c 0d 0a 20 20 20  (directory,..   
fd70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fd80: 20 49 6e 73 74 61 6c 6c 65 72 2e 44 65 73 69 67   Installer.Desig
fd90: 6e 65 72 46 69 6c 65 4e 61 6d 65 29 3b 0d 0a 20  nerFileName);.. 
fda0: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
fdb0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
fdc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fdd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fde0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fdf0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
fe00: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
fe10: 72 69 76 61 74 65 20 73 74 61 74 69 63 20 62 6f  rivate static bo
fe20: 6f 6c 20 43 68 65 63 6b 4f 70 74 69 6f 6e 28 0d  ol CheckOption(.
fe30: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
fe40: 20 72 65 66 20 73 74 72 69 6e 67 20 61 72 67 0d   ref string arg.
fe50: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
fe60: 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   )..            
fe70: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
fe80: 20 20 20 73 74 72 69 6e 67 20 72 65 73 75 6c 74     string result
fe90: 20 3d 20 61 72 67 3b 0d 0a 0d 0a 20 20 20 20 20   = arg;....     
fea0: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21             if (!
feb0: 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45  String.IsNullOrE
fec0: 6d 70 74 79 28 72 65 73 75 6c 74 29 29 0d 0a 20  mpty(result)).. 
fed0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
fee0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
fef0: 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
ff00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
ff10: 20 4e 4f 54 45 3a 20 52 65 6d 6f 76 65 20 61 6c   NOTE: Remove al
ff20: 6c 20 6c 65 61 64 69 6e 67 20 73 77 69 74 63 68  l leading switch
ff30: 20 63 68 61 72 73 2e 0d 0a 20 20 20 20 20 20 20   chars...       
ff40: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
ff50: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
ff60: 20 20 20 20 20 72 65 73 75 6c 74 20 3d 20 72 65       result = re
ff70: 73 75 6c 74 2e 54 72 69 6d 53 74 61 72 74 28 53  sult.TrimStart(S
ff80: 77 69 74 63 68 43 68 61 72 73 29 3b 0d 0a 0d 0a  witchChars);....
ff90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ffa0: 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
ffb0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e              // N
ffc0: 4f 54 45 3a 20 48 6f 77 20 6d 61 6e 79 20 63 68  OTE: How many ch
ffd0: 61 72 73 20 77 65 72 65 20 72 65 6d 6f 76 65 64  ars were removed
ffe0: 3f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ?..             
fff0: 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
10000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
10010 6e 74 20 63 6f 75 6e 74 20 3d 20 61 72 67 2e 4c  nt count = arg.L
10020 65 6e 67 74 68 20 2d 20 72 65 73 75 6c 74 2e 4c  ength - result.L
10030 65 6e 67 74 68 3b 0d 0a 0d 0a 20 20 20 20 20 20  ength;....      
10040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
10050 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
10060 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 57        // NOTE: W
10070 61 73 20 74 68 65 72 65 20 61 74 20 6c 65 61 73  as there at leas
10080 74 20 6f 6e 65 3f 0d 0a 20 20 20 20 20 20 20 20  t one?..        
10090 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
100a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
100b0 20 20 20 20 69 66 20 28 63 6f 75 6e 74 20 3e 20      if (count > 
100c0 30 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  0)..            
100d0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
100e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
100f0 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
10100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
10110 2f 20 4e 4f 54 45 3a 20 4f 6b 2c 20 72 65 70 6c  / NOTE: Ok, repl
10120 61 63 65 20 74 68 65 69 72 20 6f 72 69 67 69 6e  ace their origin
10130 61 6c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  al..            
10140 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
10150 20 20 20 20 20 61 72 67 75 6d 65 6e 74 2e 0d 0a       argument...
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 2f 2f 0d 0a 20 20 20 20          //..    
10180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10190 20 20 20 20 61 72 67 20 3d 20 72 65 73 75 6c 74      arg = result
101a0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
101b0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
101c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
101d0 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45           // NOTE
101e0 3a 20 59 65 73 2c 20 74 68 69 73 20 69 73 20 61  : Yes, this is a
101f0 20 73 77 69 74 63 68 2e 0d 0a 20 20 20 20 20 20   switch...      
10200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10210 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
10220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
10230 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20  turn true;..    
10240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10250 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
10260 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
10270 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
10280 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alse;..         
10290 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
102a0 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
102b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
102c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
102d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
102e0 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
102f0 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
10300 74 61 74 69 63 20 62 6f 6f 6c 20 4d 61 74 63 68  tatic bool Match
10310 4f 70 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20  Option(..       
10320 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
10330 61 72 67 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  arg,..          
10340 20 20 20 20 20 20 73 74 72 69 6e 67 20 6f 70 74        string opt
10350 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ion..           
10360 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
10370 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
10380 20 20 20 20 20 20 20 69 66 20 28 28 61 72 67 20         if ((arg 
10390 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20 28 6f 70 74  == null) || (opt
103a0 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 29 0d 0a 20  ion == null)).. 
103b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
103c0 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
103d0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
103e0 20 20 20 20 72 65 74 75 72 6e 20 53 74 72 69 6e      return Strin
103f0 67 2e 43 6f 6d 70 61 72 65 28 61 72 67 2c 20 30  g.Compare(arg, 0
10400 2c 20 6f 70 74 69 6f 6e 2c 20 30 2c 0d 0a 20 20  , option, 0,..  
10410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10420 20 20 61 72 67 2e 4c 65 6e 67 74 68 2c 20 53 74    arg.Length, St
10430 72 69 6e 67 43 6f 6d 70 61 72 69 73 6f 6e 2e 4f  ringComparison.O
10440 72 64 69 6e 61 6c 49 67 6e 6f 72 65 43 61 73 65  rdinalIgnoreCase
10450 29 20 3d 3d 20 30 3b 0d 0a 20 20 20 20 20 20 20  ) == 0;..       
10460 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
10470 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
10480 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10490 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
104a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
104b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
104c0 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65           private
104d0 20 73 74 61 74 69 63 20 62 6f 6f 6c 3f 20 50 61   static bool? Pa
104e0 72 73 65 42 6f 6f 6c 65 61 6e 28 0d 0a 20 20 20  rseBoolean(..   
104f0 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72               str
10500 69 6e 67 20 74 65 78 74 0d 0a 20 20 20 20 20 20  ing text..      
10510 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
10520 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
10530 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
10540 21 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72  !String.IsNullOr
10550 45 6d 70 74 79 28 74 65 78 74 29 29 0d 0a 20 20  Empty(text))..  
10560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
10570 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
10580 20 20 20 20 20 62 6f 6f 6c 20 76 61 6c 75 65 3b       bool value;
10590 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
105a0 20 20 20 20 20 20 20 20 69 66 20 28 62 6f 6f 6c          if (bool
105b0 2e 54 72 79 50 61 72 73 65 28 74 65 78 74 2c 20  .TryParse(text, 
105c0 6f 75 74 20 76 61 6c 75 65 29 29 0d 0a 20 20 20  out value))..   
105d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
105e0 20 20 20 20 20 72 65 74 75 72 6e 20 76 61 6c 75       return valu
105f0 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
10600 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
10610 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
10620 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20  null;..         
10630 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
10640 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
10650 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10660 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10670 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10680 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
10690 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
106a0 74 61 74 69 63 20 6f 62 6a 65 63 74 20 50 61 72  tatic object Par
106b0 73 65 45 6e 75 6d 28 0d 0a 20 20 20 20 20 20 20  seEnum(..       
106c0 20 20 20 20 20 20 20 20 20 54 79 70 65 20 65 6e           Type en
106d0 75 6d 54 79 70 65 2c 0d 0a 20 20 20 20 20 20 20  umType,..       
106e0 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
106f0 74 65 78 74 2c 0d 0a 20 20 20 20 20 20 20 20 20  text,..         
10700 20 20 20 20 20 20 20 62 6f 6f 6c 20 6e 6f 43 61         bool noCa
10710 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  se..            
10720 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20      )..         
10730 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
10740 20 20 20 20 20 20 69 66 20 28 28 65 6e 75 6d 54        if ((enumT
10750 79 70 65 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20  ype == null) || 
10760 21 65 6e 75 6d 54 79 70 65 2e 49 73 45 6e 75 6d  !enumType.IsEnum
10770 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
10780 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 75         return nu
10790 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ll;....         
107a0 20 20 20 20 20 20 20 69 66 20 28 21 53 74 72 69         if (!Stri
107b0 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79  ng.IsNullOrEmpty
107c0 28 74 65 78 74 29 29 0d 0a 20 20 20 20 20 20 20  (text))..       
107d0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
107e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
107f0 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20  try..           
10800 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
10810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10820 20 20 20 20 72 65 74 75 72 6e 20 45 6e 75 6d 2e      return Enum.
10830 50 61 72 73 65 28 65 6e 75 6d 54 79 70 65 2c 20  Parse(enumType, 
10840 74 65 78 74 2c 20 6e 6f 43 61 73 65 29 3b 0d 0a  text, noCase);..
10850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10860 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
10870 20 20 20 20 20 20 20 20 20 20 20 63 61 74 63 68             catch
10880 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
10890 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
108a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
108b0 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d   // do nothing..
108c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
108d0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
108e0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
108f0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
10900 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20  urn null;..     
10910 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
10920 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
10930 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
10940 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10950 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10960 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10970 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10980 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
10990 20 20 20 23 72 65 67 69 6f 6e 20 50 75 62 6c 69     #region Publi
109a0 63 20 53 74 61 74 69 63 20 4d 65 74 68 6f 64 73  c Static Methods
109b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
109c0 62 6c 69 63 20 73 74 61 74 69 63 20 43 6f 6e 66  blic static Conf
109d0 69 67 75 72 61 74 69 6f 6e 20 43 72 65 61 74 65  iguration Create
109e0 44 65 66 61 75 6c 74 28 29 0d 0a 20 20 20 20 20  Default()..     
109f0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
10a00 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
10a10 20 64 69 72 65 63 74 6f 72 79 20 3d 20 6e 75 6c   directory = nul
10a20 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l;..            
10a30 20 20 20 20 73 74 72 69 6e 67 20 63 6f 72 65 46      string coreF
10a40 69 6c 65 4e 61 6d 65 20 3d 20 6e 75 6c 6c 3b 0d  ileName = null;.
10a50 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
10a60 20 73 74 72 69 6e 67 20 6c 69 6e 71 46 69 6c 65   string linqFile
10a70 4e 61 6d 65 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20  Name = null;..  
10a80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
10a90 72 69 6e 67 20 64 65 73 69 67 6e 65 72 46 69 6c  ring designerFil
10aa0 65 4e 61 6d 65 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d  eName = null;...
10ab0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
10ac0 20 47 65 74 44 65 66 61 75 6c 74 46 69 6c 65 4e   GetDefaultFileN
10ad0 61 6d 65 73 28 0d 0a 20 20 20 20 20 20 20 20 20  ames(..         
10ae0 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20 64             ref d
10af0 69 72 65 63 74 6f 72 79 2c 20 72 65 66 20 63 6f  irectory, ref co
10b00 72 65 46 69 6c 65 4e 61 6d 65 2c 20 72 65 66 20  reFileName, ref 
10b10 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 2c 0d 0a 20  linqFileName,.. 
10b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10b30 20 20 20 72 65 66 20 64 65 73 69 67 6e 65 72 46     ref designerF
10b40 69 6c 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20  ileName);....   
10b50 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
10b60 75 72 6e 20 6e 65 77 20 43 6f 6e 66 69 67 75 72  urn new Configur
10b70 61 74 69 6f 6e 28 74 68 69 73 41 73 73 65 6d 62  ation(thisAssemb
10b80 6c 79 2c 20 6e 75 6c 6c 2c 20 64 69 72 65 63 74  ly, null, direct
10b90 6f 72 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ory,..          
10ba0 20 20 20 20 20 20 20 20 20 20 63 6f 72 65 46 69            coreFi
10bb0 6c 65 4e 61 6d 65 2c 20 6c 69 6e 71 46 69 6c 65  leName, linqFile
10bc0 4e 61 6d 65 2c 20 64 65 73 69 67 6e 65 72 46 69  Name, designerFi
10bd0 6c 65 4e 61 6d 65 2c 20 6e 75 6c 6c 2c 20 6e 75  leName, null, nu
10be0 6c 6c 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll,..           
10bf0 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70           TraceOp
10c00 73 2e 44 65 62 75 67 46 6f 72 6d 61 74 2c 20 54  s.DebugFormat, T
10c10 72 61 63 65 4f 70 73 2e 54 72 61 63 65 46 6f 72  raceOps.TraceFor
10c20 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  mat,..          
10c30 20 20 20 20 20 20 20 20 20 20 49 6e 73 74 61 6c            Instal
10c40 6c 46 6c 61 67 73 2e 44 65 66 61 75 6c 74 2c 20  lFlags.Default, 
10c50 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 44 65  TracePriority.De
10c60 66 61 75 6c 74 2c 0d 0a 20 20 20 20 20 20 20 20  fault,..        
10c70 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
10c80 65 50 72 69 6f 72 69 74 79 2e 44 65 66 61 75 6c  ePriority.Defaul
10c90 74 2c 20 74 72 75 65 2c 20 66 61 6c 73 65 2c 20  t, true, false, 
10ca0 66 61 6c 73 65 2c 20 66 61 6c 73 65 2c 20 66 61  false, false, fa
10cb0 6c 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  lse,..          
10cc0 20 20 20 20 20 20 20 20 20 20 66 61 6c 73 65 2c            false,
10cd0 20 66 61 6c 73 65 2c 20 66 61 6c 73 65 2c 20 66   false, false, f
10ce0 61 6c 73 65 2c 20 66 61 6c 73 65 2c 20 66 61 6c  alse, false, fal
10cf0 73 65 2c 20 66 61 6c 73 65 2c 20 66 61 6c 73 65  se, false, false
10d00 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
10d10 20 20 20 20 20 20 20 66 61 6c 73 65 2c 20 66 61         false, fa
10d20 6c 73 65 2c 20 74 72 75 65 2c 20 74 72 75 65 2c  lse, true, true,
10d30 20 66 61 6c 73 65 2c 20 66 61 6c 73 65 2c 20 66   false, false, f
10d40 61 6c 73 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  alse);..        
10d50 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
10d60 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
10d70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10d80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10d90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10da0 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
10db0 20 20 20 20 20 20 20 20 5b 4d 65 74 68 6f 64 49          [MethodI
10dc0 6d 70 6c 28 4d 65 74 68 6f 64 49 6d 70 6c 4f 70  mpl(MethodImplOp
10dd0 74 69 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e 69 6e 67  tions.NoInlining
10de0 29 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  )]..            
10df0 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 62 6f  public static bo
10e00 6f 6c 20 46 72 6f 6d 41 72 67 73 28 0d 0a 20 20  ol FromArgs(..  
10e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
10e20 72 69 6e 67 5b 5d 20 61 72 67 73 2c 0d 0a 20 20  ring[] args,..  
10e30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f                bo
10e40 6f 6c 20 73 74 72 69 63 74 2c 0d 0a 20 20 20 20  ol strict,..    
10e50 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20              ref 
10e60 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 63 6f  Configuration co
10e70 6e 66 69 67 75 72 61 74 69 6f 6e 2c 0d 0a 20 20  nfiguration,..  
10e80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
10e90 66 20 73 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a  f string error..
10ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10eb0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
10ec0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
10ed0 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20    try..         
10ee0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
10ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
10f00 20 28 61 72 67 73 20 3d 3d 20 6e 75 6c 6c 29 0d   (args == null).
10f10 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
10f20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
10f30 74 72 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  true;....       
10f40 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
10f50 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 3d  (configuration =
10f60 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
10f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10f80 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 3d   configuration =
10f90 20 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 43   Configuration.C
10fa0 72 65 61 74 65 44 65 66 61 75 6c 74 28 29 3b 0d  reateDefault();.
10fb0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
10fc0 20 20 20 20 20 20 20 69 6e 74 20 6c 65 6e 67 74         int lengt
10fd0 68 20 3d 20 61 72 67 73 2e 4c 65 6e 67 74 68 3b  h = args.Length;
10fe0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
10ff0 20 20 20 20 20 20 20 20 66 6f 72 20 28 69 6e 74          for (int
11000 20 69 6e 64 65 78 20 3d 20 30 3b 20 69 6e 64 65   index = 0; inde
11010 78 20 3c 20 6c 65 6e 67 74 68 3b 20 69 6e 64 65  x < length; inde
11020 78 2b 2b 29 0d 0a 20 20 20 20 20 20 20 20 20 20  x++)..          
11030 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
11040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11050 20 20 20 20 20 73 74 72 69 6e 67 20 61 72 67 20       string arg 
11060 3d 20 61 72 67 73 5b 69 6e 64 65 78 5d 3b 0d 0a  = args[index];..
11070 0d 0a 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 2f 2f 0d 0a 20 20            //..  
11090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
110a0 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 53        // NOTE: S
110b0 6b 69 70 20 61 6e 79 20 61 72 67 75 6d 65 6e 74  kip any argument
110c0 20 74 68 61 74 20 69 73 20 6e 75 6c 6c 20 28 3f   that is null (?
110d0 29 20 6f 72 20 61 6e 20 65 6d 70 74 79 0d 0a 20  ) or an empty.. 
110e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
110f0 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
11100 73 74 72 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20  string...       
11110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11120 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
11130 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
11140 28 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72  (String.IsNullOr
11150 45 6d 70 74 79 28 61 72 67 29 29 0d 0a 20 20 20  Empty(arg))..   
11160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11170 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75           continu
11180 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
11190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
111a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
111b0 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54            // NOT
111c0 45 3a 20 57 65 20 61 72 65 20 67 6f 69 6e 67 20  E: We are going 
111d0 74 6f 20 6d 6f 64 69 66 79 20 74 68 65 20 6f 72  to modify the or
111e0 69 67 69 6e 61 6c 20 61 72 67 75 6d 65 6e 74 0d  iginal argument.
111f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
11200 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
11210 20 20 62 79 20 72 65 6d 6f 76 69 6e 67 20 61 6e    by removing an
11220 79 20 6c 65 61 64 69 6e 67 20 6f 70 74 69 6f 6e  y leading option
11230 20 63 68 61 72 61 63 74 65 72 73 3b 0d 0a 20 20   characters;..  
11240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11250 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 74        //       t
11260 68 65 72 65 66 6f 72 65 2c 20 77 65 20 75 73 65  herefore, we use
11270 20 61 20 6e 65 77 20 73 74 72 69 6e 67 20 74 6f   a new string to
11280 20 68 6f 6c 64 20 74 68 65 0d 0a 20 20 20 20 20   hold the..     
11290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
112a0 20 20 20 2f 2f 20 20 20 20 20 20 20 6d 6f 64 69     //       modi
112b0 66 69 65 64 20 61 72 67 75 6d 65 6e 74 2e 0d 0a  fied argument...
112c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
112d0 20 20 20 20 20 20 20 20 2f 2f 0d 0a 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 73 74 72 69 6e 67 20 6e 65 77 41 72      string newAr
11300 67 20 3d 20 61 72 67 3b 0d 0a 0d 0a 20 20 20 20  g = arg;....    
11310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11320 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
11330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11340 2f 2f 20 4e 4f 54 45 3a 20 41 6c 6c 20 74 68 65  // NOTE: All the
11350 20 73 75 70 70 6f 72 74 65 64 20 63 6f 6d 6d 61   supported comma
11360 6e 64 20 6c 69 6e 65 20 6f 70 74 69 6f 6e 73 20  nd line options 
11370 6d 75 73 74 0d 0a 20 20 20 20 20 20 20 20 20 20  must..          
11380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
11390 20 20 20 20 20 20 20 62 65 67 69 6e 20 77 69 74         begin wit
113a0 68 20 61 6e 20 6f 70 74 69 6f 6e 20 63 68 61 72  h an option char
113b0 61 63 74 65 72 20 28 65 2e 67 2e 20 61 20 6d 69  acter (e.g. a mi
113c0 6e 75 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20  nus..           
113d0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
113e0 20 20 20 20 20 20 6f 72 20 66 6f 72 77 61 72 64        or forward
113f0 20 73 6c 61 73 68 29 3b 20 61 74 74 65 6d 70 74   slash); attempt
11400 20 74 6f 20 76 61 6c 69 64 61 74 65 20 74 68 61   to validate tha
11410 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  t..             
11420 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
11430 20 20 20 20 6e 6f 77 2e 20 20 49 66 20 77 65 20      now.  If we 
11440 66 61 69 6c 20 69 6e 20 73 74 72 69 63 74 20 6d  fail in strict m
11450 6f 64 65 2c 20 77 65 20 61 72 65 20 64 6f 6e 65  ode, we are done
11460 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
11470 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
11480 20 20 20 20 6f 74 68 65 72 77 69 73 65 2c 20 6a      otherwise, j
11490 75 73 74 20 73 6b 69 70 20 74 68 69 73 20 61 72  ust skip this ar
114a0 67 75 6d 65 6e 74 20 61 6e 64 20 61 64 76 61 6e  gument and advan
114b0 63 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ce..            
114c0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
114d0 20 20 20 20 20 74 6f 20 74 68 65 20 6e 65 78 74       to the next
114e0 20 6f 6e 65 2e 0d 0a 20 20 20 20 20 20 20 20 20   one...         
114f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
11500 2f 0d 0a 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 69 66 20 28 21             if (!
11520 43 68 65 63 6b 4f 70 74 69 6f 6e 28 72 65 66 20  CheckOption(ref 
11530 6e 65 77 41 72 67 29 29 0d 0a 20 20 20 20 20 20  newArg))..      
11540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11550 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
11560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11570 20 65 72 72 6f 72 20 3d 20 54 72 61 63 65 4f 70   error = TraceOp
11580 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28  s.DebugAndTrace(
11590 0d 0a 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 20                  
115b0 20 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e    TracePriority.
115c0 4c 6f 77 65 73 74 2c 20 64 65 62 75 67 43 61 6c  Lowest, debugCal
115d0 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20  lback,..        
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 74 72 61 63 65 43 61 6c          traceCal
11600 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f  lback, String.Fo
11610 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
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 22 55 6e 73 75 70 70 6f 72         "Unsuppor
11640 74 65 64 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65  ted command line
11650 20 61 72 67 75 6d 65 6e 74 3a 20 7b 30 7d 22 2c   argument: {0}",
11660 0d 0a 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 20 20                  
11680 20 20 46 6f 72 44 69 73 70 6c 61 79 28 61 72 67    ForDisplay(arg
11690 29 29 2c 20 74 72 61 63 65 43 61 74 65 67 6f 72  )), traceCategor
116a0 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
116b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
116c0 20 20 20 69 66 20 28 73 74 72 69 63 74 29 0d 0a     if (strict)..
116d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
116e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
116f0 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d  return false;...
11700 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
11710 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
11720 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20  tinue;..        
11730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11740 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
11750 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
11760 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
11770 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45           // NOTE
11780 3a 20 41 6c 6c 20 74 68 65 20 73 75 70 70 6f 72  : All the suppor
11790 74 65 64 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65  ted command line
117a0 20 6f 70 74 69 6f 6e 73 20 6d 75 73 74 0d 0a 20   options must.. 
117b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
117c0 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
117d0 68 61 76 65 20 61 20 76 61 6c 75 65 3b 20 74 68  have a value; th
117e0 65 72 65 66 6f 72 65 2c 20 61 74 74 65 6d 70 74  erefore, attempt
117f0 20 74 6f 20 61 64 76 61 6e 63 65 0d 0a 20 20 20   to advance..   
11800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11810 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 74 6f       //       to
11820 20 69 74 20 6e 6f 77 2e 20 20 49 66 20 77 65 20   it now.  If we 
11830 66 61 69 6c 2c 20 77 65 20 61 72 65 20 64 6f 6e  fail, we are don
11840 65 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e...            
11850 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
11860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11870 20 20 20 20 20 20 20 20 69 6e 64 65 78 2b 2b 3b          index++;
11880 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
11890 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
118a0 69 6e 64 65 78 20 3e 3d 20 6c 65 6e 67 74 68 29  index >= length)
118b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
118c0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 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 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
118f0 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41   TraceOps.DebugA
11900 6e 64 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20  ndTrace(..      
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 20 54 72 61 63 65 50            TraceP
11930 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20  riority.Lowest, 
11940 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a  debugCallback,..
11950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11970 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53  traceCallback, S
11980 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
11990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
119a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
119b0 4d 69 73 73 69 6e 67 20 76 61 6c 75 65 20 66 6f  Missing value fo
119c0 72 20 6f 70 74 69 6f 6e 3a 20 7b 30 7d 22 2c 0d  r option: {0}",.
119d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
119e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
119f0 20 46 6f 72 44 69 73 70 6c 61 79 28 61 72 67 29   ForDisplay(arg)
11a00 29 2c 20 74 72 61 63 65 43 61 74 65 67 6f 72 79  ), traceCategory
11a10 29 3b 0d 0a 0d 0a 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 20 69 66 20 28 73 74 72 69 63 74 29 0d 0a 20    if (strict).. 
11a40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11a50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
11a60 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a  eturn false;....
11a70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11a80 20 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61              brea
11a90 6b 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  k;..            
11aa0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
11ab0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
11ac0 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
11ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11ae0 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 47 72       // NOTE: Gr
11af0 61 62 20 74 68 65 20 74 65 78 74 75 61 6c 20 76  ab the textual v
11b00 61 6c 75 65 20 6f 66 20 74 68 69 73 20 63 6f 6d  alue of this com
11b10 6d 61 6e 64 20 6c 69 6e 65 0d 0a 20 20 20 20 20  mand line..     
11b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11b30 20 20 20 2f 2f 20 20 20 20 20 20 20 6f 70 74 69     //       opti
11b40 6f 6e 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  on...           
11b50 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
11b60 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
11b70 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
11b80 74 65 78 74 20 3d 20 61 72 67 73 5b 69 6e 64 65  text = args[inde
11b90 78 5d 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  x];....         
11ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
11bb0 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
11bc0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f             // NO
11bd0 54 45 3a 20 46 69 67 75 72 65 20 6f 75 74 20 77  TE: Figure out w
11be0 68 69 63 68 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e  hich command lin
11bf0 65 20 6f 70 74 69 6f 6e 20 74 68 69 73 20 69 73  e option this is
11c00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
11c10 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
11c20 20 20 20 28 62 61 73 65 64 20 6f 6e 20 61 20 70     (based on a p
11c30 61 72 74 69 61 6c 20 6e 61 6d 65 20 6d 61 74 63  artial name matc
11c40 68 29 20 61 6e 64 20 74 68 65 6e 20 74 72 79 0d  h) and then try.
11c50 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
11c60 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
11c70 20 20 74 6f 20 69 6e 74 65 72 70 72 65 74 20 74    to interpret t
11c80 68 65 20 74 65 78 74 75 61 6c 20 76 61 6c 75 65  he textual value
11c90 20 61 73 20 74 68 65 20 63 6f 72 72 65 63 74 0d   as the correct.
11ca0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
11cb0 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
11cc0 20 20 74 79 70 65 2e 0d 0a 20 20 20 20 20 20 20    type...       
11cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11ce0 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
11cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
11d00 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77  (MatchOption(new
11d10 41 72 67 2c 20 22 63 6f 6e 66 69 67 56 65 72 73  Arg, "configVers
11d20 69 6f 6e 22 29 29 0d 0a 20 20 20 20 20 20 20 20  ion"))..        
11d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11d40 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
11d50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
11d60 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 63 6f 6e  onfiguration.con
11d70 66 69 67 56 65 72 73 69 6f 6e 20 3d 20 74 65 78  figVersion = tex
11d80 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t;..            
11d90 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
11da0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11db0 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28         else if (
11dc0 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41  MatchOption(newA
11dd0 72 67 2c 20 22 63 6f 6e 66 69 72 6d 22 29 29 0d  rg, "confirm")).
11de0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
11df0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
11e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11e10 20 20 20 20 20 20 20 20 62 6f 6f 6c 3f 20 76 61          bool? va
11e20 6c 75 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c 65  lue = ParseBoole
11e30 61 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20 20  an(text);....   
11e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11e50 20 20 20 20 20 20 20 20 20 69 66 20 28 76 61 6c           if (val
11e60 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ue == null)..   
11e70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11e80 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
11e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11ea0 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
11eb0 72 20 3d 20 54 72 61 63 65 4f 70 73 2e 44 65 62  r = TraceOps.Deb
11ec0 75 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 20 20  ugAndTrace(..   
11ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11ef0 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c   TracePriority.L
11f00 6f 77 65 73 74 2c 20 64 65 62 75 67 43 61 6c 6c  owest, debugCall
11f10 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20  back,..         
11f20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11f30 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
11f40 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67  Callback, String
11f50 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  .Format(..      
11f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 49                "I
11f80 6e 76 61 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c 65  nvalid {0} boole
11f90 61 6e 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d  an value: {1}",.
11fa0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
11fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11fc0 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28       ForDisplay(
11fd0 61 72 67 29 2c 20 46 6f 72 44 69 73 70 6c 61 79  arg), ForDisplay
11fe0 28 74 65 78 74 29 29 2c 0d 0a 20 20 20 20 20 20  (text)),..      
11ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
12010 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  aceCategory);...
12020 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
12030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12040 20 69 66 20 28 73 74 72 69 63 74 29 0d 0a 20 20   if (strict)..  
12050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12070 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
12080 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
12090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
120a0 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20     continue;..  
120b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
120c0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
120d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
120e0 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69             confi
120f0 67 75 72 61 74 69 6f 6e 2e 63 6f 6e 66 69 72 6d  guration.confirm
12100 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d   = (bool)value;.
12110 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
12120 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
12130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12140 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74      else if (Mat
12150 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c  chOption(newArg,
12160 20 22 63 6f 72 65 46 69 6c 65 4e 61 6d 65 22 29   "coreFileName")
12170 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
12180 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
12190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
121a0 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67            config
121b0 75 72 61 74 69 6f 6e 2e 63 6f 72 65 46 69 6c 65  uration.coreFile
121c0 4e 61 6d 65 20 3d 20 74 65 78 74 3b 0d 0a 20 20  Name = text;..  
121d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
121e0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
121f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12200 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f   else if (MatchO
12210 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 64  ption(newArg, "d
12220 65 62 75 67 22 29 29 0d 0a 20 20 20 20 20 20 20  ebug"))..       
12230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12240 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
12250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12260 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d 20 50 61  bool? value = Pa
12270 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65 78 74 29  rseBoolean(text)
12280 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
12290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
122a0 20 69 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75   if (value == nu
122b0 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
122c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
122d0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
122e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
122f0 20 20 20 20 65 72 72 6f 72 20 3d 20 54 72 61 63      error = Trac
12300 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61  eOps.DebugAndTra
12310 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ce(..           
12320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12330 20 20 20 20 20 20 20 20 20 54 72 61 63 65 50 72           TracePr
12340 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64  iority.Lowest, d
12350 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20  ebugCallback,.. 
12360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12380 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b     traceCallback
12390 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  , String.Format(
123a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
123b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
123c0 20 20 20 20 20 20 22 49 6e 76 61 6c 69 64 20 7b        "Invalid {
123d0 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65  0} boolean value
123e0 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20  : {1}",..       
123f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12400 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72               For
12410 44 69 73 70 6c 61 79 28 61 72 67 29 2c 20 46 6f  Display(arg), Fo
12420 72 44 69 73 70 6c 61 79 28 74 65 78 74 29 29 2c  rDisplay(text)),
12430 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
12440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12450 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67        traceCateg
12460 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
12470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12480 20 20 20 20 20 20 20 20 20 69 66 20 28 73 74 72           if (str
12490 69 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ict)..          
124a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
124b0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
124c0 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20   false;....     
124d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
124e0 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69             conti
124f0 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  nue;..          
12500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12510 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
12520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12530 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e     configuration
12540 2e 64 65 62 75 67 20 3d 20 28 62 6f 6f 6c 29 76  .debug = (bool)v
12550 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alue;..         
12560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
12570 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
12580 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69            else i
12590 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e  f (MatchOption(n
125a0 65 77 41 72 67 2c 20 22 64 65 62 75 67 46 6f 72  ewArg, "debugFor
125b0 6d 61 74 22 29 29 0d 0a 20 20 20 20 20 20 20 20  mat"))..        
125c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
125d0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
125e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
125f0 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 64 65 62  onfiguration.deb
12600 75 67 46 6f 72 6d 61 74 20 3d 20 74 65 78 74 3b  ugFormat = text;
12610 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
12620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
12630 61 63 65 4f 70 73 2e 44 65 62 75 67 46 6f 72 6d  aceOps.DebugForm
12640 61 74 20 3d 20 63 6f 6e 66 69 67 75 72 61 74 69  at = configurati
12650 6f 6e 2e 64 65 62 75 67 46 6f 72 6d 61 74 3b 0d  on.debugFormat;.
12660 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
12670 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
12680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12690 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74      else if (Mat
126a0 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c  chOption(newArg,
126b0 20 22 64 65 62 75 67 50 72 69 6f 72 69 74 79 22   "debugPriority"
126c0 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
126d0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
126e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
126f0 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63             objec
12700 74 20 76 61 6c 75 65 20 3d 20 50 61 72 73 65 45  t value = ParseE
12710 6e 75 6d 28 0d 0a 20 20 20 20 20 20 20 20 20 20  num(..          
12720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12730 20 20 20 20 20 20 74 79 70 65 6f 66 28 54 72 61        typeof(Tra
12740 63 65 50 72 69 6f 72 69 74 79 29 2c 20 74 65 78  cePriority), tex
12750 74 2c 20 74 72 75 65 29 3b 0d 0a 0d 0a 20 20 20  t, true);....   
12760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12770 20 20 20 20 20 20 20 20 20 69 66 20 28 76 61 6c           if (val
12780 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ue == null)..   
12790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
127a0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
127b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
127c0 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
127d0 72 20 3d 20 54 72 61 63 65 4f 70 73 2e 44 65 62  r = TraceOps.Deb
127e0 75 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 20 20  ugAndTrace(..   
127f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12810 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c   TracePriority.L
12820 6f 77 65 73 74 2c 20 64 65 62 75 67 43 61 6c 6c  owest, debugCall
12830 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20  back,..         
12840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12850 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
12860 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67  Callback, String
12870 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  .Format(..      
12880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 49                "I
128a0 6e 76 61 6c 69 64 20 7b 30 7d 20 76 61 6c 75 65  nvalid {0} value
128b0 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20  : {1}",..       
128c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
128d0 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72               For
128e0 44 69 73 70 6c 61 79 28 61 72 67 29 2c 20 46 6f  Display(arg), Fo
128f0 72 44 69 73 70 6c 61 79 28 74 65 78 74 29 29 2c  rDisplay(text)),
12900 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
12910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12920 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67        traceCateg
12930 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
12940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12950 20 20 20 20 20 20 20 20 20 69 66 20 28 73 74 72           if (str
12960 69 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ict)..          
12970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12980 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
12990 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20   false;....     
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 63 6f 6e 74 69             conti
129c0 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  nue;..          
129d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
129e0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
129f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12a00 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e     configuration
12a10 2e 64 65 62 75 67 50 72 69 6f 72 69 74 79 20 3d  .debugPriority =
12a20 20 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 29   (TracePriority)
12a30 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20  value;..        
12a40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12a50 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62      TraceOps.Deb
12a60 75 67 50 72 69 6f 72 69 74 79 20 3d 20 63 6f 6e  ugPriority = con
12a70 66 69 67 75 72 61 74 69 6f 6e 2e 64 65 62 75 67  figuration.debug
12a80 50 72 69 6f 72 69 74 79 3b 0d 0a 20 20 20 20 20  Priority;..     
12a90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12aa0 20 20 20 7d 0d 0a 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 65 6c                el
12ac0 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69  se if (MatchOpti
12ad0 6f 6e 28 6e 65 77 41 72 67 2c 20 22 64 65 73 69  on(newArg, "desi
12ae0 67 6e 65 72 46 69 6c 65 4e 61 6d 65 22 29 29 0d  gnerFileName")).
12af0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
12b00 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
12b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12b20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72          configur
12b30 61 74 69 6f 6e 2e 64 65 73 69 67 6e 65 72 46 69  ation.designerFi
12b40 6c 65 4e 61 6d 65 20 3d 20 74 65 78 74 3b 0d 0a  leName = text;..
12b50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12b60 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
12b70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12b80 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63     else if (Matc
12b90 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20  hOption(newArg, 
12ba0 22 64 69 72 65 63 74 6f 72 79 22 29 29 0d 0a 20  "directory")).. 
12bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12bc0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
12bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12be0 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74        configurat
12bf0 69 6f 6e 2e 64 69 72 65 63 74 6f 72 79 20 3d 20  ion.directory = 
12c00 74 65 78 74 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  text;....       
12c10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12c20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
12c30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12c40 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 2a 53       // NOTE: *S
12c50 50 45 43 49 41 4c 2a 20 4d 75 73 74 20 72 65 66  PECIAL* Must ref
12c60 72 65 73 68 20 74 68 65 20 66 69 6c 65 20 6e 61  resh the file na
12c70 6d 65 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20  mes..           
12c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12c90 20 2f 2f 20 20 20 20 20 20 20 68 65 72 65 20 62   //       here b
12ca0 65 63 61 75 73 65 20 74 68 65 20 75 6e 64 65 72  ecause the under
12cb0 6c 79 69 6e 67 20 64 69 72 65 63 74 6f 72 79 0d  lying directory.
12cc0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
12cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
12ce0 20 20 20 20 20 20 68 61 73 20 63 68 61 6e 67 65        has change
12cf0 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  d...            
12d00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12d10 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
12d20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12d30 73 74 72 69 6e 67 20 63 6f 72 65 46 69 6c 65 4e  string coreFileN
12d40 61 6d 65 20 3d 20 63 6f 6e 66 69 67 75 72 61 74  ame = configurat
12d50 69 6f 6e 2e 63 6f 72 65 46 69 6c 65 4e 61 6d 65  ion.coreFileName
12d60 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
12d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12d80 20 69 66 20 28 21 53 74 72 69 6e 67 2e 49 73 4e   if (!String.IsN
12d90 75 6c 6c 4f 72 45 6d 70 74 79 28 63 6f 72 65 46  ullOrEmpty(coreF
12da0 69 6c 65 4e 61 6d 65 29 29 0d 0a 20 20 20 20 20  ileName))..     
12db0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12dc0 20 20 20 20 20 20 20 20 20 20 20 63 6f 72 65 46             coreF
12dd0 69 6c 65 4e 61 6d 65 20 3d 20 50 61 74 68 2e 47  ileName = Path.G
12de0 65 74 46 69 6c 65 4e 61 6d 65 28 63 6f 72 65 46  etFileName(coreF
12df0 69 6c 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20  ileName);....   
12e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12e10 20 20 20 20 20 20 20 20 20 69 66 20 28 53 74 72           if (Str
12e20 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74  ing.IsNullOrEmpt
12e30 79 28 63 6f 72 65 46 69 6c 65 4e 61 6d 65 29 29  y(coreFileName))
12e40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
12e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12e60 20 20 63 6f 72 65 46 69 6c 65 4e 61 6d 65 20 3d    coreFileName =
12e70 20 49 6e 73 74 61 6c 6c 65 72 2e 43 6f 72 65 46   Installer.CoreF
12e80 69 6c 65 4e 61 6d 65 3b 0d 0a 0d 0a 20 20 20 20  ileName;....    
12e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12ea0 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72          configur
12eb0 61 74 69 6f 6e 2e 63 6f 72 65 46 69 6c 65 4e 61  ation.coreFileNa
12ec0 6d 65 20 3d 20 50 61 74 68 2e 43 6f 6d 62 69 6e  me = Path.Combin
12ed0 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
12ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12ef0 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f      configuratio
12f00 6e 2e 64 69 72 65 63 74 6f 72 79 2c 20 63 6f 72  n.directory, cor
12f10 65 46 69 6c 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20  eFileName);.... 
12f20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12f30 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
12f40 67 20 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 20 3d  g linqFileName =
12f50 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6c   configuration.l
12f60 69 6e 71 46 69 6c 65 4e 61 6d 65 3b 0d 0a 0d 0a  inqFileName;....
12f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12f80 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
12f90 21 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72  !String.IsNullOr
12fa0 45 6d 70 74 79 28 6c 69 6e 71 46 69 6c 65 4e 61  Empty(linqFileNa
12fb0 6d 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  me))..          
12fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12fd0 20 20 20 20 20 20 6c 69 6e 71 46 69 6c 65 4e 61        linqFileNa
12fe0 6d 65 20 3d 20 50 61 74 68 2e 47 65 74 46 69 6c  me = Path.GetFil
12ff0 65 4e 61 6d 65 28 6c 69 6e 71 46 69 6c 65 4e 61  eName(linqFileNa
13000 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  me);....        
13010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13020 20 20 20 20 69 66 20 28 53 74 72 69 6e 67 2e 49      if (String.I
13030 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 6c 69 6e  sNullOrEmpty(lin
13040 71 46 69 6c 65 4e 61 6d 65 29 29 0d 0a 20 20 20  qFileName))..   
13050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13060 20 20 20 20 20 20 20 20 20 20 20 20 20 6c 69 6e               lin
13070 71 46 69 6c 65 4e 61 6d 65 20 3d 20 49 6e 73 74  qFileName = Inst
13080 61 6c 6c 65 72 2e 4c 69 6e 71 46 69 6c 65 4e 61  aller.LinqFileNa
13090 6d 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  me;....         
130a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
130b0 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e     configuration
130c0 2e 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 20 3d 20  .linqFileName = 
130d0 50 61 74 68 2e 43 6f 6d 62 69 6e 65 28 0d 0a 20  Path.Combine(.. 
130e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
130f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
13100 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 64 69 72  onfiguration.dir
13110 65 63 74 6f 72 79 2c 20 6c 69 6e 71 46 69 6c 65  ectory, linqFile
13120 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  Name);....      
13130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13140 20 20 20 20 20 20 73 74 72 69 6e 67 20 64 65 73        string des
13150 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 20 3d 20  ignerFileName = 
13160 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 64 65  configuration.de
13170 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 3b 0d  signerFileName;.
13180 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
13190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
131a0 66 20 28 21 53 74 72 69 6e 67 2e 49 73 4e 75 6c  f (!String.IsNul
131b0 6c 4f 72 45 6d 70 74 79 28 64 65 73 69 67 6e 65  lOrEmpty(designe
131c0 72 46 69 6c 65 4e 61 6d 65 29 29 0d 0a 20 20 20  rFileName))..   
131d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
131e0 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65 73               des
131f0 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 20 3d 20  ignerFileName = 
13200 50 61 74 68 2e 47 65 74 46 69 6c 65 4e 61 6d 65  Path.GetFileName
13210 28 64 65 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d  (designerFileNam
13220 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e);....         
13230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13240 20 20 20 69 66 20 28 53 74 72 69 6e 67 2e 49 73     if (String.Is
13250 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 64 65 73 69  NullOrEmpty(desi
13260 67 6e 65 72 46 69 6c 65 4e 61 6d 65 29 29 0d 0a  gnerFileName))..
13270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13290 64 65 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65  designerFileName
132a0 20 3d 20 49 6e 73 74 61 6c 6c 65 72 2e 44 65 73   = Installer.Des
132b0 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 3b 0d 0a  ignerFileName;..
132c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
132d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
132e0 6e 66 69 67 75 72 61 74 69 6f 6e 2e 64 65 73 69  nfiguration.desi
132f0 67 6e 65 72 46 69 6c 65 4e 61 6d 65 20 3d 20 50  gnerFileName = P
13300 61 74 68 2e 43 6f 6d 62 69 6e 65 28 0d 0a 20 20  ath.Combine(..  
13310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
13330 6e 66 69 67 75 72 61 74 69 6f 6e 2e 64 69 72 65  nfiguration.dire
13340 63 74 6f 72 79 2c 20 64 65 73 69 67 6e 65 72 46  ctory, designerF
13350 69 6c 65 4e 61 6d 65 29 3b 0d 0a 20 20 20 20 20  ileName);..     
13360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13370 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
13380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c                el
13390 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69  se if (MatchOpti
133a0 6f 6e 28 6e 65 77 41 72 67 2c 20 22 69 6e 73 74  on(newArg, "inst
133b0 61 6c 6c 22 29 29 0d 0a 20 20 20 20 20 20 20 20  all"))..        
133c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
133d0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
133e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62                 b
133f0 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d 20 50 61 72  ool? value = Par
13400 73 65 42 6f 6f 6c 65 61 6e 28 74 65 78 74 29 3b  seBoolean(text);
13410 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
13420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13430 69 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c  if (value == nul
13440 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
13450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13460 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
13470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13480 20 20 20 65 72 72 6f 72 20 3d 20 54 72 61 63 65     error = Trace
13490 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63  Ops.DebugAndTrac
134a0 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
134b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
134c0 20 20 20 20 20 20 20 20 54 72 61 63 65 50 72 69          TracePri
134d0 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65  ority.Lowest, de
134e0 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20  bugCallback,..  
134f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13510 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c    traceCallback,
13520 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d   String.Format(.
13530 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
13540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13550 20 20 20 20 20 22 49 6e 76 61 6c 69 64 20 7b 30       "Invalid {0
13560 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 3a  } boolean value:
13570 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20   {1}",..        
13580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13590 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44              ForD
135a0 69 73 70 6c 61 79 28 61 72 67 29 2c 20 46 6f 72  isplay(arg), For
135b0 44 69 73 70 6c 61 79 28 74 65 78 74 29 29 2c 0d  Display(text)),.
135c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
135d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
135e0 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f       traceCatego
135f0 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
13600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13610 20 20 20 20 20 20 20 20 69 66 20 28 73 74 72 69          if (stri
13620 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ct)..           
13630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13640 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
13650 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  false;....      
13660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13670 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e            contin
13680 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
13690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
136a0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
136b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
136c0 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e    configuration.
136d0 69 6e 73 74 61 6c 6c 20 3d 20 28 62 6f 6f 6c 29  install = (bool)
136e0 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20  value;..        
136f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13700 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
13710 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20             else 
13720 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28  if (MatchOption(
13730 6e 65 77 41 72 67 2c 20 22 69 6e 73 74 61 6c 6c  newArg, "install
13740 46 6c 61 67 73 22 29 29 0d 0a 20 20 20 20 20 20  Flags"))..      
13750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13760 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
13770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13780 20 6f 62 6a 65 63 74 20 76 61 6c 75 65 20 3d 20   object value = 
13790 50 61 72 73 65 45 6e 75 6d 28 0d 0a 20 20 20 20  ParseEnum(..    
137a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
137b0 20 20 20 20 20 20 20 20 20 20 20 20 74 79 70 65              type
137c0 6f 66 28 49 6e 73 74 61 6c 6c 46 6c 61 67 73 29  of(InstallFlags)
137d0 2c 20 74 65 78 74 2c 20 74 72 75 65 29 3b 0d 0a  , text, true);..
137e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
137f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
13800 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29   (value == null)
13810 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
13820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
13830 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
13840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13850 20 65 72 72 6f 72 20 3d 20 54 72 61 63 65 4f 70   error = TraceOp
13860 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28  s.DebugAndTrace(
13870 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
13880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13890 20 20 20 20 20 20 54 72 61 63 65 50 72 69 6f 72        TracePrior
138a0 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75  ity.Lowest, debu
138b0 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20  gCallback,..    
138c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
138d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
138e0 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53  traceCallback, S
138f0 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
13900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13920 20 20 20 22 49 6e 76 61 6c 69 64 20 69 6e 73 74     "Invalid inst
13930 61 6c 6c 20 66 6c 61 67 73 20 76 61 6c 75 65 3a  all flags value:
13940 20 7b 30 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20   {0}",..        
13950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13960 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44              ForD
13970 69 73 70 6c 61 79 28 74 65 78 74 29 29 2c 20 74  isplay(text)), t
13980 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
13990 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
139a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
139b0 20 20 69 66 20 28 73 74 72 69 63 74 29 0d 0a 20    if (strict).. 
139c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
139d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
139e0 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
139f0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
13a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13a10 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20      continue;.. 
13a20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13a30 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
13a40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13a50 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66              conf
13a60 69 67 75 72 61 74 69 6f 6e 2e 69 6e 73 74 61 6c  iguration.instal
13a70 6c 46 6c 61 67 73 20 3d 20 28 49 6e 73 74 61 6c  lFlags = (Instal
13a80 6c 46 6c 61 67 73 29 76 61 6c 75 65 3b 0d 0a 20  lFlags)value;.. 
13a90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13aa0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
13ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13ac0 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68    else if (Match
13ad0 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22  Option(newArg, "
13ae0 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 22 29 29 0d  linqFileName")).
13af0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
13b00 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
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 63 6f 6e 66 69 67 75 72          configur
13b30 61 74 69 6f 6e 2e 6c 69 6e 71 46 69 6c 65 4e 61  ation.linqFileNa
13b40 6d 65 20 3d 20 74 65 78 74 3b 0d 0a 20 20 20 20  me = text;..    
13b50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13b60 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
13b70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
13b80 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74  lse if (MatchOpt
13b90 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 6c 6f 67  ion(newArg, "log
13ba0 46 69 6c 65 4e 61 6d 65 22 29 29 0d 0a 20 20 20  FileName"))..   
13bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13bc0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
13bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13be0 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f      configuratio
13bf0 6e 2e 6c 6f 67 46 69 6c 65 4e 61 6d 65 20 3d 20  n.logFileName = 
13c00 74 65 78 74 3b 0d 0a 20 20 20 20 20 20 20 20 20  text;..         
13c10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
13c20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
13c30 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69            else i
13c40 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e  f (MatchOption(n
13c50 65 77 41 72 67 2c 20 22 6e 6f 43 6f 6d 70 61 63  ewArg, "noCompac
13c60 74 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  t"))..          
13c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
13c80 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
13c90 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f               boo
13ca0 6c 3f 20 76 61 6c 75 65 20 3d 20 50 61 72 73 65  l? value = Parse
13cb0 42 6f 6f 6c 65 61 6e 28 74 65 78 74 29 3b 0d 0a  Boolean(text);..
13cc0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
13cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
13ce0 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29   (value == null)
13cf0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
13d00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
13d10 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
13d20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13d30 20 65 72 72 6f 72 20 3d 20 54 72 61 63 65 4f 70   error = TraceOp
13d40 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28  s.DebugAndTrace(
13d50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
13d60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13d70 20 20 20 20 20 20 54 72 61 63 65 50 72 69 6f 72        TracePrior
13d80 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75  ity.Lowest, debu
13d90 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20  gCallback,..    
13da0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13db0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13dc0 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53  traceCallback, S
13dd0 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
13de0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13df0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13e00 20 20 20 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20     "Invalid {0} 
13e10 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 3a 20 7b  boolean value: {
13e20 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  1}",..          
13e30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13e40 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73            ForDis
13e50 70 6c 61 79 28 61 72 67 29 2c 20 46 6f 72 44 69  play(arg), ForDi
13e60 73 70 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a 20  splay(text)),.. 
13e70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13e80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13e90 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
13ea0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
13eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13ec0 20 20 20 20 20 20 69 66 20 28 73 74 72 69 63 74        if (strict
13ed0 29 0d 0a 20 20 20 20 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 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
13f00 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  lse;....        
13f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13f20 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65          continue
13f30 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
13f40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
13f50 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
13f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13f70 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f  configuration.no
13f80 43 6f 6d 70 61 63 74 20 3d 20 28 62 6f 6f 6c 29  Compact = (bool)
13f90 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20  value;..        
13fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13fb0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
13fc0 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20             else 
13fd0 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28  if (MatchOption(
13fe0 6e 65 77 41 72 67 2c 20 22 6e 6f 43 6f 6e 73 6f  newArg, "noConso
13ff0 6c 65 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20  le"))..         
14000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
14010 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
14020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f                bo
14030 6f 6c 3f 20 76 61 6c 75 65 20 3d 20 50 61 72 73  ol? value = Pars
14040 65 42 6f 6f 6c 65 61 6e 28 74 65 78 74 29 3b 0d  eBoolean(text);.
14050 0a 0d 0a 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 20 20 69                 i
14070 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c  f (value == null
14080 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
14090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
140a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
140b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
140c0 20 20 65 72 72 6f 72 20 3d 20 54 72 61 63 65 4f    error = TraceO
140d0 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65  ps.DebugAndTrace
140e0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
140f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14100 20 20 20 20 20 20 20 54 72 61 63 65 50 72 69 6f         TracePrio
14110 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62  rity.Lowest, deb
14120 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20  ugCallback,..   
14130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14150 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20   traceCallback, 
14160 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
14170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14190 20 20 20 20 22 49 6e 76 61 6c 69 64 20 7b 30 7d      "Invalid {0}
141a0 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 3a 20   boolean value: 
141b0 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  {1}",..         
141c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
141d0 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69             ForDi
141e0 73 70 6c 61 79 28 61 72 67 29 2c 20 46 6f 72 44  splay(arg), ForD
141f0 69 73 70 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a  isplay(text)),..
14200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14220 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72      traceCategor
14230 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
14240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14250 20 20 20 20 20 20 20 69 66 20 28 73 74 72 69 63         if (stric
14260 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t)..            
14270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14280 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
14290 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  alse;....       
142a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
142b0 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75           continu
142c0 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
142d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
142e0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
142f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14300 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e   configuration.n
14310 6f 43 6f 6e 73 6f 6c 65 20 3d 20 28 62 6f 6f 6c  oConsole = (bool
14320 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20  )value;..       
14330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14340 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
14350 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65              else
14360 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e   if (MatchOption
14370 28 6e 65 77 41 72 67 2c 20 22 6e 6f 44 65 73 6b  (newArg, "noDesk
14380 74 6f 70 22 29 29 0d 0a 20 20 20 20 20 20 20 20  top"))..        
14390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
143a0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
143b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62                 b
143c0 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d 20 50 61 72  ool? value = Par
143d0 73 65 42 6f 6f 6c 65 61 6e 28 74 65 78 74 29 3b  seBoolean(text);
143e0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
143f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14400 69 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c  if (value == nul
14410 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
14420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14430 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
14440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14450 20 20 20 65 72 72 6f 72 20 3d 20 54 72 61 63 65     error = Trace
14460 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63  Ops.DebugAndTrac
14470 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
14480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14490 20 20 20 20 20 20 20 20 54 72 61 63 65 50 72 69          TracePri
144a0 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65  ority.Lowest, de
144b0 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20  bugCallback,..  
144c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
144d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
144e0 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c    traceCallback,
144f0 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d   String.Format(.
14500 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
14510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14520 20 20 20 20 20 22 49 6e 76 61 6c 69 64 20 7b 30       "Invalid {0
14530 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 3a  } boolean value:
14540 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20   {1}",..        
14550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14560 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44              ForD
14570 69 73 70 6c 61 79 28 61 72 67 29 2c 20 46 6f 72  isplay(arg), For
14580 44 69 73 70 6c 61 79 28 74 65 78 74 29 29 2c 0d  Display(text)),.
14590 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
145a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
145b0 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f       traceCatego
145c0 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
145d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
145e0 20 20 20 20 20 20 20 20 69 66 20 28 73 74 72 69          if (stri
145f0 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ct)..           
14600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14610 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
14620 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  false;....      
14630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14640 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e            contin
14650 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
14660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14670 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
14680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14690 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e    configuration.
146a0 6e 6f 44 65 73 6b 74 6f 70 20 3d 20 28 62 6f 6f  noDesktop = (boo
146b0 6c 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20  l)value;..      
146c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
146d0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
146e0 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73               els
146f0 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f  e if (MatchOptio
14700 6e 28 6e 65 77 41 72 67 2c 20 22 6e 6f 4c 6f 67  n(newArg, "noLog
14710 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  "))..           
14720 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
14730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14740 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
14750 3f 20 76 61 6c 75 65 20 3d 20 50 61 72 73 65 42  ? value = ParseB
14760 6f 6f 6c 65 61 6e 28 74 65 78 74 29 3b 0d 0a 0d  oolean(text);...
14770 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
14780 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
14790 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d  (value == null).
147a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
147b0 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
147c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
147d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
147e0 65 72 72 6f 72 20 3d 20 54 72 61 63 65 4f 70 73  error = TraceOps
147f0 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 0d  .DebugAndTrace(.
14800 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
14810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14820 20 20 20 20 20 54 72 61 63 65 50 72 69 6f 72 69       TracePriori
14830 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75 67  ty.Lowest, debug
14840 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20  Callback,..     
14850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
14870 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74  raceCallback, St
14880 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
14890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
148a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
148b0 20 20 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20 62    "Invalid {0} b
148c0 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 3a 20 7b 31  oolean value: {1
148d0 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }",..           
148e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
148f0 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70           ForDisp
14900 6c 61 79 28 61 72 67 29 2c 20 46 6f 72 44 69 73  lay(arg), ForDis
14910 70 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a 20 20  play(text)),..  
14920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14940 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29    traceCategory)
14950 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
14960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14970 20 20 20 20 20 69 66 20 28 73 74 72 69 63 74 29       if (strict)
14980 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
14990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
149a0 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
149b0 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  se;....         
149c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
149d0 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b         continue;
149e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
149f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
14a00 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
14a10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
14a20 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 4c  onfiguration.noL
14a30 6f 67 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 65  og = (bool)value
14a40 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
14a50 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
14a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14a70 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d        else if (M
14a80 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72  atchOption(newAr
14a90 67 2c 20 22 6e 6f 4e 65 74 46 78 32 30 22 29 29  g, "noNetFx20"))
14aa0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
14ab0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
14ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14ad0 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 3f 20 76           bool? v
14ae0 61 6c 75 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c  alue = ParseBool
14af0 65 61 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20  ean(text);....  
14b00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14b10 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76 61            if (va
14b20 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  lue == null)..  
14b30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14b40 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
14b50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14b60 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
14b70 6f 72 20 3d 20 54 72 61 63 65 4f 70 73 2e 44 65  or = TraceOps.De
14b80 62 75 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 20  bugAndTrace(..  
14b90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14bb0 20 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e    TracePriority.
14bc0 4c 6f 77 65 73 74 2c 20 64 65 62 75 67 43 61 6c  Lowest, debugCal
14bd0 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20  lback,..        
14be0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14bf0 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
14c00 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e  eCallback, Strin
14c10 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
14c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14c30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
14c40 49 6e 76 61 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c  Invalid {0} bool
14c50 65 61 6e 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c  ean value: {1}",
14c60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
14c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14c80 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79        ForDisplay
14c90 28 61 72 67 29 2c 20 46 6f 72 44 69 73 70 6c 61  (arg), ForDispla
14ca0 79 28 74 65 78 74 29 29 2c 0d 0a 20 20 20 20 20  y(text)),..     
14cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
14cd0 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
14ce0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
14cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14d00 20 20 69 66 20 28 73 74 72 69 63 74 29 0d 0a 20    if (strict).. 
14d10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14d20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14d30 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
14d40 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
14d50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14d60 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20      continue;.. 
14d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14d80 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
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 20 20 20 20 20 63 6f 6e 66              conf
14db0 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 4e 65 74 46  iguration.noNetF
14dc0 78 32 30 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75  x20 = (bool)valu
14dd0 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
14de0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
14df0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14e00 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28         else if (
14e10 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41  MatchOption(newA
14e20 72 67 2c 20 22 6e 6f 4e 65 74 46 78 34 30 22 29  rg, "noNetFx40")
14e30 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
14e40 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
14e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14e60 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 3f 20            bool? 
14e70 76 61 6c 75 65 20 3d 20 50 61 72 73 65 42 6f 6f  value = ParseBoo
14e80 6c 65 61 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a 20  lean(text);.... 
14e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14ea0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76             if (v
14eb0 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  alue == null).. 
14ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14ed0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
14ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72                er
14f00 72 6f 72 20 3d 20 54 72 61 63 65 4f 70 73 2e 44  ror = TraceOps.D
14f10 65 62 75 67 41 6e 64 54 72 61 63 65 28 0d 0a 20  ebugAndTrace(.. 
14f20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14f40 20 20 20 54 72 61 63 65 50 72 69 6f 72 69 74 79     TracePriority
14f50 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75 67 43 61  .Lowest, debugCa
14f60 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20  llback,..       
14f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14f80 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
14f90 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69  ceCallback, Stri
14fa0 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ng.Format(..    
14fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14fd0 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20 62 6f 6f  "Invalid {0} boo
14fe0 6c 65 61 6e 20 76 61 6c 75 65 3a 20 7b 31 7d 22  lean value: {1}"
14ff0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
15000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15010 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61         ForDispla
15020 79 28 61 72 67 29 2c 20 46 6f 72 44 69 73 70 6c  y(arg), ForDispl
15030 61 79 28 74 65 78 74 29 29 2c 0d 0a 20 20 20 20  ay(text)),..    
15040 20 20 20 20 20 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 20 20 20                  
15060 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
15070 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
15080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15090 20 20 20 69 66 20 28 73 74 72 69 63 74 29 0d 0a     if (strict)..
150a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
150b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
150c0 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
150d0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
150e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
150f0 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a       continue;..
15100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15110 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
15120 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
15130 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
15140 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 4e 65 74  figuration.noNet
15150 46 78 34 30 20 3d 20 28 62 6f 6f 6c 29 76 61 6c  Fx40 = (bool)val
15160 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
15170 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
15180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15190 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20          else if 
151a0 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77  (MatchOption(new
151b0 41 72 67 2c 20 22 6e 6f 4e 65 74 46 78 34 35 22  Arg, "noNetFx45"
151c0 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
151d0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
151e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
151f0 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 3f             bool?
15200 20 76 61 6c 75 65 20 3d 20 50 61 72 73 65 42 6f   value = ParseBo
15210 6f 6c 65 61 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a  olean(text);....
15220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15230 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
15240 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  value == null)..
15250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15260 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
15270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
15290 72 72 6f 72 20 3d 20 54 72 61 63 65 4f 70 73 2e  rror = TraceOps.
152a0 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 0d 0a  DebugAndTrace(..
152b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
152c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
152d0 20 20 20 20 54 72 61 63 65 50 72 69 6f 72 69 74      TracePriorit
152e0 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75 67 43  y.Lowest, debugC
152f0 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20  allback,..      
15300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
15320 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72  aceCallback, Str
15330 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
15340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15360 20 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20 62 6f   "Invalid {0} bo
15370 6f 6c 65 61 6e 20 76 61 6c 75 65 3a 20 7b 31 7d  olean value: {1}
15380 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
15390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
153a0 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c          ForDispl
153b0 61 79 28 61 72 67 29 2c 20 46 6f 72 44 69 73 70  ay(arg), ForDisp
153c0 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a 20 20 20  lay(text)),..   
153d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
153e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
153f0 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
15400 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
15410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15420 20 20 20 20 69 66 20 28 73 74 72 69 63 74 29 0d      if (strict).
15430 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
15440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15450 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
15460 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
15470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15480 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d        continue;.
15490 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
154a0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
154b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
154c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
154d0 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 4e 65  nfiguration.noNe
154e0 74 46 78 34 35 20 3d 20 28 62 6f 6f 6c 29 76 61  tFx45 = (bool)va
154f0 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lue;..          
15500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
15510 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
15520 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66           else if
15530 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65   (MatchOption(ne
15540 77 41 72 67 2c 20 22 6e 6f 52 75 6e 74 69 6d 65  wArg, "noRuntime
15550 56 65 72 73 69 6f 6e 22 29 29 0d 0a 20 20 20 20  Version"))..    
15560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15570 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
15580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15590 20 20 20 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d     bool? value =
155a0 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65   ParseBoolean(te
155b0 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  xt);....        
155c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
155d0 20 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d 3d      if (value ==
155e0 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
155f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15600 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
15610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15620 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 54         error = T
15630 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64  raceOps.DebugAnd
15640 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20  Trace(..        
15650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15660 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
15670 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74  ePriority.Lowest
15680 2c 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c  , debugCallback,
15690 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
156a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
156b0 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62        traceCallb
156c0 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d  ack, String.Form
156d0 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
156e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
156f0 20 20 20 20 20 20 20 20 20 22 49 6e 76 61 6c 69           "Invali
15700 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61  d {0} boolean va
15710 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20  lue: {1}",..    
15720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15740 46 6f 72 44 69 73 70 6c 61 79 28 61 72 67 29 2c  ForDisplay(arg),
15750 20 46 6f 72 44 69 73 70 6c 61 79 28 74 65 78 74   ForDisplay(text
15760 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  )),..           
15770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15780 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
15790 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
157a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
157b0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
157c0 73 74 72 69 63 74 29 0d 0a 20 20 20 20 20 20 20  strict)..       
157d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
157e0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
157f0 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20  urn false;....  
15800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
15820 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20  ntinue;..       
15830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15840 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
15850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15860 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74        configurat
15870 69 6f 6e 2e 6e 6f 52 75 6e 74 69 6d 65 56 65 72  ion.noRuntimeVer
15880 73 69 6f 6e 20 3d 20 28 62 6f 6f 6c 29 76 61 6c  sion = (bool)val
15890 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
158a0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
158b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
158c0 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20          else if 
158d0 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77  (MatchOption(new
158e0 41 72 67 2c 20 22 6e 6f 54 72 61 63 65 22 29 29  Arg, "noTrace"))
158f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
15900 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
15910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15920 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 3f 20 76           bool? v
15930 61 6c 75 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c  alue = ParseBool
15940 65 61 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20  ean(text);....  
15950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15960 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76 61            if (va
15970 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  lue == null)..  
15980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15990 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
159a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
159b0 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
159c0 6f 72 20 3d 20 54 72 61 63 65 4f 70 73 2e 44 65  or = TraceOps.De
159d0 62 75 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 20  bugAndTrace(..  
159e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
159f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15a00 20 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e    TracePriority.
15a10 4c 6f 77 65 73 74 2c 20 64 65 62 75 67 43 61 6c  Lowest, debugCal
15a20 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20  lback,..        
15a30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15a40 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
15a50 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e  eCallback, Strin
15a60 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
15a70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15a80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
15a90 49 6e 76 61 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c  Invalid {0} bool
15aa0 65 61 6e 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c  ean value: {1}",
15ab0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
15ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15ad0 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79        ForDisplay
15ae0 28 61 72 67 29 2c 20 46 6f 72 44 69 73 70 6c 61  (arg), ForDispla
15af0 79 28 74 65 78 74 29 29 2c 0d 0a 20 20 20 20 20  y(text)),..     
15b00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
15b20 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
15b30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
15b40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15b50 20 20 69 66 20 28 73 74 72 69 63 74 29 0d 0a 20    if (strict).. 
15b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15b70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15b80 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
15b90 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
15ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15bb0 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20      continue;.. 
15bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15bd0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
15be0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15bf0 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66              conf
15c00 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 54 72 61 63  iguration.noTrac
15c10 65 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 65 3b  e = (bool)value;
15c20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
15c30 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
15c40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15c50 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61       else if (Ma
15c60 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67  tchOption(newArg
15c70 2c 20 22 6e 6f 56 73 32 30 30 35 22 29 29 0d 0a  , "noVs2005"))..
15c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15c90 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
15ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15cb0 20 20 20 20 20 20 20 62 6f 6f 6c 3f 20 76 61 6c         bool? val
15cc0 75 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c 65 61  ue = ParseBoolea
15cd0 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20  n(text);....    
15ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15cf0 20 20 20 20 20 20 20 20 69 66 20 28 76 61 6c 75          if (valu
15d00 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  e == null)..    
15d10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15d20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
15d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15d40 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72             error
15d50 20 3d 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75   = TraceOps.Debu
15d60 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 20 20 20  gAndTrace(..    
15d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15d90 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f  TracePriority.Lo
15da0 77 65 73 74 2c 20 64 65 62 75 67 43 61 6c 6c 62  west, debugCallb
15db0 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ack,..          
15dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15dd0 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
15de0 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e  allback, String.
15df0 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
15e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15e10 20 20 20 20 20 20 20 20 20 20 20 20 20 22 49 6e               "In
15e20 76 61 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c 65 61  valid {0} boolea
15e30 6e 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a  n value: {1}",..
15e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15e60 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 61      ForDisplay(a
15e70 72 67 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28  rg), ForDisplay(
15e80 74 65 78 74 29 29 2c 0d 0a 20 20 20 20 20 20 20  text)),..       
15e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
15eb0 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
15ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15ee0 69 66 20 28 73 74 72 69 63 74 29 0d 0a 20 20 20  if (strict)..   
15ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15f00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15f10 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
15f20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
15f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15f40 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20    continue;..   
15f50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15f60 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
15f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15f80 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67            config
15f90 75 72 61 74 69 6f 6e 2e 6e 6f 56 73 32 30 30 35  uration.noVs2005
15fa0 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d   = (bool)value;.
15fb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
15fc0 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
15fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15fe0 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74      else if (Mat
15ff0 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c  chOption(newArg,
16000 20 22 6e 6f 56 73 32 30 30 38 22 29 29 0d 0a 20   "noVs2008")).. 
16010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16020 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
16030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16040 20 20 20 20 20 20 62 6f 6f 6c 3f 20 76 61 6c 75        bool? valu
16050 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e  e = ParseBoolean
16060 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20  (text);....     
16070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16080 20 20 20 20 20 20 20 69 66 20 28 76 61 6c 75 65         if (value
16090 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
160a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
160b0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
160c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
160d0 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20            error 
160e0 3d 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67  = TraceOps.Debug
160f0 41 6e 64 54 72 61 63 65 28 0d 0a 20 20 20 20 20  AndTrace(..     
16100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
16120 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77  racePriority.Low
16130 65 73 74 2c 20 64 65 62 75 67 43 61 6c 6c 62 61  est, debugCallba
16140 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ck,..           
16150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16160 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
16170 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46  llback, String.F
16180 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
16190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
161a0 20 20 20 20 20 20 20 20 20 20 20 20 22 49 6e 76              "Inv
161b0 61 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e  alid {0} boolean
161c0 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20   value: {1}",.. 
161d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
161e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
161f0 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 61 72     ForDisplay(ar
16200 67 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 74  g), ForDisplay(t
16210 65 78 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20  ext)),..        
16220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16230 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
16240 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
16250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
16270 66 20 28 73 74 72 69 63 74 29 0d 0a 20 20 20 20  f (strict)..    
16280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
162a0 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d  return false;...
162b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
162c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
162d0 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20   continue;..    
162e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
162f0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
16300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16310 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75           configu
16320 72 61 74 69 6f 6e 2e 6e 6f 56 73 32 30 30 38 20  ration.noVs2008 
16330 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a  = (bool)value;..
16340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16350 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
16360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16370 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63     else if (Matc
16380 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20  hOption(newArg, 
16390 22 6e 6f 56 73 32 30 31 30 22 29 29 0d 0a 20 20  "noVs2010"))..  
163a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
163b0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
163c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
163d0 20 20 20 20 20 62 6f 6f 6c 3f 20 76 61 6c 75 65       bool? value
163e0 20 3d 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28   = ParseBoolean(
163f0 74 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  text);....      
16400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16410 20 20 20 20 20 20 69 66 20 28 76 61 6c 75 65 20        if (value 
16420 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
16430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16440 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
16450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16460 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
16470 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41   TraceOps.DebugA
16480 6e 64 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20  ndTrace(..      
16490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
164a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
164b0 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65  acePriority.Lowe
164c0 73 74 2c 20 64 65 62 75 67 43 61 6c 6c 62 61 63  st, debugCallbac
164d0 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  k,..            
164e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
164f0 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c          traceCal
16500 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f  lback, String.Fo
16510 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
16520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16530 20 20 20 20 20 20 20 20 20 20 20 22 49 6e 76 61             "Inva
16540 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20  lid {0} boolean 
16550 76 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20  value: {1}",..  
16560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16580 20 20 46 6f 72 44 69 73 70 6c 61 79 28 61 72 67    ForDisplay(arg
16590 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 74 65  ), ForDisplay(te
165a0 78 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  xt)),..         
165b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
165c0 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
165d0 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
165e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
165f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
16600 20 28 73 74 72 69 63 74 29 0d 0a 20 20 20 20 20   (strict)..     
16610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
16630 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a  eturn false;....
16640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16660 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20  continue;..     
16670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16680 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
16690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
166a0 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72          configur
166b0 61 74 69 6f 6e 2e 6e 6f 56 73 32 30 31 30 20 3d  ation.noVs2010 =
166c0 20 28 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20   (bool)value;.. 
166d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
166e0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
166f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16700 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68    else if (Match
16710 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22  Option(newArg, "
16720 6e 6f 56 73 32 30 31 32 22 29 29 0d 0a 20 20 20  noVs2012"))..   
16730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16740 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
16750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16760 20 20 20 20 62 6f 6f 6c 3f 20 76 61 6c 75 65 20      bool? value 
16770 3d 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74  = ParseBoolean(t
16780 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ext);....       
16790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
167a0 20 20 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d       if (value =
167b0 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
167c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
167d0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
167e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
167f0 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
16800 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e  TraceOps.DebugAn
16810 64 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20  dTrace(..       
16820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16830 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61               Tra
16840 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73  cePriority.Lowes
16850 74 2c 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b  t, debugCallback
16860 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
16870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16880 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c         traceCall
16890 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72  back, String.For
168a0 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
168b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
168c0 20 20 20 20 20 20 20 20 20 20 22 49 6e 76 61 6c            "Inval
168d0 69 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76  id {0} boolean v
168e0 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20  alue: {1}",..   
168f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16910 20 46 6f 72 44 69 73 70 6c 61 79 28 61 72 67 29   ForDisplay(arg)
16920 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 74 65 78  , ForDisplay(tex
16930 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  t)),..          
16940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16950 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
16960 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20  ategory);....   
16970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16980 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
16990 28 73 74 72 69 63 74 29 0d 0a 20 20 20 20 20 20  (strict)..      
169a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
169b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
169c0 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20  turn false;.... 
169d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
169e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
169f0 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20  ontinue;..      
16a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16a10 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
16a20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16a30 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61         configura
16a40 74 69 6f 6e 2e 6e 6f 56 73 32 30 31 32 20 3d 20  tion.noVs2012 = 
16a50 28 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20 20  (bool)value;..  
16a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16a70 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
16a80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16a90 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f   else if (MatchO
16aa0 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 72  ption(newArg, "r
16ab0 65 67 69 73 74 72 79 56 65 72 73 69 6f 6e 22 29  egistryVersion")
16ac0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
16ad0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
16ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16af0 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67            config
16b00 75 72 61 74 69 6f 6e 2e 72 65 67 69 73 74 72 79  uration.registry
16b10 56 65 72 73 69 6f 6e 20 3d 20 74 65 78 74 3b 0d  Version = text;.
16b20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
16b30 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
16b40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16b50 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74      else if (Mat
16b60 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c  chOption(newArg,
16b70 20 22 73 74 72 69 63 74 22 29 29 0d 0a 20 20 20   "strict"))..   
16b80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16b90 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
16ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16bb0 20 20 20 20 62 6f 6f 6c 3f 20 76 61 6c 75 65 20      bool? value 
16bc0 3d 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74  = ParseBoolean(t
16bd0 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ext);....       
16be0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16bf0 20 20 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d       if (value =
16c00 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
16c10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16c20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
16c30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16c40 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
16c50 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e  TraceOps.DebugAn
16c60 64 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20  dTrace(..       
16c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16c80 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61               Tra
16c90 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73  cePriority.Lowes
16ca0 74 2c 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b  t, debugCallback
16cb0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
16cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16cd0 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c         traceCall
16ce0 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72  back, String.For
16cf0 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
16d00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16d10 20 20 20 20 20 20 20 20 20 20 22 49 6e 76 61 6c            "Inval
16d20 69 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76  id {0} boolean v
16d30 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20  alue: {1}",..   
16d40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16d50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16d60 20 46 6f 72 44 69 73 70 6c 61 79 28 61 72 67 29   ForDisplay(arg)
16d70 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 74 65 78  , ForDisplay(tex
16d80 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  t)),..          
16d90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16da0 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
16db0 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20  ategory);....   
16dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
16de0 28 73 74 72 69 63 74 29 0d 0a 20 20 20 20 20 20  (strict)..      
16df0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
16e10 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20  turn false;.... 
16e20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16e30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
16e40 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20  ontinue;..      
16e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16e60 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
16e70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16e80 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
16e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16ea0 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20         // NOTE: 
16eb0 41 6c 6c 6f 77 20 74 68 65 20 63 6f 6d 6d 61 6e  Allow the comman
16ec0 64 20 6c 69 6e 65 20 61 72 67 75 6d 65 6e 74 73  d line arguments
16ed0 20 74 6f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   to..           
16ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16ef0 20 2f 2f 20 20 20 20 20 20 20 6f 76 65 72 72 69   //       overri
16f00 64 65 20 74 68 65 20 22 73 74 72 69 63 74 6e 65  de the "strictne
16f10 73 73 22 20 73 65 74 74 69 6e 67 0d 0a 20 20 20  ss" setting..   
16f20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16f30 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
16f40 20 20 70 72 6f 76 69 64 65 64 20 62 79 20 6f 75    provided by ou
16f50 72 20 63 61 6c 6c 65 72 2e 0d 0a 20 20 20 20 20  r caller...     
16f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16f70 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
16f80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16f90 20 20 20 20 20 20 20 73 74 72 69 63 74 20 3d 20         strict = 
16fa0 28 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20 20  (bool)value;..  
16fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16fc0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
16fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16fe0 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f   else if (MatchO
16ff0 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 74  ption(newArg, "t
17000 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 22 29 29  hrowOnMissing"))
17010 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
17020 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
17030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17040 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 3f 20 76           bool? v
17050 61 6c 75 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c  alue = ParseBool
17060 65 61 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20  ean(text);....  
17070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17080 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76 61            if (va
17090 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  lue == null)..  
170a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
170b0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
170c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
170d0 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
170e0 6f 72 20 3d 20 54 72 61 63 65 4f 70 73 2e 44 65  or = TraceOps.De
170f0 62 75 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 20  bugAndTrace(..  
17100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17120 20 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e    TracePriority.
17130 4c 6f 77 65 73 74 2c 20 64 65 62 75 67 43 61 6c  Lowest, debugCal
17140 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20  lback,..        
17150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17160 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
17170 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e  eCallback, Strin
17180 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
17190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
171a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
171b0 49 6e 76 61 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c  Invalid {0} bool
171c0 65 61 6e 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c  ean value: {1}",
171d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
171e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
171f0 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79        ForDisplay
17200 28 61 72 67 29 2c 20 46 6f 72 44 69 73 70 6c 61  (arg), ForDispla
17210 79 28 74 65 78 74 29 29 2c 0d 0a 20 20 20 20 20  y(text)),..     
17220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
17240 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
17250 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
17260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17270 20 20 69 66 20 28 73 74 72 69 63 74 29 0d 0a 20    if (strict).. 
17280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
172a0 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
172b0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
172c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
172d0 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20      continue;.. 
172e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
172f0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
17300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17310 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66              conf
17320 69 67 75 72 61 74 69 6f 6e 2e 74 68 72 6f 77 4f  iguration.throwO
17330 6e 4d 69 73 73 69 6e 67 20 3d 20 28 62 6f 6f 6c  nMissing = (bool
17340 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20  )value;..       
17350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17360 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
17370 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65              else
17380 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e   if (MatchOption
17390 28 6e 65 77 41 72 67 2c 20 22 74 72 61 63 65 46  (newArg, "traceF
173a0 6f 72 6d 61 74 22 29 29 0d 0a 20 20 20 20 20 20  ormat"))..      
173b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
173c0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
173d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
173e0 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 74   configuration.t
173f0 72 61 63 65 46 6f 72 6d 61 74 20 3d 20 74 65 78  raceFormat = tex
17400 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t;..            
17410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17420 54 72 61 63 65 4f 70 73 2e 54 72 61 63 65 46 6f  TraceOps.TraceFo
17430 72 6d 61 74 20 3d 20 63 6f 6e 66 69 67 75 72 61  rmat = configura
17440 74 69 6f 6e 2e 74 72 61 63 65 46 6f 72 6d 61 74  tion.traceFormat
17450 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
17460 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
17470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17480 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d        else if (M
17490 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72  atchOption(newAr
174a0 67 2c 20 22 74 72 61 63 65 50 72 69 6f 72 69 74  g, "tracePriorit
174b0 79 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  y"))..          
174c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
174d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
174e0 20 20 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a               obj
174f0 65 63 74 20 76 61 6c 75 65 20 3d 20 50 61 72 73  ect value = Pars
17500 65 45 6e 75 6d 28 0d 0a 20 20 20 20 20 20 20 20  eEnum(..        
17510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17520 20 20 20 20 20 20 20 20 74 79 70 65 6f 66 28 54          typeof(T
17530 72 61 63 65 50 72 69 6f 72 69 74 79 29 2c 20 74  racePriority), t
17540 65 78 74 2c 20 74 72 75 65 29 3b 0d 0a 0d 0a 20  ext, true);.... 
17550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17560 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76             if (v
17570 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  alue == null).. 
17580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17590 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
175a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
175b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72                er
175c0 72 6f 72 20 3d 20 54 72 61 63 65 4f 70 73 2e 44  ror = TraceOps.D
175d0 65 62 75 67 41 6e 64 54 72 61 63 65 28 0d 0a 20  ebugAndTrace(.. 
175e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
175f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17600 20 20 20 54 72 61 63 65 50 72 69 6f 72 69 74 79     TracePriority
17610 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75 67 43 61  .Lowest, debugCa
17620 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20  llback,..       
17630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17640 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
17650 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69  ceCallback, Stri
17660 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ng.Format(..    
17670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17690 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20 76 61 6c  "Invalid {0} val
176a0 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20  ue: {1}",..     
176b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
176c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46                 F
176d0 6f 72 44 69 73 70 6c 61 79 28 61 72 67 29 2c 20  orDisplay(arg), 
176e0 46 6f 72 44 69 73 70 6c 61 79 28 74 65 78 74 29  ForDisplay(text)
176f0 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
17700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17710 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74          traceCat
17720 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  egory);....     
17730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17740 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 73             if (s
17750 74 72 69 63 74 29 0d 0a 20 20 20 20 20 20 20 20  trict)..        
17760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17770 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
17780 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20  rn false;....   
17790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
177a0 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
177b0 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20  tinue;..        
177c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
177d0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
177e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
177f0 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69       configurati
17800 6f 6e 2e 74 72 61 63 65 50 72 69 6f 72 69 74 79  on.tracePriority
17810 20 3d 20 28 54 72 61 63 65 50 72 69 6f 72 69 74   = (TracePriorit
17820 79 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20  y)value;..      
17830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17840 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 54        TraceOps.T
17850 72 61 63 65 50 72 69 6f 72 69 74 79 20 3d 20 63  racePriority = c
17860 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 74 72 61  onfiguration.tra
17870 63 65 50 72 69 6f 72 69 74 79 3b 0d 0a 20 20 20  cePriority;..   
17880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17890 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
178a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
178b0 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70  else if (MatchOp
178c0 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 76 65  tion(newArg, "ve
178d0 72 62 6f 73 65 22 29 29 0d 0a 20 20 20 20 20 20  rbose"))..      
178e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
178f0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
17900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17910 20 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d 20 50   bool? value = P
17920 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65 78 74  arseBoolean(text
17930 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
17940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17950 20 20 69 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e    if (value == n
17960 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
17970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17980 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
17990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
179a0 20 20 20 20 20 65 72 72 6f 72 20 3d 20 54 72 61       error = Tra
179b0 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72  ceOps.DebugAndTr
179c0 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ace(..          
179d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
179e0 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 50            TraceP
179f0 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20  riority.Lowest, 
17a00 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a  debugCallback,..
17a10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17a20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17a30 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63      traceCallbac
17a40 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  k, String.Format
17a50 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
17a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17a70 20 20 20 20 20 20 20 22 49 6e 76 61 6c 69 64 20         "Invalid 
17a80 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75  {0} boolean valu
17a90 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20  e: {1}",..      
17aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f                Fo
17ac0 72 44 69 73 70 6c 61 79 28 61 72 67 29 2c 20 46  rDisplay(arg), F
17ad0 6f 72 44 69 73 70 6c 61 79 28 74 65 78 74 29 29  orDisplay(text))
17ae0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
17af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17b00 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65         traceCate
17b10 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
17b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17b30 20 20 20 20 20 20 20 20 20 20 69 66 20 28 73 74            if (st
17b40 72 69 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20  rict)..         
17b50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17b60 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
17b70 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20  n false;....    
17b80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17b90 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74              cont
17ba0 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  inue;..         
17bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17bc0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
17bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17be0 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f      configuratio
17bf0 6e 2e 76 65 72 62 6f 73 65 20 3d 20 28 62 6f 6f  n.verbose = (boo
17c00 6c 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20  l)value;..      
17c10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17c20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
17c30 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73               els
17c40 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f  e if (MatchOptio
17c50 6e 28 6e 65 77 41 72 67 2c 20 22 77 68 61 74 49  n(newArg, "whatI
17c60 66 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  f"))..          
17c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
17c80 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
17c90 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f               boo
17ca0 6c 3f 20 76 61 6c 75 65 20 3d 20 50 61 72 73 65  l? value = Parse
17cb0 42 6f 6f 6c 65 61 6e 28 74 65 78 74 29 3b 0d 0a  Boolean(text);..
17cc0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
17cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
17ce0 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29   (value == null)
17cf0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
17d00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
17d10 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
17d20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17d30 20 65 72 72 6f 72 20 3d 20 54 72 61 63 65 4f 70   error = TraceOp
17d40 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28  s.DebugAndTrace(
17d50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
17d60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17d70 20 20 20 20 20 20 54 72 61 63 65 50 72 69 6f 72        TracePrior
17d80 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75  ity.Lowest, debu
17d90 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20  gCallback,..    
17da0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17db0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17dc0 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53  traceCallback, S
17dd0 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
17de0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17df0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17e00 20 20 20 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20     "Invalid {0} 
17e10 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 3a 20 7b  boolean value: {
17e20 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  1}",..          
17e30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17e40 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73            ForDis
17e50 70 6c 61 79 28 61 72 67 29 2c 20 46 6f 72 44 69  play(arg), ForDi
17e60 73 70 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a 20  splay(text)),.. 
17e70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17e80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17e90 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
17ea0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
17eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17ec0 20 20 20 20 20 20 69 66 20 28 73 74 72 69 63 74        if (strict
17ed0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
17ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17ef0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
17f00 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  lse;....        
17f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17f20 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65          continue
17f30 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
17f40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
17f50 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
17f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17f70 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 77 68  configuration.wh
17f80 61 74 49 66 20 3d 20 28 62 6f 6f 6c 29 76 61 6c  atIf = (bool)val
17f90 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
17fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
17fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17fc0 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20          else if 
17fd0 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77  (MatchOption(new
17fe0 41 72 67 2c 20 22 77 6f 77 36 34 22 29 29 0d 0a  Arg, "wow64"))..
17ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18000 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
18010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18020 20 20 20 20 20 20 20 62 6f 6f 6c 3f 20 76 61 6c         bool? val
18030 75 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c 65 61  ue = ParseBoolea
18040 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20  n(text);....    
18050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18060 20 20 20 20 20 20 20 20 69 66 20 28 76 61 6c 75          if (valu
18070 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  e == null)..    
18080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18090 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
180a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
180b0 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72             error
180c0 20 3d 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75   = TraceOps.Debu
180d0 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 20 20 20  gAndTrace(..    
180e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
180f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18100 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f  TracePriority.Lo
18110 77 65 73 74 2c 20 64 65 62 75 67 43 61 6c 6c 62  west, debugCallb
18120 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ack,..          
18130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18140 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
18150 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e  allback, String.
18160 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
18170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18180 20 20 20 20 20 20 20 20 20 20 20 20 20 22 49 6e               "In
18190 76 61 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c 65 61  valid {0} boolea
181a0 6e 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a  n value: {1}",..
181b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
181c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
181d0 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 61      ForDisplay(a
181e0 72 67 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28  rg), ForDisplay(
181f0 74 65 78 74 29 29 2c 0d 0a 20 20 20 20 20 20 20  text)),..       
18200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18210 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
18220 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
18230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18250 69 66 20 28 73 74 72 69 63 74 29 0d 0a 20 20 20  if (strict)..   
18260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18280 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
18290 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
182a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
182b0 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20    continue;..   
182c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
182d0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
182e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
182f0 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67            config
18300 75 72 61 74 69 6f 6e 2e 77 6f 77 36 34 20 3d 20  uration.wow64 = 
18310 28 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20 20  (bool)value;..  
18320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18330 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
18340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18350 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20   else..         
18360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
18370 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
18380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72                er
18390 72 6f 72 20 3d 20 54 72 61 63 65 4f 70 73 2e 44  ror = TraceOps.D
183a0 65 62 75 67 41 6e 64 54 72 61 63 65 28 0d 0a 20  ebugAndTrace(.. 
183b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
183c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
183d0 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77  racePriority.Low
183e0 65 73 74 2c 20 64 65 62 75 67 43 61 6c 6c 62 61  est, debugCallba
183f0 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ck,..           
18400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18410 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61       traceCallba
18420 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ck, String.Forma
18430 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
18440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18450 20 20 20 20 22 55 6e 73 75 70 70 6f 72 74 65 64      "Unsupported
18460 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 20 6f 70   command line op
18470 74 69 6f 6e 3a 20 7b 30 7d 22 2c 0d 0a 20 20 20  tion: {0}",..   
18480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18490 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72               For
184a0 44 69 73 70 6c 61 79 28 61 72 67 29 29 2c 20 74  Display(arg)), t
184b0 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
184c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
184d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
184e0 20 28 73 74 72 69 63 74 29 0d 0a 20 20 20 20 20   (strict)..     
184f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18500 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
18510 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  n false;..      
18520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18530 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
18540 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
18550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18560 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a    return true;..
18570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18580 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
18590 20 20 20 63 61 74 63 68 20 28 45 78 63 65 70 74     catch (Except
185a0 69 6f 6e 20 65 29 0d 0a 20 20 20 20 20 20 20 20  ion e)..        
185b0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
185c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
185d0 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64  raceOps.DebugAnd
185e0 54 72 61 63 65 28 54 72 61 63 65 50 72 69 6f 72  Trace(TracePrior
185f0 69 74 79 2e 48 69 67 68 65 73 74 2c 0d 0a 20 20  ity.Highest,..  
18600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18610 20 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62        debugCallb
18620 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61  ack, traceCallba
18630 63 6b 2c 20 65 2c 20 74 72 61 63 65 43 61 74 65  ck, e, traceCate
18640 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
18650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72                er
18660 72 6f 72 20 3d 20 22 46 61 69 6c 65 64 20 74 6f  ror = "Failed to
18670 20 6d 6f 64 69 66 79 20 63 6f 6e 66 69 67 75 72   modify configur
18680 61 74 69 6f 6e 2e 22 3b 0d 0a 20 20 20 20 20 20  ation.";..      
18690 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
186a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
186b0 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20  eturn false;..  
186c0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
186d0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
186e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
186f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18700 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18710 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
18720 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 4d  ..            [M
18730 65 74 68 6f 64 49 6d 70 6c 28 4d 65 74 68 6f 64  ethodImpl(Method
18740 49 6d 70 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e  ImplOptions.NoIn
18750 6c 69 6e 69 6e 67 29 5d 0d 0a 20 20 20 20 20 20  lining)]..      
18760 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61        public sta
18770 74 69 63 20 62 6f 6f 6c 20 50 72 6f 63 65 73 73  tic bool Process
18780 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
18790 20 20 20 73 74 72 69 6e 67 5b 5d 20 61 72 67 73     string[] args
187a0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
187b0 20 20 20 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e     Configuration
187c0 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2c 0d   configuration,.
187d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
187e0 20 62 6f 6f 6c 20 73 74 72 69 63 74 2c 0d 0a 20   bool strict,.. 
187f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
18800 65 66 20 73 74 72 69 6e 67 20 65 72 72 6f 72 0d  ef string error.
18810 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
18820 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   )..            
18830 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
18840 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20     try..        
18850 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
18860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
18870 66 20 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  f (configuration
18880 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
18890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
188a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
188b0 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20            error 
188c0 3d 20 22 49 6e 76 61 6c 69 64 20 63 6f 6e 66 69  = "Invalid confi
188d0 67 75 72 61 74 69 6f 6e 2e 22 3b 0d 0a 20 20 20  guration.";..   
188e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
188f0 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
18900 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
18910 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
18920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18930 20 41 73 73 65 6d 62 6c 79 20 61 73 73 65 6d 62   Assembly assemb
18940 6c 79 20 3d 20 63 6f 6e 66 69 67 75 72 61 74 69  ly = configurati
18950 6f 6e 2e 61 73 73 65 6d 62 6c 79 3b 0d 0a 0d 0a  on.assembly;....
18960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18970 20 20 20 20 69 66 20 28 61 73 73 65 6d 62 6c 79      if (assembly
18980 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
18990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
189a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
189b0 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20            error 
189c0 3d 20 22 49 6e 76 61 6c 69 64 20 61 73 73 65 6d  = "Invalid assem
189d0 62 6c 79 2e 22 3b 0d 0a 20 20 20 20 20 20 20 20  bly.";..        
189e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
189f0 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20  return false;.. 
18a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18a10 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
18a20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
18a30 21 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e  !configuration.n
18a40 6f 54 72 61 63 65 29 0d 0a 20 20 20 20 20 20 20  oTrace)..       
18a50 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
18a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18a70 20 20 20 20 20 20 20 20 69 66 20 28 21 63 6f 6e          if (!con
18a80 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 4c 6f 67  figuration.noLog
18a90 20 26 26 0d 0a 20 20 20 20 20 20 20 20 20 20 20   &&..           
18aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18ab0 20 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72   String.IsNullOr
18ac0 45 6d 70 74 79 28 63 6f 6e 66 69 67 75 72 61 74  Empty(configurat
18ad0 69 6f 6e 2e 6c 6f 67 46 69 6c 65 4e 61 6d 65 29  ion.logFileName)
18ae0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
18af0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
18b00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18b10 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
18b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18b30 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54            // NOT
18b40 45 3a 20 55 73 65 20 74 68 65 20 64 65 66 61 75  E: Use the defau
18b50 6c 74 20 6c 6f 67 20 66 69 6c 65 20 6e 61 6d 65  lt log file name
18b60 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
18b70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
18b80 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
18b90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
18ba0 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6c 6f 67  onfiguration.log
18bb0 46 69 6c 65 4e 61 6d 65 20 3d 20 47 65 74 4c 6f  FileName = GetLo
18bc0 67 46 69 6c 65 4e 61 6d 65 28 0d 0a 20 20 20 20  gFileName(..    
18bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18be0 20 20 20 20 20 20 20 20 20 20 20 20 22 74 72 61              "tra
18bf0 63 65 22 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ce");..         
18c00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
18c10 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
18c20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
18c30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18c40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18c50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18c60 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
18c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
18c80 66 20 28 21 63 6f 6e 66 69 67 75 72 61 74 69 6f  f (!configuratio
18c90 6e 2e 6e 6f 43 6f 6e 73 6f 6c 65 29 0d 0a 20 20  n.noConsole)..  
18ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18cb0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
18cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18cd0 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
18ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18cf0 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 49 6e       // NOTE: In
18d00 20 76 65 72 62 6f 73 65 20 6d 6f 64 65 2c 20 64   verbose mode, d
18d10 65 62 75 67 20 6f 75 74 70 75 74 20 28 74 68 61  ebug output (tha
18d20 74 20 6d 65 65 74 73 0d 0a 20 20 20 20 20 20 20  t meets..       
18d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18d40 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 74 68       //       th
18d50 65 20 63 6f 6e 66 69 67 75 72 65 64 20 70 72 69  e configured pri
18d60 6f 72 69 74 79 20 63 72 69 74 65 72 69 61 29 20  ority criteria) 
18d70 77 69 6c 6c 20 62 65 0d 0a 20 20 20 20 20 20 20  will be..       
18d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18d90 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 64 69       //       di
18da0 73 70 6c 61 79 65 64 20 74 6f 20 74 68 65 20 63  splayed to the c
18db0 6f 6e 73 6f 6c 65 3b 20 6f 74 68 65 72 77 69 73  onsole; otherwis
18dc0 65 2c 20 74 72 61 63 65 0d 0a 20 20 20 20 20 20  e, trace..      
18dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18de0 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 6f        //       o
18df0 75 74 70 75 74 20 28 74 68 61 74 20 6d 65 65 74  utput (that meet
18e00 73 20 74 68 65 20 63 6f 6e 66 69 67 75 72 65 64  s the configured
18e10 20 70 72 69 6f 72 69 74 79 0d 0a 20 20 20 20 20   priority..     
18e20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18e30 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
18e40 63 72 69 74 65 72 69 61 29 20 77 69 6c 6c 20 62  criteria) will b
18e50 65 20 64 69 73 70 6c 61 79 65 64 20 74 6f 20 74  e displayed to t
18e60 68 65 20 63 6f 6e 73 6f 6c 65 2e 0d 0a 20 20 20  he console...   
18e70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18e80 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
18e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18ea0 20 20 20 20 20 20 20 20 20 69 66 20 28 63 6f 6e           if (con
18eb0 66 69 67 75 72 61 74 69 6f 6e 2e 64 65 62 75 67  figuration.debug
18ec0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
18ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
18ee0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
18ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18f00 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
18f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18f20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 41        // NOTE: A
18f30 64 64 20 74 68 65 20 63 6f 6e 73 6f 6c 65 20 74  dd the console t
18f40 72 61 63 65 20 6c 69 73 74 65 6e 65 72 20 74 6f  race listener to
18f50 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 20 20   the..          
18f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18f70 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 6c        //       l
18f80 69 73 74 20 6f 66 20 74 72 61 63 65 20 6c 69 73  ist of trace lis
18f90 74 65 6e 65 72 73 20 6d 61 69 6e 74 61 69 6e 65  teners maintaine
18fa0 64 20 62 79 0d 0a 20 20 20 20 20 20 20 20 20 20  d by..          
18fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18fc0 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 74        //       t
18fd0 68 65 20 54 72 61 63 65 4f 70 73 20 63 6c 61 73  he TraceOps clas
18fe0 73 20 28 69 2e 65 2e 20 6f 6e 6c 79 20 6d 65 73  s (i.e. only mes
18ff0 73 61 67 65 73 0d 0a 20 20 20 20 20 20 20 20 20  sages..         
19000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19010 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
19020 74 68 61 74 20 6d 65 65 74 20 74 68 65 20 64 65  that meet the de
19030 62 75 67 20 70 72 69 6f 72 69 74 79 20 77 69 6c  bug priority wil
19040 6c 20 62 65 0d 0a 20 20 20 20 20 20 20 20 20 20  l be..          
19050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19060 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 73        //       s
19070 65 65 6e 20 6f 6e 20 74 68 65 20 63 6f 6e 73 6f  een on the conso
19080 6c 65 29 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  le)...          
19090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
190a0 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
190b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
190c0 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f            TraceO
190d0 70 73 2e 53 65 74 75 70 44 65 62 75 67 4c 69 73  ps.SetupDebugLis
190e0 74 65 6e 65 72 73 28 29 3b 0d 0a 20 20 20 20 20  teners();..     
190f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19100 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
19110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19120 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20        else..    
19130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19140 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
19150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19160 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
19170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
19190 2f 20 4e 4f 54 45 3a 20 41 64 64 20 74 68 65 20  / NOTE: Add the 
191a0 63 6f 6e 73 6f 6c 65 20 74 72 61 63 65 20 6c 69  console trace li
191b0 73 74 65 6e 65 72 20 74 6f 20 74 68 65 0d 0a 20  stener to the.. 
191c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
191d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
191e0 2f 20 20 20 20 20 20 20 6c 69 73 74 20 6f 66 20  /       list of 
191f0 62 75 69 6c 74 2d 69 6e 20 74 72 61 63 65 20 6c  built-in trace l
19200 69 73 74 65 6e 65 72 73 20 28 69 2e 65 2e 0d 0a  isteners (i.e...
19210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19230 2f 2f 20 20 20 20 20 20 20 6f 6e 6c 79 20 6d 65  //       only me
19240 73 73 61 67 65 73 20 74 68 61 74 20 6d 65 65 74  ssages that meet
19250 20 74 68 65 20 74 72 61 63 65 0d 0a 20 20 20 20   the trace..    
19260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19270 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
19280 20 20 20 20 20 70 72 69 6f 72 69 74 79 20 77 69       priority wi
19290 6c 6c 20 62 65 20 73 65 65 6e 20 6f 6e 20 74 68  ll be seen on th
192a0 65 20 63 6f 6e 73 6f 6c 65 29 2e 0d 0a 20 20 20  e console)...   
192b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
192c0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
192d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
192e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
192f0 20 54 72 61 63 65 2e 4c 69 73 74 65 6e 65 72 73   Trace.Listeners
19300 2e 41 64 64 28 6e 65 77 20 43 6f 6e 73 6f 6c 65  .Add(new Console
19310 54 72 61 63 65 4c 69 73 74 65 6e 65 72 28 29 29  TraceListener())
19320 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
19330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
19340 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
19350 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
19360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19370 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
19380 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19390 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
193a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
193b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
193c0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21 63            if (!c
193d0 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 4c  onfiguration.noL
193e0 6f 67 20 26 26 0d 0a 20 20 20 20 20 20 20 20 20  og &&..         
193f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19400 20 20 20 21 53 74 72 69 6e 67 2e 49 73 4e 75 6c     !String.IsNul
19410 6c 4f 72 45 6d 70 74 79 28 63 6f 6e 66 69 67 75  lOrEmpty(configu
19420 72 61 74 69 6f 6e 2e 6c 6f 67 46 69 6c 65 4e 61  ration.logFileNa
19430 6d 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  me))..          
19440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
19450 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
19460 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61               Tra
19470 63 65 2e 4c 69 73 74 65 6e 65 72 73 2e 41 64 64  ce.Listeners.Add
19480 28 6e 65 77 20 54 65 78 74 57 72 69 74 65 72 54  (new TextWriterT
19490 72 61 63 65 4c 69 73 74 65 6e 65 72 28 0d 0a 20  raceListener(.. 
194a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
194b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
194c0 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6c 6f 67  onfiguration.log
194d0 46 69 6c 65 4e 61 6d 65 29 29 3b 0d 0a 0d 0a 20  FileName));.... 
194e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
194f0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
19500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19510 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f             // NO
19520 54 45 3a 20 54 65 63 68 6e 69 63 61 6c 6c 79 2c  TE: Technically,
19530 20 77 65 20 63 72 65 61 74 65 64 20 74 68 65 20   we created the 
19540 6c 6f 67 20 66 69 6c 65 2e 0d 0a 20 20 20 20 20  log file...     
19550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19560 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
19570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19580 20 20 20 20 20 20 20 66 69 6c 65 73 43 72 65 61         filesCrea
19590 74 65 64 2b 2b 3b 0d 0a 20 20 20 20 20 20 20 20  ted++;..        
195a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
195b0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
195c0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
195d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
195e0 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
195f0 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a          // NOTE:
19600 20 44 75 6d 70 20 74 68 65 20 63 6f 6e 66 69 67   Dump the config
19610 75 72 61 74 69 6f 6e 20 6e 6f 77 20 69 6e 20 63  uration now in c
19620 61 73 65 20 77 65 20 6e 65 65 64 20 74 6f 0d 0a  ase we need to..
19630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19640 20 20 20 20 2f 2f 20 20 20 20 20 20 20 74 72 6f      //       tro
19650 75 62 6c 65 73 68 6f 6f 74 20 61 6e 79 20 69 73  ubleshoot any is
19660 73 75 65 73 2e 0d 0a 20 20 20 20 20 20 20 20 20  sues...         
19670 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
19680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19690 20 20 20 69 66 20 28 63 6f 6e 66 69 67 75 72 61     if (configura
196a0 74 69 6f 6e 2e 64 65 62 75 67 50 72 69 6f 72 69  tion.debugPriori
196b0 74 79 20 3c 3d 20 54 72 61 63 65 50 72 69 6f 72  ty <= TracePrior
196c0 69 74 79 2e 4d 65 64 69 75 6d 29 0d 0a 20 20 20  ity.Medium)..   
196d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
196e0 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69       configurati
196f0 6f 6e 2e 44 75 6d 70 28 64 65 62 75 67 43 61 6c  on.Dump(debugCal
19700 6c 62 61 63 6b 29 3b 0d 0a 0d 0a 20 20 20 20 20  lback);....     
19710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
19720 66 20 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  f (configuration
19730 2e 74 72 61 63 65 50 72 69 6f 72 69 74 79 20 3c  .tracePriority <
19740 3d 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e  = TracePriority.
19750 4d 65 64 69 75 6d 29 0d 0a 20 20 20 20 20 20 20  Medium)..       
19760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19770 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 44   configuration.D
19780 75 6d 70 28 74 72 61 63 65 43 61 6c 6c 62 61 63  ump(traceCallbac
19790 6b 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  k);....         
197a0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
197b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
197c0 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 53 68 6f 77     // NOTE: Show
197d0 20 77 68 65 72 65 20 77 65 20 61 72 65 20 72 75   where we are ru
197e0 6e 6e 69 6e 67 20 66 72 6f 6d 20 61 6e 64 20 68  nning from and h
197f0 6f 77 20 77 65 20 77 65 72 65 0d 0a 20 20 20 20  ow we were..    
19800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19810 2f 2f 20 20 20 20 20 20 20 69 6e 76 6f 6b 65 64  //       invoked
19820 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
19830 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
19840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
19850 74 72 69 6e 67 20 6c 6f 63 61 74 69 6f 6e 20 3d  tring location =
19860 20 61 73 73 65 6d 62 6c 79 2e 4c 6f 63 61 74 69   assembly.Locati
19870 6f 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  on;....         
19880 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
19890 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63  Ops.DebugAndTrac
198a0 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e  e(TracePriority.
198b0 4d 65 64 69 75 6d 4c 6f 77 2c 0d 0a 20 20 20 20  MediumLow,..    
198c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
198d0 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63      debugCallbac
198e0 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b  k, traceCallback
198f0 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  , String.Format(
19900 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
19910 20 20 20 20 20 20 20 20 20 20 22 52 75 6e 6e 69            "Runni
19920 6e 67 20 65 78 65 63 75 74 61 62 6c 65 20 69 73  ng executable is
19930 3a 20 7b 30 7d 22 2c 20 46 6f 72 44 69 73 70 6c  : {0}", ForDispl
19940 61 79 28 6c 6f 63 61 74 69 6f 6e 29 29 2c 0d 0a  ay(location)),..
19950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19960 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74          traceCat
19970 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  egory);....     
19980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
19990 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64  raceOps.DebugAnd
199a0 54 72 61 63 65 28 54 72 61 63 65 50 72 69 6f 72  Trace(TracePrior
199b0 69 74 79 2e 4d 65 64 69 75 6d 4c 6f 77 2c 0d 0a  ity.MediumLow,..
199c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
199d0 20 20 20 20 20 20 20 20 64 65 62 75 67 43 61 6c          debugCal
199e0 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c  lback, traceCall
199f0 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72  back, String.For
19a00 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
19a10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 4f                "O
19a20 72 69 67 69 6e 61 6c 20 63 6f 6d 6d 61 6e 64 20  riginal command 
19a30 6c 69 6e 65 20 69 73 3a 20 7b 30 7d 22 2c 0d 0a  line is: {0}",..
19a40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19a50 20 20 20 20 20 20 20 20 45 6e 76 69 72 6f 6e 6d          Environm
19a60 65 6e 74 2e 43 6f 6d 6d 61 6e 64 4c 69 6e 65 29  ent.CommandLine)
19a70 2c 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29  , traceCategory)
19a80 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
19a90 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70           TraceOp
19aa0 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28  s.DebugAndTrace(
19ab0 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4d 65  TracePriority.Me
19ac0 64 69 75 6d 4c 6f 77 2c 0d 0a 20 20 20 20 20 20  diumLow,..      
19ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19ae0 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c    debugCallback,
19af0 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20   traceCallback, 
19b00 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
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 22 52 75 6e 6e 69 6e 67          "Running
19b30 20 70 72 6f 63 65 73 73 20 69 73 20 7b 30 7d 2e   process is {0}.
19b40 22 2c 20 49 73 36 34 42 69 74 50 72 6f 63 65 73  ", Is64BitProces
19b50 73 28 29 20 3f 0d 0a 20 20 20 20 20 20 20 20 20  s() ?..         
19b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19b70 20 20 20 22 36 34 2d 62 69 74 22 20 3a 20 22 33     "64-bit" : "3
19b80 32 2d 62 69 74 22 29 2c 20 74 72 61 63 65 43 61  2-bit"), traceCa
19b90 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
19ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19bb0 69 66 20 28 21 63 6f 6e 66 69 67 75 72 61 74 69  if (!configurati
19bc0 6f 6e 2e 77 68 61 74 49 66 29 0d 0a 20 20 20 20  on.whatIf)..    
19bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19be0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
19bf0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
19c00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19c10 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20         // NOTE: 
19c20 49 66 20 74 68 65 20 64 65 62 75 67 67 65 72 20  If the debugger 
19c30 69 73 20 61 74 74 61 63 68 65 64 20 61 6e 64 20  is attached and 
19c40 57 68 61 74 2d 49 66 20 6d 6f 64 65 0d 0a 20 20  What-If mode..  
19c50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19c60 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 69        //       i
19c70 73 20 5b 6e 6f 77 5d 20 64 69 73 61 62 6c 65 64  s [now] disabled
19c80 2c 20 69 73 73 75 65 20 61 20 77 61 72 6e 69 6e  , issue a warnin
19c90 67 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  g...            
19ca0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
19cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19cc0 20 20 20 20 20 20 20 20 69 66 20 28 44 65 62 75          if (Debu
19cd0 67 67 65 72 2e 49 73 41 74 74 61 63 68 65 64 29  gger.IsAttached)
19ce0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
19cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
19d00 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54  aceOps.DebugAndT
19d10 72 61 63 65 28 54 72 61 63 65 50 72 69 6f 72 69  race(TracePriori
19d20 74 79 2e 4d 65 64 69 75 6d 48 69 67 68 2c 0d 0a  ty.MediumHigh,..
19d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19d40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19d50 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74  debugCallback, t
19d60 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20  raceCallback,.. 
19d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
19d90 46 6f 72 63 65 64 20 74 6f 20 64 69 73 61 62 6c  Forced to disabl
19da0 65 20 5c 22 77 68 61 74 2d 69 66 5c 22 20 6d 6f  e \"what-if\" mo
19db0 64 65 20 77 69 74 68 20 22 20 2b 0d 0a 20 20 20  de with " +..   
19dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 64 65               "de
19de0 62 75 67 67 65 72 20 61 74 74 61 63 68 65 64 2e  bugger attached.
19df0 22 2c 20 74 72 61 63 65 43 61 74 65 67 6f 72 79  ", traceCategory
19e00 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
19e10 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
19e20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
19e30 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  lse..           
19e40 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
19e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19e60 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62      TraceOps.Deb
19e70 75 67 41 6e 64 54 72 61 63 65 28 54 72 61 63 65  ugAndTrace(Trace
19e80 50 72 69 6f 72 69 74 79 2e 4d 65 64 69 75 6d 48  Priority.MediumH
19e90 69 67 68 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  igh,..          
19ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19eb0 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c    debugCallback,
19ec0 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 0d   traceCallback,.
19ed0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
19ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 4e 6f               "No
19ef0 20 61 63 74 75 61 6c 20 63 68 61 6e 67 65 73 20   actual changes 
19f00 77 69 6c 6c 20 62 65 20 6d 61 64 65 20 74 6f 20  will be made to 
19f10 74 68 69 73 20 22 20 2b 0d 0a 20 20 20 20 20 20  this " +..      
19f20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19f30 20 20 20 20 20 20 22 73 79 73 74 65 6d 20 62 65        "system be
19f40 63 61 75 73 65 20 5c 22 77 68 61 74 2d 69 66 5c  cause \"what-if\
19f50 22 20 6d 6f 64 65 20 69 73 20 65 6e 61 62 6c 65  " mode is enable
19f60 64 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  d.",..          
19f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19f80 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29    traceCategory)
19f90 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
19fa0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
19fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19fc0 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
19fd0 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a          // NOTE:
19fe0 20 49 66 20 74 68 65 20 63 6f 6d 6d 61 6e 64 20   If the command 
19ff0 6c 69 6e 65 20 68 61 73 20 6e 6f 74 20 62 65 65  line has not bee
1a000 6e 20 6d 61 6e 75 61 6c 6c 79 0d 0a 20 20 20 20  n manually..    
1a010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a020 2f 2f 20 20 20 20 20 20 20 63 6f 6e 66 69 72 6d  //       confirm
1a030 65 64 20 28 69 2e 65 2e 20 76 69 61 20 74 68 65  ed (i.e. via the
1a040 20 65 78 70 6c 69 63 69 74 20 63 6f 6d 6d 61 6e   explicit comman
1a050 64 20 6c 69 6e 65 0d 0a 20 20 20 20 20 20 20 20  d line..        
1a060 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
1a070 20 20 20 20 20 6f 70 74 69 6f 6e 29 2c 20 74 68       option), th
1a080 65 6e 20 73 74 6f 70 20 70 72 6f 63 65 73 73 69  en stop processi
1a090 6e 67 20 6e 6f 77 2e 20 20 57 65 20 65 6e 66 6f  ng now.  We enfo
1a0a0 72 63 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  rce..           
1a0b0 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
1a0c0 20 20 74 68 69 73 20 72 75 6c 65 20 73 6f 20 74    this rule so t
1a0d0 68 61 74 20 73 69 6d 70 6c 79 20 64 6f 75 62 6c  hat simply doubl
1a0e0 65 2d 63 6c 69 63 6b 69 6e 67 20 74 68 65 0d 0a  e-clicking the..
1a0f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a100 20 20 20 20 2f 2f 20 20 20 20 20 20 20 65 78 65      //       exe
1a110 63 75 74 61 62 6c 65 20 77 69 6c 6c 20 6e 6f 74  cutable will not
1a120 20 72 65 73 75 6c 74 20 69 6e 20 61 6e 79 20 63   result in any c
1a130 68 61 6e 67 65 73 20 62 65 69 6e 67 0d 0a 20 20  hanges being..  
1a140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a150 20 20 2f 2f 20 20 20 20 20 20 20 6d 61 64 65 20    //       made 
1a160 74 6f 20 74 68 65 20 73 79 73 74 65 6d 2e 0d 0a  to the system...
1a170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a180 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
1a190 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
1a1a0 21 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 63  !configuration.c
1a1b0 6f 6e 66 69 72 6d 29 0d 0a 20 20 20 20 20 20 20  onfirm)..       
1a1c0 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
1a1d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a1e0 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
1a1f0 22 43 61 6e 6e 6f 74 20 63 6f 6e 74 69 6e 75 65  "Cannot continue
1a200 2c 20 74 68 65 20 5c 22 63 6f 6e 66 69 72 6d 5c  , the \"confirm\
1a210 22 20 6f 70 74 69 6f 6e 20 69 73 20 22 20 2b 0d  " option is " +.
1a220 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1a230 20 20 20 20 20 20 20 20 20 20 20 20 20 22 6e 6f               "no
1a240 74 20 65 6e 61 62 6c 65 64 2e 22 3b 0d 0a 0d 0a  t enabled.";....
1a250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a260 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
1a270 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alse;..         
1a280 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
1a290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a2a0 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b      return true;
1a2b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1a2c0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
1a2d0 20 20 20 20 20 63 61 74 63 68 20 28 45 78 63 65       catch (Exce
1a2e0 70 74 69 6f 6e 20 65 29 0d 0a 20 20 20 20 20 20  ption e)..      
1a2f0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
1a300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a310 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41   TraceOps.DebugA
1a320 6e 64 54 72 61 63 65 28 54 72 61 63 65 50 72 69  ndTrace(TracePri
1a330 6f 72 69 74 79 2e 48 69 67 68 65 73 74 2c 0d 0a  ority.Highest,..
1a340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a350 20 20 20 20 20 20 20 20 64 65 62 75 67 43 61 6c          debugCal
1a360 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c  lback, traceCall
1a370 62 61 63 6b 2c 20 65 2c 20 74 72 61 63 65 43 61  back, e, traceCa
1a380 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
1a390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a3a0 65 72 72 6f 72 20 3d 20 22 46 61 69 6c 65 64 20  error = "Failed 
1a3b0 74 6f 20 70 72 6f 63 65 73 73 20 63 6f 6e 66 69  to process confi
1a3c0 67 75 72 61 74 69 6f 6e 2e 22 3b 0d 0a 20 20 20  guration.";..   
1a3d0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
1a3e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1a3f0 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
1a400 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
1a410 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
1a420 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a430 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a440 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a450 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a460 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
1a470 20 5b 4d 65 74 68 6f 64 49 6d 70 6c 28 4d 65 74   [MethodImpl(Met
1a480 68 6f 64 49 6d 70 6c 4f 70 74 69 6f 6e 73 2e 4e  hodImplOptions.N
1a490 6f 49 6e 6c 69 6e 69 6e 67 29 5d 0d 0a 20 20 20  oInlining)]..   
1a4a0 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
1a4b0 73 74 61 74 69 63 20 62 6f 6f 6c 20 43 68 65 63  static bool Chec
1a4c0 6b 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 28  kRuntimeVersion(
1a4d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1a4e0 20 20 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20    Configuration 
1a4f0 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2c 0d 0a  configuration,..
1a500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a510 62 6f 6f 6c 20 73 74 72 69 63 74 2c 0d 0a 20 20  bool strict,..  
1a520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
1a530 66 20 73 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a  f string error..
1a540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a550 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
1a560 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1a570 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20    try..         
1a580 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
1a590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
1a5a0 20 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20   (configuration 
1a5b0 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
1a5c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
1a5d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1a5e0 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
1a5f0 20 22 49 6e 76 61 6c 69 64 20 63 6f 6e 66 69 67   "Invalid config
1a600 75 72 61 74 69 6f 6e 2e 22 3b 0d 0a 20 20 20 20  uration.";..    
1a610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a620 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
1a630 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
1a640 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
1a650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a660 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
1a670 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a          // NOTE:
1a680 20 57 68 61 74 20 76 65 72 73 69 6f 6e 20 6f 66   What version of
1a690 20 74 68 65 20 72 75 6e 74 69 6d 65 20 77 61 73   the runtime was
1a6a0 20 74 68 65 20 63 6f 72 65 20 28 70 72 69 6d 61   the core (prima
1a6b0 72 79 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ry)..           
1a6c0 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
1a6d0 20 20 61 73 73 65 6d 62 6c 79 20 63 6f 6d 70 69    assembly compi
1a6e0 6c 65 64 20 61 67 61 69 6e 73 74 20 28 65 2e 67  led against (e.g
1a6f0 2e 20 22 76 32 2e 30 2e 35 30 37 32 37 22 20 6f  . "v2.0.50727" o
1a700 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  r..             
1a710 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
1a720 22 76 34 2e 30 2e 33 30 33 31 39 22 29 2e 0d 0a  "v4.0.30319")...
1a730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a740 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
1a750 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
1a760 6e 67 20 63 6f 72 65 49 6d 61 67 65 52 75 6e 74  ng coreImageRunt
1a770 69 6d 65 56 65 72 73 69 6f 6e 20 3d 20 47 65 74  imeVersion = Get
1a780 49 6d 61 67 65 52 75 6e 74 69 6d 65 56 65 72 73  ImageRuntimeVers
1a790 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ion(..          
1a7a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
1a7b0 6e 66 69 67 75 72 61 74 69 6f 6e 2e 63 6f 72 65  nfiguration.core
1a7c0 46 69 6c 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20  FileName);....  
1a7d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a7e0 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
1a7f0 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54            // NOT
1a800 45 3a 20 57 65 20 61 6c 6c 6f 77 20 74 68 65 20  E: We allow the 
1a810 61 63 74 75 61 6c 20 69 6d 61 67 65 20 72 75 6e  actual image run
1a820 74 69 6d 65 20 63 68 65 63 6b 69 6e 67 20 74 6f  time checking to
1a830 20 62 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20   be..           
1a840 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
1a850 20 20 62 79 70 61 73 73 65 64 20 76 69 61 20 74    bypassed via t
1a860 68 65 20 22 2d 6e 6f 52 75 6e 74 69 6d 65 56 65  he "-noRuntimeVe
1a870 72 73 69 6f 6e 22 20 63 6f 6d 6d 61 6e 64 20 6c  rsion" command l
1a880 69 6e 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ine..           
1a890 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
1a8a0 20 20 6f 70 74 69 6f 6e 2e 20 20 54 68 65 20 63    option.  The c
1a8b0 6f 6d 6d 61 6e 64 20 6c 69 6e 65 20 6f 70 74 69  ommand line opti
1a8c0 6f 6e 20 69 73 20 69 6e 74 65 6e 64 65 64 20 66  on is intended f
1a8d0 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  or..            
1a8e0 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
1a8f0 20 65 78 70 65 72 74 20 75 73 65 20 6f 6e 6c 79   expert use only
1a900 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
1a910 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
1a920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
1a930 66 20 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  f (configuration
1a940 2e 6e 6f 52 75 6e 74 69 6d 65 56 65 72 73 69 6f  .noRuntimeVersio
1a950 6e 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n)..            
1a960 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
1a970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a980 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75     TraceOps.Debu
1a990 67 41 6e 64 54 72 61 63 65 28 54 72 61 63 65 50  gAndTrace(TraceP
1a9a0 72 69 6f 72 69 74 79 2e 4d 65 64 69 75 6d 2c 0d  riority.Medium,.
1a9b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1a9c0 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62               deb
1a9d0 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63  ugCallback, trac
1a9e0 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e  eCallback, Strin
1a9f0 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
1aa00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1aa10 20 20 20 20 20 20 20 22 41 73 73 65 6d 62 6c 79         "Assembly
1aa20 20 69 73 20 63 6f 6d 70 69 6c 65 64 20 66 6f 72   is compiled for
1aa30 20 74 68 65 20 2e 4e 45 54 20 46 72 61 6d 65 77   the .NET Framew
1aa40 6f 72 6b 20 7b 30 7d 3b 20 22 20 2b 0d 0a 20 20  ork {0}; " +..  
1aa50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1aa60 20 20 20 20 20 20 20 20 20 20 22 68 6f 77 65 76            "howev
1aa70 65 72 2c 20 69 6e 73 74 61 6c 6c 61 74 69 6f 6e  er, installation
1aa80 20 72 65 73 74 72 69 63 74 69 6f 6e 73 20 62 61   restrictions ba
1aa90 73 65 64 20 6f 6e 20 74 68 69 73 20 22 20 2b 0d  sed on this " +.
1aaa0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1aab0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 66 61               "fa
1aac0 63 74 20 68 61 76 65 20 62 65 65 6e 20 64 69 73  ct have been dis
1aad0 61 62 6c 65 64 20 76 69 61 20 74 68 65 20 63 6f  abled via the co
1aae0 6d 6d 61 6e 64 20 6c 69 6e 65 2e 22 2c 0d 0a 20  mmand line.",.. 
1aaf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ab00 20 20 20 20 20 20 20 20 20 20 20 63 6f 72 65 49             coreI
1ab10 6d 61 67 65 52 75 6e 74 69 6d 65 56 65 72 73 69  mageRuntimeVersi
1ab20 6f 6e 29 2c 20 74 72 61 63 65 43 61 74 65 67 6f  on), traceCatego
1ab30 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
1ab40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ab50 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20  return true;..  
1ab60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ab70 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
1ab80 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
1ab90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1aba0 20 20 20 2f 2f 20 54 4f 44 4f 3a 20 52 65 73 74     // TODO: Rest
1abb0 72 69 63 74 20 74 68 65 20 63 6f 6e 66 69 67 75  rict the configu
1abc0 72 61 74 69 6f 6e 20 62 61 73 65 64 20 6f 6e 20  ration based on 
1abd0 77 68 69 63 68 20 69 6d 61 67 65 0d 0a 20 20 20  which image..   
1abe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1abf0 20 2f 2f 20 20 20 20 20 20 20 72 75 6e 74 69 6d   //       runtim
1ac00 65 20 76 65 72 73 69 6f 6e 73 20 28 77 68 69 63  e versions (whic
1ac10 68 20 6d 6f 72 65 2d 6f 72 2d 6c 65 73 73 20 63  h more-or-less c
1ac20 6f 72 72 65 73 70 6f 6e 64 0d 0a 20 20 20 20 20  orrespond..     
1ac30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1ac40 2f 20 20 20 20 20 20 20 74 6f 20 2e 4e 45 54 20  /       to .NET 
1ac50 46 72 61 6d 65 77 6f 72 6b 20 76 65 72 73 69 6f  Framework versio
1ac60 6e 73 29 20 61 72 65 20 73 75 70 70 6f 72 74 65  ns) are supporte
1ac70 64 20 62 79 20 74 68 65 0d 0a 20 20 20 20 20 20  d by the..      
1ac80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
1ac90 20 20 20 20 20 20 20 76 65 72 73 69 6f 6e 73 20         versions 
1aca0 6f 66 20 56 69 73 75 61 6c 20 53 74 75 64 69 6f  of Visual Studio
1acb0 20 74 68 61 74 20 61 72 65 20 69 6e 73 74 61 6c   that are instal
1acc0 6c 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  led...          
1acd0 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
1ace0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1acf0 20 20 69 66 20 28 53 74 72 69 6e 67 2e 49 73 4e    if (String.IsN
1ad00 75 6c 6c 4f 72 45 6d 70 74 79 28 63 6f 72 65 49  ullOrEmpty(coreI
1ad10 6d 61 67 65 52 75 6e 74 69 6d 65 56 65 72 73 69  mageRuntimeVersi
1ad20 6f 6e 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  on))..          
1ad30 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
1ad40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ad50 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 69 6e       error = "in
1ad60 76 61 6c 69 64 20 63 6f 72 65 20 66 69 6c 65 20  valid core file 
1ad70 69 6d 61 67 65 20 72 75 6e 74 69 6d 65 20 76 65  image runtime ve
1ad80 72 73 69 6f 6e 22 3b 0d 0a 20 20 20 20 20 20 20  rsion";..       
1ad90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ada0 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
1adb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1adc0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
1add0 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20             else 
1ade0 69 66 20 28 53 74 72 69 6e 67 2e 45 71 75 61 6c  if (String.Equal
1adf0 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  s(..            
1ae00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ae10 63 6f 72 65 49 6d 61 67 65 52 75 6e 74 69 6d 65  coreImageRuntime
1ae20 56 65 72 73 69 6f 6e 2c 20 43 4c 52 76 32 49 6d  Version, CLRv2Im
1ae30 61 67 65 52 75 6e 74 69 6d 65 56 65 72 73 69 6f  ageRuntimeVersio
1ae40 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n,..            
1ae50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ae60 53 74 72 69 6e 67 43 6f 6d 70 61 72 69 73 6f 6e  StringComparison
1ae70 2e 4f 72 64 69 6e 61 6c 29 29 0d 0a 20 20 20 20  .Ordinal))..    
1ae80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ae90 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
1aea0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
1aeb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1aec0 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20         // NOTE: 
1aed0 46 6f 72 20 74 68 65 20 43 4c 52 20 76 32 2e 30  For the CLR v2.0
1aee0 20 72 75 6e 74 69 6d 65 2c 20 6d 61 6b 65 20 73   runtime, make s
1aef0 75 72 65 20 77 65 20 64 69 73 61 62 6c 65 0d 0a  ure we disable..
1af00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1af10 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
1af20 20 61 6e 79 20 61 74 74 65 6d 70 74 20 74 6f 20   any attempt to 
1af30 75 73 65 20 69 74 20 66 6f 72 20 74 68 69 6e 67  use it for thing
1af40 73 20 74 68 61 74 20 72 65 71 75 69 72 65 0d 0a  s that require..
1af50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1af60 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
1af70 20 61 6e 20 61 73 73 65 6d 62 6c 79 20 63 6f 6d   an assembly com
1af80 70 69 6c 65 64 20 66 6f 72 20 74 68 65 20 43 4c  piled for the CL
1af90 52 20 76 34 2e 30 2e 20 20 49 74 20 69 73 0d 0a  R v4.0.  It is..
1afa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1afb0 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
1afc0 20 75 6e 63 65 72 74 61 69 6e 20 69 66 20 74 68   uncertain if th
1afd0 69 73 20 69 73 20 61 63 74 75 61 6c 6c 79 20 61  is is actually a
1afe0 20 70 72 6f 62 6c 65 6d 20 69 6e 0d 0a 20 20 20   problem in..   
1aff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b000 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 70 72       //       pr
1b010 61 63 74 69 63 65 20 61 73 20 74 68 65 20 43 4c  actice as the CL
1b020 52 20 76 34 2e 30 20 63 61 6e 20 6c 6f 61 64 20  R v4.0 can load 
1b030 61 6e 64 20 75 73 65 20 61 6e 0d 0a 20 20 20 20  and use an..    
1b040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b050 20 20 20 20 2f 2f 20 20 20 20 20 20 20 61 73 73      //       ass
1b060 65 6d 62 6c 79 20 63 6f 6d 70 69 6c 65 64 20 77  embly compiled w
1b070 69 74 68 20 74 68 65 20 43 4c 52 20 76 32 2e 30  ith the CLR v2.0
1b080 3b 20 68 6f 77 65 76 65 72 2c 0d 0a 20 20 20 20  ; however,..    
1b090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b0a0 20 20 20 20 2f 2f 20 20 20 20 20 20 20 73 69 6e      //       sin
1b0b0 63 65 20 74 68 69 73 20 70 72 6f 6a 65 63 74 20  ce this project 
1b0c0 6f 66 66 65 72 73 20 62 6f 74 68 20 63 6f 6e 66  offers both conf
1b0d0 69 67 75 72 61 74 69 6f 6e 73 2c 0d 0a 20 20 20  igurations,..   
1b0e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b0f0 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 77 65       //       we
1b100 20 63 75 72 72 65 6e 74 6c 79 20 64 69 73 61 6c   currently disal
1b110 6c 6f 77 20 74 68 69 73 20 6d 69 73 6d 61 74 63  low this mismatc
1b120 68 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  h...            
1b130 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
1b140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b150 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72          configur
1b160 61 74 69 6f 6e 2e 6e 6f 4e 65 74 46 78 34 30 20  ation.noNetFx40 
1b170 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20  = true;..       
1b180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b190 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e   configuration.n
1b1a0 6f 4e 65 74 46 78 34 35 20 3d 20 74 72 75 65 3b  oNetFx45 = true;
1b1b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1b1c0 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67            config
1b1d0 75 72 61 74 69 6f 6e 2e 6e 6f 56 73 32 30 31 30  uration.noVs2010
1b1e0 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20   = true;..      
1b1f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b200 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e    configuration.
1b210 6e 6f 56 73 32 30 31 32 20 3d 20 74 72 75 65 3b  noVs2012 = true;
1b220 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1b230 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
1b240 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61  eOps.DebugAndTra
1b250 63 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 79  ce(TracePriority
1b260 2e 4d 65 64 69 75 6d 2c 0d 0a 20 20 20 20 20 20  .Medium,..      
1b270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b280 20 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62        debugCallb
1b290 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61  ack, traceCallba
1b2a0 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ck, String.Forma
1b2b0 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
1b2c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b2d0 22 41 73 73 65 6d 62 6c 79 20 69 73 20 63 6f 6d  "Assembly is com
1b2e0 70 69 6c 65 64 20 66 6f 72 20 74 68 65 20 2e 4e  piled for the .N
1b2f0 45 54 20 46 72 61 6d 65 77 6f 72 6b 20 7b 30 7d  ET Framework {0}
1b300 2c 20 22 20 2b 0d 0a 20 20 20 20 20 20 20 20 20  , " +..         
1b310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b320 20 20 20 22 73 75 70 70 6f 72 74 20 66 6f 72 20     "support for 
1b330 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b 20 7b  .NET Framework {
1b340 31 7d 20 69 73 20 6e 6f 77 20 64 69 73 61 62 6c  1} is now disabl
1b350 65 64 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  ed.",..         
1b360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b370 20 20 20 43 4c 52 76 32 49 6d 61 67 65 52 75 6e     CLRv2ImageRun
1b380 74 69 6d 65 56 65 72 73 69 6f 6e 2c 20 43 4c 52  timeVersion, CLR
1b390 76 34 49 6d 61 67 65 52 75 6e 74 69 6d 65 56 65  v4ImageRuntimeVe
1b3a0 72 73 69 6f 6e 29 2c 0d 0a 20 20 20 20 20 20 20  rsion),..       
1b3b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b3c0 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f       traceCatego
1b3d0 72 79 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ry);..          
1b3e0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
1b3f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b400 20 65 6c 73 65 20 69 66 20 28 53 74 72 69 6e 67   else if (String
1b410 2e 45 71 75 61 6c 73 28 0d 0a 20 20 20 20 20 20  .Equals(..      
1b420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b430 20 20 20 20 20 20 63 6f 72 65 49 6d 61 67 65 52        coreImageR
1b440 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 2c 20 43  untimeVersion, C
1b450 4c 52 76 34 49 6d 61 67 65 52 75 6e 74 69 6d 65  LRv4ImageRuntime
1b460 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20  Version,..      
1b470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b480 20 20 20 20 20 20 53 74 72 69 6e 67 43 6f 6d 70        StringComp
1b490 61 72 69 73 6f 6e 2e 4f 72 64 69 6e 61 6c 29 29  arison.Ordinal))
1b4a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1b4b0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
1b4c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b4d0 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
1b4e0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
1b4f0 4e 4f 54 45 3a 20 46 6f 72 20 74 68 65 20 43 4c  NOTE: For the CL
1b500 52 20 76 34 2e 30 20 72 75 6e 74 69 6d 65 2c 20  R v4.0 runtime, 
1b510 6d 61 6b 65 20 73 75 72 65 20 77 65 20 64 69 73  make sure we dis
1b520 61 62 6c 65 0d 0a 20 20 20 20 20 20 20 20 20 20  able..          
1b530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
1b540 20 20 20 20 20 20 20 61 6e 79 20 61 74 74 65 6d         any attem
1b550 70 74 20 74 6f 20 75 73 65 20 69 74 20 66 6f 72  pt to use it for
1b560 20 74 68 69 6e 67 73 20 74 68 61 74 20 72 65 71   things that req
1b570 75 69 72 65 0d 0a 20 20 20 20 20 20 20 20 20 20  uire..          
1b580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
1b590 20 20 20 20 20 20 20 61 6e 20 61 73 73 65 6d 62         an assemb
1b5a0 6c 79 20 63 6f 6d 70 69 6c 65 64 20 66 6f 72 20  ly compiled for 
1b5b0 74 68 65 20 43 4c 52 20 76 32 2e 30 2e 0d 0a 20  the CLR v2.0... 
1b5c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b5d0 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
1b5e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b5f0 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e     configuration
1b600 2e 6e 6f 4e 65 74 46 78 32 30 20 3d 20 74 72 75  .noNetFx20 = tru
1b610 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
1b620 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66              conf
1b630 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 56 73 32 30  iguration.noVs20
1b640 30 35 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20  05 = true;..    
1b650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b660 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f      configuratio
1b670 6e 2e 6e 6f 56 73 32 30 30 38 20 3d 20 74 72 75  n.noVs2008 = tru
1b680 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
1b690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
1b6a0 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54  aceOps.DebugAndT
1b6b0 72 61 63 65 28 54 72 61 63 65 50 72 69 6f 72 69  race(TracePriori
1b6c0 74 79 2e 4d 65 64 69 75 6d 2c 0d 0a 20 20 20 20  ty.Medium,..    
1b6d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b6e0 20 20 20 20 20 20 20 20 64 65 62 75 67 43 61 6c          debugCal
1b6f0 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c  lback, traceCall
1b700 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72  back, String.For
1b710 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
1b720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b730 20 20 22 41 73 73 65 6d 62 6c 79 20 69 73 20 63    "Assembly is c
1b740 6f 6d 70 69 6c 65 64 20 66 6f 72 20 74 68 65 20  ompiled for the 
1b750 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b 20 7b  .NET Framework {
1b760 30 7d 2c 20 22 20 2b 0d 0a 20 20 20 20 20 20 20  0}, " +..       
1b770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b780 20 20 20 20 20 22 73 75 70 70 6f 72 74 20 66 6f       "support fo
1b790 72 20 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b  r .NET Framework
1b7a0 20 7b 31 7d 20 69 73 20 6e 6f 77 20 64 69 73 61   {1} is now disa
1b7b0 62 6c 65 64 2e 22 2c 0d 0a 20 20 20 20 20 20 20  bled.",..       
1b7c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b7d0 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28       ForDisplay(
1b7e0 43 4c 52 76 34 49 6d 61 67 65 52 75 6e 74 69 6d  CLRv4ImageRuntim
1b7f0 65 56 65 72 73 69 6f 6e 29 2c 0d 0a 20 20 20 20  eVersion),..    
1b800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b810 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c          ForDispl
1b820 61 79 28 43 4c 52 76 32 49 6d 61 67 65 52 75 6e  ay(CLRv2ImageRun
1b830 74 69 6d 65 56 65 72 73 69 6f 6e 29 29 2c 0d 0a  timeVersion)),..
1b840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b850 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
1b860 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 20 20 20  eCategory);..   
1b870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b880 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
1b890 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20          else..  
1b8a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b8b0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
1b8c0 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
1b8d0 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d  or = String.Form
1b8e0 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
1b8f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b900 20 22 75 6e 73 75 70 70 6f 72 74 65 64 20 63 6f   "unsupported co
1b910 72 65 20 66 69 6c 65 20 69 6d 61 67 65 20 72 75  re file image ru
1b920 6e 74 69 6d 65 20 76 65 72 73 69 6f 6e 20 22 20  ntime version " 
1b930 2b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  +..             
1b940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
1b950 7b 30 7d 2c 20 6d 75 73 74 20 62 65 20 7b 31 7d  {0}, must be {1}
1b960 20 6f 72 20 7b 32 7d 22 2c 0d 0a 20 20 20 20 20   or {2}",..     
1b970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b980 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61         ForDispla
1b990 79 28 63 6f 72 65 49 6d 61 67 65 52 75 6e 74 69  y(coreImageRunti
1b9a0 6d 65 56 65 72 73 69 6f 6e 29 2c 0d 0a 20 20 20  meVersion),..   
1b9b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b9c0 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70           ForDisp
1b9d0 6c 61 79 28 43 4c 52 76 32 49 6d 61 67 65 52 75  lay(CLRv2ImageRu
1b9e0 6e 74 69 6d 65 56 65 72 73 69 6f 6e 29 2c 0d 0a  ntimeVersion),..
1b9f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ba00 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44              ForD
1ba10 69 73 70 6c 61 79 28 43 4c 52 76 34 49 6d 61 67  isplay(CLRv4Imag
1ba20 65 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 29  eRuntimeVersion)
1ba30 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
1ba40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
1ba50 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20  turn false;..   
1ba60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ba70 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
1ba80 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
1ba90 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20   true;..        
1baa0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
1bab0 20 20 20 20 20 20 20 20 20 20 20 63 61 74 63 68             catch
1bac0 20 28 45 78 63 65 70 74 69 6f 6e 20 65 29 0d 0a   (Exception e)..
1bad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bae0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
1baf0 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e         TraceOps.
1bb00 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 54 72  DebugAndTrace(Tr
1bb10 61 63 65 50 72 69 6f 72 69 74 79 2e 48 69 67 68  acePriority.High
1bb20 65 73 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  est,..          
1bb30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65                de
1bb40 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61  bugCallback, tra
1bb50 63 65 43 61 6c 6c 62 61 63 6b 2c 20 65 2c 20 74  ceCallback, e, t
1bb60 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
1bb70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1bb80 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 46        error = "F
1bb90 61 69 6c 65 64 20 74 6f 20 63 68 65 63 6b 20 69  ailed to check i
1bba0 6d 61 67 65 20 72 75 6e 74 69 6d 65 20 76 65 72  mage runtime ver
1bbb0 73 69 6f 6e 2e 22 3b 0d 0a 20 20 20 20 20 20 20  sion.";..       
1bbc0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
1bbd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
1bbe0 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20  turn false;..   
1bbf0 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
1bc00 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
1bc10 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  on....          
1bc20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
1bc30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1bc40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1bc50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1bc60 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
1bc70 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 75 62       #region Pub
1bc80 6c 69 63 20 4d 65 74 68 6f 64 73 0d 0a 20 20 20  lic Methods..   
1bc90 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
1bca0 62 6f 6f 6c 20 48 61 73 46 6c 61 67 73 28 0d 0a  bool HasFlags(..
1bcb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bcc0 49 6e 73 74 61 6c 6c 46 6c 61 67 73 20 68 61 73  InstallFlags has
1bcd0 46 6c 61 67 73 2c 0d 0a 20 20 20 20 20 20 20 20  Flags,..        
1bce0 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 61 6c 6c          bool all
1bcf0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1bd00 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20    )..           
1bd10 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
1bd20 20 20 20 20 69 66 20 28 61 6c 6c 29 0d 0a 20 20      if (all)..  
1bd30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bd40 20 20 72 65 74 75 72 6e 20 28 28 69 6e 73 74 61    return ((insta
1bd50 6c 6c 46 6c 61 67 73 20 26 20 68 61 73 46 6c 61  llFlags & hasFla
1bd60 67 73 29 20 3d 3d 20 68 61 73 46 6c 61 67 73 29  gs) == hasFlags)
1bd70 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
1bd80 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20     else..       
1bd90 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
1bda0 75 72 6e 20 28 28 69 6e 73 74 61 6c 6c 46 6c 61  urn ((installFla
1bdb0 67 73 20 26 20 68 61 73 46 6c 61 67 73 29 20 21  gs & hasFlags) !
1bdc0 3d 20 49 6e 73 74 61 6c 6c 46 6c 61 67 73 2e 4e  = InstallFlags.N
1bdd0 6f 6e 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  one);..         
1bde0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
1bdf0 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
1be00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1be10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1be20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1be30 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
1be40 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 76 6f         public vo
1be50 69 64 20 44 75 6d 70 28 0d 0a 20 20 20 20 20 20  id Dump(..      
1be60 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 43            TraceC
1be70 61 6c 6c 62 61 63 6b 20 74 72 61 63 65 43 61 6c  allback traceCal
1be80 6c 62 61 63 6b 0d 0a 20 20 20 20 20 20 20 20 20  lback..         
1be90 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
1bea0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
1beb0 20 20 20 20 20 20 20 20 20 69 66 20 28 74 72 61           if (tra
1bec0 63 65 43 61 6c 6c 62 61 63 6b 20 21 3d 20 6e 75  ceCallback != nu
1bed0 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
1bee0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
1bef0 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
1bf00 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67  eCallback(String
1bf10 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56  .Format(NameAndV
1bf20 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20  alueFormat,..   
1bf30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bf40 20 20 20 20 20 22 41 73 73 65 6d 62 6c 79 22 2c       "Assembly",
1bf50 20 46 6f 72 44 69 73 70 6c 61 79 28 61 73 73 65   ForDisplay(asse
1bf60 6d 62 6c 79 29 29 2c 0d 0a 20 20 20 20 20 20 20  mbly)),..       
1bf70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bf80 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
1bf90 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1bfa0 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c          traceCal
1bfb0 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72  lback(String.For
1bfc0 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65  mat(NameAndValue
1bfd0 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20  Format,..       
1bfe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bff0 20 22 4c 6f 67 46 69 6c 65 4e 61 6d 65 22 2c 20   "LogFileName", 
1c000 46 6f 72 44 69 73 70 6c 61 79 28 6c 6f 67 46 69  ForDisplay(logFi
1c010 6c 65 4e 61 6d 65 29 29 2c 0d 0a 20 20 20 20 20  leName)),..     
1c020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c030 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
1c040 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
1c050 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
1c060 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46  allback(String.F
1c070 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c  ormat(NameAndVal
1c080 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20  ueFormat,..     
1c090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c0a0 20 20 20 22 44 69 72 65 63 74 6f 72 79 22 2c 20     "Directory", 
1c0b0 46 6f 72 44 69 73 70 6c 61 79 28 64 69 72 65 63  ForDisplay(direc
1c0c0 74 6f 72 79 29 29 2c 0d 0a 20 20 20 20 20 20 20  tory)),..       
1c0d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c0e0 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
1c0f0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1c100 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c          traceCal
1c110 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72  lback(String.For
1c120 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65  mat(NameAndValue
1c130 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20  Format,..       
1c140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c150 20 22 43 6f 72 65 46 69 6c 65 4e 61 6d 65 22 2c   "CoreFileName",
1c160 20 46 6f 72 44 69 73 70 6c 61 79 28 63 6f 72 65   ForDisplay(core
1c170 46 69 6c 65 4e 61 6d 65 29 29 2c 0d 0a 20 20 20  FileName)),..   
1c180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c190 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f       traceCatego
1c1a0 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
1c1b0 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
1c1c0 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67  eCallback(String
1c1d0 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56  .Format(NameAndV
1c1e0 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20  alueFormat,..   
1c1f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c200 20 20 20 20 20 22 4c 69 6e 71 46 69 6c 65 4e 61       "LinqFileNa
1c210 6d 65 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28  me", ForDisplay(
1c220 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 29 29 2c 0d  linqFileName)),.
1c230 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1c240 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
1c250 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
1c260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c270 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74  traceCallback(St
1c280 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65  ring.Format(Name
1c290 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d  AndValueFormat,.
1c2a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1c2b0 20 20 20 20 20 20 20 20 20 22 44 65 73 69 67 6e           "Design
1c2c0 65 72 46 69 6c 65 4e 61 6d 65 22 2c 20 46 6f 72  erFileName", For
1c2d0 44 69 73 70 6c 61 79 28 64 65 73 69 67 6e 65 72  Display(designer
1c2e0 46 69 6c 65 4e 61 6d 65 29 29 2c 0d 0a 20 20 20  FileName)),..   
1c2f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c300 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f       traceCatego
1c310 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
1c320 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
1c330 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67  eCallback(String
1c340 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56  .Format(NameAndV
1c350 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20  alueFormat,..   
1c360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c370 20 20 20 20 20 22 52 65 67 69 73 74 72 79 56 65       "RegistryVe
1c380 72 73 69 6f 6e 22 2c 20 46 6f 72 44 69 73 70 6c  rsion", ForDispl
1c390 61 79 28 72 65 67 69 73 74 72 79 56 65 72 73 69  ay(registryVersi
1c3a0 6f 6e 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  on)),..         
1c3b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
1c3c0 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
1c3d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1c3e0 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62        traceCallb
1c3f0 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ack(String.Forma
1c400 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f  t(NameAndValueFo
1c410 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20  rmat,..         
1c420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
1c430 43 6f 6e 66 69 67 56 65 72 73 69 6f 6e 22 2c 20  ConfigVersion", 
1c440 46 6f 72 44 69 73 70 6c 61 79 28 63 6f 6e 66 69  ForDisplay(confi
1c450 67 56 65 72 73 69 6f 6e 29 29 2c 0d 0a 20 20 20  gVersion)),..   
1c460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c470 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f       traceCatego
1c480 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
1c490 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
1c4a0 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67  eCallback(String
1c4b0 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56  .Format(NameAndV
1c4c0 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20  alueFormat,..   
1c4d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c4e0 20 20 20 20 20 22 44 65 62 75 67 46 6f 72 6d 61       "DebugForma
1c4f0 74 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 64  t", ForDisplay(d
1c500 65 62 75 67 46 6f 72 6d 61 74 29 29 2c 0d 0a 20  ebugFormat)),.. 
1c510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c520 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65         traceCate
1c530 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
1c540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
1c550 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69  aceCallback(Stri
1c560 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e  ng.Format(NameAn
1c570 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20  dValueFormat,.. 
1c580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c590 20 20 20 20 20 20 20 22 54 72 61 63 65 46 6f 72         "TraceFor
1c5a0 6d 61 74 22 2c 20 46 6f 72 44 69 73 70 6c 61 79  mat", ForDisplay
1c5b0 28 74 72 61 63 65 46 6f 72 6d 61 74 29 29 2c 0d  (traceFormat)),.
1c5c0 0a 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 74 72 61 63 65 43 61           traceCa
1c5e0 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
1c5f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c600 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74  traceCallback(St
1c610 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65  ring.Format(Name
1c620 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d  AndValueFormat,.
1c630 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1c640 20 20 20 20 20 20 20 20 20 22 49 6e 73 74 61 6c           "Instal
1c650 6c 46 6c 61 67 73 22 2c 20 46 6f 72 44 69 73 70  lFlags", ForDisp
1c660 6c 61 79 28 69 6e 73 74 61 6c 6c 46 6c 61 67 73  lay(installFlags
1c670 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  )),..           
1c680 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
1c690 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
1c6a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c6b0 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63      traceCallbac
1c6c0 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  k(String.Format(
1c6d0 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d  NameAndValueForm
1c6e0 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at,..           
1c6f0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 44 65               "De
1c700 62 75 67 50 72 69 6f 72 69 74 79 22 2c 20 46 6f  bugPriority", Fo
1c710 72 44 69 73 70 6c 61 79 28 64 65 62 75 67 50 72  rDisplay(debugPr
1c720 69 6f 72 69 74 79 29 29 2c 0d 0a 20 20 20 20 20  iority)),..     
1c730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c740 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
1c750 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
1c760 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
1c770 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46  allback(String.F
1c780 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c  ormat(NameAndVal
1c790 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20  ueFormat,..     
1c7a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c7b0 20 20 20 22 54 72 61 63 65 50 72 69 6f 72 69 74     "TracePriorit
1c7c0 79 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 74  y", ForDisplay(t
1c7d0 72 61 63 65 50 72 69 6f 72 69 74 79 29 29 2c 0d  racePriority)),.
1c7e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1c7f0 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
1c800 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
1c810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c820 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74  traceCallback(St
1c830 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65  ring.Format(Name
1c840 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d  AndValueFormat,.
1c850 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1c860 20 20 20 20 20 20 20 20 20 22 49 6e 73 74 61 6c           "Instal
1c870 6c 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 69  l", ForDisplay(i
1c880 6e 73 74 61 6c 6c 29 29 2c 0d 0a 20 20 20 20 20  nstall)),..     
1c890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c8a0 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
1c8b0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
1c8c0 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
1c8d0 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46  allback(String.F
1c8e0 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c  ormat(NameAndVal
1c8f0 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20  ueFormat,..     
1c900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c910 20 20 20 22 57 6f 77 36 34 22 2c 20 46 6f 72 44     "Wow64", ForD
1c920 69 73 70 6c 61 79 28 77 6f 77 36 34 29 29 2c 0d  isplay(wow64)),.
1c930 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1c940 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
1c950 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
1c960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c970 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74  traceCallback(St
1c980 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65  ring.Format(Name
1c990 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d  AndValueFormat,.
1c9a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1c9b0 20 20 20 20 20 20 20 20 20 22 4e 6f 52 75 6e 74           "NoRunt
1c9c0 69 6d 65 56 65 72 73 69 6f 6e 22 2c 20 46 6f 72  imeVersion", For
1c9d0 44 69 73 70 6c 61 79 28 6e 6f 52 75 6e 74 69 6d  Display(noRuntim
1c9e0 65 56 65 72 73 69 6f 6e 29 29 2c 0d 0a 20 20 20  eVersion)),..   
1c9f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ca00 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f       traceCatego
1ca10 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
1ca20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
1ca30 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67  eCallback(String
1ca40 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56  .Format(NameAndV
1ca50 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20  alueFormat,..   
1ca60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ca70 20 20 20 20 20 22 4e 6f 44 65 73 6b 74 6f 70 22       "NoDesktop"
1ca80 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 6e 6f 44  , ForDisplay(noD
1ca90 65 73 6b 74 6f 70 29 29 2c 0d 0a 20 20 20 20 20  esktop)),..     
1caa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cab0 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
1cac0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
1cad0 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
1cae0 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46  allback(String.F
1caf0 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c  ormat(NameAndVal
1cb00 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20  ueFormat,..     
1cb10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cb20 20 20 20 22 4e 6f 43 6f 6d 70 61 63 74 22 2c 20     "NoCompact", 
1cb30 46 6f 72 44 69 73 70 6c 61 79 28 6e 6f 43 6f 6d  ForDisplay(noCom
1cb40 70 61 63 74 29 29 2c 0d 0a 20 20 20 20 20 20 20  pact)),..       
1cb50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cb60 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
1cb70 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1cb80 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c          traceCal
1cb90 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72  lback(String.For
1cba0 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65  mat(NameAndValue
1cbb0 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20  Format,..       
1cbc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cbd0 20 22 4e 6f 4e 65 74 46 78 32 30 22 2c 20 46 6f   "NoNetFx20", Fo
1cbe0 72 44 69 73 70 6c 61 79 28 6e 6f 4e 65 74 46 78  rDisplay(noNetFx
1cbf0 32 30 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  20)),..         
1cc00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
1cc10 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
1cc20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1cc30 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62        traceCallb
1cc40 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ack(String.Forma
1cc50 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f  t(NameAndValueFo
1cc60 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20  rmat,..         
1cc70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
1cc80 4e 6f 4e 65 74 46 78 34 30 22 2c 20 46 6f 72 44  NoNetFx40", ForD
1cc90 69 73 70 6c 61 79 28 6e 6f 4e 65 74 46 78 34 30  isplay(noNetFx40
1cca0 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  )),..           
1ccb0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
1ccc0 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
1ccd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cce0 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63      traceCallbac
1ccf0 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  k(String.Format(
1cd00 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d  NameAndValueForm
1cd10 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at,..           
1cd20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 4e 6f               "No
1cd30 4e 65 74 46 78 34 35 22 2c 20 46 6f 72 44 69 73  NetFx45", ForDis
1cd40 70 6c 61 79 28 6e 6f 4e 65 74 46 78 34 35 29 29  play(noNetFx45))
1cd50 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
1cd60 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
1cd70 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
1cd80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cd90 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28    traceCallback(
1cda0 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61  String.Format(Na
1cdb0 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74  meAndValueFormat
1cdc0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
1cdd0 20 20 20 20 20 20 20 20 20 20 20 22 4e 6f 56 73             "NoVs
1cde0 32 30 30 35 22 2c 20 46 6f 72 44 69 73 70 6c 61  2005", ForDispla
1cdf0 79 28 6e 6f 56 73 32 30 30 35 29 29 2c 0d 0a 20  y(noVs2005)),.. 
1ce00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ce10 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65         traceCate
1ce20 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
1ce30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
1ce40 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69  aceCallback(Stri
1ce50 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e  ng.Format(NameAn
1ce60 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20  dValueFormat,.. 
1ce70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ce80 20 20 20 20 20 20 20 22 4e 6f 56 73 32 30 30 38         "NoVs2008
1ce90 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 6e 6f  ", ForDisplay(no
1cea0 56 73 32 30 30 38 29 29 2c 0d 0a 20 20 20 20 20  Vs2008)),..     
1ceb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cec0 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
1ced0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
1cee0 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
1cef0 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46  allback(String.F
1cf00 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c  ormat(NameAndVal
1cf10 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20  ueFormat,..     
1cf20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cf30 20 20 20 22 4e 6f 56 73 32 30 31 30 22 2c 20 46     "NoVs2010", F
1cf40 6f 72 44 69 73 70 6c 61 79 28 6e 6f 56 73 32 30  orDisplay(noVs20
1cf50 31 30 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  10)),..         
1cf60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
1cf70 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
1cf80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1cf90 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62        traceCallb
1cfa0 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ack(String.Forma
1cfb0 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f  t(NameAndValueFo
1cfc0 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20  rmat,..         
1cfd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
1cfe0 4e 6f 56 73 32 30 31 32 22 2c 20 46 6f 72 44 69  NoVs2012", ForDi
1cff0 73 70 6c 61 79 28 6e 6f 56 73 32 30 31 32 29 29  splay(noVs2012))
1d000 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
1d010 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
1d020 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
1d030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d040 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28    traceCallback(
1d050 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61  String.Format(Na
1d060 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74  meAndValueFormat
1d070 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
1d080 20 20 20 20 20 20 20 20 20 20 20 22 4e 6f 54 72             "NoTr
1d090 61 63 65 22 2c 20 46 6f 72 44 69 73 70 6c 61 79  ace", ForDisplay
1d0a0 28 6e 6f 54 72 61 63 65 29 29 2c 0d 0a 20 20 20  (noTrace)),..   
1d0b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d0c0 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f       traceCatego
1d0d0 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
1d0e0 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
1d0f0 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67  eCallback(String
1d100 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56  .Format(NameAndV
1d110 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20  alueFormat,..   
1d120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d130 20 20 20 20 20 22 4e 6f 43 6f 6e 73 6f 6c 65 22       "NoConsole"
1d140 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 6e 6f 43  , ForDisplay(noC
1d150 6f 6e 73 6f 6c 65 29 29 2c 0d 0a 20 20 20 20 20  onsole)),..     
1d160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d170 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
1d180 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
1d190 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
1d1a0 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46  allback(String.F
1d1b0 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c  ormat(NameAndVal
1d1c0 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20  ueFormat,..     
1d1d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d1e0 20 20 20 22 4e 6f 4c 6f 67 22 2c 20 46 6f 72 44     "NoLog", ForD
1d1f0 69 73 70 6c 61 79 28 6e 6f 4c 6f 67 29 29 2c 0d  isplay(noLog)),.
1d200 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1d210 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
1d220 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
1d230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d240 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74  traceCallback(St
1d250 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65  ring.Format(Name
1d260 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d  AndValueFormat,.
1d270 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1d280 20 20 20 20 20 20 20 20 20 22 54 68 72 6f 77 4f           "ThrowO
1d290 6e 4d 69 73 73 69 6e 67 22 2c 20 46 6f 72 44 69  nMissing", ForDi
1d2a0 73 70 6c 61 79 28 74 68 72 6f 77 4f 6e 4d 69 73  splay(throwOnMis
1d2b0 73 69 6e 67 29 29 2c 0d 0a 20 20 20 20 20 20 20  sing)),..       
1d2c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d2d0 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
1d2e0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1d2f0 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c          traceCal
1d300 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72  lback(String.For
1d310 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65  mat(NameAndValue
1d320 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20  Format,..       
1d330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d340 20 22 57 68 61 74 49 66 22 2c 20 46 6f 72 44 69   "WhatIf", ForDi
1d350 73 70 6c 61 79 28 77 68 61 74 49 66 29 29 2c 0d  splay(whatIf)),.
1d360 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1d370 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
1d380 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
1d390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d3a0 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74  traceCallback(St
1d3b0 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65  ring.Format(Name
1d3c0 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d  AndValueFormat,.
1d3d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1d3e0 20 20 20 20 20 20 20 20 20 22 44 65 62 75 67 22           "Debug"
1d3f0 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 64 65 62  , ForDisplay(deb
1d400 75 67 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  ug)),..         
1d410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
1d420 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
1d430 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1d440 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62        traceCallb
1d450 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ack(String.Forma
1d460 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f  t(NameAndValueFo
1d470 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20  rmat,..         
1d480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
1d490 56 65 72 62 6f 73 65 22 2c 20 46 6f 72 44 69 73  Verbose", ForDis
1d4a0 70 6c 61 79 28 76 65 72 62 6f 73 65 29 29 2c 0d  play(verbose)),.
1d4b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1d4c0 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
1d4d0 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
1d4e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d4f0 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74  traceCallback(St
1d500 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65  ring.Format(Name
1d510 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d  AndValueFormat,.
1d520 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1d530 20 20 20 20 20 20 20 20 20 22 43 6f 6e 66 69 72           "Confir
1d540 6d 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 63  m", ForDisplay(c
1d550 6f 6e 66 69 72 6d 29 29 2c 0d 0a 20 20 20 20 20  onfirm)),..     
1d560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d570 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
1d580 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
1d590 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
1d5a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d5b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d5c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d5d0 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
1d5e0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
1d5f0 28 61 73 73 65 6d 62 6c 79 20 21 3d 20 6e 75 6c  (assembly != nul
1d600 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
1d610 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
1d620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d630 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b     traceCallback
1d640 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e  (String.Format(N
1d650 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61  ameAndValueForma
1d660 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t,..            
1d670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d680 22 41 73 73 65 6d 62 6c 79 54 69 74 6c 65 22 2c  "AssemblyTitle",
1d690 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1d6a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f                Fo
1d6b0 72 44 69 73 70 6c 61 79 28 47 65 74 41 73 73 65  rDisplay(GetAsse
1d6c0 6d 62 6c 79 54 69 74 6c 65 28 61 73 73 65 6d 62  mblyTitle(assemb
1d6d0 6c 79 29 29 29 2c 0d 0a 20 20 20 20 20 20 20 20  ly))),..        
1d6e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d6f0 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72      traceCategor
1d700 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
1d710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
1d720 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72  raceCallback(Str
1d730 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41  ing.Format(NameA
1d740 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a  ndValueFormat,..
1d750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d760 20 20 20 20 20 20 20 20 20 20 20 20 22 41 73 73              "Ass
1d770 65 6d 62 6c 79 43 6f 6e 66 69 67 75 72 61 74 69  emblyConfigurati
1d780 6f 6e 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  on",..          
1d790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d7a0 20 20 46 6f 72 44 69 73 70 6c 61 79 28 47 65 74    ForDisplay(Get
1d7b0 41 73 73 65 6d 62 6c 79 43 6f 6e 66 69 67 75 72  AssemblyConfigur
1d7c0 61 74 69 6f 6e 28 61 73 73 65 6d 62 6c 79 29 29  ation(assembly))
1d7d0 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
1d7e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d7f0 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
1d800 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1d810 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
1d820 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
1d830 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
1d840 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
1d850 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1d860 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d870 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d880 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d890 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d8a0 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
1d8b0 20 20 20 23 72 65 67 69 6f 6e 20 50 75 62 6c 69     #region Publi
1d8c0 63 20 50 72 6f 70 65 72 74 69 65 73 0d 0a 20 20  c Properties..  
1d8d0 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
1d8e0 65 20 41 73 73 65 6d 62 6c 79 20 61 73 73 65 6d  e Assembly assem
1d8f0 62 6c 79 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  bly;..          
1d900 20 20 70 75 62 6c 69 63 20 41 73 73 65 6d 62 6c    public Assembl
1d910 79 20 41 73 73 65 6d 62 6c 79 0d 0a 20 20 20 20  y Assembly..    
1d920 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
1d930 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b             get {
1d940 20 72 65 74 75 72 6e 20 61 73 73 65 6d 62 6c 79   return assembly
1d950 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
1d960 20 20 20 20 20 73 65 74 20 7b 20 61 73 73 65 6d       set { assem
1d970 62 6c 79 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a  bly = value; }..
1d980 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
1d990 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
1d9a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d9b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d9c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d9d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d9e0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1d9f0 70 72 69 76 61 74 65 20 73 74 72 69 6e 67 20 6c  private string l
1da00 6f 67 46 69 6c 65 4e 61 6d 65 3b 0d 0a 20 20 20  ogFileName;..   
1da10 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
1da20 73 74 72 69 6e 67 20 4c 6f 67 46 69 6c 65 4e 61  string LogFileNa
1da30 6d 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  me..            
1da40 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
1da50 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20     get { return 
1da60 6c 6f 67 46 69 6c 65 4e 61 6d 65 3b 20 7d 0d 0a  logFileName; }..
1da70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1da80 73 65 74 20 7b 20 6c 6f 67 46 69 6c 65 4e 61 6d  set { logFileNam
1da90 65 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20  e = value; }..  
1daa0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
1dab0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
1dac0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1dad0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1dae0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1daf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
1db00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
1db10 69 76 61 74 65 20 73 74 72 69 6e 67 20 64 69 72  ivate string dir
1db20 65 63 74 6f 72 79 3b 0d 0a 20 20 20 20 20 20 20  ectory;..       
1db30 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 72 69       public stri
1db40 6e 67 20 44 69 72 65 63 74 6f 72 79 0d 0a 20 20  ng Directory..  
1db50 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
1db60 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74               get
1db70 20 7b 20 72 65 74 75 72 6e 20 64 69 72 65 63 74   { return direct
1db80 6f 72 79 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  ory; }..        
1db90 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 64 69          set { di
1dba0 72 65 63 74 6f 72 79 20 3d 20 76 61 6c 75 65 3b  rectory = value;
1dbb0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
1dbc0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
1dbd0 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
1dbe0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1dbf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1dc00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1dc10 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
1dc20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 72 69      private stri
1dc30 6e 67 20 63 6f 72 65 46 69 6c 65 4e 61 6d 65 3b  ng coreFileName;
1dc40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
1dc50 62 6c 69 63 20 73 74 72 69 6e 67 20 43 6f 72 65  blic string Core
1dc60 46 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 20 20 20  FileName..      
1dc70 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
1dc80 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72           get { r
1dc90 65 74 75 72 6e 20 63 6f 72 65 46 69 6c 65 4e 61  eturn coreFileNa
1dca0 6d 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  me; }..         
1dcb0 20 20 20 20 20 20 20 73 65 74 20 7b 20 63 6f 72         set { cor
1dcc0 65 46 69 6c 65 4e 61 6d 65 20 3d 20 76 61 6c 75  eFileName = valu
1dcd0 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  e; }..          
1dce0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
1dcf0 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
1dd00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1dd10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1dd20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1dd30 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
1dd40 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74        private st
1dd50 72 69 6e 67 20 6c 69 6e 71 46 69 6c 65 4e 61 6d  ring linqFileNam
1dd60 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
1dd70 70 75 62 6c 69 63 20 73 74 72 69 6e 67 20 4c 69  public string Li
1dd80 6e 71 46 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 20  nqFileName..    
1dd90 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
1dda0 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b             get {
1ddb0 20 72 65 74 75 72 6e 20 6c 69 6e 71 46 69 6c 65   return linqFile
1ddc0 4e 61 6d 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20  Name; }..       
1ddd0 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 6c           set { l
1dde0 69 6e 71 46 69 6c 65 4e 61 6d 65 20 3d 20 76 61  inqFileName = va
1ddf0 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  lue; }..        
1de00 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
1de10 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
1de20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1de30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1de40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1de50 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
1de60 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
1de70 73 74 72 69 6e 67 20 64 65 73 69 67 6e 65 72 46  string designerF
1de80 69 6c 65 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20  ileName;..      
1de90 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 72        public str
1dea0 69 6e 67 20 44 65 73 69 67 6e 65 72 46 69 6c 65  ing DesignerFile
1deb0 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 20 20  Name..          
1dec0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
1ded0 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72       get { retur
1dee0 6e 20 64 65 73 69 67 6e 65 72 46 69 6c 65 4e 61  n designerFileNa
1def0 6d 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  me; }..         
1df00 20 20 20 20 20 20 20 73 65 74 20 7b 20 64 65 73         set { des
1df10 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 20 3d 20  ignerFileName = 
1df20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20  value; }..      
1df30 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
1df40 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
1df50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1df60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1df70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1df80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
1df90 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
1dfa0 65 20 73 74 72 69 6e 67 20 72 65 67 69 73 74 72  e string registr
1dfb0 79 56 65 72 73 69 6f 6e 3b 0d 0a 20 20 20 20 20  yVersion;..     
1dfc0 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74         public st
1dfd0 72 69 6e 67 20 52 65 67 69 73 74 72 79 56 65 72  ring RegistryVer
1dfe0 73 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20 20 20  sion..          
1dff0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
1e000 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72       get { retur
1e010 6e 20 72 65 67 69 73 74 72 79 56 65 72 73 69 6f  n registryVersio
1e020 6e 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  n; }..          
1e030 20 20 20 20 20 20 73 65 74 20 7b 20 72 65 67 69        set { regi
1e040 73 74 72 79 56 65 72 73 69 6f 6e 20 3d 20 76 61  stryVersion = va
1e050 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  lue; }..        
1e060 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
1e070 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
1e080 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e090 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e0a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e0b0 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
1e0c0 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
1e0d0 73 74 72 69 6e 67 20 63 6f 6e 66 69 67 56 65 72  string configVer
1e0e0 73 69 6f 6e 3b 0d 0a 20 20 20 20 20 20 20 20 20  sion;..         
1e0f0 20 20 20 70 75 62 6c 69 63 20 73 74 72 69 6e 67     public string
1e100 20 43 6f 6e 66 69 67 56 65 72 73 69 6f 6e 0d 0a   ConfigVersion..
1e110 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
1e120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67                 g
1e130 65 74 20 7b 20 72 65 74 75 72 6e 20 63 6f 6e 66  et { return conf
1e140 69 67 56 65 72 73 69 6f 6e 3b 20 7d 0d 0a 20 20  igVersion; }..  
1e150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65                se
1e160 74 20 7b 20 63 6f 6e 66 69 67 56 65 72 73 69 6f  t { configVersio
1e170 6e 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20  n = value; }..  
1e180 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
1e190 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
1e1a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e1b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e1c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e1d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
1e1e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
1e1f0 69 76 61 74 65 20 73 74 72 69 6e 67 20 64 65 62  ivate string deb
1e200 75 67 46 6f 72 6d 61 74 3b 0d 0a 20 20 20 20 20  ugFormat;..     
1e210 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74         public st
1e220 72 69 6e 67 20 44 65 62 75 67 46 6f 72 6d 61 74  ring DebugFormat
1e230 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
1e240 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1e250 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 64 65   get { return de
1e260 62 75 67 46 6f 72 6d 61 74 3b 20 7d 0d 0a 20 20  bugFormat; }..  
1e270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65                se
1e280 74 20 7b 20 64 65 62 75 67 46 6f 72 6d 61 74 20  t { debugFormat 
1e290 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20  = value; }..    
1e2a0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
1e2b0 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
1e2c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e2d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e2e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e2f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
1e300 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
1e310 61 74 65 20 73 74 72 69 6e 67 20 74 72 61 63 65  ate string trace
1e320 46 6f 72 6d 61 74 3b 0d 0a 20 20 20 20 20 20 20  Format;..       
1e330 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 72 69       public stri
1e340 6e 67 20 54 72 61 63 65 46 6f 72 6d 61 74 0d 0a  ng TraceFormat..
1e350 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
1e360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67                 g
1e370 65 74 20 7b 20 72 65 74 75 72 6e 20 74 72 61 63  et { return trac
1e380 65 46 6f 72 6d 61 74 3b 20 7d 0d 0a 20 20 20 20  eFormat; }..    
1e390 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20              set 
1e3a0 7b 20 74 72 61 63 65 46 6f 72 6d 61 74 20 3d 20  { traceFormat = 
1e3b0 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20  value; }..      
1e3c0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
1e3d0 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
1e3e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e3f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e400 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e410 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
1e420 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
1e430 65 20 49 6e 73 74 61 6c 6c 46 6c 61 67 73 20 69  e InstallFlags i
1e440 6e 73 74 61 6c 6c 46 6c 61 67 73 3b 0d 0a 20 20  nstallFlags;..  
1e450 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
1e460 20 49 6e 73 74 61 6c 6c 46 6c 61 67 73 20 49 6e   InstallFlags In
1e470 73 74 61 6c 6c 46 6c 61 67 73 0d 0a 20 20 20 20  stallFlags..    
1e480 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
1e490 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b             get {
1e4a0 20 72 65 74 75 72 6e 20 69 6e 73 74 61 6c 6c 46   return installF
1e4b0 6c 61 67 73 3b 20 7d 0d 0a 20 20 20 20 20 20 20  lags; }..       
1e4c0 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 69           set { i
1e4d0 6e 73 74 61 6c 6c 46 6c 61 67 73 20 3d 20 76 61  nstallFlags = va
1e4e0 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  lue; }..        
1e4f0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
1e500 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
1e510 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e520 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e530 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e540 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
1e550 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
1e560 54 72 61 63 65 50 72 69 6f 72 69 74 79 20 64 65  TracePriority de
1e570 62 75 67 50 72 69 6f 72 69 74 79 3b 0d 0a 20 20  bugPriority;..  
1e580 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
1e590 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 20 44   TracePriority D
1e5a0 65 62 75 67 50 72 69 6f 72 69 74 79 0d 0a 20 20  ebugPriority..  
1e5b0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
1e5c0 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74               get
1e5d0 20 7b 20 72 65 74 75 72 6e 20 64 65 62 75 67 50   { return debugP
1e5e0 72 69 6f 72 69 74 79 3b 20 7d 0d 0a 20 20 20 20  riority; }..    
1e5f0 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20              set 
1e600 7b 20 64 65 62 75 67 50 72 69 6f 72 69 74 79 20  { debugPriority 
1e610 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20  = value; }..    
1e620 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
1e630 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
1e640 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e650 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e660 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e670 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
1e680 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
1e690 61 74 65 20 54 72 61 63 65 50 72 69 6f 72 69 74  ate TracePriorit
1e6a0 79 20 74 72 61 63 65 50 72 69 6f 72 69 74 79 3b  y tracePriority;
1e6b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
1e6c0 62 6c 69 63 20 54 72 61 63 65 50 72 69 6f 72 69  blic TracePriori
1e6d0 74 79 20 54 72 61 63 65 50 72 69 6f 72 69 74 79  ty TracePriority
1e6e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
1e6f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1e700 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 74 72   get { return tr
1e710 61 63 65 50 72 69 6f 72 69 74 79 3b 20 7d 0d 0a  acePriority; }..
1e720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e730 73 65 74 20 7b 20 74 72 61 63 65 50 72 69 6f 72  set { tracePrior
1e740 69 74 79 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a  ity = value; }..
1e750 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
1e760 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
1e770 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e780 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e790 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e7a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e7b0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1e7c0 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 69 6e 73  private bool ins
1e7d0 74 61 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20  tall;..         
1e7e0 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 49     public bool I
1e7f0 6e 73 74 61 6c 6c 0d 0a 20 20 20 20 20 20 20 20  nstall..        
1e800 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
1e810 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74         get { ret
1e820 75 72 6e 20 69 6e 73 74 61 6c 6c 3b 20 7d 0d 0a  urn install; }..
1e830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e840 73 65 74 20 7b 20 69 6e 73 74 61 6c 6c 20 3d 20  set { install = 
1e850 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20  value; }..      
1e860 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
1e870 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
1e880 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e890 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e8a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e8b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
1e8c0 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
1e8d0 65 20 62 6f 6f 6c 20 77 6f 77 36 34 3b 0d 0a 20  e bool wow64;.. 
1e8e0 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
1e8f0 63 20 62 6f 6f 6c 20 57 6f 77 36 34 0d 0a 20 20  c bool Wow64..  
1e900 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
1e910 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74               get
1e920 20 7b 20 72 65 74 75 72 6e 20 77 6f 77 36 34 3b   { return wow64;
1e930 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
1e940 20 20 20 20 73 65 74 20 7b 20 77 6f 77 36 34 20      set { wow64 
1e950 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20  = value; }..    
1e960 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
1e970 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
1e980 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e990 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e9a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e9b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
1e9c0 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
1e9d0 61 74 65 20 62 6f 6f 6c 20 6e 6f 52 75 6e 74 69  ate bool noRunti
1e9e0 6d 65 56 65 72 73 69 6f 6e 3b 0d 0a 20 20 20 20  meVersion;..    
1e9f0 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 62          public b
1ea00 6f 6f 6c 20 4e 6f 52 75 6e 74 69 6d 65 56 65 72  ool NoRuntimeVer
1ea10 73 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20 20 20  sion..          
1ea20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
1ea30 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72       get { retur
1ea40 6e 20 6e 6f 52 75 6e 74 69 6d 65 56 65 72 73 69  n noRuntimeVersi
1ea50 6f 6e 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  on; }..         
1ea60 20 20 20 20 20 20 20 73 65 74 20 7b 20 6e 6f 52         set { noR
1ea70 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 20 3d 20  untimeVersion = 
1ea80 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20  value; }..      
1ea90 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
1eaa0 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
1eab0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1eac0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ead0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1eae0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
1eaf0 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
1eb00 65 20 62 6f 6f 6c 20 6e 6f 44 65 73 6b 74 6f 70  e bool noDesktop
1eb10 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ;..            p
1eb20 75 62 6c 69 63 20 62 6f 6f 6c 20 4e 6f 44 65 73  ublic bool NoDes
1eb30 6b 74 6f 70 0d 0a 20 20 20 20 20 20 20 20 20 20  ktop..          
1eb40 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
1eb50 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72       get { retur
1eb60 6e 20 6e 6f 44 65 73 6b 74 6f 70 3b 20 7d 0d 0a  n noDesktop; }..
1eb70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1eb80 73 65 74 20 7b 20 6e 6f 44 65 73 6b 74 6f 70 20  set { noDesktop 
1eb90 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20  = value; }..    
1eba0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
1ebb0 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
1ebc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ebd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ebe0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ebf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
1ec00 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
1ec10 61 74 65 20 62 6f 6f 6c 20 6e 6f 43 6f 6d 70 61  ate bool noCompa
1ec20 63 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ct;..           
1ec30 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 4e 6f 43   public bool NoC
1ec40 6f 6d 70 61 63 74 0d 0a 20 20 20 20 20 20 20 20  ompact..        
1ec50 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
1ec60 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74         get { ret
1ec70 75 72 6e 20 6e 6f 43 6f 6d 70 61 63 74 3b 20 7d  urn noCompact; }
1ec80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1ec90 20 20 73 65 74 20 7b 20 6e 6f 43 6f 6d 70 61 63    set { noCompac
1eca0 74 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20  t = value; }..  
1ecb0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
1ecc0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
1ecd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ece0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ecf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ed00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
1ed10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
1ed20 69 76 61 74 65 20 62 6f 6f 6c 20 6e 6f 4e 65 74  ivate bool noNet
1ed30 46 78 32 30 3b 0d 0a 20 20 20 20 20 20 20 20 20  Fx20;..         
1ed40 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 4e     public bool N
1ed50 6f 4e 65 74 46 78 32 30 0d 0a 20 20 20 20 20 20  oNetFx20..      
1ed60 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
1ed70 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72           get { r
1ed80 65 74 75 72 6e 20 6e 6f 4e 65 74 46 78 32 30 3b  eturn noNetFx20;
1ed90 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
1eda0 20 20 20 20 73 65 74 20 7b 20 6e 6f 4e 65 74 46      set { noNetF
1edb0 78 32 30 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a  x20 = value; }..
1edc0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
1edd0 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
1ede0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1edf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ee00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ee10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ee20 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1ee30 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 6e 6f 4e  private bool noN
1ee40 65 74 46 78 34 30 3b 0d 0a 20 20 20 20 20 20 20  etFx40;..       
1ee50 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c       public bool
1ee60 20 4e 6f 4e 65 74 46 78 34 30 0d 0a 20 20 20 20   NoNetFx40..    
1ee70 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
1ee80 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b             get {
1ee90 20 72 65 74 75 72 6e 20 6e 6f 4e 65 74 46 78 34   return noNetFx4
1eea0 30 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  0; }..          
1eeb0 20 20 20 20 20 20 73 65 74 20 7b 20 6e 6f 4e 65        set { noNe
1eec0 74 46 78 34 30 20 3d 20 76 61 6c 75 65 3b 20 7d  tFx40 = value; }
1eed0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
1eee0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
1eef0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ef00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ef10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ef20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ef30 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
1ef40 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 6e    private bool n
1ef50 6f 4e 65 74 46 78 34 35 3b 0d 0a 20 20 20 20 20  oNetFx45;..     
1ef60 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f         public bo
1ef70 6f 6c 20 4e 6f 4e 65 74 46 78 34 35 0d 0a 20 20  ol NoNetFx45..  
1ef80 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
1ef90 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74               get
1efa0 20 7b 20 72 65 74 75 72 6e 20 6e 6f 4e 65 74 46   { return noNetF
1efb0 78 34 35 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  x45; }..        
1efc0 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 6e 6f          set { no
1efd0 4e 65 74 46 78 34 35 20 3d 20 76 61 6c 75 65 3b  NetFx45 = value;
1efe0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
1eff0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
1f000 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
1f010 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f020 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f030 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f040 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
1f050 20 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c      private bool
1f060 20 6e 6f 56 73 32 30 30 35 3b 0d 0a 20 20 20 20   noVs2005;..    
1f070 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 62          public b
1f080 6f 6f 6c 20 4e 6f 56 73 32 30 30 35 0d 0a 20 20  ool NoVs2005..  
1f090 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
1f0a0 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74               get
1f0b0 20 7b 20 72 65 74 75 72 6e 20 6e 6f 56 73 32 30   { return noVs20
1f0c0 30 35 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  05; }..         
1f0d0 20 20 20 20 20 20 20 73 65 74 20 7b 20 6e 6f 56         set { noV
1f0e0 73 32 30 30 35 20 3d 20 76 61 6c 75 65 3b 20 7d  s2005 = value; }
1f0f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
1f100 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
1f110 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f120 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f130 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f140 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f150 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
1f160 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 6e    private bool n
1f170 6f 56 73 32 30 30 38 3b 0d 0a 20 20 20 20 20 20  oVs2008;..      
1f180 20 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f        public boo
1f190 6c 20 4e 6f 56 73 32 30 30 38 0d 0a 20 20 20 20  l NoVs2008..    
1f1a0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
1f1b0 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b             get {
1f1c0 20 72 65 74 75 72 6e 20 6e 6f 56 73 32 30 30 38   return noVs2008
1f1d0 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
1f1e0 20 20 20 20 20 73 65 74 20 7b 20 6e 6f 56 73 32       set { noVs2
1f1f0 30 30 38 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a  008 = value; }..
1f200 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
1f210 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
1f220 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f230 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f240 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f250 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f260 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1f270 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 6e 6f 56  private bool noV
1f280 73 32 30 31 30 3b 0d 0a 20 20 20 20 20 20 20 20  s2010;..        
1f290 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20      public bool 
1f2a0 4e 6f 56 73 32 30 31 30 0d 0a 20 20 20 20 20 20  NoVs2010..      
1f2b0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
1f2c0 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72           get { r
1f2d0 65 74 75 72 6e 20 6e 6f 56 73 32 30 31 30 3b 20  eturn noVs2010; 
1f2e0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
1f2f0 20 20 20 73 65 74 20 7b 20 6e 6f 56 73 32 30 31     set { noVs201
1f300 30 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20  0 = value; }..  
1f310 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
1f320 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
1f330 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f340 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f350 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f360 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
1f370 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
1f380 69 76 61 74 65 20 62 6f 6f 6c 20 6e 6f 56 73 32  ivate bool noVs2
1f390 30 31 32 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  012;..          
1f3a0 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 4e 6f    public bool No
1f3b0 56 73 32 30 31 32 0d 0a 20 20 20 20 20 20 20 20  Vs2012..        
1f3c0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
1f3d0 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74         get { ret
1f3e0 75 72 6e 20 6e 6f 56 73 32 30 31 32 3b 20 7d 0d  urn noVs2012; }.
1f3f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1f400 20 73 65 74 20 7b 20 6e 6f 56 73 32 30 31 32 20   set { noVs2012 
1f410 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20  = value; }..    
1f420 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
1f430 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
1f440 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f450 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f460 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f470 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
1f480 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
1f490 61 74 65 20 62 6f 6f 6c 20 6e 6f 54 72 61 63 65  ate bool noTrace
1f4a0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ;..            p
1f4b0 75 62 6c 69 63 20 62 6f 6f 6c 20 4e 6f 54 72 61  ublic bool NoTra
1f4c0 63 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ce..            
1f4d0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
1f4e0 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20     get { return 
1f4f0 6e 6f 54 72 61 63 65 3b 20 7d 0d 0a 20 20 20 20  noTrace; }..    
1f500 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20              set 
1f510 7b 20 6e 6f 54 72 61 63 65 20 3d 20 76 61 6c 75  { noTrace = valu
1f520 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  e; }..          
1f530 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
1f540 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
1f550 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f560 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f570 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f580 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
1f590 20 20 20 20 20 20 70 72 69 76 61 74 65 20 62 6f        private bo
1f5a0 6f 6c 20 6e 6f 43 6f 6e 73 6f 6c 65 3b 0d 0a 20  ol noConsole;.. 
1f5b0 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
1f5c0 63 20 62 6f 6f 6c 20 4e 6f 43 6f 6e 73 6f 6c 65  c bool NoConsole
1f5d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
1f5e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1f5f0 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 6e 6f   get { return no
1f600 43 6f 6e 73 6f 6c 65 3b 20 7d 0d 0a 20 20 20 20  Console; }..    
1f610 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20              set 
1f620 7b 20 6e 6f 43 6f 6e 73 6f 6c 65 20 3d 20 76 61  { noConsole = va
1f630 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  lue; }..        
1f640 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
1f650 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
1f660 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f670 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f680 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f690 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
1f6a0 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
1f6b0 62 6f 6f 6c 20 6e 6f 4c 6f 67 3b 0d 0a 20 20 20  bool noLog;..   
1f6c0 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
1f6d0 62 6f 6f 6c 20 4e 6f 4c 6f 67 0d 0a 20 20 20 20  bool NoLog..    
1f6e0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
1f6f0 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b             get {
1f700 20 72 65 74 75 72 6e 20 6e 6f 4c 6f 67 3b 20 7d   return noLog; }
1f710 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1f720 20 20 73 65 74 20 7b 20 6e 6f 4c 6f 67 20 3d 20    set { noLog = 
1f730 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20  value; }..      
1f740 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
1f750 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
1f760 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f770 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f780 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f790 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
1f7a0 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
1f7b0 65 20 62 6f 6f 6c 20 74 68 72 6f 77 4f 6e 4d 69  e bool throwOnMi
1f7c0 73 73 69 6e 67 3b 0d 0a 20 20 20 20 20 20 20 20  ssing;..        
1f7d0 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20      public bool 
1f7e0 54 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 0d 0a  ThrowOnMissing..
1f7f0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
1f800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67                 g
1f810 65 74 20 7b 20 72 65 74 75 72 6e 20 74 68 72 6f  et { return thro
1f820 77 4f 6e 4d 69 73 73 69 6e 67 3b 20 7d 0d 0a 20  wOnMissing; }.. 
1f830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
1f840 65 74 20 7b 20 74 68 72 6f 77 4f 6e 4d 69 73 73  et { throwOnMiss
1f850 69 6e 67 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a  ing = value; }..
1f860 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
1f870 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
1f880 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f890 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f8a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f8b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f8c0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1f8d0 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 77 68 61  private bool wha
1f8e0 74 49 66 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  tIf;..          
1f8f0 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 57 68    public bool Wh
1f900 61 74 49 66 0d 0a 20 20 20 20 20 20 20 20 20 20  atIf..          
1f910 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
1f920 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72       get { retur
1f930 6e 20 77 68 61 74 49 66 3b 20 7d 0d 0a 20 20 20  n whatIf; }..   
1f940 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74               set
1f950 20 7b 20 77 68 61 74 49 66 20 3d 20 76 61 6c 75   { whatIf = valu
1f960 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  e; }..          
1f970 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
1f980 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
1f990 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f9a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f9b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f9c0 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
1f9d0 20 20 20 20 20 20 70 72 69 76 61 74 65 20 62 6f        private bo
1f9e0 6f 6c 20 64 65 62 75 67 3b 0d 0a 20 20 20 20 20  ol debug;..     
1f9f0 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f         public bo
1fa00 6f 6c 20 44 65 62 75 67 0d 0a 20 20 20 20 20 20  ol Debug..      
1fa10 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
1fa20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72           get { r
1fa30 65 74 75 72 6e 20 64 65 62 75 67 3b 20 7d 0d 0a  eturn debug; }..
1fa40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fa50 73 65 74 20 7b 20 64 65 62 75 67 20 3d 20 76 61  set { debug = va
1fa60 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  lue; }..        
1fa70 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
1fa80 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
1fa90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1faa0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fab0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fac0 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
1fad0 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
1fae0 62 6f 6f 6c 20 76 65 72 62 6f 73 65 3b 0d 0a 20  bool verbose;.. 
1faf0 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
1fb00 63 20 62 6f 6f 6c 20 56 65 72 62 6f 73 65 0d 0a  c bool Verbose..
1fb10 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
1fb20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67                 g
1fb30 65 74 20 7b 20 72 65 74 75 72 6e 20 76 65 72 62  et { return verb
1fb40 6f 73 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  ose; }..        
1fb50 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 76 65          set { ve
1fb60 72 62 6f 73 65 20 3d 20 76 61 6c 75 65 3b 20 7d  rbose = value; }
1fb70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
1fb80 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
1fb90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fba0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fbb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fbc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fbd0 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
1fbe0 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 63    private bool c
1fbf0 6f 6e 66 69 72 6d 3b 0d 0a 20 20 20 20 20 20 20  onfirm;..       
1fc00 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c       public bool
1fc10 20 43 6f 6e 66 69 72 6d 0d 0a 20 20 20 20 20 20   Confirm..      
1fc20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
1fc30 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72           get { r
1fc40 65 74 75 72 6e 20 63 6f 6e 66 69 72 6d 3b 20 7d  eturn confirm; }
1fc50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1fc60 20 20 73 65 74 20 7b 20 63 6f 6e 66 69 72 6d 20    set { confirm 
1fc70 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20  = value; }..    
1fc80 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
1fc90 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f         #endregio
1fca0 6e 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  n..        }..  
1fcb0 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
1fcc0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
1fcd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fce0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fcf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fd00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fd10 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23  ///....        #
1fd20 72 65 67 69 6f 6e 20 46 72 61 6d 65 77 6f 72 6b  region Framework
1fd30 4c 69 73 74 20 43 6c 61 73 73 0d 0a 20 20 20 20  List Class..    
1fd40 20 20 20 20 70 72 69 76 61 74 65 20 73 65 61 6c      private seal
1fd50 65 64 20 63 6c 61 73 73 20 46 72 61 6d 65 77 6f  ed class Framewo
1fd60 72 6b 4c 69 73 74 0d 0a 20 20 20 20 20 20 20 20  rkList..        
1fd70 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  {..            #
1fd80 72 65 67 69 6f 6e 20 50 75 62 6c 69 63 20 43 6f  region Public Co
1fd90 6e 73 74 72 75 63 74 6f 72 73 0d 0a 20 20 20 20  nstructors..    
1fda0 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 46          public F
1fdb0 72 61 6d 65 77 6f 72 6b 4c 69 73 74 28 29 0d 0a  rameworkList()..
1fdc0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
1fdd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1fde0 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20  / do nothing... 
1fdf0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
1fe00 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65            #endre
1fe10 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20  gion....        
1fe20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
1fe30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fe40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fe50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fe60 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
1fe70 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50         #region P
1fe80 75 62 6c 69 63 20 4d 65 74 68 6f 64 73 0d 0a 20  ublic Methods.. 
1fe90 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
1fea0 74 65 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b  te MockRegistryK
1feb0 65 79 20 72 6f 6f 74 4b 65 79 3b 0d 0a 20 20 20  ey rootKey;..   
1fec0 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
1fed0 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20  MockRegistryKey 
1fee0 52 6f 6f 74 4b 65 79 0d 0a 20 20 20 20 20 20 20  RootKey..       
1fef0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
1ff00 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65          get { re
1ff10 74 75 72 6e 20 72 6f 6f 74 4b 65 79 3b 20 7d 0d  turn rootKey; }.
1ff20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1ff30 20 73 65 74 20 7b 20 72 6f 6f 74 4b 65 79 20 3d   set { rootKey =
1ff40 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20   value; }..     
1ff50 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
1ff60 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
1ff70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ff80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ff90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ffa0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
1ffb0 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
1ffc0 74 65 20 53 74 72 69 6e 67 4c 69 73 74 20 6e 61  te StringList na
1ffd0 6d 65 73 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  mes;..          
1ffe0 20 20 70 75 62 6c 69 63 20 53 74 72 69 6e 67 4c    public StringL
1fff0 69 73 74 20 4e 61 6d 65 73 0d 0a 20 20 20 20 20  ist Names..     
20000 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
20010 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20            get { 
20020 72 65 74 75 72 6e 20 6e 61 6d 65 73 3b 20 7d 0d  return names; }.
20030 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
20040 20 73 65 74 20 7b 20 6e 61 6d 65 73 20 3d 20 76   set { names = v
20050 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20  alue; }..       
20060 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
20070 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
20080 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20090 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
200a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
200b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
200c0 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65           private
200d0 20 56 65 72 73 69 6f 6e 4d 61 70 20 76 65 72 73   VersionMap vers
200e0 69 6f 6e 73 3b 0d 0a 20 20 20 20 20 20 20 20 20  ions;..         
200f0 20 20 20 70 75 62 6c 69 63 20 56 65 72 73 69 6f     public Versio
20100 6e 4d 61 70 20 56 65 72 73 69 6f 6e 73 0d 0a 20  nMap Versions.. 
20110 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
20120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65                ge
20130 74 20 7b 20 72 65 74 75 72 6e 20 76 65 72 73 69  t { return versi
20140 6f 6e 73 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  ons; }..        
20150 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 76 65          set { ve
20160 72 73 69 6f 6e 73 20 3d 20 76 61 6c 75 65 3b 20  rsions = value; 
20170 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
20180 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
20190 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
201a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
201b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
201c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
201d0 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
201e0 20 20 20 70 72 69 76 61 74 65 20 53 74 72 69 6e     private Strin
201f0 67 4c 69 73 74 20 70 6c 61 74 66 6f 72 6d 4e 61  gList platformNa
20200 6d 65 73 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  mes;..          
20210 20 20 70 75 62 6c 69 63 20 53 74 72 69 6e 67 4c    public StringL
20220 69 73 74 20 50 6c 61 74 66 6f 72 6d 4e 61 6d 65  ist PlatformName
20230 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  s..            {
20240 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
20250 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 70    get { return p
20260 6c 61 74 66 6f 72 6d 4e 61 6d 65 73 3b 20 7d 0d  latformNames; }.
20270 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
20280 20 73 65 74 20 7b 20 70 6c 61 74 66 6f 72 6d 4e   set { platformN
20290 61 6d 65 73 20 3d 20 76 61 6c 75 65 3b 20 7d 0d  ames = value; }.
202a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
202b0 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64              #end
202c0 72 65 67 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20  region..        
202d0 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72  }..        #endr
202e0 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20  egion....       
202f0 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
20300 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20310 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20320 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20330 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
20340 20 20 20 20 23 72 65 67 69 6f 6e 20 56 73 4c 69      #region VsLi
20350 73 74 20 43 6c 61 73 73 0d 0a 20 20 20 20 20 20  st Class..      
20360 20 20 70 72 69 76 61 74 65 20 73 65 61 6c 65 64    private sealed
20370 20 63 6c 61 73 73 20 56 73 4c 69 73 74 0d 0a 20   class VsList.. 
20380 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
20390 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 75        #region Pu
203a0 62 6c 69 63 20 43 6f 6e 73 74 72 75 63 74 6f 72  blic Constructor
203b0 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  s..            p
203c0 75 62 6c 69 63 20 56 73 4c 69 73 74 28 29 0d 0a  ublic VsList()..
203d0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
203e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
203f0 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20  / do nothing... 
20400 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
20410 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65            #endre
20420 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20  gion....        
20430 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
20440 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20450 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20460 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20470 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
20480 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50         #region P
20490 75 62 6c 69 63 20 50 72 6f 70 65 72 74 69 65 73  ublic Properties
204a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
204b0 69 76 61 74 65 20 4d 6f 63 6b 52 65 67 69 73 74  ivate MockRegist
204c0 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79 3b 0d 0a  ryKey rootKey;..
204d0 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
204e0 69 63 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b  ic MockRegistryK
204f0 65 79 20 52 6f 6f 74 4b 65 79 0d 0a 20 20 20 20  ey RootKey..    
20500 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
20510 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b             get {
20520 20 72 65 74 75 72 6e 20 72 6f 6f 74 4b 65 79 3b   return rootKey;
20530 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
20540 20 20 20 20 73 65 74 20 7b 20 72 6f 6f 74 4b 65      set { rootKe
20550 79 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20  y = value; }..  
20560 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
20570 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
20580 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20590 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
205a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
205b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
205c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
205d0 69 76 61 74 65 20 56 65 72 73 69 6f 6e 4c 69 73  ivate VersionLis
205e0 74 20 76 65 72 73 69 6f 6e 73 3b 0d 0a 20 20 20  t versions;..   
205f0 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
20600 56 65 72 73 69 6f 6e 4c 69 73 74 20 56 65 72 73  VersionList Vers
20610 69 6f 6e 73 0d 0a 20 20 20 20 20 20 20 20 20 20  ions..          
20620 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
20630 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72       get { retur
20640 6e 20 76 65 72 73 69 6f 6e 73 3b 20 7d 0d 0a 20  n versions; }.. 
20650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
20660 65 74 20 7b 20 76 65 72 73 69 6f 6e 73 20 3d 20  et { versions = 
20670 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20  value; }..      
20680 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
20690 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d       #endregion.
206a0 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
206b0 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
206c0 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
206d0 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  on....        //
206e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
206f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20700 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20710 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20720 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
20730 20 23 72 65 67 69 6f 6e 20 50 72 69 76 61 74 65   #region Private
20740 20 43 6f 6e 73 74 61 6e 74 20 44 61 74 61 0d 0a   Constant Data..
20750 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
20760 63 6f 6e 73 74 20 73 74 72 69 6e 67 20 43 6f 72  const string Cor
20770 65 46 69 6c 65 4e 61 6d 65 20 3d 20 22 53 79 73  eFileName = "Sys
20780 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e  tem.Data.SQLite.
20790 64 6c 6c 22 3b 0d 0a 20 20 20 20 20 20 20 20 70  dll";..        p
207a0 72 69 76 61 74 65 20 63 6f 6e 73 74 20 73 74 72  rivate const str
207b0 69 6e 67 20 4c 69 6e 71 46 69 6c 65 4e 61 6d 65  ing LinqFileName
207c0 20 3d 20 22 53 79 73 74 65 6d 2e 44 61 74 61 2e   = "System.Data.
207d0 53 51 4c 69 74 65 2e 4c 69 6e 71 2e 64 6c 6c 22  SQLite.Linq.dll"
207e0 3b 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  ;..        priva
207f0 74 65 20 63 6f 6e 73 74 20 73 74 72 69 6e 67 20  te const string 
20800 44 65 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65  DesignerFileName
20810 20 3d 20 22 53 51 4c 69 74 65 2e 44 65 73 69 67   = "SQLite.Desig
20820 6e 65 72 2e 64 6c 6c 22 3b 0d 0a 20 20 20 20 20  ner.dll";..     
20830 20 20 20 70 72 69 76 61 74 65 20 63 6f 6e 73 74     private const
20840 20 73 74 72 69 6e 67 20 50 72 6f 76 69 64 65 72   string Provider
20850 4e 61 6d 65 20 3d 20 22 53 51 4c 69 74 65 20 44  Name = "SQLite D
20860 61 74 61 20 50 72 6f 76 69 64 65 72 22 3b 0d 0a  ata Provider";..
20870 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
20880 63 6f 6e 73 74 20 73 74 72 69 6e 67 20 50 72 6f  const string Pro
20890 6a 65 63 74 4e 61 6d 65 20 3d 20 22 53 79 73 74  jectName = "Syst
208a0 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 22 3b  em.Data.SQLite";
208b0 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
208c0 65 20 63 6f 6e 73 74 20 73 74 72 69 6e 67 20 4c  e const string L
208d0 65 67 61 63 79 50 72 6f 6a 65 63 74 4e 61 6d 65  egacyProjectName
208e0 20 3d 20 22 53 51 4c 69 74 65 22 3b 0d 0a 20 20   = "SQLite";..  
208f0 20 20 20 20 20 20 70 72 69 76 61 74 65 20 63 6f        private co
20900 6e 73 74 20 73 74 72 69 6e 67 20 49 6e 76 61 72  nst string Invar
20910 69 61 6e 74 4e 61 6d 65 20 3d 20 22 53 79 73 74  iantName = "Syst
20920 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 22 3b  em.Data.SQLite";
20930 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
20940 65 20 63 6f 6e 73 74 20 73 74 72 69 6e 67 20 46  e const string F
20950 61 63 74 6f 72 79 54 79 70 65 4e 61 6d 65 20 3d  actoryTypeName =
20960 20 22 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51   "System.Data.SQ
20970 4c 69 74 65 2e 53 51 4c 69 74 65 46 61 63 74 6f  Lite.SQLiteFacto
20980 72 79 22 3b 0d 0a 20 20 20 20 20 20 20 20 70 72  ry";..        pr
20990 69 76 61 74 65 20 63 6f 6e 73 74 20 73 74 72 69  ivate const stri
209a0 6e 67 20 44 65 73 63 72 69 70 74 69 6f 6e 20 3d  ng Description =
209b0 20 22 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b   ".NET Framework
209c0 20 44 61 74 61 20 50 72 6f 76 69 64 65 72 20 66   Data Provider f
209d0 6f 72 20 53 51 4c 69 74 65 22 3b 0d 0a 0d 0a 20  or SQLite";.... 
209e0 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
209f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20a00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20a10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20a20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
20a30 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
20a40 65 20 63 6f 6e 73 74 20 73 74 72 69 6e 67 20 43  e const string C
20a50 4c 52 76 32 49 6d 61 67 65 52 75 6e 74 69 6d 65  LRv2ImageRuntime
20a60 56 65 72 73 69 6f 6e 20 3d 20 22 76 32 2e 30 2e  Version = "v2.0.
20a70 35 30 37 32 37 22 3b 0d 0a 20 20 20 20 20 20 20  50727";..       
20a80 20 70 72 69 76 61 74 65 20 63 6f 6e 73 74 20 73   private const s
20a90 74 72 69 6e 67 20 43 4c 52 76 34 49 6d 61 67 65  tring CLRv4Image
20aa0 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 20 3d  RuntimeVersion =
20ab0 20 22 76 34 2e 30 2e 33 30 33 31 39 22 3b 0d 0a   "v4.0.30319";..
20ac0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
20ad0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20ae0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20af0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20b00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20b10 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69  /....        pri
20b20 76 61 74 65 20 63 6f 6e 73 74 20 73 74 72 69 6e  vate const strin
20b30 67 20 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f  g NameAndValueFo
20b40 72 6d 61 74 20 3d 20 22 7b 30 7d 3a 20 7b 31 7d  rmat = "{0}: {1}
20b50 22 3b 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  ";..        priv
20b60 61 74 65 20 63 6f 6e 73 74 20 73 74 72 69 6e 67  ate const string
20b70 20 4c 6f 67 46 69 6c 65 53 75 66 66 69 78 20 3d   LogFileSuffix =
20b80 20 22 2e 6c 6f 67 22 3b 0d 0a 0d 0a 20 20 20 20   ".log";....    
20b90 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
20ba0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20bb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20bc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20bd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
20be0 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 63         private c
20bf0 6f 6e 73 74 20 73 74 72 69 6e 67 20 52 6f 6f 74  onst string Root
20c00 4b 65 79 4e 61 6d 65 20 3d 20 22 53 6f 66 74 77  KeyName = "Softw
20c10 61 72 65 22 3b 0d 0a 20 20 20 20 20 20 20 20 70  are";..        p
20c20 72 69 76 61 74 65 20 63 6f 6e 73 74 20 73 74 72  rivate const str
20c30 69 6e 67 20 57 6f 77 36 34 53 75 62 4b 65 79 4e  ing Wow64SubKeyN
20c40 61 6d 65 20 3d 20 22 57 6f 77 36 34 33 32 4e 6f  ame = "Wow6432No
20c50 64 65 22 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  de";....        
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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20ca0 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
20cb0 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 2f     //..        /
20cc0 2f 20 4e 4f 54 45 3a 20 54 68 65 20 2e 4e 45 54  / NOTE: The .NET
20cd0 20 46 72 61 6d 65 77 6f 72 6b 20 68 61 73 20 62   Framework has b
20ce0 6f 74 68 20 33 32 2d 62 69 74 20 61 6e 64 20 36  oth 32-bit and 6
20cf0 34 2d 62 69 74 20 65 64 69 74 69 6f 6e 73 2e 0d  4-bit editions..
20d00 0a 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20  .        //..   
20d10 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61       private sta
20d20 74 69 63 20 72 65 61 64 6f 6e 6c 79 20 62 6f 6f  tic readonly boo
20d30 6c 20 4e 65 74 46 78 49 73 33 32 42 69 74 4f 6e  l NetFxIs32BitOn
20d40 6c 79 20 3d 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20  ly = false;.... 
20d50 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
20d60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20d70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20d80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20d90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
20da0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20  ..        //..  
20db0 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 46        // NOTE: F
20dc0 6f 72 20 6e 6f 77 2c 20 56 69 73 75 61 6c 20 53  or now, Visual S
20dd0 74 75 64 69 6f 20 69 73 20 61 6c 77 61 79 73 20  tudio is always 
20de0 61 20 33 32 2d 62 69 74 20 61 70 70 6c 69 63 61  a 32-bit applica
20df0 74 69 6f 6e 2e 0d 0a 20 20 20 20 20 20 20 20 2f  tion...        /
20e00 2f 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  /..        priva
20e10 74 65 20 73 74 61 74 69 63 20 72 65 61 64 6f 6e  te static readon
20e20 6c 79 20 62 6f 6f 6c 20 56 73 49 73 33 32 42 69  ly bool VsIs32Bi
20e30 74 4f 6e 6c 79 20 3d 20 74 72 75 65 3b 0d 0a 0d  tOnly = true;...
20e40 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
20e50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20e60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20e70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20e80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20e90 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  ....        priv
20ea0 61 74 65 20 73 74 61 74 69 63 20 72 65 61 64 6f  ate static reado
20eb0 6e 6c 79 20 73 74 72 69 6e 67 20 56 73 49 64 46  nly string VsIdF
20ec0 6f 72 6d 61 74 20 3d 20 22 42 22 3b 0d 0a 0d 0a  ormat = "B";....
20ed0 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
20ee0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20ef0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20f00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20f10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
20f20 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  ...        priva
20f30 74 65 20 73 74 61 74 69 63 20 72 65 61 64 6f 6e  te static readon
20f40 6c 79 20 73 74 72 69 6e 67 20 58 50 61 74 68 46  ly string XPathF
20f50 6f 72 41 64 64 45 6c 65 6d 65 6e 74 20 3d 0d 0a  orAddElement =..
20f60 20 20 20 20 20 20 20 20 20 20 20 20 22 63 6f 6e              "con
20f70 66 69 67 75 72 61 74 69 6f 6e 2f 73 79 73 74 65  figuration/syste
20f80 6d 2e 64 61 74 61 2f 44 62 50 72 6f 76 69 64 65  m.data/DbProvide
20f90 72 46 61 63 74 6f 72 69 65 73 2f 61 64 64 5b 40  rFactories/add[@
20fa0 69 6e 76 61 72 69 61 6e 74 3d 5c 22 7b 30 7d 5c  invariant=\"{0}\
20fb0 22 5d 22 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  "]";....        
20fc0 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 72  private static r
20fd0 65 61 64 6f 6e 6c 79 20 73 74 72 69 6e 67 20 58  eadonly string X
20fe0 50 61 74 68 46 6f 72 52 65 6d 6f 76 65 45 6c 65  PathForRemoveEle
20ff0 6d 65 6e 74 20 3d 0d 0a 20 20 20 20 20 20 20 20  ment =..        
21000 20 20 20 20 22 63 6f 6e 66 69 67 75 72 61 74 69      "configurati
21010 6f 6e 2f 73 79 73 74 65 6d 2e 64 61 74 61 2f 44  on/system.data/D
21020 62 50 72 6f 76 69 64 65 72 46 61 63 74 6f 72 69  bProviderFactori
21030 65 73 2f 72 65 6d 6f 76 65 5b 40 69 6e 76 61 72  es/remove[@invar
21040 69 61 6e 74 3d 5c 22 7b 30 7d 5c 22 5d 22 3b 0d  iant=\"{0}\"]";.
21050 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67  .        #endreg
21060 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  ion....        /
21070 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21080 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21090 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
210a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
210b0 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
210c0 20 20 23 72 65 67 69 6f 6e 20 50 72 69 76 61 74    #region Privat
210d0 65 20 53 74 61 74 69 63 20 44 61 74 61 0d 0a 20  e Static Data.. 
210e0 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
210f0 74 61 74 69 63 20 41 73 73 65 6d 62 6c 79 20 74  tatic Assembly t
21100 68 69 73 41 73 73 65 6d 62 6c 79 20 3d 20 41 73  hisAssembly = As
21110 73 65 6d 62 6c 79 2e 47 65 74 45 78 65 63 75 74  sembly.GetExecut
21120 69 6e 67 41 73 73 65 6d 62 6c 79 28 29 3b 0d 0a  ingAssembly();..
21130 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
21140 65 20 73 74 61 74 69 63 20 73 74 72 69 6e 67 20  e static string 
21150 74 72 61 63 65 43 61 74 65 67 6f 72 79 20 3d 20  traceCategory = 
21160 50 61 74 68 2e 47 65 74 46 69 6c 65 4e 61 6d 65  Path.GetFileName
21170 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74  (..            t
21180 68 69 73 41 73 73 65 6d 62 6c 79 2e 4c 6f 63 61  hisAssembly.Loca
21190 74 69 6f 6e 29 3b 20 2f 2a 20 4e 4f 54 45 3a 20  tion); /* NOTE: 
211a0 53 61 6d 65 20 66 6f 72 20 64 65 62 75 67 20 61  Same for debug a
211b0 6e 64 20 74 72 61 63 65 2e 20 2a 2f 0d 0a 0d 0a  nd trace. */....
211c0 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
211d0 73 74 61 74 69 63 20 54 72 61 63 65 43 61 6c 6c  static TraceCall
211e0 62 61 63 6b 20 64 65 62 75 67 43 61 6c 6c 62 61  back debugCallba
211f0 63 6b 20 3d 20 41 70 70 44 65 62 75 67 3b 0d 0a  ck = AppDebug;..
21200 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
21210 73 74 61 74 69 63 20 54 72 61 63 65 43 61 6c 6c  static TraceCall
21220 62 61 63 6b 20 74 72 61 63 65 43 61 6c 6c 62 61  back traceCallba
21230 63 6b 20 3d 20 41 70 70 54 72 61 63 65 3b 0d 0a  ck = AppTrace;..
21240 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
21250 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21260 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21270 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21280 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21290 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69  /....        pri
212a0 76 61 74 65 20 73 74 61 74 69 63 20 73 74 72 69  vate static stri
212b0 6e 67 20 73 79 73 74 65 6d 44 69 72 65 63 74 6f  ng systemDirecto
212c0 72 79 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a 23 69  ry = null;....#i
212d0 66 20 57 49 4e 44 4f 57 53 0d 0a 20 20 20 20 20  f WINDOWS..     
212e0 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69     private stati
212f0 63 20 73 74 72 69 6e 67 20 73 79 73 74 65 6d 44  c string systemD
21300 69 72 65 63 74 6f 72 79 57 6f 77 36 34 20 3d 20  irectoryWow64 = 
21310 6e 75 6c 6c 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d  null;..#endif...
21320 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
21330 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21340 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21350 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21360 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21370 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  ....        priv
21380 61 74 65 20 73 74 61 74 69 63 20 69 6e 74 20 66  ate static int f
21390 69 6c 65 73 43 72 65 61 74 65 64 20 3d 20 30 3b  ilesCreated = 0;
213a0 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
213b0 65 20 73 74 61 74 69 63 20 69 6e 74 20 66 69 6c  e static int fil
213c0 65 73 4d 6f 64 69 66 69 65 64 20 3d 20 30 3b 0d  esModified = 0;.
213d0 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
213e0 20 73 74 61 74 69 63 20 69 6e 74 20 66 69 6c 65   static int file
213f0 73 44 65 6c 65 74 65 64 20 3d 20 30 3b 0d 0a 20  sDeleted = 0;.. 
21400 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f         #endregio
21410 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  n....        ///
21420 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21430 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21440 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21450 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21460 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
21470 23 72 65 67 69 6f 6e 20 54 72 61 63 65 20 48 61  #region Trace Ha
21480 6e 64 6c 69 6e 67 0d 0a 20 20 20 20 20 20 20 20  ndling..        
21490 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 73  private static s
214a0 74 72 69 6e 67 20 47 65 74 4c 6f 67 46 69 6c 65  tring GetLogFile
214b0 4e 61 6d 65 28 0d 0a 20 20 20 20 20 20 20 20 20  Name(..         
214c0 20 20 20 73 74 72 69 6e 67 20 74 79 70 65 4e 61     string typeNa
214d0 6d 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  me..            
214e0 29 20 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a 20  ) /* throw */.. 
214f0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
21500 20 20 20 20 20 20 73 74 72 69 6e 67 20 66 69 6c        string fil
21510 65 4e 61 6d 65 20 3d 20 50 61 74 68 2e 47 65 74  eName = Path.Get
21520 54 65 6d 70 46 69 6c 65 4e 61 6d 65 28 29 3b 0d  TempFileName();.
21530 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72  .            str
21540 69 6e 67 20 64 69 72 65 63 74 6f 72 79 20 3d 20  ing directory = 
21550 50 61 74 68 2e 47 65 74 44 69 72 65 63 74 6f 72  Path.GetDirector
21560 79 4e 61 6d 65 28 66 69 6c 65 4e 61 6d 65 29 3b  yName(fileName);
21570 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74  ..            st
21580 72 69 6e 67 20 66 69 6c 65 4e 61 6d 65 4f 6e 6c  ring fileNameOnl
21590 79 20 3d 20 50 61 74 68 2e 47 65 74 46 69 6c 65  y = Path.GetFile
215a0 4e 61 6d 65 57 69 74 68 6f 75 74 45 78 74 65 6e  NameWithoutExten
215b0 73 69 6f 6e 28 66 69 6c 65 4e 61 6d 65 29 3b 0d  sion(fileName);.
215c0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  ...            s
215d0 74 72 69 6e 67 20 6e 65 77 46 69 6c 65 4e 61 6d  tring newFileNam
215e0 65 20 3d 20 50 61 74 68 2e 43 6f 6d 62 69 6e 65  e = Path.Combine
215f0 28 64 69 72 65 63 74 6f 72 79 2c 20 53 74 72 69  (directory, Stri
21600 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ng.Format(..    
21610 20 20 20 20 20 20 20 20 20 20 20 20 22 7b 30 7d              "{0}
21620 7b 31 7d 7b 32 7d 22 2c 20 74 72 61 63 65 43 61  {1}{2}", traceCa
21630 74 65 67 6f 72 79 2c 20 21 53 74 72 69 6e 67 2e  tegory, !String.
21640 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 74 79  IsNullOrEmpty(ty
21650 70 65 4e 61 6d 65 29 20 3f 0d 0a 20 20 20 20 20  peName) ?..     
21660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
21670 2e 22 20 2b 20 74 79 70 65 4e 61 6d 65 20 3a 20  ." + typeName : 
21680 53 74 72 69 6e 67 2e 45 6d 70 74 79 2c 20 22 2e  String.Empty, ".
21690 22 20 2b 20 66 69 6c 65 4e 61 6d 65 4f 6e 6c 79  " + fileNameOnly
216a0 20 2b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   +..            
216b0 20 20 20 20 20 20 20 20 4c 6f 67 46 69 6c 65 53          LogFileS
216c0 75 66 66 69 78 29 29 3b 0d 0a 0d 0a 20 20 20 20  uffix));....    
216d0 20 20 20 20 20 20 20 20 46 69 6c 65 2e 4d 6f 76          File.Mov
216e0 65 28 66 69 6c 65 4e 61 6d 65 2c 20 6e 65 77 46  e(fileName, newF
216f0 69 6c 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20  ileName);....   
21700 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
21710 6e 65 77 46 69 6c 65 4e 61 6d 65 3b 0d 0a 20 20  newFileName;..  
21720 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
21730 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
21740 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21750 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21760 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21770 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
21780 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74        private st
21790 61 74 69 63 20 76 6f 69 64 20 41 70 70 44 65 62  atic void AppDeb
217a0 75 67 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ug(..           
217b0 20 73 74 72 69 6e 67 20 6d 65 73 73 61 67 65 2c   string message,
217c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74  ..            st
217d0 72 69 6e 67 20 63 61 74 65 67 6f 72 79 0d 0a 20  ring category.. 
217e0 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
217f0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
21800 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65       TraceOps.De
21810 62 75 67 43 6f 72 65 28 53 74 72 69 6e 67 2e 46  bugCore(String.F
21820 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
21830 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73          TraceOps
21840 2e 44 65 62 75 67 46 6f 72 6d 61 74 2c 20 54 72  .DebugFormat, Tr
21850 61 63 65 4f 70 73 2e 4e 65 78 74 44 65 62 75 67  aceOps.NextDebug
21860 49 64 28 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  Id(),..         
21870 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e         TraceOps.
21880 54 69 6d 65 53 74 61 6d 70 28 44 61 74 65 54 69  TimeStamp(DateTi
21890 6d 65 2e 55 74 63 4e 6f 77 29 2c 20 6d 65 73 73  me.UtcNow), mess
218a0 61 67 65 29 2c 20 63 61 74 65 67 6f 72 79 29 3b  age), category);
218b0 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
218c0 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
218d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
218e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
218f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21900 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
21910 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
21920 65 20 73 74 61 74 69 63 20 76 6f 69 64 20 41 70  e static void Ap
21930 70 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20  pTrace(..       
21940 20 20 20 20 20 73 74 72 69 6e 67 20 6d 65 73 73       string mess
21950 61 67 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  age,..          
21960 20 20 73 74 72 69 6e 67 20 63 61 74 65 67 6f 72    string categor
21970 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29  y..            )
21980 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
21990 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70           TraceOp
219a0 73 2e 54 72 61 63 65 43 6f 72 65 28 53 74 72 69  s.TraceCore(Stri
219b0 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ng.Format(..    
219c0 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
219d0 65 4f 70 73 2e 54 72 61 63 65 46 6f 72 6d 61 74  eOps.TraceFormat
219e0 2c 20 54 72 61 63 65 4f 70 73 2e 4e 65 78 74 54  , TraceOps.NextT
219f0 72 61 63 65 49 64 28 29 2c 0d 0a 20 20 20 20 20  raceId(),..     
21a00 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
21a10 4f 70 73 2e 54 69 6d 65 53 74 61 6d 70 28 44 61  Ops.TimeStamp(Da
21a20 74 65 54 69 6d 65 2e 55 74 63 4e 6f 77 29 2c 20  teTime.UtcNow), 
21a30 6d 65 73 73 61 67 65 29 2c 20 63 61 74 65 67 6f  message), catego
21a40 72 79 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  ry);..        }.
21a50 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67  .        #endreg
21a60 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  ion....        /
21a70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21a80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21a90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21aa0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21ab0 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
21ac0 20 20 23 72 65 67 69 6f 6e 20 47 65 6e 65 72 69    #region Generi
21ad0 63 20 50 6c 61 74 66 6f 72 6d 20 48 61 6e 64 6c  c Platform Handl
21ae0 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 70 72 69  ing..        pri
21af0 76 61 74 65 20 73 74 61 74 69 63 20 62 6f 6f 6c  vate static bool
21b00 20 49 73 36 34 42 69 74 50 72 6f 63 65 73 73 28   Is64BitProcess(
21b10 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
21b20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
21b30 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54            // NOT
21b40 45 3a 20 52 65 74 75 72 6e 73 20 74 72 75 65 20  E: Returns true 
21b50 69 66 20 74 68 65 20 63 75 72 72 65 6e 74 20 70  if the current p
21b60 72 6f 63 65 73 73 20 69 73 20 36 34 2d 62 69 74  rocess is 64-bit
21b70 2e 20 20 49 66 20 74 68 69 73 0d 0a 20 20 20 20  .  If this..    
21b80 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
21b90 20 69 73 20 74 72 75 65 2c 20 77 65 20 2a 6b 6e   is true, we *kn
21ba0 6f 77 2a 20 74 68 61 74 20 77 65 20 6d 75 73 74  ow* that we must
21bb0 20 62 65 20 72 75 6e 6e 69 6e 67 20 6f 6e 20 61   be running on a
21bc0 20 36 34 2d 62 69 74 0d 0a 20 20 20 20 20 20 20   64-bit..       
21bd0 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 6f 70       //       op
21be0 65 72 61 74 69 6e 67 20 73 79 73 74 65 6d 20 61  erating system a
21bf0 73 20 77 65 6c 6c 2e 20 20 48 6f 77 65 76 65 72  s well.  However
21c00 2c 20 69 66 20 74 68 69 73 20 69 73 20 66 61 6c  , if this is fal
21c10 73 65 2c 20 77 65 0d 0a 20 20 20 20 20 20 20 20  se, we..        
21c20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 64 6f 20      //       do 
21c30 6e 6f 74 20 6e 65 63 65 73 73 61 72 69 6c 79 20  not necessarily 
21c40 6b 6e 6f 77 20 74 68 61 74 20 77 65 20 61 72 65  know that we are
21c50 20 72 75 6e 6e 69 6e 67 20 6f 6e 20 61 20 33 32   running on a 32
21c60 2d 62 69 74 0d 0a 20 20 20 20 20 20 20 20 20 20  -bit..          
21c70 20 20 2f 2f 20 20 20 20 20 20 20 6f 70 65 72 61    //       opera
21c80 74 69 6e 67 20 73 79 73 74 65 6d 2c 20 64 75 65  ting system, due
21c90 20 74 6f 20 57 6f 57 36 34 20 28 57 69 6e 33 32   to WoW64 (Win32
21ca0 2d 6f 6e 2d 57 69 6e 36 34 29 2c 20 65 74 63 2e  -on-Win64), etc.
21cb0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
21cc0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
21cd0 74 75 72 6e 20 28 49 6e 74 50 74 72 2e 53 69 7a  turn (IntPtr.Siz
21ce0 65 20 3d 3d 20 73 69 7a 65 6f 66 28 6c 6f 6e 67  e == sizeof(long
21cf0 29 29 3b 20 2f 2f 20 4e 4f 54 45 3a 20 50 6f 69  )); // NOTE: Poi
21d00 6e 74 65 72 20 69 73 20 36 34 2d 62 69 74 73 3f  nter is 64-bits?
21d10 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
21d20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
21d30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21d40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21d50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21d60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
21d70 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
21d80 65 20 73 74 61 74 69 63 20 73 74 72 69 6e 67 20  e static string 
21d90 47 65 74 52 6f 6f 74 4b 65 79 4e 61 6d 65 28 0d  GetRootKeyName(.
21da0 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f  .            boo
21db0 6c 20 77 6f 77 36 34 0d 0a 20 20 20 20 20 20 20  l wow64..       
21dc0 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
21dd0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  {..            r
21de0 65 74 75 72 6e 20 53 74 72 69 6e 67 2e 46 6f 72  eturn String.For
21df0 6d 61 74 28 22 7b 30 7d 7b 31 7d 22 2c 20 52 6f  mat("{0}{1}", Ro
21e00 6f 74 4b 65 79 4e 61 6d 65 2c 0d 0a 20 20 20 20  otKeyName,..    
21e10 20 20 20 20 20 20 20 20 20 20 20 20 77 6f 77 36              wow6
21e20 34 20 26 26 20 49 73 36 34 42 69 74 50 72 6f 63  4 && Is64BitProc
21e30 65 73 73 28 29 20 3f 0d 0a 20 20 20 20 20 20 20  ess() ?..       
21e40 20 20 20 20 20 20 20 20 20 20 20 20 20 22 5c 5c               "\\
21e50 22 20 2b 20 57 6f 77 36 34 53 75 62 4b 65 79 4e  " + Wow64SubKeyN
21e60 61 6d 65 20 3a 20 53 74 72 69 6e 67 2e 45 6d 70  ame : String.Emp
21e70 74 79 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  ty);..        }.
21e80 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
21e90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21ea0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21eb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21ec0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21ed0 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72  //....        pr
21ee0 69 76 61 74 65 20 73 74 61 74 69 63 20 73 74 72  ivate static str
21ef0 69 6e 67 20 47 65 74 53 79 73 74 65 6d 44 69 72  ing GetSystemDir
21f00 65 63 74 6f 72 79 28 0d 0a 20 20 20 20 20 20 20  ectory(..       
21f10 20 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34 0d       bool wow64.
21f20 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a  .            )..
21f30 20 20 20 20 20 20 20 20 7b 0d 0a 23 69 66 20 57          {..#if W
21f40 49 4e 44 4f 57 53 0d 0a 20 20 20 20 20 20 20 20  INDOWS..        
21f50 20 20 20 20 69 66 20 28 77 6f 77 36 34 29 0d 0a      if (wow64)..
21f60 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
21f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
21f80 66 20 28 73 79 73 74 65 6d 44 69 72 65 63 74 6f  f (systemDirecto
21f90 72 79 57 6f 77 36 34 20 3d 3d 20 6e 75 6c 6c 29  ryWow64 == null)
21fa0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
21fb0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
21fc0 20 20 20 20 20 20 20 20 20 73 79 73 74 65 6d 44           systemD
21fd0 69 72 65 63 74 6f 72 79 57 6f 77 36 34 20 3d 0d  irectoryWow64 =.
21fe0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
21ff0 20 20 20 20 20 20 20 20 20 55 6e 73 61 66 65 4e           UnsafeN
22000 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 47 65 74  ativeMethods.Get
22010 53 79 73 74 65 6d 44 69 72 65 63 74 6f 72 79 28  SystemDirectory(
22020 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
22030 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
22040 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
22050 73 79 73 74 65 6d 44 69 72 65 63 74 6f 72 79 57  systemDirectoryW
22060 6f 77 36 34 3b 0d 0a 20 20 20 20 20 20 20 20 20  ow64;..         
22070 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
22080 20 20 65 6c 73 65 0d 0a 23 65 6e 64 69 66 0d 0a    else..#endif..
22090 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
220a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
220b0 66 20 28 73 79 73 74 65 6d 44 69 72 65 63 74 6f  f (systemDirecto
220c0 72 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ry == null)..   
220d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
220e0 20 73 79 73 74 65 6d 44 69 72 65 63 74 6f 72 79   systemDirectory
220f0 20 3d 20 45 6e 76 69 72 6f 6e 6d 65 6e 74 2e 53   = Environment.S
22100 79 73 74 65 6d 44 69 72 65 63 74 6f 72 79 3b 0d  ystemDirectory;.
22110 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
22120 20 20 20 72 65 74 75 72 6e 20 73 79 73 74 65 6d     return system
22130 44 69 72 65 63 74 6f 72 79 3b 0d 0a 20 20 20 20  Directory;..    
22140 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
22150 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65     }..        #e
22160 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20  ndregion....    
22170 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
22180 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22190 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
221a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
221b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
221c0 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 47         #region G
221d0 65 6e 65 72 69 63 20 53 74 72 69 6e 67 20 48 61  eneric String Ha
221e0 6e 64 6c 69 6e 67 0d 0a 20 20 20 20 20 20 20 20  ndling..        
221f0 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 73  private static s
22200 74 72 69 6e 67 20 46 6f 72 44 69 73 70 6c 61 79  tring ForDisplay
22210 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6f  (..            o
22220 62 6a 65 63 74 20 76 61 6c 75 65 0d 0a 20 20 20  bject value..   
22230 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
22240 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
22250 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d 3d 20     if (value == 
22260 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
22270 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 22 3c         return "<
22280 6e 75 6c 6c 3e 22 3b 0d 0a 0d 0a 20 20 20 20 20  null>";....     
22290 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 72 65         string re
222a0 73 75 6c 74 3b 0d 0a 20 20 20 20 20 20 20 20 20  sult;..         
222b0 20 20 20 54 79 70 65 20 74 79 70 65 20 3d 20 76     Type type = v
222c0 61 6c 75 65 2e 47 65 74 54 79 70 65 28 29 3b 0d  alue.GetType();.
222d0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
222e0 66 20 28 74 79 70 65 20 3d 3d 20 74 79 70 65 6f  f (type == typeo
222f0 66 28 58 6d 6c 45 6c 65 6d 65 6e 74 29 29 0d 0a  f(XmlElement))..
22300 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
22310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 58                 X
22320 6d 6c 45 6c 65 6d 65 6e 74 20 65 6c 65 6d 65 6e  mlElement elemen
22330 74 20 3d 20 28 58 6d 6c 45 6c 65 6d 65 6e 74 29  t = (XmlElement)
22340 76 61 6c 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  value;....      
22350 20 20 20 20 20 20 20 20 20 20 72 65 73 75 6c 74            result
22360 20 3d 20 65 6c 65 6d 65 6e 74 2e 4f 75 74 65 72   = element.Outer
22370 58 6d 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  Xml;..          
22380 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
22390 20 65 6c 73 65 20 69 66 20 28 74 79 70 65 20 3d   else if (type =
223a0 3d 20 74 79 70 65 6f 66 28 56 65 72 73 69 6f 6e  = typeof(Version
223b0 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
223c0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
223d0 20 20 20 56 65 72 73 69 6f 6e 20 76 65 72 73 69     Version versi
223e0 6f 6e 20 3d 20 28 56 65 72 73 69 6f 6e 29 76 61  on = (Version)va
223f0 6c 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  lue;....        
22400 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 20 3d          result =
22410 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 22   String.Format("
22420 76 7b 30 7d 22 2c 20 76 65 72 73 69 6f 6e 29 3b  v{0}", version);
22430 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
22440 0a 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73  .            els
22450 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  e..            {
22460 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
22470 20 20 72 65 73 75 6c 74 20 3d 20 76 61 6c 75 65    result = value
22480 2e 54 6f 53 74 72 69 6e 67 28 29 3b 0d 0a 0d 0a  .ToString();....
22490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
224a0 69 66 20 28 72 65 73 75 6c 74 2e 4c 65 6e 67 74  if (result.Lengt
224b0 68 20 3d 3d 20 30 29 0d 0a 20 20 20 20 20 20 20  h == 0)..       
224c0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
224d0 75 72 6e 20 22 3c 65 6d 70 74 79 3e 22 3b 0d 0a  urn "<empty>";..
224e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
224f0 20 20 72 65 73 75 6c 74 20 3d 20 53 74 72 69 6e    result = Strin
22500 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
22510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
22520 79 70 65 2e 49 73 53 75 62 63 6c 61 73 73 4f 66  ype.IsSubclassOf
22530 28 74 79 70 65 6f 66 28 56 61 6c 75 65 54 79 70  (typeof(ValueTyp
22540 65 29 29 20 3f 20 22 7b 30 7d 22 20 3a 20 22 5c  e)) ? "{0}" : "\
22550 22 7b 30 7d 5c 22 22 2c 0d 0a 20 20 20 20 20 20  "{0}\"",..      
22560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
22570 73 75 6c 74 29 3b 0d 0a 20 20 20 20 20 20 20 20  sult);..        
22580 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
22590 20 20 20 20 20 72 65 74 75 72 6e 20 72 65 73 75       return resu
225a0 6c 74 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  lt;..        }..
225b0 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
225c0 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  on....        //
225d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
225e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
225f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22600 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22610 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
22620 20 23 72 65 67 69 6f 6e 20 41 73 73 65 6d 62 6c   #region Assembl
22630 79 20 41 74 74 72 69 62 75 74 65 20 48 61 6e 64  y Attribute Hand
22640 6c 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 70 75  ling..        pu
22650 62 6c 69 63 20 73 74 61 74 69 63 20 73 74 72 69  blic static stri
22660 6e 67 20 47 65 74 41 73 73 65 6d 62 6c 79 43 6f  ng GetAssemblyCo
22670 6e 66 69 67 75 72 61 74 69 6f 6e 28 0d 0a 20 20  nfiguration(..  
22680 20 20 20 20 20 20 20 20 20 20 41 73 73 65 6d 62            Assemb
22690 6c 79 20 61 73 73 65 6d 62 6c 79 0d 0a 20 20 20  ly assembly..   
226a0 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
226b0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
226c0 20 20 20 69 66 20 28 61 73 73 65 6d 62 6c 79 20     if (assembly 
226d0 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  != null)..      
226e0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
226f0 20 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20           try..  
22700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
22710 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
22720 20 20 20 20 20 69 66 20 28 61 73 73 65 6d 62 6c       if (assembl
22730 79 2e 49 73 44 65 66 69 6e 65 64 28 0d 0a 20 20  y.IsDefined(..  
22740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22750 20 20 20 20 20 20 20 20 20 20 74 79 70 65 6f 66            typeof
22760 28 41 73 73 65 6d 62 6c 79 43 6f 6e 66 69 67 75  (AssemblyConfigu
22770 72 61 74 69 6f 6e 41 74 74 72 69 62 75 74 65 29  rationAttribute)
22780 2c 20 66 61 6c 73 65 29 29 0d 0a 20 20 20 20 20  , false))..     
22790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
227a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
227b0 20 20 20 20 20 20 20 20 20 20 41 73 73 65 6d 62            Assemb
227c0 6c 79 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 41  lyConfigurationA
227d0 74 74 72 69 62 75 74 65 20 63 6f 6e 66 69 67 75  ttribute configu
227e0 72 61 74 69 6f 6e 20 3d 0d 0a 20 20 20 20 20 20  ration =..      
227f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22800 20 20 20 20 20 20 28 41 73 73 65 6d 62 6c 79 43        (AssemblyC
22810 6f 6e 66 69 67 75 72 61 74 69 6f 6e 41 74 74 72  onfigurationAttr
22820 69 62 75 74 65 29 0d 0a 20 20 20 20 20 20 20 20  ibute)..        
22830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22840 20 20 20 20 61 73 73 65 6d 62 6c 79 2e 47 65 74      assembly.Get
22850 43 75 73 74 6f 6d 41 74 74 72 69 62 75 74 65 73  CustomAttributes
22860 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
22870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22880 20 20 20 74 79 70 65 6f 66 28 41 73 73 65 6d 62     typeof(Assemb
22890 6c 79 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 41  lyConfigurationA
228a0 74 74 72 69 62 75 74 65 29 2c 0d 0a 20 20 20 20  ttribute),..    
228b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
228c0 20 20 20 20 20 20 20 20 20 20 20 20 66 61 6c 73              fals
228d0 65 29 5b 30 5d 3b 0d 0a 0d 0a 20 20 20 20 20 20  e)[0];....      
228e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
228f0 20 20 72 65 74 75 72 6e 20 63 6f 6e 66 69 67 75    return configu
22900 72 61 74 69 6f 6e 2e 43 6f 6e 66 69 67 75 72 61  ration.Configura
22910 74 69 6f 6e 3b 0d 0a 20 20 20 20 20 20 20 20 20  tion;..         
22920 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
22930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
22940 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
22950 20 63 61 74 63 68 0d 0a 20 20 20 20 20 20 20 20   catch..        
22960 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
22970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
22980 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20  / do nothing... 
22990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
229a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
229b0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  ...            r
229c0 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 20 20 20  eturn null;..   
229d0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
229e0 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
229f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22a00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22a10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22a20 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
22a30 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74       public stat
22a40 69 63 20 73 74 72 69 6e 67 20 47 65 74 41 73 73  ic string GetAss
22a50 65 6d 62 6c 79 54 69 74 6c 65 28 0d 0a 20 20 20  emblyTitle(..   
22a60 20 20 20 20 20 20 20 20 20 41 73 73 65 6d 62 6c           Assembl
22a70 79 20 61 73 73 65 6d 62 6c 79 0d 0a 20 20 20 20  y assembly..    
22a80 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
22a90 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
22aa0 20 20 69 66 20 28 61 73 73 65 6d 62 6c 79 20 21    if (assembly !
22ab0 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
22ac0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
22ad0 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20          try..   
22ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
22af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22b00 20 20 20 20 69 66 20 28 61 73 73 65 6d 62 6c 79      if (assembly
22b10 2e 49 73 44 65 66 69 6e 65 64 28 0d 0a 20 20 20  .IsDefined(..   
22b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22b30 20 20 20 20 20 20 20 20 20 74 79 70 65 6f 66 28           typeof(
22b40 41 73 73 65 6d 62 6c 79 54 69 74 6c 65 41 74 74  AssemblyTitleAtt
22b50 72 69 62 75 74 65 29 2c 20 66 61 6c 73 65 29 29  ribute), false))
22b60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
22b70 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
22b80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22b90 20 41 73 73 65 6d 62 6c 79 54 69 74 6c 65 41 74   AssemblyTitleAt
22ba0 74 72 69 62 75 74 65 20 74 69 74 6c 65 20 3d 0d  tribute title =.
22bb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
22bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 28 41 73               (As
22bd0 73 65 6d 62 6c 79 54 69 74 6c 65 41 74 74 72 69  semblyTitleAttri
22be0 62 75 74 65 29 0d 0a 20 20 20 20 20 20 20 20 20  bute)..         
22bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22c00 20 20 20 61 73 73 65 6d 62 6c 79 2e 47 65 74 43     assembly.GetC
22c10 75 73 74 6f 6d 41 74 74 72 69 62 75 74 65 73 28  ustomAttributes(
22c20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
22c30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22c40 20 20 74 79 70 65 6f 66 28 41 73 73 65 6d 62 6c    typeof(Assembl
22c50 79 54 69 74 6c 65 41 74 74 72 69 62 75 74 65 29  yTitleAttribute)
22c60 2c 20 66 61 6c 73 65 29 5b 30 5d 3b 0d 0a 0d 0a  , false)[0];....
22c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22c80 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74          return t
22c90 69 74 6c 65 2e 54 69 74 6c 65 3b 0d 0a 20 20 20  itle.Title;..   
22ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22cb0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
22cc0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
22cd0 20 20 20 20 20 20 20 63 61 74 63 68 0d 0a 20 20         catch..  
22ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
22cf0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
22d00 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69       // do nothi
22d10 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ng...           
22d20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
22d30 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
22d40 20 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c       return null
22d50 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  ;..        }..  
22d60 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
22d70 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
22d80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22d90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22da0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22db0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22dc0 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23  ///....        #
22dd0 72 65 67 69 6f 6e 20 2e 4e 45 54 20 46 72 61 6d  region .NET Fram
22de0 65 77 6f 72 6b 20 48 61 6e 64 6c 69 6e 67 0d 0a  ework Handling..
22df0 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
22e00 73 74 61 74 69 63 20 73 74 72 69 6e 67 20 47 65  static string Ge
22e10 74 46 72 61 6d 65 77 6f 72 6b 52 6f 6f 74 4b 65  tFrameworkRootKe
22e20 79 4e 61 6d 65 28 0d 0a 20 20 20 20 20 20 20 20  yName(..        
22e30 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34 0d 0a      bool wow64..
22e40 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
22e50 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
22e60 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 74 72        return Str
22e70 69 6e 67 2e 46 6f 72 6d 61 74 28 22 7b 30 7d 5c  ing.Format("{0}\
22e80 5c 4d 69 63 72 6f 73 6f 66 74 5c 5c 2e 4e 45 54  \Microsoft\\.NET
22e90 46 72 61 6d 65 77 6f 72 6b 22 2c 0d 0a 20 20 20  Framework",..   
22ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 47 65 74               Get
22eb0 52 6f 6f 74 4b 65 79 4e 61 6d 65 28 77 6f 77 36  RootKeyName(wow6
22ec0 34 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  4));..        }.
22ed0 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
22ee0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22ef0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22f00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22f10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22f20 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72  //....        pr
22f30 69 76 61 74 65 20 73 74 61 74 69 63 20 73 74 72  ivate static str
22f40 69 6e 67 20 47 65 74 46 72 61 6d 65 77 6f 72 6b  ing GetFramework
22f50 4b 65 79 4e 61 6d 65 28 0d 0a 20 20 20 20 20 20  KeyName(..      
22f60 20 20 20 20 20 20 73 74 72 69 6e 67 20 66 72 61        string fra
22f70 6d 65 77 6f 72 6b 4e 61 6d 65 2c 0d 0a 20 20 20  meworkName,..   
22f80 20 20 20 20 20 20 20 20 20 56 65 72 73 69 6f 6e           Version
22f90 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f   frameworkVersio
22fa0 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n,..            
22fb0 73 74 72 69 6e 67 20 70 6c 61 74 66 6f 72 6d 4e  string platformN
22fc0 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ame,..          
22fd0 20 20 62 6f 6f 6c 20 77 6f 77 36 34 0d 0a 20 20    bool wow64..  
22fe0 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
22ff0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
23000 20 20 20 20 73 74 72 69 6e 67 20 66 6f 72 6d 61      string forma
23010 74 20 3d 20 21 53 74 72 69 6e 67 2e 49 73 4e 75  t = !String.IsNu
23020 6c 6c 4f 72 45 6d 70 74 79 28 70 6c 61 74 66 6f  llOrEmpty(platfo
23030 72 6d 4e 61 6d 65 29 20 3f 0d 0a 20 20 20 20 20  rmName) ?..     
23040 20 20 20 20 20 20 20 20 20 20 20 22 7b 30 7d 5c             "{0}\
23050 5c 4d 69 63 72 6f 73 6f 66 74 5c 5c 7b 31 7d 5c  \Microsoft\\{1}\
23060 5c 76 7b 32 7d 5c 5c 7b 33 7d 22 20 3a 0d 0a 20  \v{2}\\{3}" :.. 
23070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
23080 7b 30 7d 5c 5c 4d 69 63 72 6f 73 6f 66 74 5c 5c  {0}\\Microsoft\\
23090 7b 31 7d 5c 5c 76 7b 32 7d 22 3b 0d 0a 0d 0a 20  {1}\\v{2}";.... 
230a0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
230b0 6e 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  n String.Format(
230c0 66 6f 72 6d 61 74 2c 20 47 65 74 52 6f 6f 74 4b  format, GetRootK
230d0 65 79 4e 61 6d 65 28 77 6f 77 36 34 29 2c 0d 0a  eyName(wow64),..
230e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
230f0 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c 20 66  frameworkName, f
23100 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 2c  rameworkVersion,
23110 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 29 3b 0d   platformName);.
23120 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....  
23130 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
23140 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23150 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23160 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23170 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
23180 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
23190 20 73 74 61 74 69 63 20 73 74 72 69 6e 67 20 47   static string G
231a0 65 74 49 6d 61 67 65 52 75 6e 74 69 6d 65 56 65  etImageRuntimeVe
231b0 72 73 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20  rsion(..        
231c0 20 20 20 20 73 74 72 69 6e 67 20 66 69 6c 65 4e      string fileN
231d0 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ame..           
231e0 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20   )..        {.. 
231f0 20 20 20 20 20 20 20 20 20 20 20 74 72 79 0d 0a             try..
23200 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
23210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 41                 A
23220 73 73 65 6d 62 6c 79 20 61 73 73 65 6d 62 6c 79  ssembly assembly
23230 20 3d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   =..            
23240 20 20 20 20 20 20 20 20 41 73 73 65 6d 62 6c 79          Assembly
23250 2e 52 65 66 6c 65 63 74 69 6f 6e 4f 6e 6c 79 4c  .ReflectionOnlyL
23260 6f 61 64 46 72 6f 6d 28 66 69 6c 65 4e 61 6d 65  oadFrom(fileName
23270 29 3b 20 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a  ); /* throw */..
23280 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
23290 20 20 69 66 20 28 61 73 73 65 6d 62 6c 79 20 21    if (assembly !
232a0 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
232b0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
232c0 75 72 6e 20 61 73 73 65 6d 62 6c 79 2e 49 6d 61  urn assembly.Ima
232d0 67 65 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e  geRuntimeVersion
232e0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
232f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 61  ..            ca
23300 74 63 68 0d 0a 20 20 20 20 20 20 20 20 20 20 20  tch..           
23310 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
23320 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e      // do nothin
23330 67 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  g...            
23340 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
23350 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 20   return null;.. 
23360 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
23370 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
23380 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23390 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
233a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
233b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
233c0 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
233d0 74 61 74 69 63 20 73 74 72 69 6e 67 20 47 65 74  tatic string Get
233e0 46 72 61 6d 65 77 6f 72 6b 44 69 72 65 63 74 6f  FrameworkDirecto
233f0 72 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ry(..           
23400 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79   MockRegistryKey
23410 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20 20 20   rootKey,..     
23420 20 20 20 20 20 20 20 56 65 72 73 69 6f 6e 20 66         Version f
23430 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 2c  rameworkVersion,
23440 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
23450 6f 6c 20 77 6f 77 36 34 2c 0d 0a 20 20 20 20 20  ol wow64,..     
23460 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74         bool what
23470 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  If,..           
23480 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 0d 0a 20   bool verbose.. 
23490 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
234a0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
234b0 20 20 20 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b       using (Mock
234c0 52 65 67 69 73 74 72 79 4b 65 79 20 6b 65 79 20  RegistryKey key 
234d0 3d 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72  = RegistryHelper
234e0 2e 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20  .OpenSubKey(..  
234f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23500 20 20 72 6f 6f 74 4b 65 79 2c 20 47 65 74 46 72    rootKey, GetFr
23510 61 6d 65 77 6f 72 6b 52 6f 6f 74 4b 65 79 4e 61  ameworkRootKeyNa
23520 6d 65 28 77 6f 77 36 34 29 2c 20 66 61 6c 73 65  me(wow64), false
23530 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
23540 20 20 20 20 20 20 20 77 68 61 74 49 66 2c 20 76         whatIf, v
23550 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20 20  erbose))..      
23560 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
23570 20 20 20 20 20 20 20 20 20 69 66 20 28 6b 65 79           if (key
23580 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
23590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
235a0 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20  eturn null;.... 
235b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6f                 o
235c0 62 6a 65 63 74 20 76 61 6c 75 65 20 3d 20 52 65  bject value = Re
235d0 67 69 73 74 72 79 48 65 6c 70 65 72 2e 47 65 74  gistryHelper.Get
235e0 56 61 6c 75 65 28 0d 0a 20 20 20 20 20 20 20 20  Value(..        
235f0 20 20 20 20 20 20 20 20 20 20 20 20 6b 65 79 2c              key,
23600 20 22 49 6e 73 74 61 6c 6c 52 6f 6f 74 22 2c 20   "InstallRoot", 
23610 6e 75 6c 6c 2c 20 77 68 61 74 49 66 2c 20 76 65  null, whatIf, ve
23620 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20  rbose);....     
23630 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21             if (!
23640 28 76 61 6c 75 65 20 69 73 20 73 74 72 69 6e 67  (value is string
23650 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
23660 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e          return n
23670 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ull;....        
23680 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 50          return P
23690 61 74 68 2e 43 6f 6d 62 69 6e 65 28 0d 0a 20 20  ath.Combine(..  
236a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
236b0 20 20 28 73 74 72 69 6e 67 29 76 61 6c 75 65 2c    (string)value,
236c0 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 22   String.Format("
236d0 76 7b 30 7d 22 2c 20 66 72 61 6d 65 77 6f 72 6b  v{0}", framework
236e0 56 65 72 73 69 6f 6e 29 29 3b 0d 0a 20 20 20 20  Version));..    
236f0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
23700 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65     }..        #e
23710 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20  ndregion....    
23720 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
23730 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23740 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23750 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23760 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
23770 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50         #region P
23780 65 72 2d 46 72 61 6d 65 77 6f 72 6b 2f 50 6c 61  er-Framework/Pla
23790 74 66 6f 72 6d 20 48 61 6e 64 6c 69 6e 67 0d 0a  tform Handling..
237a0 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
237b0 73 74 61 74 69 63 20 76 6f 69 64 20 49 6e 69 74  static void Init
237c0 69 61 6c 69 7a 65 46 72 61 6d 65 77 6f 72 6b 4c  ializeFrameworkL
237d0 69 73 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ist(..          
237e0 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65    MockRegistryKe
237f0 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20 20  y rootKey,..    
23800 20 20 20 20 20 20 20 20 43 6f 6e 66 69 67 75 72          Configur
23810 61 74 69 6f 6e 20 63 6f 6e 66 69 67 75 72 61 74  ation configurat
23820 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ion,..          
23830 20 20 72 65 66 20 46 72 61 6d 65 77 6f 72 6b 4c    ref FrameworkL
23840 69 73 74 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73  ist frameworkLis
23850 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29  t..            )
23860 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
23870 20 20 20 20 20 20 20 20 20 69 66 20 28 66 72 61           if (fra
23880 6d 65 77 6f 72 6b 4c 69 73 74 20 3d 3d 20 6e 75  meworkList == nu
23890 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
238a0 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 4c 69       frameworkLi
238b0 73 74 20 3d 20 6e 65 77 20 46 72 61 6d 65 77 6f  st = new Framewo
238c0 72 6b 4c 69 73 74 28 29 3b 0d 0a 0d 0a 20 20 20  rkList();....   
238d0 20 20 20 20 20 20 20 20 20 69 66 20 28 66 72 61           if (fra
238e0 6d 65 77 6f 72 6b 4c 69 73 74 2e 52 6f 6f 74 4b  meworkList.RootK
238f0 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ey == null)..   
23900 20 20 20 20 20 20 20 20 20 20 20 20 20 66 72 61               fra
23910 6d 65 77 6f 72 6b 4c 69 73 74 2e 52 6f 6f 74 4b  meworkList.RootK
23920 65 79 20 3d 20 72 6f 6f 74 4b 65 79 3b 0d 0a 0d  ey = rootKey;...
23930 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
23940 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23950 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23960 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23970 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23980 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
23990 69 66 20 28 66 72 61 6d 65 77 6f 72 6b 4c 69 73  if (frameworkLis
239a0 74 2e 4e 61 6d 65 73 20 3d 3d 20 6e 75 6c 6c 29  t.Names == null)
239b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
239c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
239d0 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 4e   frameworkList.N
239e0 61 6d 65 73 20 3d 20 6e 65 77 20 53 74 72 69 6e  ames = new Strin
239f0 67 4c 69 73 74 28 29 3b 0d 0a 0d 0a 20 20 20 20  gList();....    
23a00 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
23a10 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 3d  (configuration =
23a20 3d 20 6e 75 6c 6c 29 20 7c 7c 20 21 63 6f 6e 66  = null) || !conf
23a30 69 67 75 72 61 74 69 6f 6e 2e 4e 6f 44 65 73 6b  iguration.NoDesk
23a40 74 6f 70 29 0d 0a 20 20 20 20 20 20 20 20 20 20  top)..          
23a50 20 20 20 20 20 20 20 20 20 20 66 72 61 6d 65 77            framew
23a60 6f 72 6b 4c 69 73 74 2e 4e 61 6d 65 73 2e 41 64  orkList.Names.Ad
23a70 64 28 22 2e 4e 45 54 46 72 61 6d 65 77 6f 72 6b  d(".NETFramework
23a80 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ");....         
23a90 20 20 20 20 20 20 20 69 66 20 28 28 63 6f 6e 66         if ((conf
23aa0 69 67 75 72 61 74 69 6f 6e 20 3d 3d 20 6e 75 6c  iguration == nul
23ab0 6c 29 20 7c 7c 20 21 63 6f 6e 66 69 67 75 72 61  l) || !configura
23ac0 74 69 6f 6e 2e 4e 6f 43 6f 6d 70 61 63 74 29 0d  tion.NoCompact).
23ad0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
23ae0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
23af0 20 20 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72          framewor
23b00 6b 4c 69 73 74 2e 4e 61 6d 65 73 2e 41 64 64 28  kList.Names.Add(
23b10 22 2e 4e 45 54 43 6f 6d 70 61 63 74 46 72 61 6d  ".NETCompactFram
23b20 65 77 6f 72 6b 22 29 3b 0d 0a 20 20 20 20 20 20  ework");..      
23b30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 72                fr
23b40 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 4e 61 6d 65  ameworkList.Name
23b50 73 2e 41 64 64 28 22 2e 4e 45 54 43 6f 6d 70 61  s.Add(".NETCompa
23b60 63 74 46 72 61 6d 65 77 6f 72 6b 22 29 3b 0d 0a  ctFramework");..
23b70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23b80 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73      frameworkLis
23b90 74 2e 4e 61 6d 65 73 2e 41 64 64 28 22 2e 4e 45  t.Names.Add(".NE
23ba0 54 43 6f 6d 70 61 63 74 46 72 61 6d 65 77 6f 72  TCompactFramewor
23bb0 6b 22 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  k");..          
23bc0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
23bd0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
23be0 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
23bf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23c00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23c10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23c20 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
23c30 20 20 20 20 20 20 20 20 20 69 66 20 28 66 72 61           if (fra
23c40 6d 65 77 6f 72 6b 4c 69 73 74 2e 56 65 72 73 69  meworkList.Versi
23c50 6f 6e 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  ons == null)..  
23c60 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
23c70 20 20 20 20 20 20 20 20 20 20 20 20 20 66 72 61               fra
23c80 6d 65 77 6f 72 6b 4c 69 73 74 2e 56 65 72 73 69  meworkList.Versi
23c90 6f 6e 73 20 3d 20 6e 65 77 20 56 65 72 73 69 6f  ons = new Versio
23ca0 6e 4d 61 70 28 29 3b 0d 0a 0d 0a 20 20 20 20 20  nMap();....     
23cb0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 28             if ((
23cc0 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 3d 3d  configuration ==
23cd0 20 6e 75 6c 6c 29 20 7c 7c 20 21 63 6f 6e 66 69   null) || !confi
23ce0 67 75 72 61 74 69 6f 6e 2e 4e 6f 44 65 73 6b 74  guration.NoDeskt
23cf0 6f 70 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  op)..           
23d00 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
23d10 20 20 20 20 20 20 20 20 20 20 20 20 56 65 72 73              Vers
23d20 69 6f 6e 4c 69 73 74 20 64 65 73 6b 74 6f 70 56  ionList desktopV
23d30 65 72 73 69 6f 6e 4c 69 73 74 20 3d 20 6e 65 77  ersionList = new
23d40 20 56 65 72 73 69 6f 6e 4c 69 73 74 28 29 3b 0d   VersionList();.
23d50 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
23d60 20 20 20 20 20 20 20 69 66 20 28 28 63 6f 6e 66         if ((conf
23d70 69 67 75 72 61 74 69 6f 6e 20 3d 3d 20 6e 75 6c  iguration == nul
23d80 6c 29 20 7c 7c 20 21 63 6f 6e 66 69 67 75 72 61  l) || !configura
23d90 74 69 6f 6e 2e 4e 6f 4e 65 74 46 78 32 30 29 0d  tion.NoNetFx20).
23da0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
23db0 20 20 20 20 20 20 20 20 20 64 65 73 6b 74 6f 70           desktop
23dc0 56 65 72 73 69 6f 6e 4c 69 73 74 2e 41 64 64 28  VersionList.Add(
23dd0 6e 65 77 20 56 65 72 73 69 6f 6e 28 32 2c 20 30  new Version(2, 0
23de0 2c 20 35 30 37 32 37 29 29 3b 0d 0a 0d 0a 20 20  , 50727));....  
23df0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23e00 20 20 69 66 20 28 28 63 6f 6e 66 69 67 75 72 61    if ((configura
23e10 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c  tion == null) ||
23e20 20 21 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e   !configuration.
23e30 4e 6f 4e 65 74 46 78 34 30 29 0d 0a 20 20 20 20  NoNetFx40)..    
23e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23e50 20 20 20 20 64 65 73 6b 74 6f 70 56 65 72 73 69      desktopVersi
23e60 6f 6e 4c 69 73 74 2e 41 64 64 28 6e 65 77 20 56  onList.Add(new V
23e70 65 72 73 69 6f 6e 28 34 2c 20 30 2c 20 33 30 33  ersion(4, 0, 303
23e80 31 39 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  19));....       
23e90 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
23ea0 28 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20  ((configuration 
23eb0 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20 21 63 6f 6e  == null) || !con
23ec0 66 69 67 75 72 61 74 69 6f 6e 2e 4e 6f 4e 65 74  figuration.NoNet
23ed0 46 78 34 35 29 0d 0a 20 20 20 20 20 20 20 20 20  Fx45)..         
23ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
23ef0 65 73 6b 74 6f 70 56 65 72 73 69 6f 6e 4c 69 73  esktopVersionLis
23f00 74 2e 41 64 64 28 6e 65 77 20 56 65 72 73 69 6f  t.Add(new Versio
23f10 6e 28 34 2c 20 35 2c 20 35 30 37 30 39 29 29 3b  n(4, 5, 50709));
23f20 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
23f30 20 20 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72          framewor
23f40 6b 4c 69 73 74 2e 56 65 72 73 69 6f 6e 73 2e 41  kList.Versions.A
23f50 64 64 28 22 2e 4e 45 54 46 72 61 6d 65 77 6f 72  dd(".NETFramewor
23f60 6b 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  k",..           
23f70 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65 73               des
23f80 6b 74 6f 70 56 65 72 73 69 6f 6e 4c 69 73 74 29  ktopVersionList)
23f90 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
23fa0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
23fb0 20 20 20 20 20 20 20 20 69 66 20 28 28 63 6f 6e          if ((con
23fc0 66 69 67 75 72 61 74 69 6f 6e 20 3d 3d 20 6e 75  figuration == nu
23fd0 6c 6c 29 20 7c 7c 20 21 63 6f 6e 66 69 67 75 72  ll) || !configur
23fe0 61 74 69 6f 6e 2e 4e 6f 43 6f 6d 70 61 63 74 29  ation.NoCompact)
23ff0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
24000 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
24010 20 20 20 20 20 20 20 20 20 66 72 61 6d 65 77 6f           framewo
24020 72 6b 4c 69 73 74 2e 56 65 72 73 69 6f 6e 73 2e  rkList.Versions.
24030 41 64 64 28 22 2e 4e 45 54 43 6f 6d 70 61 63 74  Add(".NETCompact
24040 46 72 61 6d 65 77 6f 72 6b 22 2c 0d 0a 20 20 20  Framework",..   
24050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24060 20 20 20 20 20 6e 65 77 20 56 65 72 73 69 6f 6e       new Version
24070 4c 69 73 74 28 6e 65 77 20 56 65 72 73 69 6f 6e  List(new Version
24080 5b 5d 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  [] {..          
24090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 65                ne
240a0 77 20 56 65 72 73 69 6f 6e 28 32 2c 20 30 2c 20  w Version(2, 0, 
240b0 30 2c 20 30 29 2c 20 6e 65 77 20 56 65 72 73 69  0, 0), new Versi
240c0 6f 6e 28 33 2c 20 35 2c 20 30 2c 20 30 29 0d 0a  on(3, 5, 0, 0)..
240d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
240e0 20 20 20 20 7d 29 29 3b 0d 0a 20 20 20 20 20 20      }));..      
240f0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
24100 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
24110 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
24120 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24130 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24140 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24150 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
24160 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
24170 28 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 50  (frameworkList.P
24180 6c 61 74 66 6f 72 6d 4e 61 6d 65 73 20 3d 3d 20  latformNames == 
24190 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
241a0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
241b0 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 4c        frameworkL
241c0 69 73 74 2e 50 6c 61 74 66 6f 72 6d 4e 61 6d 65  ist.PlatformName
241d0 73 20 3d 20 6e 65 77 20 53 74 72 69 6e 67 4c 69  s = new StringLi
241e0 73 74 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  st();....       
241f0 20 20 20 20 20 20 20 20 20 69 66 20 28 28 63 6f           if ((co
24200 6e 66 69 67 75 72 61 74 69 6f 6e 20 3d 3d 20 6e  nfiguration == n
24210 75 6c 6c 29 20 7c 7c 20 21 63 6f 6e 66 69 67 75  ull) || !configu
24220 72 61 74 69 6f 6e 2e 4e 6f 44 65 73 6b 74 6f 70  ration.NoDesktop
24230 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
24240 20 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b         framework
24250 4c 69 73 74 2e 50 6c 61 74 66 6f 72 6d 4e 61 6d  List.PlatformNam
24260 65 73 2e 41 64 64 28 6e 75 6c 6c 29 3b 0d 0a 0d  es.Add(null);...
24270 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
24280 20 69 66 20 28 28 63 6f 6e 66 69 67 75 72 61 74   if ((configurat
24290 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20  ion == null) || 
242a0 21 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 4e  !configuration.N
242b0 6f 43 6f 6d 70 61 63 74 29 0d 0a 20 20 20 20 20  oCompact)..     
242c0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
242d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
242e0 20 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e    frameworkList.
242f0 50 6c 61 74 66 6f 72 6d 4e 61 6d 65 73 2e 41 64  PlatformNames.Ad
24300 64 28 22 50 6f 63 6b 65 74 50 43 22 29 3b 0d 0a  d("PocketPC");..
24310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24320 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73      frameworkLis
24330 74 2e 50 6c 61 74 66 6f 72 6d 4e 61 6d 65 73 2e  t.PlatformNames.
24340 41 64 64 28 22 53 6d 61 72 74 70 68 6f 6e 65 22  Add("Smartphone"
24350 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
24360 20 20 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72          framewor
24370 6b 4c 69 73 74 2e 50 6c 61 74 66 6f 72 6d 4e 61  kList.PlatformNa
24380 6d 65 73 2e 41 64 64 28 22 57 69 6e 64 6f 77 73  mes.Add("Windows
24390 43 45 22 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  CE");..         
243a0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
243b0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
243c0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f   }....        //
243d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
243e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
243f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24400 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24410 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
24420 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
24430 62 6f 6f 6c 20 48 61 76 65 46 72 61 6d 65 77 6f  bool HaveFramewo
24440 72 6b 44 69 72 65 63 74 6f 72 79 28 0d 0a 20 20  rkDirectory(..  
24450 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65            MockRe
24460 67 69 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65  gistryKey rootKe
24470 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y,..            
24480 73 74 72 69 6e 67 20 66 72 61 6d 65 77 6f 72 6b  string framework
24490 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  Name,..         
244a0 20 20 20 56 65 72 73 69 6f 6e 20 66 72 61 6d 65     Version frame
244b0 77 6f 72 6b 56 65 72 73 69 6f 6e 2c 0d 0a 20 20  workVersion,..  
244c0 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
244d0 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 2c 0d 0a   platformName,..
244e0 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
244f0 20 77 6f 77 36 34 2c 0d 0a 20 20 20 20 20 20 20   wow64,..       
24500 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66       bool whatIf
24510 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  ,..            b
24520 6f 6f 6c 20 76 65 72 62 6f 73 65 0d 0a 20 20 20  ool verbose..   
24530 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
24540 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
24550 20 20 20 73 74 72 69 6e 67 20 6b 65 79 4e 61 6d     string keyNam
24560 65 20 3d 20 47 65 74 46 72 61 6d 65 77 6f 72 6b  e = GetFramework
24570 4b 65 79 4e 61 6d 65 28 0d 0a 20 20 20 20 20 20  KeyName(..      
24580 20 20 20 20 20 20 20 20 20 20 66 72 61 6d 65 77            framew
24590 6f 72 6b 4e 61 6d 65 2c 20 66 72 61 6d 65 77 6f  orkName, framewo
245a0 72 6b 56 65 72 73 69 6f 6e 2c 20 70 6c 61 74 66  rkVersion, platf
245b0 6f 72 6d 4e 61 6d 65 2c 20 77 6f 77 36 34 29 3b  ormName, wow64);
245c0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
245d0 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73  using (MockRegis
245e0 74 72 79 4b 65 79 20 6b 65 79 20 3d 20 52 65 67  tryKey key = Reg
245f0 69 73 74 72 79 48 65 6c 70 65 72 2e 4f 70 65 6e  istryHelper.Open
24600 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20  SubKey(..       
24610 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f               roo
24620 74 4b 65 79 2c 20 6b 65 79 4e 61 6d 65 2c 20 66  tKey, keyName, f
24630 61 6c 73 65 2c 20 77 68 61 74 49 66 2c 20 76 65  alse, whatIf, ve
24640 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 20  rbose))..       
24650 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
24660 20 20 20 20 20 20 20 20 69 66 20 28 6b 65 79 20          if (key 
24670 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
24680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
24690 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20  turn false;.... 
246a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
246b0 66 20 28 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 20  f (platformName 
246c0 21 3d 20 6e 75 6c 6c 29 20 2f 2f 20 4e 4f 54 45  != null) // NOTE
246d0 3a 20 53 6b 69 70 20 6e 6f 6e 2d 64 65 73 6b 74  : Skip non-deskt
246e0 6f 70 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  op...           
246f0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
24700 74 72 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  true;....       
24710 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
24720 64 69 72 65 63 74 6f 72 79 20 3d 20 47 65 74 46  directory = GetF
24730 72 61 6d 65 77 6f 72 6b 44 69 72 65 63 74 6f 72  rameworkDirector
24740 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y(..            
24750 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c          rootKey,
24760 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f   frameworkVersio
24770 6e 2c 20 77 6f 77 36 34 2c 20 77 68 61 74 49 66  n, wow64, whatIf
24780 2c 20 76 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20  , verbose);.... 
24790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
247a0 66 20 28 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c  f (String.IsNull
247b0 4f 72 45 6d 70 74 79 28 64 69 72 65 63 74 6f 72  OrEmpty(director
247c0 79 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  y))..           
247d0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
247e0 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  false;....      
247f0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21 44            if (!D
24800 69 72 65 63 74 6f 72 79 2e 45 78 69 73 74 73 28  irectory.Exists(
24810 64 69 72 65 63 74 6f 72 79 29 29 0d 0a 20 20 20  directory))..   
24820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24830 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
24840 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
24850 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67    TraceOps.Debug
24860 41 6e 64 54 72 61 63 65 28 54 72 61 63 65 50 72  AndTrace(TracePr
24870 69 6f 72 69 74 79 2e 4c 6f 77 65 72 2c 0d 0a 20  iority.Lower,.. 
24880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24890 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b     debugCallback
248a0 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c  , traceCallback,
248b0 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d   String.Format(.
248c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
248d0 20 20 20 20 20 22 2e 4e 45 54 20 46 72 61 6d 65       ".NET Frame
248e0 77 6f 72 6b 20 7b 30 7d 20 66 6f 75 6e 64 20 76  work {0} found v
248f0 69 61 20 64 69 72 65 63 74 6f 72 79 20 7b 31 7d  ia directory {1}
24900 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  .",..           
24910 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70           ForDisp
24920 6c 61 79 28 66 72 61 6d 65 77 6f 72 6b 56 65 72  lay(frameworkVer
24930 73 69 6f 6e 29 2c 20 46 6f 72 44 69 73 70 6c 61  sion), ForDispla
24940 79 28 64 69 72 65 63 74 6f 72 79 29 29 2c 0d 0a  y(directory)),..
24950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24960 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72      traceCategor
24970 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
24980 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72         return tr
24990 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
249a0 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d   }..        }...
249b0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
249c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
249d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
249e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
249f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24a00 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  ....        priv
24a10 61 74 65 20 73 74 61 74 69 63 20 62 6f 6f 6c 20  ate static bool 
24a20 48 61 76 65 46 72 61 6d 65 77 6f 72 6b 52 65 67  HaveFrameworkReg
24a30 69 73 74 72 79 28 0d 0a 20 20 20 20 20 20 20 20  istry(..        
24a40 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79      MockRegistry
24a50 4b 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20  Key rootKey,..  
24a60 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
24a70 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c 0d   frameworkName,.
24a80 0a 20 20 20 20 20 20 20 20 20 20 20 20 56 65 72  .            Ver
24a90 73 69 6f 6e 20 66 72 61 6d 65 77 6f 72 6b 56 65  sion frameworkVe
24aa0 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20  rsion,..        
24ab0 20 20 20 20 73 74 72 69 6e 67 20 70 6c 61 74 66      string platf
24ac0 6f 72 6d 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20  ormName,..      
24ad0 20 20 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34        bool wow64
24ae0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  ,..            b
24af0 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20  ool whatIf,..   
24b00 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65           bool ve
24b10 72 62 6f 73 65 0d 0a 20 20 20 20 20 20 20 20 20  rbose..         
24b20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d     )..        {.
24b30 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72  .            str
24b40 69 6e 67 20 6b 65 79 4e 61 6d 65 20 3d 20 47 65  ing keyName = Ge
24b50 74 46 72 61 6d 65 77 6f 72 6b 4b 65 79 4e 61 6d  tFrameworkKeyNam
24b60 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
24b70 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d      frameworkNam
24b80 65 2c 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73  e, frameworkVers
24b90 69 6f 6e 2c 20 70 6c 61 74 66 6f 72 6d 4e 61 6d  ion, platformNam
24ba0 65 2c 20 77 6f 77 36 34 29 3b 0d 0a 0d 0a 20 20  e, wow64);....  
24bb0 20 20 20 20 20 20 20 20 20 20 75 73 69 6e 67 20            using 
24bc0 28 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79  (MockRegistryKey
24bd0 20 6b 65 79 20 3d 20 52 65 67 69 73 74 72 79 48   key = RegistryH
24be0 65 6c 70 65 72 2e 4f 70 65 6e 53 75 62 4b 65 79  elper.OpenSubKey
24bf0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
24c00 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20         rootKey, 
24c10 6b 65 79 4e 61 6d 65 2c 20 66 61 6c 73 65 2c 20  keyName, false, 
24c20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29  whatIf, verbose)
24c30 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
24c40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
24c50 20 20 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75 6c    if (key == nul
24c60 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
24c70 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
24c80 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  alse;....       
24c90 20 20 20 20 20 20 20 20 20 69 66 20 28 70 6c 61           if (pla
24ca0 74 66 6f 72 6d 4e 61 6d 65 20 21 3d 20 6e 75 6c  tformName != nul
24cb0 6c 29 20 2f 2f 20 4e 4f 54 45 3a 20 53 6b 69 70  l) // NOTE: Skip
24cc0 20 6e 6f 6e 2d 64 65 73 6b 74 6f 70 2e 0d 0a 20   non-desktop... 
24cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24ce0 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d     return true;.
24cf0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
24d00 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75     TraceOps.Debu
24d10 67 41 6e 64 54 72 61 63 65 28 54 72 61 63 65 50  gAndTrace(TraceP
24d20 72 69 6f 72 69 74 79 2e 4c 6f 77 65 72 2c 0d 0a  riority.Lower,..
24d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24d40 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63      debugCallbac
24d50 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b  k, traceCallback
24d60 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  , String.Format(
24d70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
24d80 20 20 20 20 20 20 22 2e 4e 45 54 20 46 72 61 6d        ".NET Fram
24d90 65 77 6f 72 6b 20 7b 30 7d 20 66 6f 75 6e 64 20  ework {0} found 
24da0 76 69 61 20 72 65 67 69 73 74 72 79 20 7b 31 7d  via registry {1}
24db0 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  .",..           
24dc0 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70           ForDisp
24dd0 6c 61 79 28 66 72 61 6d 65 77 6f 72 6b 56 65 72  lay(frameworkVer
24de0 73 69 6f 6e 29 2c 20 46 6f 72 44 69 73 70 6c 61  sion), ForDispla
24df0 79 28 6b 65 79 4e 61 6d 65 29 29 2c 0d 0a 20 20  y(keyName)),..  
24e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24e10 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29    traceCategory)
24e20 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
24e30 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65       return true
24e40 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
24e50 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
24e60 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
24e70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24e80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24e90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24ea0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
24eb0 0d 0a 20 20 20 20 20 20 20 20 5b 4d 65 74 68 6f  ..        [Metho
24ec0 64 49 6d 70 6c 28 4d 65 74 68 6f 64 49 6d 70 6c  dImpl(MethodImpl
24ed0 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e 69  Options.NoInlini
24ee0 6e 67 29 5d 0d 0a 20 20 20 20 20 20 20 20 70 72  ng)]..        pr
24ef0 69 76 61 74 65 20 73 74 61 74 69 63 20 62 6f 6f  ivate static boo
24f00 6c 20 46 6f 72 45 61 63 68 46 72 61 6d 65 77 6f  l ForEachFramewo
24f10 72 6b 43 6f 6e 66 69 67 28 0d 0a 20 20 20 20 20  rkConfig(..     
24f20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65 67 69 73         MockRegis
24f30 74 72 79 20 72 65 67 69 73 74 72 79 2c 0d 0a 20  try registry,.. 
24f40 20 20 20 20 20 20 20 20 20 20 20 46 72 61 6d 65             Frame
24f50 77 6f 72 6b 4c 69 73 74 20 66 72 61 6d 65 77 6f  workList framewo
24f60 72 6b 4c 69 73 74 2c 0d 0a 20 20 20 20 20 20 20  rkList,..       
24f70 20 20 20 20 20 46 72 61 6d 65 77 6f 72 6b 43 6f       FrameworkCo
24f80 6e 66 69 67 43 61 6c 6c 62 61 63 6b 20 63 61 6c  nfigCallback cal
24f90 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20  lback,..        
24fa0 20 20 20 20 73 74 72 69 6e 67 20 76 65 72 73 69      string versi
24fb0 6f 6e 2c 20 2f 2a 20 4e 4f 54 45 3a 20 4f 70 74  on, /* NOTE: Opt
24fc0 69 6f 6e 61 6c 2e 20 2a 2f 0d 0a 20 20 20 20 20  ional. */..     
24fd0 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 69 6e         string in
24fe0 76 61 72 69 61 6e 74 2c 0d 0a 20 20 20 20 20 20  variant,..      
24ff0 20 20 20 20 20 20 73 74 72 69 6e 67 20 6e 61 6d        string nam
25000 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
25010 73 74 72 69 6e 67 20 64 65 73 63 72 69 70 74 69  string descripti
25020 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  on,..           
25030 20 73 74 72 69 6e 67 20 74 79 70 65 4e 61 6d 65   string typeName
25040 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 41  ,..            A
25050 73 73 65 6d 62 6c 79 4e 61 6d 65 20 61 73 73 65  ssemblyName asse
25060 6d 62 6c 79 4e 61 6d 65 2c 0d 0a 20 20 20 20 20  mblyName,..     
25070 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 63 6c         object cl
25080 69 65 6e 74 44 61 74 61 2c 0d 0a 20 20 20 20 20  ientData,..     
25090 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36         bool wow6
250a0 34 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  4,..            
250b0 62 6f 6f 6c 20 74 68 72 6f 77 4f 6e 4d 69 73 73  bool throwOnMiss
250c0 69 6e 67 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ing,..          
250d0 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a    bool whatIf,..
250e0 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
250f0 20 76 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20   verbose,..     
25100 20 20 20 20 20 20 20 72 65 66 20 62 6f 6f 6c 20         ref bool 
25110 73 61 76 65 64 2c 0d 0a 20 20 20 20 20 20 20 20  saved,..        
25120 20 20 20 20 72 65 66 20 73 74 72 69 6e 67 20 65      ref string e
25130 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20  rror..          
25140 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a    )..        {..
25150 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
25160 72 65 67 69 73 74 72 79 20 3d 3d 20 6e 75 6c 6c  registry == null
25170 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
25180 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
25190 20 20 65 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c    error = "inval
251a0 69 64 20 72 65 67 69 73 74 72 79 22 3b 0d 0a 20  id registry";.. 
251b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
251c0 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20  eturn false;..  
251d0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
251e0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 66             if (f
251f0 72 61 6d 65 77 6f 72 6b 4c 69 73 74 20 3d 3d 20  rameworkList == 
25200 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
25210 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
25220 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 69        error = "i
25230 6e 76 61 6c 69 64 20 66 72 61 6d 65 77 6f 72 6b  nvalid framework
25240 20 6c 69 73 74 22 3b 0d 0a 20 20 20 20 20 20 20   list";..       
25250 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
25260 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20  false;..        
25270 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
25280 20 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72       MockRegistr
25290 79 4b 65 79 20 72 6f 6f 74 4b 65 79 20 3d 20 66  yKey rootKey = f
252a0 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 52 6f 6f  rameworkList.Roo
252b0 74 4b 65 79 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  tKey;....       
252c0 20 20 20 20 20 69 66 20 28 72 6f 6f 74 4b 65 79       if (rootKey
252d0 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
252e0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
252f0 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20            error 
25300 3d 20 22 69 6e 76 61 6c 69 64 20 72 6f 6f 74 20  = "invalid root 
25310 6b 65 79 22 3b 0d 0a 20 20 20 20 20 20 20 20 20  key";..         
25320 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
25330 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lse;..          
25340 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
25350 20 20 20 69 66 20 28 21 4f 62 6a 65 63 74 2e 52     if (!Object.R
25360 65 66 65 72 65 6e 63 65 45 71 75 61 6c 73 28 72  eferenceEquals(r
25370 6f 6f 74 4b 65 79 2c 20 72 65 67 69 73 74 72 79  ootKey, registry
25380 2e 43 75 72 72 65 6e 74 55 73 65 72 29 20 26 26  .CurrentUser) &&
25390 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
253a0 20 20 21 4f 62 6a 65 63 74 2e 52 65 66 65 72 65    !Object.Refere
253b0 6e 63 65 45 71 75 61 6c 73 28 72 6f 6f 74 4b 65  nceEquals(rootKe
253c0 79 2c 20 72 65 67 69 73 74 72 79 2e 4c 6f 63 61  y, registry.Loca
253d0 6c 4d 61 63 68 69 6e 65 29 29 0d 0a 20 20 20 20  lMachine))..    
253e0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
253f0 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72             error
25400 20 3d 20 22 72 6f 6f 74 20 6b 65 79 20 6d 75 73   = "root key mus
25410 74 20 62 65 20 70 65 72 2d 75 73 65 72 20 6f 72  t be per-user or
25420 20 70 65 72 2d 6d 61 63 68 69 6e 65 22 3b 0d 0a   per-machine";..
25430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25440 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20  return false;.. 
25450 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
25460 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
25470 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 4e 61  frameworkList.Na
25480 6d 65 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  mes == null)..  
25490 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
254a0 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
254b0 6f 72 20 3d 20 22 6e 6f 20 66 72 61 6d 65 77 6f  or = "no framewo
254c0 72 6b 20 6e 61 6d 65 73 20 66 6f 75 6e 64 22 3b  rk names found";
254d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
254e0 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
254f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
25500 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
25510 20 28 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e   (frameworkList.
25520 56 65 72 73 69 6f 6e 73 20 3d 3d 20 6e 75 6c 6c  Versions == null
25530 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
25540 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
25550 20 20 65 72 72 6f 72 20 3d 20 22 6e 6f 20 66 72    error = "no fr
25560 61 6d 65 77 6f 72 6b 20 76 65 72 73 69 6f 6e 73  amework versions
25570 20 66 6f 75 6e 64 22 3b 0d 0a 20 20 20 20 20 20   found";..      
25580 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
25590 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20   false;..       
255a0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
255b0 20 20 20 20 20 20 69 66 20 28 66 72 61 6d 65 77        if (framew
255c0 6f 72 6b 4c 69 73 74 2e 50 6c 61 74 66 6f 72 6d  orkList.Platform
255d0 4e 61 6d 65 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  Names == null)..
255e0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
255f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
25600 72 72 6f 72 20 3d 20 22 6e 6f 20 70 6c 61 74 66  rror = "no platf
25610 6f 72 6d 20 6e 61 6d 65 73 20 66 6f 75 6e 64 22  orm names found"
25620 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
25630 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
25640 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
25650 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
25660 66 20 28 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74  f (frameworkList
25670 2e 4e 61 6d 65 73 2e 43 6f 75 6e 74 20 21 3d 20  .Names.Count != 
25680 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 50 6c  frameworkList.Pl
25690 61 74 66 6f 72 6d 4e 61 6d 65 73 2e 43 6f 75 6e  atformNames.Coun
256a0 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t)..            
256b0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
256c0 20 20 20 65 72 72 6f 72 20 3d 20 53 74 72 69 6e     error = Strin
256d0 67 2e 46 6f 72 6d 61 74 28 22 66 72 61 6d 65 77  g.Format("framew
256e0 6f 72 6b 20 6e 61 6d 65 20 63 6f 75 6e 74 20 7b  ork name count {
256f0 30 7d 20 64 6f 65 73 20 6e 6f 74 20 22 20 2b 0d  0} does not " +.
25700 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
25710 20 20 20 20 20 22 6d 61 74 63 68 20 70 6c 61 74       "match plat
25720 66 6f 72 6d 20 6e 61 6d 65 20 63 6f 75 6e 74 20  form name count 
25730 7b 31 7d 22 2c 20 66 72 61 6d 65 77 6f 72 6b 4c  {1}", frameworkL
25740 69 73 74 2e 4e 61 6d 65 73 2e 43 6f 75 6e 74 2c  ist.Names.Count,
25750 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
25760 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 4c        frameworkL
25770 69 73 74 2e 50 6c 61 74 66 6f 72 6d 4e 61 6d 65  ist.PlatformName
25780 73 2e 43 6f 75 6e 74 29 3b 0d 0a 0d 0a 20 20 20  s.Count);....   
25790 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
257a0 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20  urn false;..    
257b0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
257c0 20 20 20 20 20 20 20 20 20 66 6f 72 20 28 69 6e           for (in
257d0 74 20 69 6e 64 65 78 20 3d 20 30 3b 20 69 6e 64  t index = 0; ind
257e0 65 78 20 3c 20 66 72 61 6d 65 77 6f 72 6b 4c 69  ex < frameworkLi
257f0 73 74 2e 4e 61 6d 65 73 2e 43 6f 75 6e 74 3b 20  st.Names.Count; 
25800 69 6e 64 65 78 2b 2b 29 0d 0a 20 20 20 20 20 20  index++)..      
25810 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
25820 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
25830 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
25840 4e 4f 54 45 3a 20 47 72 61 62 20 74 68 65 20 6e  NOTE: Grab the n
25850 61 6d 65 20 6f 66 20 74 68 65 20 66 72 61 6d 65  ame of the frame
25860 77 6f 72 6b 20 28 65 2e 67 2e 20 22 2e 4e 45 54  work (e.g. ".NET
25870 46 72 61 6d 65 77 6f 72 6b 22 29 0d 0a 20 20 20  Framework")..   
25880 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
25890 20 20 20 20 20 20 61 6e 64 20 74 68 65 20 6e 61        and the na
258a0 6d 65 20 6f 66 20 74 68 65 20 70 6c 61 74 66 6f  me of the platfo
258b0 72 6d 20 28 65 2e 67 2e 20 22 57 69 6e 64 6f 77  rm (e.g. "Window
258c0 73 43 45 22 29 2e 0d 0a 20 20 20 20 20 20 20 20  sCE")...        
258d0 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
258e0 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
258f0 6e 67 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65  ng frameworkName
25900 20 3d 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74   = frameworkList
25910 2e 4e 61 6d 65 73 5b 69 6e 64 65 78 5d 3b 0d 0a  .Names[index];..
25920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25930 73 74 72 69 6e 67 20 70 6c 61 74 66 6f 72 6d 4e  string platformN
25940 61 6d 65 20 3d 20 66 72 61 6d 65 77 6f 72 6b 4c  ame = frameworkL
25950 69 73 74 2e 50 6c 61 74 66 6f 72 6d 4e 61 6d 65  ist.PlatformName
25960 73 5b 69 6e 64 65 78 5d 3b 0d 0a 0d 0a 20 20 20  s[index];....   
25970 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
25980 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
25990 20 2f 2f 20 4e 4f 54 45 3a 20 53 6b 69 70 20 61   // NOTE: Skip a
259a0 6c 6c 20 6e 6f 6e 2d 64 65 73 6b 74 6f 70 20 66  ll non-desktop f
259b0 72 61 6d 65 77 6f 72 6b 73 20 28 69 2e 65 2e 20  rameworks (i.e. 
259c0 69 66 20 74 68 65 20 70 6c 61 74 66 6f 72 6d 0d  if the platform.
259d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
259e0 20 2f 2f 20 20 20 20 20 20 20 6e 61 6d 65 20 69   //       name i
259f0 73 20 6e 6f 74 20 6e 75 6c 6c 29 2e 0d 0a 20 20  s not null)...  
25a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
25a10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
25a20 20 20 69 66 20 28 70 6c 61 74 66 6f 72 6d 4e 61    if (platformNa
25a30 6d 65 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  me != null)..   
25a40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25a50 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 0d 0a 20 20   continue;....  
25a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
25a70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
25a80 20 20 2f 2f 20 4e 4f 54 45 3a 20 47 72 61 62 20    // NOTE: Grab 
25a90 74 68 65 20 73 75 70 70 6f 72 74 65 64 20 76 65  the supported ve
25aa0 72 73 69 6f 6e 73 20 6f 66 20 74 68 69 73 20 70  rsions of this p
25ab0 61 72 74 69 63 75 6c 61 72 0d 0a 20 20 20 20 20  articular..     
25ac0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
25ad0 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 2e 0d 0a      framework...
25ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25af0 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
25b00 20 20 20 20 56 65 72 73 69 6f 6e 4c 69 73 74 20      VersionList 
25b10 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e  frameworkVersion
25b20 4c 69 73 74 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  List;....       
25b30 20 20 20 20 20 20 20 20 20 69 66 20 28 76 65 72           if (ver
25b40 73 69 6f 6e 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20  sion != null).. 
25b50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
25b60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
25b70 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
25b80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
25b90 20 4e 4f 54 45 3a 20 4d 61 6e 75 61 6c 20 6f 76   NOTE: Manual ov
25ba0 65 72 72 69 64 65 20 6f 66 20 74 68 65 20 2a 4f  erride of the *O
25bb0 4e 45 2a 20 66 72 61 6d 65 77 6f 72 6b 20 76 65  NE* framework ve
25bc0 72 73 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20 20  rsion..         
25bd0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
25be0 20 20 20 20 74 6f 20 70 72 6f 63 65 73 73 2e 0d      to process..
25bf0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
25c00 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
25c10 20 20 20 20 20 20 20 20 20 20 20 20 20 66 72 61               fra
25c20 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 4c 69 73  meworkVersionLis
25c30 74 20 3d 20 6e 65 77 20 56 65 72 73 69 6f 6e 4c  t = new VersionL
25c40 69 73 74 28 29 3b 0d 0a 20 20 20 20 20 20 20 20  ist();..        
25c50 20 20 20 20 20 20 20 20 20 20 20 20 66 72 61 6d              fram
25c60 65 77 6f 72 6b 56 65 72 73 69 6f 6e 4c 69 73 74  eworkVersionList
25c70 2e 41 64 64 28 6e 65 77 20 56 65 72 73 69 6f 6e  .Add(new Version
25c80 28 76 65 72 73 69 6f 6e 29 29 3b 0d 0a 20 20 20  (version));..   
25c90 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
25ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25cb0 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20  else..          
25cc0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
25cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
25ce0 28 21 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e  (!frameworkList.
25cf0 56 65 72 73 69 6f 6e 73 2e 54 72 79 47 65 74 56  Versions.TryGetV
25d00 61 6c 75 65 28 0d 0a 20 20 20 20 20 20 20 20 20  alue(..         
25d10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25d20 20 20 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65     frameworkName
25d30 2c 20 6f 75 74 20 66 72 61 6d 65 77 6f 72 6b 56  , out frameworkV
25d40 65 72 73 69 6f 6e 4c 69 73 74 29 20 7c 7c 0d 0a  ersionList) ||..
25d50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25d60 20 20 20 20 20 20 20 20 28 66 72 61 6d 65 77 6f          (framewo
25d70 72 6b 56 65 72 73 69 6f 6e 4c 69 73 74 20 3d 3d  rkVersionList ==
25d80 20 6e 75 6c 6c 29 29 0d 0a 20 20 20 20 20 20 20   null))..       
25d90 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
25da0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25db0 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65          continue
25dc0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
25dd0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
25de0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
25df0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66                 f
25e00 6f 72 65 61 63 68 20 28 56 65 72 73 69 6f 6e 20  oreach (Version 
25e10 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e  frameworkVersion
25e20 20 69 6e 20 66 72 61 6d 65 77 6f 72 6b 56 65 72   in frameworkVer
25e30 73 69 6f 6e 4c 69 73 74 29 0d 0a 20 20 20 20 20  sionList)..     
25e40 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
25e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25e60 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67    TraceOps.Debug
25e70 41 6e 64 54 72 61 63 65 28 54 72 61 63 65 50 72  AndTrace(TracePr
25e80 69 6f 72 69 74 79 2e 4c 6f 77 65 72 2c 0d 0a 20  iority.Lower,.. 
25e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25ea0 20 20 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c         debugCall
25eb0 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62  back, traceCallb
25ec0 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d  ack, String.Form
25ed0 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
25ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 66 72               "fr
25ef0 61 6d 65 77 6f 72 6b 4e 61 6d 65 20 3d 20 7b 30  ameworkName = {0
25f00 7d 2c 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73  }, frameworkVers
25f10 69 6f 6e 20 3d 20 7b 31 7d 2c 20 22 20 2b 0d 0a  ion = {1}, " +..
25f20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25f30 20 20 20 20 20 20 20 20 22 70 6c 61 74 66 6f 72          "platfor
25f40 6d 4e 61 6d 65 20 3d 20 7b 32 7d 22 2c 20 46 6f  mName = {2}", Fo
25f50 72 44 69 73 70 6c 61 79 28 66 72 61 6d 65 77 6f  rDisplay(framewo
25f60 72 6b 4e 61 6d 65 29 2c 0d 0a 20 20 20 20 20 20  rkName),..      
25f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25f80 20 20 46 6f 72 44 69 73 70 6c 61 79 28 66 72 61    ForDisplay(fra
25f90 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 29 2c 0d  meworkVersion),.
25fa0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
25fb0 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70           ForDisp
25fc0 6c 61 79 28 70 6c 61 74 66 6f 72 6d 4e 61 6d 65  lay(platformName
25fd0 29 29 2c 20 74 72 61 63 65 43 61 74 65 67 6f 72  )), traceCategor
25fe0 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
25ff0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21             if (!
26000 48 61 76 65 46 72 61 6d 65 77 6f 72 6b 44 69 72  HaveFrameworkDir
26010 65 63 74 6f 72 79 28 0d 0a 20 20 20 20 20 20 20  ectory(..       
26020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26030 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 66 72       rootKey, fr
26040 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c 20 66 72 61  ameworkName, fra
26050 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 2c 0d 0a  meworkVersion,..
26060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26070 20 20 20 20 20 20 20 20 20 20 20 20 70 6c 61 74              plat
26080 66 6f 72 6d 4e 61 6d 65 2c 20 77 6f 77 36 34 2c  formName, wow64,
26090 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65   whatIf, verbose
260a0 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
260b0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
260c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
260d0 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75     TraceOps.Debu
260e0 67 41 6e 64 54 72 61 63 65 28 54 72 61 63 65 50  gAndTrace(TraceP
260f0 72 69 6f 72 69 74 79 2e 4c 6f 77 2c 0d 0a 20 20  riority.Low,..  
26100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26110 20 20 20 20 20 20 20 20 20 20 64 65 62 75 67 43            debugC
26120 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61  allback, traceCa
26130 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20  llback,..       
26140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26150 20 20 20 20 20 22 2e 4e 45 54 20 46 72 61 6d 65       ".NET Frame
26160 77 6f 72 6b 20 64 69 72 65 63 74 6f 72 79 20 6e  work directory n
26170 6f 74 20 66 6f 75 6e 64 2c 20 73 6b 69 70 70 69  ot found, skippi
26180 6e 67 2e 2e 2e 22 2c 0d 0a 20 20 20 20 20 20 20  ng...",..       
26190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
261a0 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f       traceCatego
261b0 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
261c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
261d0 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20  continue;..     
261e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
261f0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
26200 20 20 20 20 20 20 20 20 69 66 20 28 63 61 6c 6c          if (call
26210 62 61 63 6b 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  back == null).. 
26220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26230 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b         continue;
26240 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
26250 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 64          string d
26260 69 72 65 63 74 6f 72 79 20 3d 20 47 65 74 46 72  irectory = GetFr
26270 61 6d 65 77 6f 72 6b 44 69 72 65 63 74 6f 72 79  ameworkDirectory
26280 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
26290 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b             rootK
262a0 65 79 2c 20 66 72 61 6d 65 77 6f 72 6b 56 65 72  ey, frameworkVer
262b0 73 69 6f 6e 2c 20 77 6f 77 36 34 2c 20 77 68 61  sion, wow64, wha
262c0 74 49 66 2c 20 76 65 72 62 6f 73 65 29 3b 0d 0a  tIf, verbose);..
262d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
262e0 20 20 20 20 20 20 69 66 20 28 53 74 72 69 6e 67        if (String
262f0 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 64  .IsNullOrEmpty(d
26300 69 72 65 63 74 6f 72 79 29 29 0d 0a 20 20 20 20  irectory))..    
26310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26320 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
26330 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
26340 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63  Ops.DebugAndTrac
26350 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e  e(TracePriority.
26360 4c 6f 77 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  Low,..          
26370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26380 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c    debugCallback,
26390 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20   traceCallback, 
263a0 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
263b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
263c0 20 20 20 20 20 20 20 20 20 20 20 20 22 2e 4e 45              ".NE
263d0 54 20 46 72 61 6d 65 77 6f 72 6b 20 7b 30 7d 20  T Framework {0} 
263e0 64 69 72 65 63 74 6f 72 79 20 69 73 20 69 6e 76  directory is inv
263f0 61 6c 69 64 2c 20 22 20 2b 0d 0a 20 20 20 20 20  alid, " +..     
26400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26410 20 20 20 20 20 20 20 22 73 6b 69 70 70 69 6e 67         "skipping
26420 2e 2e 2e 22 2c 20 46 6f 72 44 69 73 70 6c 61 79  ...", ForDisplay
26430 28 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f  (frameworkVersio
26440 6e 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  n)),..          
26450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26460 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29    traceCategory)
26470 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
26480 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
26490 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20  tinue;..        
264a0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
264b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
264c0 20 20 20 20 20 64 69 72 65 63 74 6f 72 79 20 3d       directory =
264d0 20 50 61 74 68 2e 43 6f 6d 62 69 6e 65 28 64 69   Path.Combine(di
264e0 72 65 63 74 6f 72 79 2c 20 22 43 6f 6e 66 69 67  rectory, "Config
264f0 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ");....         
26500 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21             if (!
26510 44 69 72 65 63 74 6f 72 79 2e 45 78 69 73 74 73  Directory.Exists
26520 28 64 69 72 65 63 74 6f 72 79 29 29 0d 0a 20 20  (directory))..  
26530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26540 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
26550 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61               Tra
26560 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72  ceOps.DebugAndTr
26570 61 63 65 28 54 72 61 63 65 50 72 69 6f 72 69 74  ace(TracePriorit
26580 79 2e 4c 6f 77 2c 0d 0a 20 20 20 20 20 20 20 20  y.Low,..        
26590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
265a0 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63      debugCallbac
265b0 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b  k, traceCallback
265c0 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  , String.Format(
265d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
265e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2e                ".
265f0 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b 20 7b 30  NET Framework {0
26600 7d 20 64 69 72 65 63 74 6f 72 79 20 7b 31 7d 20  } directory {1} 
26610 64 6f 65 73 20 6e 6f 74 20 22 20 2b 0d 0a 20 20  does not " +..  
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 20 20 20 22 65 78 69 73 74            "exist
26640 2c 20 73 6b 69 70 70 69 6e 67 2e 2e 2e 22 2c 20  , skipping...", 
26650 46 6f 72 44 69 73 70 6c 61 79 28 66 72 61 6d 65  ForDisplay(frame
26660 77 6f 72 6b 56 65 72 73 69 6f 6e 29 2c 0d 0a 20  workVersion),.. 
26670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26680 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69             ForDi
26690 73 70 6c 61 79 28 64 69 72 65 63 74 6f 72 79 29  splay(directory)
266a0 29 2c 20 74 72 61 63 65 43 61 74 65 67 6f 72 79  ), traceCategory
266b0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
266c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
266d0 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20  ntinue;..       
266e0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
266f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
26700 20 20 20 20 20 20 73 74 72 69 6e 67 20 66 69 6c        string fil
26710 65 4e 61 6d 65 20 3d 20 50 61 74 68 2e 43 6f 6d  eName = Path.Com
26720 62 69 6e 65 28 64 69 72 65 63 74 6f 72 79 2c 20  bine(directory, 
26730 22 6d 61 63 68 69 6e 65 2e 63 6f 6e 66 69 67 22  "machine.config"
26740 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
26750 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21 46            if (!F
26760 69 6c 65 2e 45 78 69 73 74 73 28 66 69 6c 65 4e  ile.Exists(fileN
26770 61 6d 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ame))..         
26780 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
26790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
267a0 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44        TraceOps.D
267b0 65 62 75 67 41 6e 64 54 72 61 63 65 28 54 72 61  ebugAndTrace(Tra
267c0 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 2c 0d  cePriority.Low,.
267d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
267e0 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62               deb
267f0 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63  ugCallback, trac
26800 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e  eCallback, Strin
26810 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
26820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26830 20 20 20 20 20 20 20 22 2e 4e 45 54 20 46 72 61         ".NET Fra
26840 6d 65 77 6f 72 6b 20 7b 30 7d 20 66 69 6c 65 20  mework {0} file 
26850 7b 31 7d 20 64 6f 65 73 20 6e 6f 74 20 65 78 69  {1} does not exi
26860 73 74 2c 20 22 20 2b 0d 0a 20 20 20 20 20 20 20  st, " +..       
26870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26880 20 20 20 20 20 22 73 6b 69 70 70 69 6e 67 2e 2e       "skipping..
26890 2e 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 66  .", ForDisplay(f
268a0 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 29  rameworkVersion)
268b0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
268c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46                 F
268d0 6f 72 44 69 73 70 6c 61 79 28 66 69 6c 65 4e 61  orDisplay(fileNa
268e0 6d 65 29 29 2c 20 74 72 61 63 65 43 61 74 65 67  me)), traceCateg
268f0 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
26900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26910 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20   continue;..    
26920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26930 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
26940 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 6c 6f           bool lo
26950 63 61 6c 53 61 76 65 64 20 3d 20 66 61 6c 73 65  calSaved = false
26960 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
26970 20 20 20 20 20 20 20 20 20 69 66 20 28 21 63 61           if (!ca
26980 6c 6c 62 61 63 6b 28 0d 0a 20 20 20 20 20 20 20  llback(..       
26990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
269a0 20 20 20 20 20 66 69 6c 65 4e 61 6d 65 2c 20 69       fileName, i
269b0 6e 76 61 72 69 61 6e 74 2c 20 6e 61 6d 65 2c 20  nvariant, name, 
269c0 64 65 73 63 72 69 70 74 69 6f 6e 2c 20 74 79 70  description, typ
269d0 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20  eName,..        
269e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
269f0 20 20 20 20 61 73 73 65 6d 62 6c 79 4e 61 6d 65      assemblyName
26a00 2c 20 63 6c 69 65 6e 74 44 61 74 61 2c 20 77 6f  , clientData, wo
26a10 77 36 34 2c 20 74 68 72 6f 77 4f 6e 4d 69 73 73  w64, throwOnMiss
26a20 69 6e 67 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ing,..          
26a30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26a40 20 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73    whatIf, verbos
26a50 65 2c 20 72 65 66 20 6c 6f 63 61 6c 53 61 76 65  e, ref localSave
26a60 64 2c 20 72 65 66 20 65 72 72 6f 72 29 29 0d 0a  d, ref error))..
26a70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26a80 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
26a90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
26aa0 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20  eturn false;..  
26ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26ac0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
26ad0 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20           else.. 
26ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26af0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
26b00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
26b10 20 28 6c 6f 63 61 6c 53 61 76 65 64 20 26 26 20   (localSaved && 
26b20 21 73 61 76 65 64 29 0d 0a 20 20 20 20 20 20 20  !saved)..       
26b30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26b40 20 20 20 20 20 73 61 76 65 64 20 3d 20 74 72 75       saved = tru
26b50 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
26b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
26b70 20 28 76 65 72 62 6f 73 65 29 0d 0a 20 20 20 20   (verbose)..    
26b80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26b90 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73          TraceOps
26ba0 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 54  .DebugAndTrace(T
26bb0 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77  racePriority.Low
26bc0 65 73 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  est,..          
26bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26be0 20 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62        debugCallb
26bf0 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61  ack, traceCallba
26c00 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ck, String.Forma
26c10 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
26c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26c30 20 20 20 20 22 6c 6f 63 61 6c 53 61 76 65 64 20      "localSaved 
26c40 3d 20 7b 30 7d 2c 20 73 61 76 65 64 20 3d 20 7b  = {0}, saved = {
26c50 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  1}",..          
26c60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26c70 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79        ForDisplay
26c80 28 6c 6f 63 61 6c 53 61 76 65 64 29 2c 20 46 6f  (localSaved), Fo
26c90 72 44 69 73 70 6c 61 79 28 73 61 76 65 64 29 29  rDisplay(saved))
26ca0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
26cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26cc0 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
26cd0 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
26ce0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
26cf0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
26d00 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
26d10 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
26d20 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20  n true;..       
26d30 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f   }....        //
26d40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26d50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26d60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26d70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26d80 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
26d90 20 5b 4d 65 74 68 6f 64 49 6d 70 6c 28 4d 65 74   [MethodImpl(Met
26da0 68 6f 64 49 6d 70 6c 4f 70 74 69 6f 6e 73 2e 4e  hodImplOptions.N
26db0 6f 49 6e 6c 69 6e 69 6e 67 29 5d 0d 0a 20 20 20  oInlining)]..   
26dc0 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61       private sta
26dd0 74 69 63 20 62 6f 6f 6c 20 46 6f 72 45 61 63 68  tic bool ForEach
26de0 46 72 61 6d 65 77 6f 72 6b 52 65 67 69 73 74 72  FrameworkRegistr
26df0 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y(..            
26e00 4d 6f 63 6b 52 65 67 69 73 74 72 79 20 72 65 67  MockRegistry reg
26e10 69 73 74 72 79 2c 0d 0a 20 20 20 20 20 20 20 20  istry,..        
26e20 20 20 20 20 46 72 61 6d 65 77 6f 72 6b 4c 69 73      FrameworkLis
26e30 74 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2c  t frameworkList,
26e40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 46 72  ..            Fr
26e50 61 6d 65 77 6f 72 6b 52 65 67 69 73 74 72 79 43  ameworkRegistryC
26e60 61 6c 6c 62 61 63 6b 20 63 61 6c 6c 62 61 63 6b  allback callback
26e70 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  ,..            s
26e80 74 72 69 6e 67 20 76 65 72 73 69 6f 6e 2c 20 2f  tring version, /
26e90 2a 20 4e 4f 54 45 3a 20 4f 70 74 69 6f 6e 61 6c  * NOTE: Optional
26ea0 2e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20  . */..          
26eb0 20 20 6f 62 6a 65 63 74 20 63 6c 69 65 6e 74 44    object clientD
26ec0 61 74 61 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ata,..          
26ed0 20 20 62 6f 6f 6c 20 77 6f 77 36 34 2c 0d 0a 20    bool wow64,.. 
26ee0 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
26ef0 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 2c 0d  throwOnMissing,.
26f00 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f  .            boo
26f10 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20  l whatIf,..     
26f20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62         bool verb
26f30 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ose,..          
26f40 20 20 72 65 66 20 73 74 72 69 6e 67 20 65 72 72    ref string err
26f50 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  or..            
26f60 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
26f70 20 20 20 20 20 20 20 20 20 20 69 66 20 28 72 65            if (re
26f80 67 69 73 74 72 79 20 3d 3d 20 6e 75 6c 6c 29 0d  gistry == null).
26f90 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
26fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26fb0 65 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64  error = "invalid
26fc0 20 72 65 67 69 73 74 72 79 22 3b 0d 0a 20 20 20   registry";..   
26fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
26fe0 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20  urn false;..    
26ff0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
27000 20 20 20 20 20 20 20 20 20 69 66 20 28 66 72 61           if (fra
27010 6d 65 77 6f 72 6b 4c 69 73 74 20 3d 3d 20 6e 75  meworkList == nu
27020 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
27030 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
27040 20 20 20 20 65 72 72 6f 72 20 3d 20 22 69 6e 76      error = "inv
27050 61 6c 69 64 20 66 72 61 6d 65 77 6f 72 6b 20 6c  alid framework l
27060 69 73 74 22 3b 0d 0a 20 20 20 20 20 20 20 20 20  ist";..         
27070 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
27080 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lse;..          
27090 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
270a0 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b     MockRegistryK
270b0 65 79 20 72 6f 6f 74 4b 65 79 20 3d 20 66 72 61  ey rootKey = fra
270c0 6d 65 77 6f 72 6b 4c 69 73 74 2e 52 6f 6f 74 4b  meworkList.RootK
270d0 65 79 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ey;....         
270e0 20 20 20 69 66 20 28 72 6f 6f 74 4b 65 79 20 3d     if (rootKey =
270f0 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
27100 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
27110 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
27120 22 69 6e 76 61 6c 69 64 20 72 6f 6f 74 20 6b 65  "invalid root ke
27130 79 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  y";..           
27140 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
27150 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
27160 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
27170 20 69 66 20 28 21 4f 62 6a 65 63 74 2e 52 65 66   if (!Object.Ref
27180 65 72 65 6e 63 65 45 71 75 61 6c 73 28 72 6f 6f  erenceEquals(roo
27190 74 4b 65 79 2c 20 72 65 67 69 73 74 72 79 2e 43  tKey, registry.C
271a0 75 72 72 65 6e 74 55 73 65 72 29 20 26 26 0d 0a  urrentUser) &&..
271b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
271c0 21 4f 62 6a 65 63 74 2e 52 65 66 65 72 65 6e 63  !Object.Referenc
271d0 65 45 71 75 61 6c 73 28 72 6f 6f 74 4b 65 79 2c  eEquals(rootKey,
271e0 20 72 65 67 69 73 74 72 79 2e 4c 6f 63 61 6c 4d   registry.LocalM
271f0 61 63 68 69 6e 65 29 29 0d 0a 20 20 20 20 20 20  achine))..      
27200 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
27210 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
27220 20 22 72 6f 6f 74 20 6b 65 79 20 6d 75 73 74 20   "root key must 
27230 62 65 20 70 65 72 2d 75 73 65 72 20 6f 72 20 70  be per-user or p
27240 65 72 2d 6d 61 63 68 69 6e 65 22 3b 0d 0a 20 20  er-machine";..  
27250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
27260 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20  turn false;..   
27270 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
27280 20 20 20 20 20 20 20 20 20 20 69 66 20 28 66 72            if (fr
27290 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 4e 61 6d 65  ameworkList.Name
272a0 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  s == null)..    
272b0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
272c0 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72             error
272d0 20 3d 20 22 6e 6f 20 66 72 61 6d 65 77 6f 72 6b   = "no framework
272e0 20 6e 61 6d 65 73 20 66 6f 75 6e 64 22 3b 0d 0a   names found";..
272f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27300 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20  return false;.. 
27310 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
27320 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
27330 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 56 65  frameworkList.Ve
27340 72 73 69 6f 6e 73 20 3d 3d 20 6e 75 6c 6c 29 0d  rsions == null).
27350 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
27360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27370 65 72 72 6f 72 20 3d 20 22 6e 6f 20 66 72 61 6d  error = "no fram
27380 65 77 6f 72 6b 20 76 65 72 73 69 6f 6e 73 20 66  ework versions f
27390 6f 75 6e 64 22 3b 0d 0a 20 20 20 20 20 20 20 20  ound";..        
273a0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
273b0 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alse;..         
273c0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
273d0 20 20 20 20 69 66 20 28 66 72 61 6d 65 77 6f 72      if (framewor
273e0 6b 4c 69 73 74 2e 50 6c 61 74 66 6f 72 6d 4e 61  kList.PlatformNa
273f0 6d 65 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  mes == null)..  
27400 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
27410 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
27420 6f 72 20 3d 20 22 6e 6f 20 70 6c 61 74 66 6f 72  or = "no platfor
27430 6d 20 6e 61 6d 65 73 20 66 6f 75 6e 64 22 3b 0d  m names found";.
27440 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
27450 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
27460 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
27470 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
27480 28 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 4e  (frameworkList.N
27490 61 6d 65 73 2e 43 6f 75 6e 74 20 21 3d 20 66 72  ames.Count != fr
274a0 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 50 6c 61 74  ameworkList.Plat
274b0 66 6f 72 6d 4e 61 6d 65 73 2e 43 6f 75 6e 74 29  formNames.Count)
274c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
274d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
274e0 20 65 72 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e   error = String.
274f0 46 6f 72 6d 61 74 28 22 66 72 61 6d 65 77 6f 72  Format("framewor
27500 6b 20 6e 61 6d 65 20 63 6f 75 6e 74 20 7b 30 7d  k name count {0}
27510 20 64 6f 65 73 20 6e 6f 74 20 22 20 2b 0d 0a 20   does not " +.. 
27520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27530 20 20 20 22 6d 61 74 63 68 20 70 6c 61 74 66 6f     "match platfo
27540 72 6d 20 6e 61 6d 65 20 63 6f 75 6e 74 20 7b 31  rm name count {1
27550 7d 22 2c 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73  }", frameworkLis
27560 74 2e 4e 61 6d 65 73 2e 43 6f 75 6e 74 2c 0d 0a  t.Names.Count,..
27570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27580 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73      frameworkLis
27590 74 2e 50 6c 61 74 66 6f 72 6d 4e 61 6d 65 73 2e  t.PlatformNames.
275a0 43 6f 75 6e 74 29 3b 0d 0a 0d 0a 20 20 20 20 20  Count);....     
275b0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
275c0 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  n false;..      
275d0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
275e0 20 20 20 20 20 20 20 66 6f 72 20 28 69 6e 74 20         for (int 
275f0 69 6e 64 65 78 20 3d 20 30 3b 20 69 6e 64 65 78  index = 0; index
27600 20 3c 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74   < frameworkList
27610 2e 4e 61 6d 65 73 2e 43 6f 75 6e 74 3b 20 69 6e  .Names.Count; in
27620 64 65 78 2b 2b 29 0d 0a 20 20 20 20 20 20 20 20  dex++)..        
27630 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
27640 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
27650 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f             // NO
27660 54 45 3a 20 47 72 61 62 20 74 68 65 20 6e 61 6d  TE: Grab the nam
27670 65 20 6f 66 20 74 68 65 20 66 72 61 6d 65 77 6f  e of the framewo
27680 72 6b 20 28 65 2e 67 2e 20 22 2e 4e 45 54 46 72  rk (e.g. ".NETFr
27690 61 6d 65 77 6f 72 6b 22 29 0d 0a 20 20 20 20 20  amework")..     
276a0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
276b0 20 20 20 20 61 6e 64 20 74 68 65 20 6e 61 6d 65      and the name
276c0 20 6f 66 20 74 68 65 20 70 6c 61 74 66 6f 72 6d   of the platform
276d0 20 28 65 2e 67 2e 20 22 57 69 6e 64 6f 77 73 43   (e.g. "WindowsC
276e0 45 22 29 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  E")...          
276f0 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
27700 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
27710 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 20 3d   frameworkName =
27720 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 4e   frameworkList.N
27730 61 6d 65 73 5b 69 6e 64 65 78 5d 3b 0d 0a 20 20  ames[index];..  
27740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
27750 72 69 6e 67 20 70 6c 61 74 66 6f 72 6d 4e 61 6d  ring platformNam
27760 65 20 3d 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73  e = frameworkLis
27770 74 2e 50 6c 61 74 66 6f 72 6d 4e 61 6d 65 73 5b  t.PlatformNames[
27780 69 6e 64 65 78 5d 3b 0d 0a 0d 0a 20 20 20 20 20  index];....     
27790 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
277a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
277b0 2f 20 4e 4f 54 45 3a 20 47 72 61 62 20 74 68 65  / NOTE: Grab the
277c0 20 73 75 70 70 6f 72 74 65 64 20 76 65 72 73 69   supported versi
277d0 6f 6e 73 20 6f 66 20 74 68 69 73 20 70 61 72 74  ons of this part
277e0 69 63 75 6c 61 72 0d 0a 20 20 20 20 20 20 20 20  icular..        
277f0 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
27800 20 66 72 61 6d 65 77 6f 72 6b 2e 0d 0a 20 20 20   framework...   
27810 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
27820 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
27830 20 56 65 72 73 69 6f 6e 4c 69 73 74 20 66 72 61   VersionList fra
27840 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 4c 69 73  meworkVersionLis
27850 74 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  t;....          
27860 20 20 20 20 20 20 69 66 20 28 76 65 72 73 69 6f        if (versio
27870 6e 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  n != null)..    
27880 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
27890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
278a0 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
278b0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f             // NO
278c0 54 45 3a 20 4d 61 6e 75 61 6c 20 6f 76 65 72 72  TE: Manual overr
278d0 69 64 65 20 6f 66 20 74 68 65 20 2a 4f 4e 45 2a  ide of the *ONE*
278e0 20 66 72 61 6d 65 77 6f 72 6b 20 76 65 72 73 69   framework versi
278f0 6f 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  on..            
27900 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
27910 20 74 6f 20 70 72 6f 63 65 73 73 2e 0d 0a 20 20   to process...  
27920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27930 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
27940 20 20 20 20 20 20 20 20 20 20 66 72 61 6d 65 77            framew
27950 6f 72 6b 56 65 72 73 69 6f 6e 4c 69 73 74 20 3d  orkVersionList =
27960 20 6e 65 77 20 56 65 72 73 69 6f 6e 4c 69 73 74   new VersionList
27970 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ();..           
27980 20 20 20 20 20 20 20 20 20 66 72 61 6d 65 77 6f           framewo
27990 72 6b 56 65 72 73 69 6f 6e 4c 69 73 74 2e 41 64  rkVersionList.Ad
279a0 64 28 6e 65 77 20 56 65 72 73 69 6f 6e 28 76 65  d(new Version(ve
279b0 72 73 69 6f 6e 29 29 3b 0d 0a 20 20 20 20 20 20  rsion));..      
279c0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
279d0 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73               els
279e0 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..             
279f0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
27a00 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21 66            if (!f
27a10 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 56 65 72  rameworkList.Ver
27a20 73 69 6f 6e 73 2e 54 72 79 47 65 74 56 61 6c 75  sions.TryGetValu
27a30 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
27a40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27a50 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c 20 6f  frameworkName, o
27a60 75 74 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73  ut frameworkVers
27a70 69 6f 6e 4c 69 73 74 29 20 7c 7c 0d 0a 20 20 20  ionList) ||..   
27a80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27a90 20 20 20 20 20 28 66 72 61 6d 65 77 6f 72 6b 56       (frameworkV
27aa0 65 72 73 69 6f 6e 4c 69 73 74 20 3d 3d 20 6e 75  ersionList == nu
27ab0 6c 6c 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ll))..          
27ac0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
27ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27ae0 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a       continue;..
27af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27b00 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
27b10 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
27b20 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 65              fore
27b30 61 63 68 20 28 56 65 72 73 69 6f 6e 20 66 72 61  ach (Version fra
27b40 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 20 69 6e  meworkVersion in
27b50 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f   frameworkVersio
27b60 6e 4c 69 73 74 29 0d 0a 20 20 20 20 20 20 20 20  nList)..        
27b70 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
27b80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
27b90 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64  raceOps.DebugAnd
27ba0 54 72 61 63 65 28 54 72 61 63 65 50 72 69 6f 72  Trace(TracePrior
27bb0 69 74 79 2e 4c 6f 77 65 72 2c 0d 0a 20 20 20 20  ity.Lower,..    
27bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27bd0 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63      debugCallbac
27be0 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b  k, traceCallback
27bf0 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  , String.Format(
27c00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
27c10 20 20 20 20 20 20 20 20 20 20 22 66 72 61 6d 65            "frame
27c20 77 6f 72 6b 4e 61 6d 65 20 3d 20 7b 30 7d 2c 20  workName = {0}, 
27c30 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e  frameworkVersion
27c40 20 3d 20 7b 31 7d 2c 20 22 20 2b 0d 0a 20 20 20   = {1}, " +..   
27c50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27c60 20 20 20 20 20 22 70 6c 61 74 66 6f 72 6d 4e 61       "platformNa
27c70 6d 65 20 3d 20 7b 32 7d 22 2c 20 46 6f 72 44 69  me = {2}", ForDi
27c80 73 70 6c 61 79 28 66 72 61 6d 65 77 6f 72 6b 4e  splay(frameworkN
27c90 61 6d 65 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  ame),..         
27ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46                 F
27cb0 6f 72 44 69 73 70 6c 61 79 28 66 72 61 6d 65 77  orDisplay(framew
27cc0 6f 72 6b 56 65 72 73 69 6f 6e 29 2c 0d 0a 20 20  orkVersion),..  
27cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27ce0 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79        ForDisplay
27cf0 28 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 29 29 2c  (platformName)),
27d00 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
27d10 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
27d20 20 20 20 20 20 20 20 20 69 66 20 28 21 48 61 76          if (!Hav
27d30 65 46 72 61 6d 65 77 6f 72 6b 52 65 67 69 73 74  eFrameworkRegist
27d40 72 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ry(..           
27d50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27d60 20 72 6f 6f 74 4b 65 79 2c 20 66 72 61 6d 65 77   rootKey, framew
27d70 6f 72 6b 4e 61 6d 65 2c 20 66 72 61 6d 65 77 6f  orkName, framewo
27d80 72 6b 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20  rkVersion,..    
27d90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27da0 20 20 20 20 20 20 20 20 70 6c 61 74 66 6f 72 6d          platform
27db0 4e 61 6d 65 2c 20 77 6f 77 36 34 2c 20 77 68 61  Name, wow64, wha
27dc0 74 49 66 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a  tIf, verbose))..
27dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27de0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
27df0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
27e00 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64  raceOps.DebugAnd
27e10 54 72 61 63 65 28 54 72 61 63 65 50 72 69 6f 72  Trace(TracePrior
27e20 69 74 79 2e 4c 6f 77 2c 0d 0a 20 20 20 20 20 20  ity.Low,..      
27e30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27e40 20 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62        debugCallb
27e50 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61  ack, traceCallba
27e60 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ck,..           
27e70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27e80 20 22 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b   ".NET Framework
27e90 20 72 65 67 69 73 74 72 79 20 6e 6f 74 20 66 6f   registry not fo
27ea0 75 6e 64 2c 20 73 6b 69 70 70 69 6e 67 2e 2e 2e  und, skipping...
27eb0 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
27ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27ed0 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
27ee0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
27ef0 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69             conti
27f00 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  nue;..          
27f10 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
27f20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27f30 20 20 20 69 66 20 28 63 61 6c 6c 62 61 63 6b 20     if (callback 
27f40 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
27f50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27f60 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 0d 0a 20    continue;.... 
27f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27f80 20 20 20 69 66 20 28 21 63 61 6c 6c 62 61 63 6b     if (!callback
27f90 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
27fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
27fb0 6f 6f 74 4b 65 79 2c 20 66 72 61 6d 65 77 6f 72  ootKey, framewor
27fc0 6b 4e 61 6d 65 2c 20 66 72 61 6d 65 77 6f 72 6b  kName, framework
27fd0 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20  Version,..      
27fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27ff0 20 20 20 20 20 20 70 6c 61 74 66 6f 72 6d 4e 61        platformNa
28000 6d 65 2c 20 63 6c 69 65 6e 74 44 61 74 61 2c 20  me, clientData, 
28010 77 6f 77 36 34 2c 20 74 68 72 6f 77 4f 6e 4d 69  wow64, throwOnMi
28020 73 73 69 6e 67 2c 0d 0a 20 20 20 20 20 20 20 20  ssing,..        
28030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28040 20 20 20 20 77 68 61 74 49 66 2c 20 76 65 72 62      whatIf, verb
28050 6f 73 65 2c 20 72 65 66 20 65 72 72 6f 72 29 29  ose, ref error))
28060 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
28070 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
28080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28090 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
280a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
280b0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
280c0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
280d0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
280e0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72         return tr
280f0 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  ue;..        }..
28100 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
28110 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  on....        //
28120 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28130 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28140 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28150 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28160 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
28170 20 23 72 65 67 69 6f 6e 20 50 65 72 2d 56 69 73   #region Per-Vis
28180 75 61 6c 20 53 74 75 64 69 6f 20 56 65 72 73 69  ual Studio Versi
28190 6f 6e 20 48 61 6e 64 6c 69 6e 67 0d 0a 20 20 20  on Handling..   
281a0 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61       private sta
281b0 74 69 63 20 76 6f 69 64 20 49 6e 69 74 69 61 6c  tic void Initial
281c0 69 7a 65 56 73 4c 69 73 74 28 0d 0a 20 20 20 20  izeVsList(..    
281d0 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65 67 69          MockRegi
281e0 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79 2c  stryKey rootKey,
281f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 43 6f  ..            Co
28200 6e 66 69 67 75 72 61 74 69 6f 6e 20 63 6f 6e 66  nfiguration conf
28210 69 67 75 72 61 74 69 6f 6e 2c 0d 0a 20 20 20 20  iguration,..    
28220 20 20 20 20 20 20 20 20 72 65 66 20 56 73 4c 69          ref VsLi
28230 73 74 20 76 73 4c 69 73 74 0d 0a 20 20 20 20 20  st vsList..     
28240 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
28250 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
28260 20 69 66 20 28 76 73 4c 69 73 74 20 3d 3d 20 6e   if (vsList == n
28270 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
28280 20 20 20 20 20 20 76 73 4c 69 73 74 20 3d 20 6e        vsList = n
28290 65 77 20 56 73 4c 69 73 74 28 29 3b 0d 0a 0d 0a  ew VsList();....
282a0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
282b0 76 73 4c 69 73 74 2e 52 6f 6f 74 4b 65 79 20 3d  vsList.RootKey =
282c0 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
282d0 20 20 20 20 20 20 20 20 20 76 73 4c 69 73 74 2e           vsList.
282e0 52 6f 6f 74 4b 65 79 20 3d 20 72 6f 6f 74 4b 65  RootKey = rootKe
282f0 79 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  y;....          
28300 20 20 69 66 20 28 76 73 4c 69 73 74 2e 56 65 72    if (vsList.Ver
28310 73 69 6f 6e 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  sions == null)..
28320 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
28330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 76                 v
28340 73 4c 69 73 74 2e 56 65 72 73 69 6f 6e 73 20 3d  sList.Versions =
28350 20 6e 65 77 20 56 65 72 73 69 6f 6e 4c 69 73 74   new VersionList
28360 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ();....         
28370 20 20 20 20 20 20 20 69 66 20 28 28 63 6f 6e 66         if ((conf
28380 69 67 75 72 61 74 69 6f 6e 20 3d 3d 20 6e 75 6c  iguration == nul
28390 6c 29 20 7c 7c 20 21 63 6f 6e 66 69 67 75 72 61  l) || !configura
283a0 74 69 6f 6e 2e 4e 6f 56 73 32 30 30 35 29 0d 0a  tion.NoVs2005)..
283b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
283c0 20 20 20 20 76 73 4c 69 73 74 2e 56 65 72 73 69      vsList.Versi
283d0 6f 6e 73 2e 41 64 64 28 6e 65 77 20 56 65 72 73  ons.Add(new Vers
283e0 69 6f 6e 28 38 2c 20 30 29 29 3b 20 2f 2f 20 32  ion(8, 0)); // 2
283f0 30 30 35 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  005....         
28400 20 20 20 20 20 20 20 69 66 20 28 28 63 6f 6e 66         if ((conf
28410 69 67 75 72 61 74 69 6f 6e 20 3d 3d 20 6e 75 6c  iguration == nul
28420 6c 29 20 7c 7c 20 21 63 6f 6e 66 69 67 75 72 61  l) || !configura
28430 74 69 6f 6e 2e 4e 6f 56 73 32 30 30 38 29 0d 0a  tion.NoVs2008)..
28440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28450 20 20 20 20 76 73 4c 69 73 74 2e 56 65 72 73 69      vsList.Versi
28460 6f 6e 73 2e 41 64 64 28 6e 65 77 20 56 65 72 73  ons.Add(new Vers
28470 69 6f 6e 28 39 2c 20 30 29 29 3b 20 2f 2f 20 32  ion(9, 0)); // 2
28480 30 30 38 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  008....         
28490 20 20 20 20 20 20 20 69 66 20 28 28 63 6f 6e 66         if ((conf
284a0 69 67 75 72 61 74 69 6f 6e 20 3d 3d 20 6e 75 6c  iguration == nul
284b0 6c 29 20 7c 7c 20 21 63 6f 6e 66 69 67 75 72 61  l) || !configura
284c0 74 69 6f 6e 2e 4e 6f 56 73 32 30 31 30 29 0d 0a  tion.NoVs2010)..
284d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
284e0 20 20 20 20 76 73 4c 69 73 74 2e 56 65 72 73 69      vsList.Versi
284f0 6f 6e 73 2e 41 64 64 28 6e 65 77 20 56 65 72 73  ons.Add(new Vers
28500 69 6f 6e 28 31 30 2c 20 30 29 29 3b 2f 2f 20 32  ion(10, 0));// 2
28510 30 31 30 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  010....         
28520 20 20 20 20 20 20 20 69 66 20 28 28 63 6f 6e 66         if ((conf
28530 69 67 75 72 61 74 69 6f 6e 20 3d 3d 20 6e 75 6c  iguration == nul
28540 6c 29 20 7c 7c 20 21 63 6f 6e 66 69 67 75 72 61  l) || !configura
28550 74 69 6f 6e 2e 4e 6f 56 73 32 30 31 32 29 0d 0a  tion.NoVs2012)..
28560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28570 20 20 20 20 76 73 4c 69 73 74 2e 56 65 72 73 69      vsList.Versi
28580 6f 6e 73 2e 41 64 64 28 6e 65 77 20 56 65 72 73  ons.Add(new Vers
28590 69 6f 6e 28 31 31 2c 20 30 29 29 3b 2f 2f 20 32  ion(11, 0));// 2
285a0 30 31 32 0d 0a 20 20 20 20 20 20 20 20 20 20 20  012..           
285b0 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d   }..        }...
285c0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
285d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
285e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
285f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28600 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28610 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  ....        priv
28620 61 74 65 20 73 74 61 74 69 63 20 62 6f 6f 6c 20  ate static bool 
28630 48 61 76 65 56 73 56 65 72 73 69 6f 6e 28 0d 0a  HaveVsVersion(..
28640 20 20 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b              Mock
28650 52 65 67 69 73 74 72 79 4b 65 79 20 72 6f 6f 74  RegistryKey root
28660 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  Key,..          
28670 20 20 56 65 72 73 69 6f 6e 20 76 73 56 65 72 73    Version vsVers
28680 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ion,..          
28690 20 20 62 6f 6f 6c 20 77 6f 77 36 34 2c 0d 0a 20    bool wow64,.. 
286a0 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
286b0 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20  whatIf,..       
286c0 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73       bool verbos
286d0 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29  e..            )
286e0 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
286f0 20 20 20 20 20 20 20 20 20 69 66 20 28 76 73 56           if (vsV
28700 65 72 73 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 0d  ersion == null).
28710 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
28720 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
28730 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74  ..            st
28740 72 69 6e 67 20 6b 65 79 4e 61 6d 65 20 3d 20 47  ring keyName = G
28750 65 74 56 73 4b 65 79 4e 61 6d 65 28 76 73 56 65  etVsKeyName(vsVe
28760 72 73 69 6f 6e 2c 20 77 6f 77 36 34 29 3b 0d 0a  rsion, wow64);..
28770 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 75 73  ..            us
28780 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73 74 72  ing (MockRegistr
28790 79 4b 65 79 20 6b 65 79 20 3d 20 52 65 67 69 73  yKey key = Regis
287a0 74 72 79 48 65 6c 70 65 72 2e 4f 70 65 6e 53 75  tryHelper.OpenSu
287b0 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20  bKey(..         
287c0 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b             rootK
287d0 65 79 2c 20 6b 65 79 4e 61 6d 65 2c 20 66 61 6c  ey, keyName, fal
287e0 73 65 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62  se, whatIf, verb
287f0 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ose))..         
28800 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
28810 20 20 20 20 20 20 69 66 20 28 6b 65 79 20 3d 3d        if (key ==
28820 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
28830 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
28840 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20  rn false;....   
28850 20 20 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a               obj
28860 65 63 74 20 76 61 6c 75 65 20 3d 20 52 65 67 69  ect value = Regi
28870 73 74 72 79 48 65 6c 70 65 72 2e 47 65 74 56 61  stryHelper.GetVa
28880 6c 75 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  lue(..          
28890 20 20 20 20 20 20 20 20 20 20 6b 65 79 2c 20 22            key, "
288a0 49 6e 73 74 61 6c 6c 44 69 72 22 2c 20 6e 75 6c  InstallDir", nul
288b0 6c 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f  l, whatIf, verbo
288c0 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  se);....        
288d0 20 20 20 20 20 20 20 20 69 66 20 28 21 28 76 61          if (!(va
288e0 6c 75 65 20 69 73 20 73 74 72 69 6e 67 29 29 0d  lue is string)).
288f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
28900 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
28910 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
28920 20 20 20 20 20 20 73 74 72 69 6e 67 20 64 69 72        string dir
28930 65 63 74 6f 72 79 20 3d 20 28 73 74 72 69 6e 67  ectory = (string
28940 29 76 61 6c 75 65 3b 0d 0a 0d 0a 20 20 20 20 20  )value;....     
28950 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 53             if (S
28960 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d  tring.IsNullOrEm
28970 70 74 79 28 64 69 72 65 63 74 6f 72 79 29 29 0d  pty(directory)).
28980 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
28990 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
289a0 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
289b0 20 20 20 20 20 20 69 66 20 28 21 44 69 72 65 63        if (!Direc
289c0 74 6f 72 79 2e 45 78 69 73 74 73 28 64 69 72 65  tory.Exists(dire
289d0 63 74 6f 72 79 29 29 0d 0a 20 20 20 20 20 20 20  ctory))..       
289e0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
289f0 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20  urn false;....  
28a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
28a10 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54  aceOps.DebugAndT
28a20 72 61 63 65 28 54 72 61 63 65 50 72 69 6f 72 69  race(TracePriori
28a30 74 79 2e 4c 6f 77 65 72 2c 0d 0a 20 20 20 20 20  ty.Lower,..     
28a40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
28a50 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72  ebugCallback, tr
28a60 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72  aceCallback, Str
28a70 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
28a80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28a90 20 22 56 69 73 75 61 6c 20 53 74 75 64 69 6f 20   "Visual Studio 
28aa0 7b 30 7d 20 66 6f 75 6e 64 20 69 6e 20 64 69 72  {0} found in dir
28ab0 65 63 74 6f 72 79 20 7b 31 7d 2e 22 2c 0d 0a 20  ectory {1}.",.. 
28ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28ad0 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 76 73     ForDisplay(vs
28ae0 56 65 72 73 69 6f 6e 29 2c 20 46 6f 72 44 69 73  Version), ForDis
28af0 70 6c 61 79 28 64 69 72 65 63 74 6f 72 79 29 29  play(directory))
28b00 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
28b10 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65         traceCate
28b20 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
28b30 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
28b40 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20   true;..        
28b50 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d      }..        }
28b60 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
28b70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28b80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28b90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28ba0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28bb0 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 5b  ///....        [
28bc0 4d 65 74 68 6f 64 49 6d 70 6c 28 4d 65 74 68 6f  MethodImpl(Metho
28bd0 64 49 6d 70 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49  dImplOptions.NoI
28be0 6e 6c 69 6e 69 6e 67 29 5d 0d 0a 20 20 20 20 20  nlining)]..     
28bf0 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69     private stati
28c00 63 20 62 6f 6f 6c 20 46 6f 72 45 61 63 68 56 73  c bool ForEachVs
28c10 56 65 72 73 69 6f 6e 52 65 67 69 73 74 72 79 28  VersionRegistry(
28c20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 4d 6f  ..            Mo
28c30 63 6b 52 65 67 69 73 74 72 79 20 72 65 67 69 73  ckRegistry regis
28c40 74 72 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  try,..          
28c50 20 20 56 73 4c 69 73 74 20 76 73 4c 69 73 74 2c    VsList vsList,
28c60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 56 69  ..            Vi
28c70 73 75 61 6c 53 74 75 64 69 6f 52 65 67 69 73 74  sualStudioRegist
28c80 72 79 43 61 6c 6c 62 61 63 6b 20 63 61 6c 6c 62  ryCallback callb
28c90 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ack,..          
28ca0 20 20 50 61 63 6b 61 67 65 20 70 61 63 6b 61 67    Package packag
28cb0 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
28cc0 6f 62 6a 65 63 74 20 63 6c 69 65 6e 74 44 61 74  object clientDat
28cd0 61 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  a,..            
28ce0 62 6f 6f 6c 20 77 6f 77 36 34 2c 0d 0a 20 20 20  bool wow64,..   
28cf0 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 74 68           bool th
28d00 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 2c 0d 0a 20  rowOnMissing,.. 
28d10 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
28d20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20  whatIf,..       
28d30 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73       bool verbos
28d40 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
28d50 72 65 66 20 73 74 72 69 6e 67 20 65 72 72 6f 72  ref string error
28d60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d  ..            ).
28d70 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
28d80 20 20 20 20 20 20 20 20 69 66 20 28 72 65 67 69          if (regi
28d90 73 74 72 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  stry == null).. 
28da0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
28db0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72                er
28dc0 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64 20 72  ror = "invalid r
28dd0 65 67 69 73 74 72 79 22 3b 0d 0a 20 20 20 20 20  egistry";..     
28de0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
28df0 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  n false;..      
28e00 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
28e10 20 20 20 20 20 20 20 69 66 20 28 76 73 4c 69 73         if (vsLis
28e20 74 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  t == null)..    
28e30 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
28e40 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72             error
28e50 20 3d 20 22 69 6e 76 61 6c 69 64 20 56 53 20 6c   = "invalid VS l
28e60 69 73 74 22 3b 0d 0a 20 20 20 20 20 20 20 20 20  ist";..         
28e70 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
28e80 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lse;..          
28e90 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
28ea0 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b     MockRegistryK
28eb0 65 79 20 72 6f 6f 74 4b 65 79 20 3d 20 76 73 4c  ey rootKey = vsL
28ec0 69 73 74 2e 52 6f 6f 74 4b 65 79 3b 0d 0a 0d 0a  ist.RootKey;....
28ed0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
28ee0 72 6f 6f 74 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29  rootKey == null)
28ef0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
28f00 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
28f10 20 65 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69   error = "invali
28f20 64 20 72 6f 6f 74 20 6b 65 79 22 3b 0d 0a 20 20  d root key";..  
28f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
28f40 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20  turn false;..   
28f50 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
28f60 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21 4f            if (!O
28f70 62 6a 65 63 74 2e 52 65 66 65 72 65 6e 63 65 45  bject.ReferenceE
28f80 71 75 61 6c 73 28 72 6f 6f 74 4b 65 79 2c 20 72  quals(rootKey, r
28f90 65 67 69 73 74 72 79 2e 43 75 72 72 65 6e 74 55  egistry.CurrentU
28fa0 73 65 72 29 20 26 26 0d 0a 20 20 20 20 20 20 20  ser) &&..       
28fb0 20 20 20 20 20 20 20 20 20 21 4f 62 6a 65 63 74           !Object
28fc0 2e 52 65 66 65 72 65 6e 63 65 45 71 75 61 6c 73  .ReferenceEquals
28fd0 28 72 6f 6f 74 4b 65 79 2c 20 72 65 67 69 73 74  (rootKey, regist
28fe0 72 79 2e 4c 6f 63 61 6c 4d 61 63 68 69 6e 65 29  ry.LocalMachine)
28ff0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
29000 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
29010 20 20 65 72 72 6f 72 20 3d 20 22 72 6f 6f 74 20    error = "root 
29020 6b 65 79 20 6d 75 73 74 20 62 65 20 70 65 72 2d  key must be per-
29030 75 73 65 72 20 6f 72 20 70 65 72 2d 6d 61 63 68  user or per-mach
29040 69 6e 65 22 3b 0d 0a 20 20 20 20 20 20 20 20 20  ine";..         
29050 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
29060 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lse;..          
29070 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
29080 20 20 20 69 66 20 28 76 73 4c 69 73 74 2e 56 65     if (vsList.Ve
29090 72 73 69 6f 6e 73 20 3d 3d 20 6e 75 6c 6c 29 0d  rsions == null).
290a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
290b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
290c0 65 72 72 6f 72 20 3d 20 22 6e 6f 20 56 53 20 76  error = "no VS v
290d0 65 72 73 69 6f 6e 73 20 66 6f 75 6e 64 22 3b 0d  ersions found";.
290e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
290f0 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
29100 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
29110 0a 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72  .            for
29120 65 61 63 68 20 28 56 65 72 73 69 6f 6e 20 76 73  each (Version vs
29130 56 65 72 73 69 6f 6e 20 69 6e 20 76 73 4c 69 73  Version in vsLis
29140 74 2e 56 65 72 73 69 6f 6e 73 29 0d 0a 20 20 20  t.Versions)..   
29150 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
29160 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
29170 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61  eOps.DebugAndTra
29180 63 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 79  ce(TracePriority
29190 2e 4c 6f 77 65 72 2c 0d 0a 20 20 20 20 20 20 20  .Lower,..       
291a0 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62               deb
291b0 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63  ugCallback, trac
291c0 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e  eCallback, Strin
291d0 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
291e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
291f0 76 73 56 65 72 73 69 6f 6e 20 3d 20 7b 30 7d 22  vsVersion = {0}"
29200 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 76 73 56  , ForDisplay(vsV
29210 65 72 73 69 6f 6e 29 29 2c 0d 0a 20 20 20 20 20  ersion)),..     
29220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
29230 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
29240 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
29250 20 20 69 66 20 28 21 48 61 76 65 56 73 56 65 72    if (!HaveVsVer
29260 73 69 6f 6e 28 72 6f 6f 74 4b 65 79 2c 20 76 73  sion(rootKey, vs
29270 56 65 72 73 69 6f 6e 2c 20 77 6f 77 36 34 2c 20  Version, wow64, 
29280 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29  whatIf, verbose)
29290 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
292a0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
292b0 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f            TraceO
292c0 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65  ps.DebugAndTrace
292d0 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c  (TracePriority.L
292e0 6f 77 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ow,..           
292f0 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62               deb
29300 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63  ugCallback, trac
29310 65 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20  eCallback,..    
29320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29330 20 20 20 20 22 56 69 73 75 61 6c 20 53 74 75 64      "Visual Stud
29340 69 6f 20 76 65 72 73 69 6f 6e 20 6e 6f 74 20 66  io version not f
29350 6f 75 6e 64 2c 20 73 6b 69 70 70 69 6e 67 2e 2e  ound, skipping..
29360 2e 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 74 72 61               tra
29380 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
29390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
293a0 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20      continue;.. 
293b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
293c0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
293d0 20 20 20 20 69 66 20 28 63 61 6c 6c 62 61 63 6b      if (callback
293e0 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
293f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
29400 6f 6e 74 69 6e 75 65 3b 0d 0a 0d 0a 20 20 20 20  ontinue;....    
29410 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
29420 21 63 61 6c 6c 62 61 63 6b 28 0d 0a 20 20 20 20  !callback(..    
29430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29440 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 76 73 56      rootKey, vsV
29450 65 72 73 69 6f 6e 2c 20 70 61 63 6b 61 67 65 2c  ersion, package,
29460 20 63 6c 69 65 6e 74 44 61 74 61 2c 20 77 6f 77   clientData, wow
29470 36 34 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  64,..           
29480 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72               thr
29490 6f 77 4f 6e 4d 69 73 73 69 6e 67 2c 20 77 68 61  owOnMissing, wha
294a0 74 49 66 2c 20 76 65 72 62 6f 73 65 2c 20 72 65  tIf, verbose, re
294b0 66 20 65 72 72 6f 72 29 29 0d 0a 20 20 20 20 20  f error))..     
294c0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
294d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
294e0 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
294f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
29500 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
29510 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
29520 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20   return true;.. 
29530 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
29540 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a    #endregion....
29550 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
29560 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29570 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29580 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29590 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
295a0 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69  ...        #regi
295b0 6f 6e 20 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e  on Configuration
295c0 20 46 69 6c 65 20 48 61 6e 64 6c 69 6e 67 0d 0a   File Handling..
295d0 20 20 20 20 20 20 20 20 5b 4d 65 74 68 6f 64 49          [MethodI
295e0 6d 70 6c 28 4d 65 74 68 6f 64 49 6d 70 6c 4f 70  mpl(MethodImplOp
295f0 74 69 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e 69 6e 67  tions.NoInlining
29600 29 5d 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  )]..        priv
29610 61 74 65 20 73 74 61 74 69 63 20 62 6f 6f 6c 20  ate static bool 
29620 41 64 64 44 62 50 72 6f 76 69 64 65 72 46 61 63  AddDbProviderFac
29630 74 6f 72 79 28 0d 0a 20 20 20 20 20 20 20 20 20  tory(..         
29640 20 20 20 73 74 72 69 6e 67 20 66 69 6c 65 4e 61     string fileNa
29650 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me,..           
29660 20 73 74 72 69 6e 67 20 69 6e 76 61 72 69 61 6e   string invarian
29670 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t,..            
29680 73 74 72 69 6e 67 20 6e 61 6d 65 2c 0d 0a 20 20  string name,..  
29690 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
296a0 20 64 65 73 63 72 69 70 74 69 6f 6e 2c 0d 0a 20   description,.. 
296b0 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
296c0 67 20 74 79 70 65 4e 61 6d 65 2c 0d 0a 20 20 20  g typeName,..   
296d0 20 20 20 20 20 20 20 20 20 41 73 73 65 6d 62 6c           Assembl
296e0 79 4e 61 6d 65 20 61 73 73 65 6d 62 6c 79 4e 61  yName assemblyNa
296f0 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me,..           
29700 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20   bool whatIf,.. 
29710 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
29720 76 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20  verbose,..      
29730 20 20 20 20 20 20 72 65 66 20 62 6f 6f 6c 20 73        ref bool s
29740 61 76 65 64 2c 0d 0a 20 20 20 20 20 20 20 20 20  aved,..         
29750 20 20 20 72 65 66 20 73 74 72 69 6e 67 20 65 72     ref string er
29760 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ror..           
29770 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20   )..        {.. 
29780 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
29790 64 69 72 74 79 20 3d 20 66 61 6c 73 65 3b 0d 0a  dirty = false;..
297a0 20 20 20 20 20 20 20 20 20 20 20 20 58 6d 6c 44              XmlD
297b0 6f 63 75 6d 65 6e 74 20 64 6f 63 75 6d 65 6e 74  ocument document
297c0 20 3d 20 6e 65 77 20 58 6d 6c 44 6f 63 75 6d 65   = new XmlDocume
297d0 6e 74 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  nt();....       
297e0 20 20 20 20 20 64 6f 63 75 6d 65 6e 74 2e 50 72       document.Pr
297f0 65 73 65 72 76 65 57 68 69 74 65 73 70 61 63 65  eserveWhitespace
29800 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20   = true;..      
29810 20 20 20 20 20 20 64 6f 63 75 6d 65 6e 74 2e 4c        document.L
29820 6f 61 64 28 66 69 6c 65 4e 61 6d 65 29 3b 0d 0a  oad(fileName);..
29830 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 58 6d  ..            Xm
29840 6c 45 6c 65 6d 65 6e 74 20 61 64 64 45 6c 65 6d  lElement addElem
29850 65 6e 74 20 3d 20 64 6f 63 75 6d 65 6e 74 2e 53  ent = document.S
29860 65 6c 65 63 74 53 69 6e 67 6c 65 4e 6f 64 65 28  electSingleNode(
29870 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
29880 20 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28    String.Format(
29890 58 50 61 74 68 46 6f 72 41 64 64 45 6c 65 6d 65  XPathForAddEleme
298a0 6e 74 2c 20 69 6e 76 61 72 69 61 6e 74 29 29 20  nt, invariant)) 
298b0 61 73 20 58 6d 6c 45 6c 65 6d 65 6e 74 3b 0d 0a  as XmlElement;..
298c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
298d0 20 28 61 64 64 45 6c 65 6d 65 6e 74 20 3d 3d 20   (addElement == 
298e0 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
298f0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
29900 20 20 20 20 20 20 73 74 72 69 6e 67 5b 5d 20 65        string[] e
29910 6c 65 6d 65 6e 74 4e 61 6d 65 73 20 3d 20 7b 0d  lementNames = {.
29920 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
29930 20 20 20 20 20 22 73 79 73 74 65 6d 2e 64 61 74       "system.dat
29940 61 22 2c 20 22 44 62 50 72 6f 76 69 64 65 72 46  a", "DbProviderF
29950 61 63 74 6f 72 69 65 73 22 0d 0a 20 20 20 20 20  actories"..     
29960 20 20 20 20 20 20 20 20 20 20 20 7d 3b 0d 0a 0d             };...
29970 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
29980 20 58 6d 6c 45 6c 65 6d 65 6e 74 20 70 72 65 76   XmlElement prev
29990 69 6f 75 73 45 6c 65 6d 65 6e 74 20 3d 0d 0a 20  iousElement =.. 
299a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
299b0 20 20 20 64 6f 63 75 6d 65 6e 74 2e 44 6f 63 75     document.Docu
299c0 6d 65 6e 74 45 6c 65 6d 65 6e 74 3b 20 2f 2a 20  mentElement; /* 
299d0 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 2a 2f  configuration */
299e0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
299f0 20 20 20 20 66 6f 72 65 61 63 68 20 28 73 74 72      foreach (str
29a00 69 6e 67 20 65 6c 65 6d 65 6e 74 4e 61 6d 65 20  ing elementName 
29a10 69 6e 20 65 6c 65 6d 65 6e 74 4e 61 6d 65 73 29  in elementNames)
29a20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
29a30 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
29a40 20 20 20 20 20 20 20 20 20 61 64 64 45 6c 65 6d           addElem
29a50 65 6e 74 20 3d 20 70 72 65 76 69 6f 75 73 45 6c  ent = previousEl
29a60 65 6d 65 6e 74 2e 53 65 6c 65 63 74 53 69 6e 67  ement.SelectSing
29a70 6c 65 4e 6f 64 65 28 0d 0a 20 20 20 20 20 20 20  leNode(..       
29a80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29a90 20 65 6c 65 6d 65 6e 74 4e 61 6d 65 29 20 61 73   elementName) as
29aa0 20 58 6d 6c 45 6c 65 6d 65 6e 74 3b 0d 0a 0d 0a   XmlElement;....
29ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29ac0 20 20 20 20 69 66 20 28 61 64 64 45 6c 65 6d 65      if (addEleme
29ad0 6e 74 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  nt == null)..   
29ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29af0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
29b00 20 20 20 20 20 20 20 20 20 20 20 20 61 64 64 45              addE
29b10 6c 65 6d 65 6e 74 20 3d 20 64 6f 63 75 6d 65 6e  lement = documen
29b20 74 2e 43 72 65 61 74 65 45 6c 65 6d 65 6e 74 28  t.CreateElement(
29b30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
29b40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c                el
29b50 65 6d 65 6e 74 4e 61 6d 65 2c 20 53 74 72 69 6e  ementName, Strin
29b60 67 2e 45 6d 70 74 79 29 3b 0d 0a 0d 0a 20 20 20  g.Empty);....   
29b70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29b80 20 20 20 20 20 70 72 65 76 69 6f 75 73 45 6c 65       previousEle
29b90 6d 65 6e 74 2e 41 70 70 65 6e 64 43 68 69 6c 64  ment.AppendChild
29ba0 28 61 64 64 45 6c 65 6d 65 6e 74 29 3b 0d 0a 20  (addElement);.. 
29bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29bc0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
29bd0 20 20 20 20 20 20 20 20 20 20 20 20 70 72 65 76              prev
29be0 69 6f 75 73 45 6c 65 6d 65 6e 74 20 3d 20 61 64  iousElement = ad
29bf0 64 45 6c 65 6d 65 6e 74 3b 0d 0a 20 20 20 20 20  dElement;..     
29c00 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
29c10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29c20 61 64 64 45 6c 65 6d 65 6e 74 20 3d 20 64 6f 63  addElement = doc
29c30 75 6d 65 6e 74 2e 43 72 65 61 74 65 45 6c 65 6d  ument.CreateElem
29c40 65 6e 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ent(..          
29c50 20 20 20 20 20 20 20 20 20 20 22 61 64 64 22 2c            "add",
29c60 20 53 74 72 69 6e 67 2e 45 6d 70 74 79 29 3b 0d   String.Empty);.
29c70 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
29c80 20 20 20 70 72 65 76 69 6f 75 73 45 6c 65 6d 65     previousEleme
29c90 6e 74 2e 41 70 70 65 6e 64 43 68 69 6c 64 28 61  nt.AppendChild(a
29ca0 64 64 45 6c 65 6d 65 6e 74 29 3b 0d 0a 0d 0a 20  ddElement);.... 
29cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
29cc0 69 72 74 79 20 3d 20 74 72 75 65 3b 0d 0a 20 20  irty = true;..  
29cd0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
29ce0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21             if (!
29cf0 53 74 72 69 6e 67 2e 45 71 75 61 6c 73 28 61 64  String.Equals(ad
29d00 64 45 6c 65 6d 65 6e 74 2e 47 65 74 41 74 74 72  dElement.GetAttr
29d10 69 62 75 74 65 28 22 6e 61 6d 65 22 29 2c 0d 0a  ibute("name"),..
29d20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29d30 20 20 20 20 6e 61 6d 65 2c 20 53 74 72 69 6e 67      name, String
29d40 43 6f 6d 70 61 72 69 73 6f 6e 2e 4f 72 64 69 6e  Comparison.Ordin
29d50 61 6c 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  al))..          
29d60 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
29d70 20 20 20 20 20 61 64 64 45 6c 65 6d 65 6e 74 2e       addElement.
29d80 53 65 74 41 74 74 72 69 62 75 74 65 28 22 6e 61  SetAttribute("na
29d90 6d 65 22 2c 20 6e 61 6d 65 29 3b 0d 0a 20 20 20  me", name);..   
29da0 20 20 20 20 20 20 20 20 20 20 20 20 20 64 69 72               dir
29db0 74 79 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20  ty = true;..    
29dc0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
29dd0 20 20 20 20 20 20 20 20 20 69 66 20 28 21 53 74           if (!St
29de0 72 69 6e 67 2e 45 71 75 61 6c 73 28 61 64 64 45  ring.Equals(addE
29df0 6c 65 6d 65 6e 74 2e 47 65 74 41 74 74 72 69 62  lement.GetAttrib
29e00 75 74 65 28 22 69 6e 76 61 72 69 61 6e 74 22 29  ute("invariant")
29e10 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
29e20 20 20 20 20 20 20 20 69 6e 76 61 72 69 61 6e 74         invariant
29e30 2c 20 53 74 72 69 6e 67 43 6f 6d 70 61 72 69 73  , StringComparis
29e40 6f 6e 2e 4f 72 64 69 6e 61 6c 29 29 0d 0a 20 20  on.Ordinal))..  
29e50 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
29e60 20 20 20 20 20 20 20 20 20 20 20 20 20 61 64 64               add
29e70 45 6c 65 6d 65 6e 74 2e 53 65 74 41 74 74 72 69  Element.SetAttri
29e80 62 75 74 65 28 22 69 6e 76 61 72 69 61 6e 74 22  bute("invariant"
29e90 2c 20 69 6e 76 61 72 69 61 6e 74 29 3b 0d 0a 20  , invariant);.. 
29ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
29eb0 69 72 74 79 20 3d 20 74 72 75 65 3b 0d 0a 20 20  irty = true;..  
29ec0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
29ed0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21             if (!
29ee0 53 74 72 69 6e 67 2e 45 71 75 61 6c 73 28 61 64  String.Equals(ad
29ef0 64 45 6c 65 6d 65 6e 74 2e 47 65 74 41 74 74 72  dElement.GetAttr
29f00 69 62 75 74 65 28 22 64 65 73 63 72 69 70 74 69  ibute("descripti
29f10 6f 6e 22 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  on"),..         
29f20 20 20 20 20 20 20 20 20 20 20 20 64 65 73 63 72             descr
29f30 69 70 74 69 6f 6e 2c 20 53 74 72 69 6e 67 43 6f  iption, StringCo
29f40 6d 70 61 72 69 73 6f 6e 2e 4f 72 64 69 6e 61 6c  mparison.Ordinal
29f50 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
29f60 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
29f70 20 20 20 61 64 64 45 6c 65 6d 65 6e 74 2e 53 65     addElement.Se
29f80 74 41 74 74 72 69 62 75 74 65 28 22 64 65 73 63  tAttribute("desc
29f90 72 69 70 74 69 6f 6e 22 2c 20 64 65 73 63 72 69  ription", descri
29fa0 70 74 69 6f 6e 29 3b 0d 0a 20 20 20 20 20 20 20  ption);..       
29fb0 20 20 20 20 20 20 20 20 20 64 69 72 74 79 20 3d           dirty =
29fc0 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20   true;..        
29fd0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
29fe0 20 20 20 20 20 73 74 72 69 6e 67 20 66 75 6c 6c       string full
29ff0 54 79 70 65 4e 61 6d 65 20 3d 20 53 74 72 69 6e  TypeName = Strin
2a000 67 2e 46 6f 72 6d 61 74 28 22 7b 30 7d 2c 20 7b  g.Format("{0}, {
2a010 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  1}",..          
2a020 20 20 20 20 20 20 74 79 70 65 4e 61 6d 65 2c 20        typeName, 
2a030 61 73 73 65 6d 62 6c 79 4e 61 6d 65 29 3b 0d 0a  assemblyName);..
2a040 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
2a050 20 28 21 53 74 72 69 6e 67 2e 45 71 75 61 6c 73   (!String.Equals
2a060 28 61 64 64 45 6c 65 6d 65 6e 74 2e 47 65 74 41  (addElement.GetA
2a070 74 74 72 69 62 75 74 65 28 22 74 79 70 65 22 29  ttribute("type")
2a080 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
2a090 20 20 20 20 20 20 20 66 75 6c 6c 54 79 70 65 4e         fullTypeN
2a0a0 61 6d 65 2c 20 53 74 72 69 6e 67 43 6f 6d 70 61  ame, StringCompa
2a0b0 72 69 73 6f 6e 2e 4f 72 64 69 6e 61 6c 29 29 0d  rison.Ordinal)).
2a0c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
2a0d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a0e0 61 64 64 45 6c 65 6d 65 6e 74 2e 53 65 74 41 74  addElement.SetAt
2a0f0 74 72 69 62 75 74 65 28 22 74 79 70 65 22 2c 20  tribute("type", 
2a100 66 75 6c 6c 54 79 70 65 4e 61 6d 65 29 3b 0d 0a  fullTypeName);..
2a110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a120 64 69 72 74 79 20 3d 20 74 72 75 65 3b 0d 0a 20  dirty = true;.. 
2a130 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
2a140 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
2a150 64 69 72 74 79 20 7c 7c 20 77 68 61 74 49 66 29  dirty || whatIf)
2a160 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
2a170 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2a180 20 69 66 20 28 76 65 72 62 6f 73 65 29 0d 0a 20   if (verbose).. 
2a190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a1a0 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75     TraceOps.Debu
2a1b0 67 41 6e 64 54 72 61 63 65 28 54 72 61 63 65 50  gAndTrace(TraceP
2a1c0 72 69 6f 72 69 74 79 2e 48 69 67 68 65 73 74 2c  riority.Highest,
2a1d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2a1e0 20 20 20 20 20 20 20 20 20 20 64 65 62 75 67 43            debugC
2a1f0 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61  allback, traceCa
2a200 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46  llback, String.F
2a210 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
2a220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a230 22 61 64 64 45 6c 65 6d 65 6e 74 20 3d 20 7b 30  "addElement = {0
2a240 7d 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 61  }", ForDisplay(a
2a250 64 64 45 6c 65 6d 65 6e 74 29 29 2c 0d 0a 20 20  ddElement)),..  
2a260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a270 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67        traceCateg
2a280 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
2a290 20 20 20 20 20 20 20 20 20 69 66 20 28 21 77 68           if (!wh
2a2a0 61 74 49 66 29 0d 0a 20 20 20 20 20 20 20 20 20  atIf)..         
2a2b0 20 20 20 20 20 20 20 20 20 20 20 64 6f 63 75 6d             docum
2a2c0 65 6e 74 2e 53 61 76 65 28 66 69 6c 65 4e 61 6d  ent.Save(fileNam
2a2d0 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e);....         
2a2e0 20 20 20 20 20 20 20 66 69 6c 65 73 4d 6f 64 69         filesModi
2a2f0 66 69 65 64 2b 2b 3b 0d 0a 0d 0a 20 20 20 20 20  fied++;....     
2a300 20 20 20 20 20 20 20 20 20 20 20 73 61 76 65 64             saved
2a310 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20   = true;..      
2a320 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
2a330 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72         return tr
2a340 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  ue;..        }..
2a350 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
2a360 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a370 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a380 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a390 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a3a0 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 5b 4d 65  /....        [Me
2a3b0 74 68 6f 64 49 6d 70 6c 28 4d 65 74 68 6f 64 49  thodImpl(MethodI
2a3c0 6d 70 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e 6c  mplOptions.NoInl
2a3d0 69 6e 69 6e 67 29 5d 0d 0a 20 20 20 20 20 20 20  ining)]..       
2a3e0 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
2a3f0 62 6f 6f 6c 20 52 65 6d 6f 76 65 44 62 50 72 6f  bool RemoveDbPro
2a400 76 69 64 65 72 46 61 63 74 6f 72 79 28 0d 0a 20  viderFactory(.. 
2a410 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
2a420 67 20 66 69 6c 65 4e 61 6d 65 2c 0d 0a 20 20 20  g fileName,..   
2a430 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
2a440 69 6e 76 61 72 69 61 6e 74 2c 0d 0a 20 20 20 20  invariant,..    
2a450 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61          bool wha
2a460 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  tIf,..          
2a470 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 0d    bool verbose,.
2a480 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66  .            ref
2a490 20 62 6f 6f 6c 20 73 61 76 65 64 2c 0d 0a 20 20   bool saved,..  
2a4a0 20 20 20 20 20 20 20 20 20 20 72 65 66 20 73 74            ref st
2a4b0 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20 20  ring error..    
2a4c0 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
2a4d0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
2a4e0 20 20 62 6f 6f 6c 20 64 69 72 74 79 20 3d 20 66    bool dirty = f
2a4f0 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alse;..         
2a500 20 20 20 58 6d 6c 44 6f 63 75 6d 65 6e 74 20 64     XmlDocument d
2a510 6f 63 75 6d 65 6e 74 20 3d 20 6e 65 77 20 58 6d  ocument = new Xm
2a520 6c 44 6f 63 75 6d 65 6e 74 28 29 3b 0d 0a 0d 0a  lDocument();....
2a530 20 20 20 20 20 20 20 20 20 20 20 20 64 6f 63 75              docu
2a540 6d 65 6e 74 2e 50 72 65 73 65 72 76 65 57 68 69  ment.PreserveWhi
2a550 74 65 73 70 61 63 65 20 3d 20 74 72 75 65 3b 0d  tespace = true;.
2a560 0a 20 20 20 20 20 20 20 20 20 20 20 20 64 6f 63  .            doc
2a570 75 6d 65 6e 74 2e 4c 6f 61 64 28 66 69 6c 65 4e  ument.Load(fileN
2a580 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ame);....       
2a590 20 20 20 20 20 58 6d 6c 45 6c 65 6d 65 6e 74 20       XmlElement 
2a5a0 61 64 64 45 6c 65 6d 65 6e 74 20 3d 20 64 6f 63  addElement = doc
2a5b0 75 6d 65 6e 74 2e 53 65 6c 65 63 74 53 69 6e 67  ument.SelectSing
2a5c0 6c 65 4e 6f 64 65 28 0d 0a 20 20 20 20 20 20 20  leNode(..       
2a5d0 20 20 20 20 20 20 20 20 20 53 74 72 69 6e 67 2e           String.
2a5e0 46 6f 72 6d 61 74 28 58 50 61 74 68 46 6f 72 41  Format(XPathForA
2a5f0 64 64 45 6c 65 6d 65 6e 74 2c 20 69 6e 76 61 72  ddElement, invar
2a600 69 61 6e 74 29 29 20 61 73 20 58 6d 6c 45 6c 65  iant)) as XmlEle
2a610 6d 65 6e 74 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ment;....       
2a620 20 20 20 20 20 69 66 20 28 61 64 64 45 6c 65 6d       if (addElem
2a630 65 6e 74 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20  ent != null)..  
2a640 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
2a650 20 20 20 20 20 20 20 20 20 20 20 20 20 61 64 64               add
2a660 45 6c 65 6d 65 6e 74 2e 50 61 72 65 6e 74 4e 6f  Element.ParentNo
2a670 64 65 2e 52 65 6d 6f 76 65 43 68 69 6c 64 28 61  de.RemoveChild(a
2a680 64 64 45 6c 65 6d 65 6e 74 29 3b 0d 0a 20 20 20  ddElement);..   
2a690 20 20 20 20 20 20 20 20 20 20 20 20 20 64 69 72               dir
2a6a0 74 79 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20  ty = true;..    
2a6b0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
2a6c0 20 20 20 20 20 20 20 20 20 58 6d 6c 45 6c 65 6d           XmlElem
2a6d0 65 6e 74 20 72 65 6d 6f 76 65 45 6c 65 6d 65 6e  ent removeElemen
2a6e0 74 20 3d 20 64 6f 63 75 6d 65 6e 74 2e 53 65 6c  t = document.Sel
2a6f0 65 63 74 53 69 6e 67 6c 65 4e 6f 64 65 28 0d 0a  ectSingleNode(..
2a700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a710 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 58 50  String.Format(XP
2a720 61 74 68 46 6f 72 52 65 6d 6f 76 65 45 6c 65 6d  athForRemoveElem
2a730 65 6e 74 2c 20 69 6e 76 61 72 69 61 6e 74 29 29  ent, invariant))
2a740 20 61 73 20 58 6d 6c 45 6c 65 6d 65 6e 74 3b 0d   as XmlElement;.
2a750 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
2a760 66 20 28 72 65 6d 6f 76 65 45 6c 65 6d 65 6e 74  f (removeElement
2a770 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   != null)..     
2a780 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
2a790 20 20 20 20 20 20 20 20 20 20 72 65 6d 6f 76 65            remove
2a7a0 45 6c 65 6d 65 6e 74 2e 50 61 72 65 6e 74 4e 6f  Element.ParentNo
2a7b0 64 65 2e 52 65 6d 6f 76 65 43 68 69 6c 64 28 72  de.RemoveChild(r
2a7c0 65 6d 6f 76 65 45 6c 65 6d 65 6e 74 29 3b 0d 0a  emoveElement);..
2a7d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a7e0 64 69 72 74 79 20 3d 20 74 72 75 65 3b 0d 0a 20  dirty = true;.. 
2a7f0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
2a800 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
2a810 64 69 72 74 79 20 7c 7c 20 77 68 61 74 49 66 29  dirty || whatIf)
2a820 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
2a830 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2a840 20 69 66 20 28 76 65 72 62 6f 73 65 29 0d 0a 20   if (verbose).. 
2a850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a860 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75     TraceOps.Debu
2a870 67 41 6e 64 54 72 61 63 65 28 54 72 61 63 65 50  gAndTrace(TraceP
2a880 72 69 6f 72 69 74 79 2e 48 69 67 68 65 73 74 2c  riority.Highest,
2a890 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2a8a0 20 20 20 20 20 20 20 20 20 20 64 65 62 75 67 43            debugC
2a8b0 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61  allback, traceCa
2a8c0 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46  llback, String.F
2a8d0 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
2a8e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a8f0 22 61 64 64 45 6c 65 6d 65 6e 74 20 3d 20 7b 30  "addElement = {0
2a900 7d 2c 20 72 65 6d 6f 76 65 45 6c 65 6d 65 6e 74  }, removeElement
2a910 20 3d 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20   = {1}",..      
2a920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a930 20 20 46 6f 72 44 69 73 70 6c 61 79 28 61 64 64    ForDisplay(add
2a940 45 6c 65 6d 65 6e 74 29 2c 20 46 6f 72 44 69 73  Element), ForDis
2a950 70 6c 61 79 28 72 65 6d 6f 76 65 45 6c 65 6d 65  play(removeEleme
2a960 6e 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  nt)),..         
2a970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
2a980 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
2a990 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2a9a0 20 20 69 66 20 28 21 77 68 61 74 49 66 29 0d 0a    if (!whatIf)..
2a9b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a9c0 20 20 20 20 64 6f 63 75 6d 65 6e 74 2e 53 61 76      document.Sav
2a9d0 65 28 66 69 6c 65 4e 61 6d 65 29 3b 0d 0a 0d 0a  e(fileName);....
2a9e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a9f0 66 69 6c 65 73 4d 6f 64 69 66 69 65 64 2b 2b 3b  filesModified++;
2aa00 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2aa10 20 20 20 20 73 61 76 65 64 20 3d 20 74 72 75 65      saved = true
2aa20 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
2aa30 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2aa40 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20  return true;..  
2aa50 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
2aa60 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
2aa70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2aa80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2aa90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2aaa0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
2aab0 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74        private st
2aac0 61 74 69 63 20 62 6f 6f 6c 20 50 72 6f 63 65 73  atic bool Proces
2aad0 73 44 62 50 72 6f 76 69 64 65 72 46 61 63 74 6f  sDbProviderFacto
2aae0 72 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ry(..           
2aaf0 20 73 74 72 69 6e 67 20 66 69 6c 65 4e 61 6d 65   string fileName
2ab00 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  ,..            s
2ab10 74 72 69 6e 67 20 69 6e 76 61 72 69 61 6e 74 2c  tring invariant,
2ab20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74  ..            st
2ab30 72 69 6e 67 20 6e 61 6d 65 2c 0d 0a 20 20 20 20  ring name,..    
2ab40 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 64          string d
2ab50 65 73 63 72 69 70 74 69 6f 6e 2c 0d 0a 20 20 20  escription,..   
2ab60 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
2ab70 74 79 70 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20  typeName,..     
2ab80 20 20 20 20 20 20 20 41 73 73 65 6d 62 6c 79 4e         AssemblyN
2ab90 61 6d 65 20 61 73 73 65 6d 62 6c 79 4e 61 6d 65  ame assemblyName
2aba0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6f  ,..            o
2abb0 62 6a 65 63 74 20 63 6c 69 65 6e 74 44 61 74 61  bject clientData
2abc0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  ,..            b
2abd0 6f 6f 6c 20 77 6f 77 36 34 2c 0d 0a 20 20 20 20  ool wow64,..    
2abe0 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 74 68 72          bool thr
2abf0 6f 77 4f 6e 4d 69 73 73 69 6e 67 2c 0d 0a 20 20  owOnMissing,..  
2ac00 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77            bool w
2ac10 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20  hatIf,..        
2ac20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65      bool verbose
2ac30 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  ,..            r
2ac40 65 66 20 62 6f 6f 6c 20 73 61 76 65 64 2c 0d 0a  ef bool saved,..
2ac50 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20              ref 
2ac60 73 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20  string error..  
2ac70 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
2ac80 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
2ac90 20 20 20 20 41 6e 79 50 61 69 72 3c 73 74 72 69      AnyPair<stri
2aca0 6e 67 2c 20 62 6f 6f 6c 3e 20 70 61 69 72 20 3d  ng, bool> pair =
2acb0 20 63 6c 69 65 6e 74 44 61 74 61 20 61 73 20 41   clientData as A
2acc0 6e 79 50 61 69 72 3c 73 74 72 69 6e 67 2c 20 62  nyPair<string, b
2acd0 6f 6f 6c 3e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ool>;....       
2ace0 20 20 20 20 20 69 66 20 28 70 61 69 72 20 3d 3d       if (pair ==
2acf0 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
2ad00 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
2ad10 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22         error = "
2ad20 69 6e 76 61 6c 69 64 20 66 72 61 6d 65 77 6f 72  invalid framewor
2ad30 6b 20 63 6f 6e 66 69 67 20 63 61 6c 6c 62 61 63  k config callbac
2ad40 6b 20 64 61 74 61 22 3b 0d 0a 20 20 20 20 20 20  k data";..      
2ad50 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
2ad60 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20   false;..       
2ad70 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
2ad80 20 20 20 20 20 20 69 66 20 28 70 61 69 72 2e 59        if (pair.Y
2ad90 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
2ada0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2adb0 20 20 72 65 74 75 72 6e 20 52 65 6d 6f 76 65 44    return RemoveD
2adc0 62 50 72 6f 76 69 64 65 72 46 61 63 74 6f 72 79  bProviderFactory
2add0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
2ade0 20 20 20 20 20 20 20 66 69 6c 65 4e 61 6d 65 2c         fileName,
2adf0 20 69 6e 76 61 72 69 61 6e 74 2c 20 77 68 61 74   invariant, what
2ae00 49 66 2c 20 76 65 72 62 6f 73 65 2c 20 72 65 66  If, verbose, ref
2ae10 20 73 61 76 65 64 2c 0d 0a 20 20 20 20 20 20 20   saved,..       
2ae20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66               ref
2ae30 20 65 72 72 6f 72 29 20 26 26 0d 0a 20 20 20 20   error) &&..    
2ae40 20 20 20 20 20 20 20 20 20 20 20 20 41 64 64 44              AddD
2ae50 62 50 72 6f 76 69 64 65 72 46 61 63 74 6f 72 79  bProviderFactory
2ae60 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
2ae70 20 20 20 20 20 20 20 66 69 6c 65 4e 61 6d 65 2c         fileName,
2ae80 20 69 6e 76 61 72 69 61 6e 74 2c 20 6e 61 6d 65   invariant, name
2ae90 2c 20 64 65 73 63 72 69 70 74 69 6f 6e 2c 20 74  , description, t
2aea0 79 70 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20  ypeName,..      
2aeb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61 73                as
2aec0 73 65 6d 62 6c 79 4e 61 6d 65 2c 20 77 68 61 74  semblyName, what
2aed0 49 66 2c 20 76 65 72 62 6f 73 65 2c 20 72 65 66  If, verbose, ref
2aee0 20 73 61 76 65 64 2c 20 72 65 66 20 65 72 72 6f   saved, ref erro
2aef0 72 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  r);..           
2af00 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
2af10 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20  else..          
2af20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
2af30 20 20 20 20 20 72 65 74 75 72 6e 20 52 65 6d 6f       return Remo
2af40 76 65 44 62 50 72 6f 76 69 64 65 72 46 61 63 74  veDbProviderFact
2af50 6f 72 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ory(..          
2af60 20 20 20 20 20 20 20 20 20 20 66 69 6c 65 4e 61            fileNa
2af70 6d 65 2c 20 69 6e 76 61 72 69 61 6e 74 2c 20 77  me, invariant, w
2af80 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 2c 20  hatIf, verbose, 
2af90 72 65 66 20 73 61 76 65 64 2c 0d 0a 20 20 20 20  ref saved,..    
2afa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2afb0 72 65 66 20 65 72 72 6f 72 29 3b 0d 0a 20 20 20  ref error);..   
2afc0 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
2afd0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23      }..        #
2afe0 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20  endregion....   
2aff0 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
2b000 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b010 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b020 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b030 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
2b040 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20          #region 
2b050 41 73 73 65 6d 62 6c 79 20 46 6f 6c 64 65 72 73  Assembly Folders
2b060 20 48 61 6e 64 6c 69 6e 67 0d 0a 20 20 20 20 20   Handling..     
2b070 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69     private stati
2b080 63 20 73 74 72 69 6e 67 20 47 65 74 41 73 73 65  c string GetAsse
2b090 6d 62 6c 79 46 6f 6c 64 65 72 73 4b 65 79 4e 61  mblyFoldersKeyNa
2b0a0 6d 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me(..           
2b0b0 20 73 74 72 69 6e 67 20 66 72 61 6d 65 77 6f 72   string framewor
2b0c0 6b 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20  kName,..        
2b0d0 20 20 20 20 56 65 72 73 69 6f 6e 20 66 72 61 6d      Version fram
2b0e0 65 77 6f 72 6b 56 65 72 73 69 6f 6e 2c 0d 0a 20  eworkVersion,.. 
2b0f0 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
2b100 67 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 2c 0d  g platformName,.
2b110 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f  .            boo
2b120 6c 20 77 6f 77 36 34 0d 0a 20 20 20 20 20 20 20  l wow64..       
2b130 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
2b140 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  {..            /
2b150 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  /..            /
2b160 2f 20 4e 4f 54 45 3a 20 54 68 69 73 20 72 65 67  / NOTE: This reg
2b170 69 73 74 72 79 20 6b 65 79 20 61 70 70 65 61 72  istry key appear
2b180 73 20 74 6f 20 61 6c 77 61 79 73 20 62 65 20 33  s to always be 3
2b190 32 2d 62 69 74 20 6f 6e 6c 79 0d 0a 20 20 20 20  2-bit only..    
2b1a0 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
2b1b0 20 28 69 2e 65 2e 20 70 72 6f 62 61 62 6c 79 20   (i.e. probably 
2b1c0 62 65 63 61 75 73 65 20 69 74 20 69 73 20 6f 6e  because it is on
2b1d0 6c 79 20 75 73 65 64 20 62 79 20 56 69 73 75 61  ly used by Visua
2b1e0 6c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  l..            /
2b1f0 2f 20 20 20 20 20 20 20 53 74 75 64 69 6f 2c 20  /       Studio, 
2b200 77 68 69 63 68 20 69 73 20 63 75 72 72 65 6e 74  which is current
2b210 6c 79 20 61 6c 77 61 79 73 20 33 32 2d 62 69 74  ly always 32-bit
2b220 20 6f 6e 6c 79 29 2e 0d 0a 20 20 20 20 20 20 20   only)...       
2b230 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
2b240 20 20 20 20 20 73 74 72 69 6e 67 20 66 6f 72 6d       string form
2b250 61 74 20 3d 20 21 53 74 72 69 6e 67 2e 49 73 4e  at = !String.IsN
2b260 75 6c 6c 4f 72 45 6d 70 74 79 28 70 6c 61 74 66  ullOrEmpty(platf
2b270 6f 72 6d 4e 61 6d 65 29 20 3f 0d 0a 20 20 20 20  ormName) ?..    
2b280 20 20 20 20 20 20 20 20 20 20 20 20 22 7b 30 7d              "{0}
2b290 5c 5c 4d 69 63 72 6f 73 6f 66 74 5c 5c 7b 31 7d  \\Microsoft\\{1}
2b2a0 5c 5c 76 7b 32 7d 5c 5c 7b 33 7d 5c 5c 41 73 73  \\v{2}\\{3}\\Ass
2b2b0 65 6d 62 6c 79 46 6f 6c 64 65 72 73 45 78 22 20  emblyFoldersEx" 
2b2c0 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  :..             
2b2d0 20 20 20 22 7b 30 7d 5c 5c 4d 69 63 72 6f 73 6f     "{0}\\Microso
2b2e0 66 74 5c 5c 7b 31 7d 5c 5c 76 7b 32 7d 5c 5c 41  ft\\{1}\\v{2}\\A
2b2f0 73 73 65 6d 62 6c 79 46 6f 6c 64 65 72 73 45 78  ssemblyFoldersEx
2b300 22 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  ";....          
2b310 20 20 72 65 74 75 72 6e 20 53 74 72 69 6e 67 2e    return String.
2b320 46 6f 72 6d 61 74 28 66 6f 72 6d 61 74 2c 20 47  Format(format, G
2b330 65 74 52 6f 6f 74 4b 65 79 4e 61 6d 65 28 77 6f  etRootKeyName(wo
2b340 77 36 34 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  w64),..         
2b350 20 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b         framework
2b360 4e 61 6d 65 2c 20 66 72 61 6d 65 77 6f 72 6b 56  Name, frameworkV
2b370 65 72 73 69 6f 6e 2c 20 70 6c 61 74 66 6f 72 6d  ersion, platform
2b380 4e 61 6d 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  Name);..        
2b390 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  }....        ///
2b3a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b3b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b3c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b3d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b3e0 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
2b3f0 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 62  private static b
2b400 6f 6f 6c 20 41 64 64 54 6f 41 73 73 65 6d 62 6c  ool AddToAssembl
2b410 79 46 6f 6c 64 65 72 73 28 0d 0a 20 20 20 20 20  yFolders(..     
2b420 20 20 20 20 20 20 20 4d 6f 63 6b 52 65 67 69 73         MockRegis
2b430 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79 2c 0d  tryKey rootKey,.
2b440 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72  .            str
2b450 69 6e 67 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d  ing frameworkNam
2b460 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
2b470 56 65 72 73 69 6f 6e 20 66 72 61 6d 65 77 6f 72  Version framewor
2b480 6b 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20  kVersion,..     
2b490 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 70 6c         string pl
2b4a0 61 74 66 6f 72 6d 4e 61 6d 65 2c 0d 0a 20 20 20  atformName,..   
2b4b0 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
2b4c0 73 75 62 4b 65 79 4e 61 6d 65 2c 0d 0a 20 20 20  subKeyName,..   
2b4d0 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
2b4e0 64 69 72 65 63 74 6f 72 79 2c 0d 0a 20 20 20 20  directory,..    
2b4f0 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 6f 77          bool wow
2b500 36 34 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  64,..           
2b510 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20   bool whatIf,.. 
2b520 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
2b530 76 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20  verbose,..      
2b540 20 20 20 20 20 20 72 65 66 20 73 74 72 69 6e 67        ref string
2b550 20 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20   error..        
2b560 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b      )..        {
2b570 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74  ..            st
2b580 72 69 6e 67 20 6b 65 79 4e 61 6d 65 20 3d 20 47  ring keyName = G
2b590 65 74 41 73 73 65 6d 62 6c 79 46 6f 6c 64 65 72  etAssemblyFolder
2b5a0 73 4b 65 79 4e 61 6d 65 28 0d 0a 20 20 20 20 20  sKeyName(..     
2b5b0 20 20 20 20 20 20 20 20 20 20 20 66 72 61 6d 65             frame
2b5c0 77 6f 72 6b 4e 61 6d 65 2c 20 66 72 61 6d 65 77  workName, framew
2b5d0 6f 72 6b 56 65 72 73 69 6f 6e 2c 20 70 6c 61 74  orkVersion, plat
2b5e0 66 6f 72 6d 4e 61 6d 65 2c 20 77 6f 77 36 34 29  formName, wow64)
2b5f0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
2b600 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69   using (MockRegi
2b610 73 74 72 79 4b 65 79 20 6b 65 79 20 3d 20 52 65  stryKey key = Re
2b620 67 69 73 74 72 79 48 65 6c 70 65 72 2e 4f 70 65  gistryHelper.Ope
2b630 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20  nSubKey(..      
2b640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f                ro
2b650 6f 74 4b 65 79 2c 20 6b 65 79 4e 61 6d 65 2c 20  otKey, keyName, 
2b660 74 72 75 65 2c 20 77 68 61 74 49 66 2c 20 76 65  true, whatIf, ve
2b670 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 20  rbose))..       
2b680 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
2b690 20 20 20 20 20 20 20 20 69 66 20 28 6b 65 79 20          if (key 
2b6a0 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
2b6b0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
2b6c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b6d0 20 65 72 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e   error = String.
2b6e0 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
2b6f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b700 20 22 63 6f 75 6c 64 20 6e 6f 74 20 6f 70 65 6e   "could not open
2b710 20 72 65 67 69 73 74 72 79 20 6b 65 79 3a 20 7b   registry key: {
2b720 30 7d 5c 5c 7b 31 7d 22 2c 0d 0a 20 20 20 20 20  0}\\{1}",..     
2b730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b740 20 20 20 72 6f 6f 74 4b 65 79 2c 20 6b 65 79 4e     rootKey, keyN
2b750 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ame);....       
2b760 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
2b770 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20  urn false;..    
2b780 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
2b790 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2b7a0 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69   using (MockRegi
2b7b0 73 74 72 79 4b 65 79 20 73 75 62 4b 65 79 20 3d  stryKey subKey =
2b7c0 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e   RegistryHelper.
2b7d0 43 72 65 61 74 65 53 75 62 4b 65 79 28 0d 0a 20  CreateSubKey(.. 
2b7e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b7f0 20 20 20 20 20 20 20 6b 65 79 2c 20 73 75 62 4b         key, subK
2b800 65 79 4e 61 6d 65 2c 20 77 68 61 74 49 66 2c 20  eyName, whatIf, 
2b810 76 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20  verbose))..     
2b820 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
2b830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b840 20 20 69 66 20 28 73 75 62 4b 65 79 20 3d 3d 20    if (subKey == 
2b850 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
2b860 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
2b870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b880 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 53 74        error = St
2b890 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
2b8a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b8b0 20 20 20 20 20 20 20 20 20 20 22 63 6f 75 6c 64            "could
2b8c0 20 6e 6f 74 20 63 72 65 61 74 65 20 72 65 67 69   not create regi
2b8d0 73 74 72 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c 7b  stry key: {0}\\{
2b8e0 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  1}",..          
2b8f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b900 20 20 6b 65 79 2c 20 73 75 62 4b 65 79 4e 61 6d    key, subKeyNam
2b910 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e);....         
2b920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
2b930 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20  eturn false;..  
2b940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b950 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
2b960 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73             Regis
2b970 74 72 79 48 65 6c 70 65 72 2e 53 65 74 56 61 6c  tryHelper.SetVal
2b980 75 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue(..           
2b990 20 20 20 20 20 20 20 20 20 20 20 20 20 73 75 62               sub
2b9a0 4b 65 79 2c 20 6e 75 6c 6c 2c 20 64 69 72 65 63  Key, null, direc
2b9b0 74 6f 72 79 2c 20 77 68 61 74 49 66 2c 20 76 65  tory, whatIf, ve
2b9c0 72 62 6f 73 65 29 3b 0d 0a 20 20 20 20 20 20 20  rbose);..       
2b9d0 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
2b9e0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
2b9f0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
2ba00 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d  true;..        }
2ba10 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
2ba20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ba30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ba40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ba50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ba60 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70  ///....        p
2ba70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 62 6f  rivate static bo
2ba80 6f 6c 20 52 65 6d 6f 76 65 46 72 6f 6d 41 73 73  ol RemoveFromAss
2ba90 65 6d 62 6c 79 46 6f 6c 64 65 72 73 28 0d 0a 20  emblyFolders(.. 
2baa0 20 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52             MockR
2bab0 65 67 69 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b  egistryKey rootK
2bac0 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ey,..           
2bad0 20 73 74 72 69 6e 67 20 66 72 61 6d 65 77 6f 72   string framewor
2bae0 6b 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20  kName,..        
2baf0 20 20 20 20 56 65 72 73 69 6f 6e 20 66 72 61 6d      Version fram
2bb00 65 77 6f 72 6b 56 65 72 73 69 6f 6e 2c 0d 0a 20  eworkVersion,.. 
2bb10 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
2bb20 67 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 2c 0d  g platformName,.
2bb30 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72  .            str
2bb40 69 6e 67 20 73 75 62 4b 65 79 4e 61 6d 65 2c 0d  ing subKeyName,.
2bb50 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f  .            boo
2bb60 6c 20 77 6f 77 36 34 2c 0d 0a 20 20 20 20 20 20  l wow64,..      
2bb70 20 20 20 20 20 20 62 6f 6f 6c 20 74 68 72 6f 77        bool throw
2bb80 4f 6e 4d 69 73 73 69 6e 67 2c 0d 0a 20 20 20 20  OnMissing,..    
2bb90 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61          bool wha
2bba0 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  tIf,..          
2bbb0 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 0d    bool verbose,.
2bbc0 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66  .            ref
2bbd0 20 73 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20   string error.. 
2bbe0 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
2bbf0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
2bc00 20 20 20 20 20 73 74 72 69 6e 67 20 6b 65 79 4e       string keyN
2bc10 61 6d 65 20 3d 20 47 65 74 41 73 73 65 6d 62 6c  ame = GetAssembl
2bc20 79 46 6f 6c 64 65 72 73 4b 65 79 4e 61 6d 65 28  yFoldersKeyName(
2bc30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2bc40 20 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c    frameworkName,
2bc50 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f   frameworkVersio
2bc60 6e 2c 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 2c  n, platformName,
2bc70 20 77 6f 77 36 34 29 3b 0d 0a 0d 0a 20 20 20 20   wow64);....    
2bc80 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 4d          using (M
2bc90 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 6b  ockRegistryKey k
2bca0 65 79 20 3d 20 52 65 67 69 73 74 72 79 48 65 6c  ey = RegistryHel
2bcb0 70 65 72 2e 4f 70 65 6e 53 75 62 4b 65 79 28 0d  per.OpenSubKey(.
2bcc0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2bcd0 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 6b 65       rootKey, ke
2bce0 79 4e 61 6d 65 2c 20 74 72 75 65 2c 20 77 68 61  yName, true, wha
2bcf0 74 49 66 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a  tIf, verbose))..
2bd00 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
2bd10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
2bd20 66 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d  f (key == null).
2bd30 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2bd40 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
2bd50 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
2bd60 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
2bd70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bd80 20 20 20 20 20 20 20 20 22 63 6f 75 6c 64 20 6e          "could n
2bd90 6f 74 20 6f 70 65 6e 20 72 65 67 69 73 74 72 79  ot open registry
2bda0 20 6b 65 79 3a 20 7b 30 7d 5c 5c 7b 31 7d 22 2c   key: {0}\\{1}",
2bdb0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2bdc0 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65            rootKe
2bdd0 79 2c 20 6b 65 79 4e 61 6d 65 29 3b 0d 0a 0d 0a  y, keyName);....
2bde0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bdf0 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
2be00 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
2be10 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
2be20 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79          Registry
2be30 48 65 6c 70 65 72 2e 44 65 6c 65 74 65 53 75 62  Helper.DeleteSub
2be40 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20  Key(..          
2be50 20 20 20 20 20 20 20 20 20 20 6b 65 79 2c 20 73            key, s
2be60 75 62 4b 65 79 4e 61 6d 65 2c 20 74 68 72 6f 77  ubKeyName, throw
2be70 4f 6e 4d 69 73 73 69 6e 67 2c 20 77 68 61 74 49  OnMissing, whatI
2be80 66 2c 20 76 65 72 62 6f 73 65 29 3b 0d 0a 20 20  f, verbose);..  
2be90 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
2bea0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
2beb0 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20  n true;..       
2bec0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f   }....        //
2bed0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2bee0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2bef0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2bf00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2bf10 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
2bf20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
2bf30 62 6f 6f 6c 20 50 72 6f 63 65 73 73 41 73 73 65  bool ProcessAsse
2bf40 6d 62 6c 79 46 6f 6c 64 65 72 73 28 0d 0a 20 20  mblyFolders(..  
2bf50 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65            MockRe
2bf60 67 69 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65  gistryKey rootKe
2bf70 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y,..            
2bf80 73 74 72 69 6e 67 20 66 72 61 6d 65 77 6f 72 6b  string framework
2bf90 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  Name,..         
2bfa0 20 20 20 56 65 72 73 69 6f 6e 20 66 72 61 6d 65     Version frame
2bfb0 77 6f 72 6b 56 65 72 73 69 6f 6e 2c 0d 0a 20 20  workVersion,..  
2bfc0 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
2bfd0 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 2c 0d 0a   platformName,..
2bfe0 20 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65              obje
2bff0 63 74 20 63 6c 69 65 6e 74 44 61 74 61 2c 0d 0a  ct clientData,..
2c000 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
2c010 20 77 6f 77 36 34 2c 0d 0a 20 20 20 20 20 20 20   wow64,..       
2c020 20 20 20 20 20 62 6f 6f 6c 20 74 68 72 6f 77 4f       bool throwO
2c030 6e 4d 69 73 73 69 6e 67 2c 0d 0a 20 20 20 20 20  nMissing,..     
2c040 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74         bool what
2c050 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  If,..           
2c060 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 0d 0a   bool verbose,..
2c070 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20              ref 
2c080 73 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20  string error..  
2c090 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
2c0a0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
2c0b0 20 20 20 20 41 6e 79 50 61 69 72 3c 73 74 72 69      AnyPair<stri
2c0c0 6e 67 2c 20 62 6f 6f 6c 3e 20 70 61 69 72 20 3d  ng, bool> pair =
2c0d0 20 63 6c 69 65 6e 74 44 61 74 61 20 61 73 20 41   clientData as A
2c0e0 6e 79 50 61 69 72 3c 73 74 72 69 6e 67 2c 20 62  nyPair<string, b
2c0f0 6f 6f 6c 3e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ool>;....       
2c100 20 20 20 20 20 69 66 20 28 70 61 69 72 20 3d 3d       if (pair ==
2c110 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
2c120 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
2c130 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22         error = "
2c140 69 6e 76 61 6c 69 64 20 66 72 61 6d 65 77 6f 72  invalid framewor
2c150 6b 20 63 61 6c 6c 62 61 63 6b 20 64 61 74 61 22  k callback data"
2c160 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
2c170 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
2c180 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
2c190 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
2c1a0 66 20 28 70 61 69 72 2e 59 29 0d 0a 20 20 20 20  f (pair.Y)..    
2c1b0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
2c1c0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
2c1d0 6e 20 52 65 6d 6f 76 65 46 72 6f 6d 41 73 73 65  n RemoveFromAsse
2c1e0 6d 62 6c 79 46 6f 6c 64 65 72 73 28 0d 0a 20 20  mblyFolders(..  
2c1f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c200 20 20 72 6f 6f 74 4b 65 79 2c 20 66 72 61 6d 65    rootKey, frame
2c210 77 6f 72 6b 4e 61 6d 65 2c 20 66 72 61 6d 65 77  workName, framew
2c220 6f 72 6b 56 65 72 73 69 6f 6e 2c 20 70 6c 61 74  orkVersion, plat
2c230 66 6f 72 6d 4e 61 6d 65 2c 0d 0a 20 20 20 20 20  formName,..     
2c240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4c                 L
2c250 65 67 61 63 79 50 72 6f 6a 65 63 74 4e 61 6d 65  egacyProjectName
2c260 2c 20 77 6f 77 36 34 2c 20 66 61 6c 73 65 2c 20  , wow64, false, 
2c270 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 2c  whatIf, verbose,
2c280 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2c290 20 20 20 20 20 20 72 65 66 20 65 72 72 6f 72 29        ref error)
2c2a0 20 26 26 0d 0a 20 20 20 20 20 20 20 20 20 20 20   &&..           
2c2b0 20 20 20 20 20 41 64 64 54 6f 41 73 73 65 6d 62       AddToAssemb
2c2c0 6c 79 46 6f 6c 64 65 72 73 28 0d 0a 20 20 20 20  lyFolders(..    
2c2d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c2e0 72 6f 6f 74 4b 65 79 2c 20 66 72 61 6d 65 77 6f  rootKey, framewo
2c2f0 72 6b 4e 61 6d 65 2c 20 66 72 61 6d 65 77 6f 72  rkName, framewor
2c300 6b 56 65 72 73 69 6f 6e 2c 20 70 6c 61 74 66 6f  kVersion, platfo
2c310 72 6d 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20  rmName,..       
2c320 20 20 20 20 20 20 20 20 20 20 20 20 20 50 72 6f               Pro
2c330 6a 65 63 74 4e 61 6d 65 2c 20 70 61 69 72 2e 58  jectName, pair.X
2c340 2c 20 77 6f 77 36 34 2c 20 77 68 61 74 49 66 2c  , wow64, whatIf,
2c350 20 76 65 72 62 6f 73 65 2c 20 72 65 66 20 65 72   verbose, ref er
2c360 72 6f 72 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ror);..         
2c370 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
2c380 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20    else..        
2c390 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
2c3a0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 52 65         return Re
2c3b0 6d 6f 76 65 46 72 6f 6d 41 73 73 65 6d 62 6c 79  moveFromAssembly
2c3c0 46 6f 6c 64 65 72 73 28 0d 0a 20 20 20 20 20 20  Folders(..      
2c3d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f                ro
2c3e0 6f 74 4b 65 79 2c 20 66 72 61 6d 65 77 6f 72 6b  otKey, framework
2c3f0 4e 61 6d 65 2c 20 66 72 61 6d 65 77 6f 72 6b 56  Name, frameworkV
2c400 65 72 73 69 6f 6e 2c 20 70 6c 61 74 66 6f 72 6d  ersion, platform
2c410 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  Name,..         
2c420 20 20 20 20 20 20 20 20 20 20 20 50 72 6f 6a 65             Proje
2c430 63 74 4e 61 6d 65 2c 20 77 6f 77 36 34 2c 20 74  ctName, wow64, t
2c440 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 2c 20 77  hrowOnMissing, w
2c450 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 2c 0d  hatIf, verbose,.
2c460 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2c470 20 20 20 20 20 72 65 66 20 65 72 72 6f 72 29 3b       ref error);
2c480 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
2c490 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
2c4a0 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
2c4b0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
2c4c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c4d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c4e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c4f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c500 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65  /....        #re
2c510 67 69 6f 6e 20 56 69 73 75 61 6c 20 53 74 75 64  gion Visual Stud
2c520 69 6f 20 48 61 6e 64 6c 69 6e 67 0d 0a 20 20 20  io Handling..   
2c530 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61       private sta
2c540 74 69 63 20 73 74 72 69 6e 67 20 47 65 74 56 73  tic string GetVs
2c550 52 6f 6f 74 4b 65 79 4e 61 6d 65 28 0d 0a 20 20  RootKeyName(..  
2c560 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77            bool w
2c570 6f 77 36 34 0d 0a 20 20 20 20 20 20 20 20 20 20  ow64..          
2c580 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a    )..        {..
2c590 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
2c5a0 72 6e 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  rn String.Format
2c5b0 28 22 7b 30 7d 5c 5c 4d 69 63 72 6f 73 6f 66 74  ("{0}\\Microsoft
2c5c0 5c 5c 56 69 73 75 61 6c 53 74 75 64 69 6f 22 2c  \\VisualStudio",
2c5d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2c5e0 20 20 47 65 74 52 6f 6f 74 4b 65 79 4e 61 6d 65    GetRootKeyName
2c5f0 28 77 6f 77 36 34 29 29 3b 0d 0a 20 20 20 20 20  (wow64));..     
2c600 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
2c610 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c620 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c630 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c640 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c650 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
2c660 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69     private stati
2c670 63 20 73 74 72 69 6e 67 20 47 65 74 56 73 4b 65  c string GetVsKe
2c680 79 4e 61 6d 65 28 0d 0a 20 20 20 20 20 20 20 20  yName(..        
2c690 20 20 20 20 56 65 72 73 69 6f 6e 20 76 73 56 65      Version vsVe
2c6a0 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20  rsion,..        
2c6b0 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34 0d 0a      bool wow64..
2c6c0 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
2c6d0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
2c6e0 20 20 20 20 20 20 69 66 20 28 76 73 56 65 72 73        if (vsVers
2c6f0 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  ion == null)..  
2c700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
2c710 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20  turn null;....  
2c720 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
2c730 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d   String.Format(.
2c740 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2c750 20 22 7b 30 7d 5c 5c 7b 31 7d 22 2c 20 47 65 74   "{0}\\{1}", Get
2c760 56 73 52 6f 6f 74 4b 65 79 4e 61 6d 65 28 77 6f  VsRootKeyName(wo
2c770 77 36 34 29 2c 20 76 73 56 65 72 73 69 6f 6e 29  w64), vsVersion)
2c780 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  ;..        }....
2c790 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
2c7a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c7b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c7c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c7d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
2c7e0 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69  ...        #regi
2c7f0 6f 6e 20 56 69 73 75 61 6c 20 53 74 75 64 69 6f  on Visual Studio
2c800 20 44 61 74 61 20 53 6f 75 72 63 65 20 48 61 6e   Data Source Han
2c810 64 6c 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 70  dling..        p
2c820 72 69 76 61 74 65 20 73 74 61 74 69 63 20 62 6f  rivate static bo
2c830 6f 6c 20 41 64 64 56 73 44 61 74 61 53 6f 75 72  ol AddVsDataSour
2c840 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ce(..           
2c850 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79   MockRegistryKey
2c860 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20 20 20   rootKey,..     
2c870 20 20 20 20 20 20 20 56 65 72 73 69 6f 6e 20 76         Version v
2c880 73 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20  sVersion,..     
2c890 20 20 20 20 20 20 20 50 61 63 6b 61 67 65 20 70         Package p
2c8a0 61 63 6b 61 67 65 2c 0d 0a 20 20 20 20 20 20 20  ackage,..       
2c8b0 20 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34 2c       bool wow64,
2c8c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
2c8d0 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20  ol whatIf,..    
2c8e0 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65 72          bool ver
2c8f0 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  bose,..         
2c900 20 20 20 72 65 66 20 73 74 72 69 6e 67 20 65 72     ref string er
2c910 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ror..           
2c920 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20   )..        {.. 
2c930 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76             if (v
2c940 73 56 65 72 73 69 6f 6e 20 3d 3d 20 6e 75 6c 6c  sVersion == null
2c950 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
2c960 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2c970 20 20 65 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c    error = "inval
2c980 69 64 20 56 53 20 76 65 72 73 69 6f 6e 22 3b 0d  id VS version";.
2c990 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2c9a0 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
2c9b0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
2c9c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
2c9d0 28 70 61 63 6b 61 67 65 20 3d 3d 20 6e 75 6c 6c  (package == null
2c9e0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
2c9f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2ca00 20 20 65 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c    error = "inval
2ca10 69 64 20 56 53 20 70 61 63 6b 61 67 65 22 3b 0d  id VS package";.
2ca20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2ca30 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
2ca40 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
2ca50 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72  .            str
2ca60 69 6e 67 20 6b 65 79 4e 61 6d 65 20 3d 20 47 65  ing keyName = Ge
2ca70 74 56 73 4b 65 79 4e 61 6d 65 28 76 73 56 65 72  tVsKeyName(vsVer
2ca80 73 69 6f 6e 2c 20 77 6f 77 36 34 29 3b 0d 0a 0d  sion, wow64);...
2ca90 0a 20 20 20 20 20 20 20 20 20 20 20 20 75 73 69  .            usi
2caa0 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73 74 72 79  ng (MockRegistry
2cab0 4b 65 79 20 6b 65 79 20 3d 20 52 65 67 69 73 74  Key key = Regist
2cac0 72 79 48 65 6c 70 65 72 2e 4f 70 65 6e 53 75 62  ryHelper.OpenSub
2cad0 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20  Key(..          
2cae0 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65            rootKe
2caf0 79 2c 20 6b 65 79 4e 61 6d 65 2c 20 66 61 6c 73  y, keyName, fals
2cb00 65 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f  e, whatIf, verbo
2cb10 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  se))..          
2cb20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
2cb30 20 20 20 20 20 69 66 20 28 6b 65 79 20 3d 3d 20       if (key == 
2cb40 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
2cb50 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
2cb60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72                er
2cb70 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72  ror = String.For
2cb80 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
2cb90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 63                "c
2cba0 6f 75 6c 64 20 6e 6f 74 20 6f 70 65 6e 20 72 65  ould not open re
2cbb0 67 69 73 74 72 79 20 6b 65 79 3a 20 7b 30 7d 5c  gistry key: {0}\
2cbc0 5c 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20  \{1}",..        
2cbd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cbe0 72 6f 6f 74 4b 65 79 2c 20 6b 65 79 4e 61 6d 65  rootKey, keyName
2cbf0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
2cc00 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
2cc10 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20   false;..       
2cc20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
2cc30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 75 73                us
2cc40 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73 74 72  ing (MockRegistr
2cc50 79 4b 65 79 20 73 75 62 4b 65 79 20 3d 20 52 65  yKey subKey = Re
2cc60 67 69 73 74 72 79 48 65 6c 70 65 72 2e 4f 70 65  gistryHelper.Ope
2cc70 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20  nSubKey(..      
2cc80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cc90 20 20 6b 65 79 2c 20 22 44 61 74 61 53 6f 75 72    key, "DataSour
2cca0 63 65 73 22 2c 20 74 72 75 65 2c 20 77 68 61 74  ces", true, what
2ccb0 49 66 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a 20  If, verbose)).. 
2ccc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
2ccd0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2cce0 20 20 20 20 20 20 69 66 20 28 73 75 62 4b 65 79        if (subKey
2ccf0 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
2cd00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
2cd10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2cd20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20            error 
2cd30 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  = String.Format(
2cd40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2cd50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 63                "c
2cd60 6f 75 6c 64 20 6e 6f 74 20 6f 70 65 6e 20 72 65  ould not open re
2cd70 67 69 73 74 72 79 20 6b 65 79 3a 20 7b 30 7d 5c  gistry key: {0}\
2cd80 5c 44 61 74 61 53 6f 75 72 63 65 73 22 2c 0d 0a  \DataSources",..
2cd90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cda0 20 20 20 20 20 20 20 20 20 20 20 20 6b 65 79 29              key)
2cdb0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
2cdc0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
2cdd0 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20  urn false;..    
2cde0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cdf0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
2ce00 20 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28           using (
2ce10 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20  MockRegistryKey 
2ce20 64 61 74 61 53 6f 75 72 63 65 4b 65 79 20 3d 0d  dataSourceKey =.
2ce30 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2ce40 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67               Reg
2ce50 69 73 74 72 79 48 65 6c 70 65 72 2e 43 72 65 61  istryHelper.Crea
2ce60 74 65 53 75 62 4b 65 79 28 73 75 62 4b 65 79 2c  teSubKey(subKey,
2ce70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2ce80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 61                pa
2ce90 63 6b 61 67 65 2e 44 61 74 61 53 6f 75 72 63 65  ckage.DataSource
2cea0 49 64 2e 54 6f 53 74 72 69 6e 67 28 56 73 49 64  Id.ToString(VsId
2ceb0 46 6f 72 6d 61 74 29 2c 0d 0a 20 20 20 20 20 20  Format),..      
2cec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ced0 20 20 20 20 20 20 77 68 61 74 49 66 2c 20 76 65        whatIf, ve
2cee0 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 20  rbose))..       
2cef0 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
2cf00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cf10 20 20 20 20 20 20 20 20 69 66 20 28 64 61 74 61          if (data
2cf20 53 6f 75 72 63 65 4b 65 79 20 3d 3d 20 6e 75 6c  SourceKey == nul
2cf30 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
2cf40 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
2cf50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cf60 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72             error
2cf70 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74   = String.Format
2cf80 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
2cf90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cfa0 20 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20 63 72     "could not cr
2cfb0 65 61 74 65 20 72 65 67 69 73 74 72 79 20 6b 65  eate registry ke
2cfc0 79 3a 20 7b 30 7d 5c 5c 7b 31 7d 22 2c 20 6b 65  y: {0}\\{1}", ke
2cfd0 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y,..            
2cfe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cff0 20 20 20 20 70 61 63 6b 61 67 65 2e 44 61 74 61      package.Data
2d000 53 6f 75 72 63 65 49 64 2e 54 6f 53 74 72 69 6e  SourceId.ToStrin
2d010 67 28 56 73 49 64 46 6f 72 6d 61 74 29 29 3b 0d  g(VsIdFormat));.
2d020 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
2d030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
2d040 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20  eturn false;..  
2d050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d060 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
2d070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d080 20 20 20 52 65 67 69 73 74 72 79 48 65 6c 70 65     RegistryHelpe
2d090 72 2e 53 65 74 56 61 6c 75 65 28 0d 0a 20 20 20  r.SetValue(..   
2d0a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d0b0 20 20 20 20 20 20 20 20 20 64 61 74 61 53 6f 75           dataSou
2d0c0 72 63 65 4b 65 79 2c 20 6e 75 6c 6c 2c 20 53 74  rceKey, null, St
2d0d0 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
2d0e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d0f0 20 20 20 20 20 20 20 20 20 20 22 7b 30 7d 20 44            "{0} D
2d100 61 74 61 62 61 73 65 20 46 69 6c 65 22 2c 20 50  atabase File", P
2d110 72 6f 6a 65 63 74 4e 61 6d 65 29 2c 20 77 68 61  rojectName), wha
2d120 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  tIf,..          
2d130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d140 20 20 76 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20    verbose);.... 
2d150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d160 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
2d170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d180 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 54 68 69 73     // NOTE: This
2d190 20 76 61 6c 75 65 20 69 73 20 6e 65 77 20 61 73   value is new as
2d1a0 20 6f 66 20 31 2e 30 2e 38 33 2e 30 2e 0d 0a 20   of 1.0.83.0... 
2d1b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d1c0 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
2d1d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d1e0 20 20 20 52 65 67 69 73 74 72 79 48 65 6c 70 65     RegistryHelpe
2d1f0 72 2e 53 65 74 56 61 6c 75 65 28 0d 0a 20 20 20  r.SetValue(..   
2d200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d210 20 20 20 20 20 20 20 20 20 64 61 74 61 53 6f 75           dataSou
2d220 72 63 65 4b 65 79 2c 20 22 44 65 66 61 75 6c 74  rceKey, "Default
2d230 50 72 6f 76 69 64 65 72 22 2c 0d 0a 20 20 20 20  Provider",..    
2d240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d250 20 20 20 20 20 20 20 20 70 61 63 6b 61 67 65 2e          package.
2d260 44 61 74 61 50 72 6f 76 69 64 65 72 49 64 2e 54  DataProviderId.T
2d270 6f 53 74 72 69 6e 67 28 56 73 49 64 46 6f 72 6d  oString(VsIdForm
2d280 61 74 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  at),..          
2d290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d2a0 20 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73    whatIf, verbos
2d2b0 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e);....         
2d2c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52                 R
2d2d0 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 43 72  egistryHelper.Cr
2d2e0 65 61 74 65 53 75 62 4b 65 79 28 64 61 74 61 53  eateSubKey(dataS
2d2f0 6f 75 72 63 65 4b 65 79 2c 0d 0a 20 20 20 20 20  ourceKey,..     
2d300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d310 20 20 20 20 20 20 20 53 74 72 69 6e 67 2e 46 6f         String.Fo
2d320 72 6d 61 74 28 22 53 75 70 70 6f 72 74 69 6e 67  rmat("Supporting
2d330 50 72 6f 76 69 64 65 72 73 5c 5c 7b 30 7d 22 2c  Providers\\{0}",
2d340 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2d350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 61                pa
2d360 63 6b 61 67 65 2e 44 61 74 61 50 72 6f 76 69 64  ckage.DataProvid
2d370 65 72 49 64 2e 54 6f 53 74 72 69 6e 67 28 56 73  erId.ToString(Vs
2d380 49 64 46 6f 72 6d 61 74 29 29 2c 0d 0a 20 20 20  IdFormat)),..   
2d390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d3a0 20 20 20 20 20 20 20 20 20 77 68 61 74 49 66 2c           whatIf,
2d3b0 20 76 65 72 62 6f 73 65 29 3b 0d 0a 20 20 20 20   verbose);..    
2d3c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d3d0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
2d3e0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
2d3f0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
2d400 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d     return true;.
2d410 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....  
2d420 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
2d430 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d440 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d450 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d460 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
2d470 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
2d480 20 73 74 61 74 69 63 20 62 6f 6f 6c 20 52 65 6d   static bool Rem
2d490 6f 76 65 56 73 44 61 74 61 53 6f 75 72 63 65 28  oveVsDataSource(
2d4a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 4d 6f  ..            Mo
2d4b0 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 72 6f  ckRegistryKey ro
2d4c0 6f 74 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20  otKey,..        
2d4d0 20 20 20 20 56 65 72 73 69 6f 6e 20 76 73 56 65      Version vsVe
2d4e0 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20  rsion,..        
2d4f0 20 20 20 20 50 61 63 6b 61 67 65 20 70 61 63 6b      Package pack
2d500 61 67 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  age,..          
2d510 20 20 62 6f 6f 6c 20 77 6f 77 36 34 2c 0d 0a 20    bool wow64,.. 
2d520 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
2d530 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20  whatIf,..       
2d540 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73       bool verbos
2d550 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
2d560 72 65 66 20 73 74 72 69 6e 67 20 65 72 72 6f 72  ref string error
2d570 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d  ..            ).
2d580 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
2d590 20 20 20 20 20 20 20 20 69 66 20 28 76 73 56 65          if (vsVe
2d5a0 72 73 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  rsion == null)..
2d5b0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
2d5c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
2d5d0 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64 20  rror = "invalid 
2d5e0 56 53 20 76 65 72 73 69 6f 6e 22 3b 0d 0a 20 20  VS version";..  
2d5f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
2d600 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20  turn false;..   
2d610 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
2d620 20 20 20 20 20 20 20 20 20 20 69 66 20 28 70 61            if (pa
2d630 63 6b 61 67 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  ckage == null)..
2d640 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
2d650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
2d660 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64 20  rror = "invalid 
2d670 56 53 20 70 61 63 6b 61 67 65 22 3b 0d 0a 20 20  VS package";..  
2d680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
2d690 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20  turn false;..   
2d6a0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
2d6b0 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
2d6c0 20 6b 65 79 4e 61 6d 65 20 3d 20 47 65 74 56 73   keyName = GetVs
2d6d0 4b 65 79 4e 61 6d 65 28 76 73 56 65 72 73 69 6f  KeyName(vsVersio
2d6e0 6e 2c 20 77 6f 77 36 34 29 3b 0d 0a 0d 0a 20 20  n, wow64);....  
2d6f0 20 20 20 20 20 20 20 20 20 20 75 73 69 6e 67 20            using 
2d700 28 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79  (MockRegistryKey
2d710 20 6b 65 79 20 3d 20 52 65 67 69 73 74 72 79 48   key = RegistryH
2d720 65 6c 70 65 72 2e 4f 70 65 6e 53 75 62 4b 65 79  elper.OpenSubKey
2d730 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
2d740 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20         rootKey, 
2d750 6b 65 79 4e 61 6d 65 2c 20 66 61 6c 73 65 2c 20  keyName, false, 
2d760 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29  whatIf, verbose)
2d770 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
2d780 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2d790 20 20 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75 6c    if (key == nul
2d7a0 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
2d7b0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
2d7c0 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72             error
2d7d0 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74   = String.Format
2d7e0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
2d7f0 20 20 20 20 20 20 20 20 20 20 20 22 63 6f 75 6c             "coul
2d800 64 20 6e 6f 74 20 6f 70 65 6e 20 72 65 67 69 73  d not open regis
2d810 74 72 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c 7b 31  try key: {0}\\{1
2d820 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }",..           
2d830 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f               roo
2d840 74 4b 65 79 2c 20 6b 65 79 4e 61 6d 65 29 3b 0d  tKey, keyName);.
2d850 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
2d860 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
2d870 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lse;..          
2d880 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
2d890 20 20 20 20 20 20 20 20 20 20 20 75 73 69 6e 67             using
2d8a0 20 28 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65   (MockRegistryKe
2d8b0 79 20 73 75 62 4b 65 79 20 3d 20 52 65 67 69 73  y subKey = Regis
2d8c0 74 72 79 48 65 6c 70 65 72 2e 4f 70 65 6e 53 75  tryHelper.OpenSu
2d8d0 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20  bKey(..         
2d8e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6b                 k
2d8f0 65 79 2c 20 22 44 61 74 61 53 6f 75 72 63 65 73  ey, "DataSources
2d900 22 2c 20 74 72 75 65 2c 20 77 68 61 74 49 66 2c  ", true, whatIf,
2d910 20 76 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 20   verbose))..    
2d920 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
2d930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d940 20 20 20 69 66 20 28 73 75 62 4b 65 79 20 3d 3d     if (subKey ==
2d950 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
2d960 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
2d970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d980 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 53         error = S
2d990 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
2d9a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d9b0 20 20 20 20 20 20 20 20 20 20 20 22 63 6f 75 6c             "coul
2d9c0 64 20 6e 6f 74 20 6f 70 65 6e 20 72 65 67 69 73  d not open regis
2d9d0 74 72 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c 44 61  try key: {0}\\Da
2d9e0 74 61 53 6f 75 72 63 65 73 22 2c 0d 0a 20 20 20  taSources",..   
2d9f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2da00 20 20 20 20 20 20 20 20 20 6b 65 79 29 3b 0d 0a           key);..
2da10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2da20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
2da30 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20   false;..       
2da40 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
2da50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2da60 20 20 20 20 20 20 52 65 67 69 73 74 72 79 48 65        RegistryHe
2da70 6c 70 65 72 2e 44 65 6c 65 74 65 53 75 62 4b 65  lper.DeleteSubKe
2da80 79 54 72 65 65 28 0d 0a 20 20 20 20 20 20 20 20  yTree(..        
2da90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2daa0 73 75 62 4b 65 79 2c 20 70 61 63 6b 61 67 65 2e  subKey, package.
2dab0 44 61 74 61 53 6f 75 72 63 65 49 64 2e 54 6f 53  DataSourceId.ToS
2dac0 74 72 69 6e 67 28 56 73 49 64 46 6f 72 6d 61 74  tring(VsIdFormat
2dad0 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
2dae0 20 20 20 20 20 20 20 20 20 20 20 20 77 68 61 74              what
2daf0 49 66 2c 20 76 65 72 62 6f 73 65 29 3b 0d 0a 20  If, verbose);.. 
2db00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
2db10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
2db20 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  ...            r
2db30 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20  eturn true;..   
2db40 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
2db50 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
2db60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2db70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2db80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2db90 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
2dba0 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61       private sta
2dbb0 74 69 63 20 62 6f 6f 6c 20 50 72 6f 63 65 73 73  tic bool Process
2dbc0 56 73 44 61 74 61 53 6f 75 72 63 65 28 0d 0a 20  VsDataSource(.. 
2dbd0 20 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52             MockR
2dbe0 65 67 69 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b  egistryKey rootK
2dbf0 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ey,..           
2dc00 20 56 65 72 73 69 6f 6e 20 76 73 56 65 72 73 69   Version vsVersi
2dc10 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  on,..           
2dc20 20 50 61 63 6b 61 67 65 20 70 61 63 6b 61 67 65   Package package
2dc30 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6f  ,..            o
2dc40 62 6a 65 63 74 20 63 6c 69 65 6e 74 44 61 74 61  bject clientData
2dc50 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  ,..            b
2dc60 6f 6f 6c 20 77 6f 77 36 34 2c 0d 0a 20 20 20 20  ool wow64,..    
2dc70 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 74 68 72          bool thr
2dc80 6f 77 4f 6e 4d 69 73 73 69 6e 67 2c 0d 0a 20 20  owOnMissing,..  
2dc90 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77            bool w
2dca0 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20  hatIf,..        
2dcb0 20 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65      bool verbose
2dcc0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  ,..            r
2dcd0 65 66 20 73 74 72 69 6e 67 20 65 72 72 6f 72 0d  ef string error.
2dce0 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a  .            )..
2dcf0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
2dd00 20 20 20 20 20 20 20 69 66 20 28 70 61 63 6b 61         if (packa
2dd10 67 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ge == null)..   
2dd20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
2dd30 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
2dd40 72 20 3d 20 22 69 6e 76 61 6c 69 64 20 56 53 20  r = "invalid VS 
2dd50 70 61 63 6b 61 67 65 22 3b 0d 0a 20 20 20 20 20  package";..     
2dd60 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
2dd70 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  n false;..      
2dd80 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
2dd90 20 20 20 20 20 20 20 41 6e 79 50 61 69 72 3c 73         AnyPair<s
2dda0 74 72 69 6e 67 2c 20 62 6f 6f 6c 3e 20 70 61 69  tring, bool> pai
2ddb0 72 20 3d 20 63 6c 69 65 6e 74 44 61 74 61 20 61  r = clientData a
2ddc0 73 20 41 6e 79 50 61 69 72 3c 73 74 72 69 6e 67  s AnyPair<string
2ddd0 2c 20 62 6f 6f 6c 3e 3b 0d 0a 0d 0a 20 20 20 20  , bool>;....    
2dde0 20 20 20 20 20 20 20 20 69 66 20 28 70 61 69 72          if (pair
2ddf0 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
2de00 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
2de10 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20            error 
2de20 3d 20 22 69 6e 76 61 6c 69 64 20 56 53 20 63 61  = "invalid VS ca
2de30 6c 6c 62 61 63 6b 20 64 61 74 61 22 3b 0d 0a 20  llback data";.. 
2de40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
2de50 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20  eturn false;..  
2de60 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
2de70 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 70             if (p
2de80 61 69 72 2e 59 29 0d 0a 20 20 20 20 20 20 20 20  air.Y)..        
2de90 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
2dea0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 41 64         return Ad
2deb0 64 56 73 44 61 74 61 53 6f 75 72 63 65 28 0d 0a  dVsDataSource(..
2dec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ded0 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 76 73 56      rootKey, vsV
2dee0 65 72 73 69 6f 6e 2c 20 70 61 63 6b 61 67 65 2c  ersion, package,
2def0 20 77 6f 77 36 34 2c 20 77 68 61 74 49 66 2c 20   wow64, whatIf, 
2df00 76 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20  verbose,..      
2df10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
2df20 66 20 65 72 72 6f 72 29 3b 0d 0a 20 20 20 20 20  f error);..     
2df30 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
2df40 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20        else..    
2df50 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
2df60 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
2df70 6e 20 52 65 6d 6f 76 65 56 73 44 61 74 61 53 6f  n RemoveVsDataSo
2df80 75 72 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20  urce(..         
2df90 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b             rootK
2dfa0 65 79 2c 20 76 73 56 65 72 73 69 6f 6e 2c 20 70  ey, vsVersion, p
2dfb0 61 63 6b 61 67 65 2c 20 77 6f 77 36 34 2c 20 77  ackage, wow64, w
2dfc0 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 2c 0d  hatIf, verbose,.
2dfd0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2dfe0 20 20 20 20 20 72 65 66 20 65 72 72 6f 72 29 3b       ref error);
2dff0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
2e000 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
2e010 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
2e020 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
2e030 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e040 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e050 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e060 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e070 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65  /....        #re
2e080 67 69 6f 6e 20 56 69 73 75 61 6c 20 53 74 75 64  gion Visual Stud
2e090 69 6f 20 44 61 74 61 20 50 72 6f 76 69 64 65 72  io Data Provider
2e0a0 20 48 61 6e 64 6c 69 6e 67 0d 0a 20 20 20 20 20   Handling..     
2e0b0 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69     private stati
2e0c0 63 20 62 6f 6f 6c 20 41 64 64 56 73 44 61 74 61  c bool AddVsData
2e0d0 50 72 6f 76 69 64 65 72 28 0d 0a 20 20 20 20 20  Provider(..     
2e0e0 20 20 20 20 20 20 20 4d 6f 63 6b 52 65 67 69 73         MockRegis
2e0f0 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79 2c 0d  tryKey rootKey,.
2e100 0a 20 20 20 20 20 20 20 20 20 20 20 20 56 65 72  .            Ver
2e110 73 69 6f 6e 20 76 73 56 65 72 73 69 6f 6e 2c 0d  sion vsVersion,.
2e120 0a 20 20 20 20 20 20 20 20 20 20 20 20 50 61 63  .            Pac
2e130 6b 61 67 65 20 70 61 63 6b 61 67 65 2c 0d 0a 20  kage package,.. 
2e140 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
2e150 67 20 66 69 6c 65 4e 61 6d 65 2c 0d 0a 20 20 20  g fileName,..   
2e160 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 6f           bool wo
2e170 77 36 34 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  w64,..          
2e180 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a    bool whatIf,..
2e190 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
2e1a0 20 76 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20   verbose,..     
2e1b0 20 20 20 20 20 20 20 72 65 66 20 73 74 72 69 6e         ref strin
2e1c0 67 20 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20  g error..       
2e1d0 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
2e1e0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  {..            i
2e1f0 66 20 28 76 73 56 65 72 73 69 6f 6e 20 3d 3d 20  f (vsVersion == 
2e200 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
2e210 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
2e220 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 69        error = "i
2e230 6e 76 61 6c 69 64 20 56 53 20 76 65 72 73 69 6f  nvalid VS versio
2e240 6e 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n";..           
2e250 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
2e260 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
2e270 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
2e280 20 69 66 20 28 70 61 63 6b 61 67 65 20 3d 3d 20   if (package == 
2e290 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
2e2a0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
2e2b0 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 69        error = "i
2e2c0 6e 76 61 6c 69 64 20 56 53 20 70 61 63 6b 61 67  nvalid VS packag
2e2d0 65 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e";..           
2e2e0 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
2e2f0 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
2e300 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
2e310 20 73 74 72 69 6e 67 20 6b 65 79 4e 61 6d 65 20   string keyName 
2e320 3d 20 47 65 74 56 73 4b 65 79 4e 61 6d 65 28 76  = GetVsKeyName(v
2e330 73 56 65 72 73 69 6f 6e 2c 20 77 6f 77 36 34 29  sVersion, wow64)
2e340 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
2e350 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69   using (MockRegi
2e360 73 74 72 79 4b 65 79 20 6b 65 79 20 3d 20 52 65  stryKey key = Re
2e370 67 69 73 74 72 79 48 65 6c 70 65 72 2e 4f 70 65  gistryHelper.Ope
2e380 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20  nSubKey(..      
2e390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f                ro
2e3a0 6f 74 4b 65 79 2c 20 6b 65 79 4e 61 6d 65 2c 20  otKey, keyName, 
2e3b0 66 61 6c 73 65 2c 20 77 68 61 74 49 66 2c 20 76  false, whatIf, v
2e3c0 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20 20  erbose))..      
2e3d0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
2e3e0 20 20 20 20 20 20 20 20 20 69 66 20 28 6b 65 79           if (key
2e3f0 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
2e400 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
2e410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e420 20 20 65 72 72 6f 72 20 3d 20 53 74 72 69 6e 67    error = String
2e430 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  .Format(..      
2e440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e450 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20 6f 70 65    "could not ope
2e460 6e 20 72 65 67 69 73 74 72 79 20 6b 65 79 3a 20  n registry key: 
2e470 7b 30 7d 5c 5c 7b 31 7d 22 2c 0d 0a 20 20 20 20  {0}\\{1}",..    
2e480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e490 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 6b 65 79      rootKey, key
2e4a0 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  Name);....      
2e4b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
2e4c0 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20  turn false;..   
2e4d0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
2e4e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2e4f0 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67    using (MockReg
2e500 69 73 74 72 79 4b 65 79 20 73 75 62 4b 65 79 20  istryKey subKey 
2e510 3d 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72  = RegistryHelper
2e520 2e 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20  .OpenSubKey(..  
2e530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e540 20 20 20 20 20 20 6b 65 79 2c 20 22 44 61 74 61        key, "Data
2e550 50 72 6f 76 69 64 65 72 73 22 2c 20 74 72 75 65  Providers", true
2e560 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73  , whatIf, verbos
2e570 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e))..           
2e580 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
2e590 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
2e5a0 73 75 62 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d  subKey == null).
2e5b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2e5c0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
2e5d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e5e0 65 72 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46  error = String.F
2e5f0 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
2e600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e610 20 20 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20 6f      "could not o
2e620 70 65 6e 20 72 65 67 69 73 74 72 79 20 6b 65 79  pen registry key
2e630 3a 20 7b 30 7d 5c 5c 44 61 74 61 50 72 6f 76 69  : {0}\\DataProvi
2e640 64 65 72 73 22 2c 0d 0a 20 20 20 20 20 20 20 20  ders",..        
2e650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e660 20 20 20 20 6b 65 79 29 3b 0d 0a 0d 0a 20 20 20      key);....   
2e670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e680 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
2e690 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
2e6a0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
2e6b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e6c0 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69   using (MockRegi
2e6d0 73 74 72 79 4b 65 79 20 64 61 74 61 50 72 6f 76  stryKey dataProv
2e6e0 69 64 65 72 4b 65 79 20 3d 0d 0a 20 20 20 20 20  iderKey =..     
2e6f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e700 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79 48         RegistryH
2e710 65 6c 70 65 72 2e 43 72 65 61 74 65 53 75 62 4b  elper.CreateSubK
2e720 65 79 28 73 75 62 4b 65 79 2c 0d 0a 20 20 20 20  ey(subKey,..    
2e730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e740 20 20 20 20 20 20 20 20 70 61 63 6b 61 67 65 2e          package.
2e750 44 61 74 61 50 72 6f 76 69 64 65 72 49 64 2e 54  DataProviderId.T
2e760 6f 53 74 72 69 6e 67 28 56 73 49 64 46 6f 72 6d  oString(VsIdForm
2e770 61 74 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  at),..          
2e780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e790 20 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73    whatIf, verbos
2e7a0 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e))..           
2e7b0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
2e7c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e7d0 20 20 20 20 69 66 20 28 64 61 74 61 50 72 6f 76      if (dataProv
2e7e0 69 64 65 72 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29  iderKey == null)
2e7f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2e800 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
2e810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e820 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
2e830 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d   String.Format(.
2e840 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2e850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e860 20 22 63 6f 75 6c 64 20 6e 6f 74 20 63 72 65 61   "could not crea
2e870 74 65 20 72 65 67 69 73 74 72 79 20 6b 65 79 3a  te registry key:
2e880 20 7b 30 7d 5c 5c 7b 31 7d 22 2c 20 6b 65 79 2c   {0}\\{1}", key,
2e890 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2e8a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e8b0 20 20 70 61 63 6b 61 67 65 2e 44 61 74 61 50 72    package.DataPr
2e8c0 6f 76 69 64 65 72 49 64 2e 54 6f 53 74 72 69 6e  oviderId.ToStrin
2e8d0 67 28 56 73 49 64 46 6f 72 6d 61 74 29 29 3b 0d  g(VsIdFormat));.
2e8e0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
2e8f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
2e900 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20  eturn false;..  
2e910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e920 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
2e930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e940 20 20 20 52 65 67 69 73 74 72 79 48 65 6c 70 65     RegistryHelpe
2e950 72 2e 53 65 74 56 61 6c 75 65 28 0d 0a 20 20 20  r.SetValue(..   
2e960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e970 20 20 20 20 20 20 20 20 20 64 61 74 61 50 72 6f           dataPro
2e980 76 69 64 65 72 4b 65 79 2c 20 6e 75 6c 6c 2c 20  viderKey, null, 
2e990 44 65 73 63 72 69 70 74 69 6f 6e 2c 20 77 68 61  Description, wha
2e9a0 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  tIf,..          
2e9b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e9c0 20 20 76 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20    verbose);.... 
2e9d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e9e0 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
2e9f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ea00 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 54 68 69 73     // NOTE: This
2ea10 20 76 61 6c 75 65 20 69 73 20 6e 65 77 20 61 73   value is new as
2ea20 20 6f 66 20 31 2e 30 2e 38 33 2e 30 2e 20 20 48   of 1.0.83.0.  H
2ea30 6f 77 65 76 65 72 2c 0d 0a 20 20 20 20 20 20 20  owever,..       
2ea40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ea50 20 2f 2f 20 20 20 20 20 20 20 69 74 20 73 68 6f   //       it sho
2ea60 75 6c 64 20 6f 6e 6c 79 20 62 65 20 73 65 74 20  uld only be set 
2ea70 69 66 20 74 68 65 20 70 61 63 6b 61 67 65 20 61  if the package a
2ea80 73 73 65 6d 62 6c 79 0d 0a 20 20 20 20 20 20 20  ssembly..       
2ea90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2eaa0 20 2f 2f 20 20 20 20 20 20 20 61 6e 64 20 61 6c   //       and al
2eab0 6c 20 74 68 65 20 61 73 73 65 6d 62 6c 69 65 73  l the assemblies
2eac0 20 69 74 20 72 65 66 65 72 73 20 74 6f 20 61 72   it refers to ar
2ead0 65 20 62 65 69 6e 67 0d 0a 20 20 20 20 20 20 20  e being..       
2eae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2eaf0 20 2f 2f 20 20 20 20 20 20 20 70 6c 61 63 65 64   //       placed
2eb00 20 69 6e 74 6f 20 74 68 65 20 67 6c 6f 62 61 6c   into the global
2eb10 20 61 73 73 65 6d 62 6c 79 20 63 61 63 68 65 2e   assembly cache.
2eb20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2eb30 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
2eb40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2eb50 20 20 20 20 20 20 69 66 20 28 70 61 63 6b 61 67        if (packag
2eb60 65 2e 47 6c 6f 62 61 6c 41 73 73 65 6d 62 6c 79  e.GlobalAssembly
2eb70 43 61 63 68 65 29 0d 0a 20 20 20 20 20 20 20 20  Cache)..        
2eb80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2eb90 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
2eba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52                 R
2ebb0 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 53 65  egistryHelper.Se
2ebc0 74 56 61 6c 75 65 28 0d 0a 20 20 20 20 20 20 20  tValue(..       
2ebd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ebe0 20 20 20 20 20 20 20 20 20 64 61 74 61 50 72 6f           dataPro
2ebf0 76 69 64 65 72 4b 65 79 2c 20 22 41 73 73 65 6d  viderKey, "Assem
2ec00 62 6c 79 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  bly",..         
2ec10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ec20 20 20 20 20 20 20 20 70 61 63 6b 61 67 65 2e 41         package.A
2ec30 73 73 65 6d 62 6c 79 4e 61 6d 65 2e 54 6f 53 74  ssemblyName.ToSt
2ec40 72 69 6e 67 28 29 2c 0d 0a 20 20 20 20 20 20 20  ring(),..       
2ec50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ec60 20 20 20 20 20 20 20 20 20 77 68 61 74 49 66 2c           whatIf,
2ec70 20 76 65 72 62 6f 73 65 29 3b 0d 0a 20 20 20 20   verbose);..    
2ec80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ec90 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
2eca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ecb0 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
2ecc0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
2ecd0 4e 4f 54 45 3a 20 54 68 69 73 20 76 61 6c 75 65  NOTE: This value
2ece0 20 69 73 20 6e 65 77 20 61 73 20 6f 66 20 31 2e   is new as of 1.
2ecf0 30 2e 38 33 2e 30 2e 0d 0a 20 20 20 20 20 20 20  0.83.0...       
2ed00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ed10 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
2ed20 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67               Reg
2ed30 69 73 74 72 79 48 65 6c 70 65 72 2e 53 65 74 56  istryHelper.SetV
2ed40 61 6c 75 65 28 0d 0a 20 20 20 20 20 20 20 20 20  alue(..         
2ed50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ed60 20 20 20 64 61 74 61 50 72 6f 76 69 64 65 72 4b     dataProviderK
2ed70 65 79 2c 20 22 41 73 73 6f 63 69 61 74 65 64 53  ey, "AssociatedS
2ed80 6f 75 72 63 65 22 2c 0d 0a 20 20 20 20 20 20 20  ource",..       
2ed90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2eda0 20 20 20 20 20 70 61 63 6b 61 67 65 2e 44 61 74       package.Dat
2edb0 61 53 6f 75 72 63 65 49 64 2e 54 6f 53 74 72 69  aSourceId.ToStri
2edc0 6e 67 28 56 73 49 64 46 6f 72 6d 61 74 29 2c 0d  ng(VsIdFormat),.
2edd0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2ede0 20 20 20 20 20 20 20 20 20 20 20 20 20 77 68 61               wha
2edf0 74 49 66 2c 20 76 65 72 62 6f 73 65 29 3b 0d 0a  tIf, verbose);..
2ee00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2ee10 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74            Regist
2ee20 72 79 48 65 6c 70 65 72 2e 53 65 74 56 61 6c 75  ryHelper.SetValu
2ee30 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
2ee40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ee50 64 61 74 61 50 72 6f 76 69 64 65 72 4b 65 79 2c  dataProviderKey,
2ee60 20 22 49 6e 76 61 72 69 61 6e 74 4e 61 6d 65 22   "InvariantName"
2ee70 2c 20 49 6e 76 61 72 69 61 6e 74 4e 61 6d 65 2c  , InvariantName,
2ee80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2ee90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 77 68                wh
2eea0 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 3b 0d  atIf, verbose);.
2eeb0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
2eec0 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73             Regis
2eed0 74 72 79 48 65 6c 70 65 72 2e 53 65 74 56 61 6c  tryHelper.SetVal
2eee0 75 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue(..           
2eef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ef00 20 64 61 74 61 50 72 6f 76 69 64 65 72 4b 65 79   dataProviderKey
2ef10 2c 20 22 54 65 63 68 6e 6f 6c 6f 67 79 22 2c 0d  , "Technology",.
2ef20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2ef30 20 20 20 20 20 20 20 20 20 20 20 20 20 70 61 63               pac
2ef40 6b 61 67 65 2e 41 64 6f 4e 65 74 54 65 63 68 6e  kage.AdoNetTechn
2ef50 6f 6c 6f 67 79 49 64 2e 54 6f 53 74 72 69 6e 67  ologyId.ToString
2ef60 28 56 73 49 64 46 6f 72 6d 61 74 29 2c 0d 0a 20  (VsIdFormat),.. 
2ef70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ef80 20 20 20 20 20 20 20 20 20 20 20 77 68 61 74 49             whatI
2ef90 66 2c 20 76 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a  f, verbose);....
2efa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2efb0 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79          Registry
2efc0 48 65 6c 70 65 72 2e 53 65 74 56 61 6c 75 65 28  Helper.SetValue(
2efd0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2efe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 61                da
2eff0 74 61 50 72 6f 76 69 64 65 72 4b 65 79 2c 20 22  taProviderKey, "
2f000 43 6f 64 65 42 61 73 65 22 2c 20 66 69 6c 65 4e  CodeBase", fileN
2f010 61 6d 65 2c 20 77 68 61 74 49 66 2c 0d 0a 20 20  ame, whatIf,..  
2f020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f030 20 20 20 20 20 20 20 20 20 20 76 65 72 62 6f 73            verbos
2f040 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e);....         
2f050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52                 R
2f060 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 53 65  egistryHelper.Se
2f070 74 56 61 6c 75 65 28 0d 0a 20 20 20 20 20 20 20  tValue(..       
2f080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f090 20 20 20 20 20 64 61 74 61 50 72 6f 76 69 64 65       dataProvide
2f0a0 72 4b 65 79 2c 20 22 46 61 63 74 6f 72 79 53 65  rKey, "FactorySe
2f0b0 72 76 69 63 65 22 2c 0d 0a 20 20 20 20 20 20 20  rvice",..       
2f0c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f0d0 20 20 20 20 20 70 61 63 6b 61 67 65 2e 53 65 72       package.Ser
2f0e0 76 69 63 65 49 64 2e 54 6f 53 74 72 69 6e 67 28  viceId.ToString(
2f0f0 56 73 49 64 46 6f 72 6d 61 74 29 2c 20 77 68 61  VsIdFormat), wha
2f100 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  tIf,..          
2f110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f120 20 20 76 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20    verbose);.... 
2f130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f140 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79 48         RegistryH
2f150 65 6c 70 65 72 2e 43 72 65 61 74 65 53 75 62 4b  elper.CreateSubK
2f160 65 79 28 64 61 74 61 50 72 6f 76 69 64 65 72 4b  ey(dataProviderK
2f170 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ey,..           
2f180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f190 20 22 53 75 70 70 6f 72 74 65 64 4f 62 6a 65 63   "SupportedObjec
2f1a0 74 73 5c 5c 44 61 74 61 43 6f 6e 6e 65 63 74 69  ts\\DataConnecti
2f1b0 6f 6e 55 49 43 6f 6e 74 72 6f 6c 22 2c 0d 0a 20  onUIControl",.. 
2f1c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f1d0 20 20 20 20 20 20 20 20 20 20 20 77 68 61 74 49             whatI
2f1e0 66 2c 20 76 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a  f, verbose);....
2f1f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f200 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79          Registry
2f210 48 65 6c 70 65 72 2e 43 72 65 61 74 65 53 75 62  Helper.CreateSub
2f220 4b 65 79 28 64 61 74 61 50 72 6f 76 69 64 65 72  Key(dataProvider
2f230 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  Key,..          
2f240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f250 20 20 22 53 75 70 70 6f 72 74 65 64 4f 62 6a 65    "SupportedObje
2f260 63 74 73 5c 5c 44 61 74 61 43 6f 6e 6e 65 63 74  cts\\DataConnect
2f270 69 6f 6e 50 72 6f 70 65 72 74 69 65 73 22 2c 0d  ionProperties",.
2f280 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2f290 20 20 20 20 20 20 20 20 20 20 20 20 20 77 68 61               wha
2f2a0 74 49 66 2c 20 76 65 72 62 6f 73 65 29 3b 0d 0a  tIf, verbose);..
2f2b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2f2c0 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74            Regist
2f2d0 72 79 48 65 6c 70 65 72 2e 43 72 65 61 74 65 53  ryHelper.CreateS
2f2e0 75 62 4b 65 79 28 64 61 74 61 50 72 6f 76 69 64  ubKey(dataProvid
2f2f0 65 72 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20  erKey,..        
2f300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f310 20 20 20 20 22 53 75 70 70 6f 72 74 65 64 4f 62      "SupportedOb
2f320 6a 65 63 74 73 5c 5c 44 61 74 61 43 6f 6e 6e 65  jects\\DataConne
2f330 63 74 69 6f 6e 53 75 70 70 6f 72 74 22 2c 20 77  ctionSupport", w
2f340 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20  hatIf,..        
2f350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f360 20 20 20 20 76 65 72 62 6f 73 65 29 3b 0d 0a 0d      verbose);...
2f370 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2f380 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72           Registr
2f390 79 48 65 6c 70 65 72 2e 43 72 65 61 74 65 53 75  yHelper.CreateSu
2f3a0 62 4b 65 79 28 64 61 74 61 50 72 6f 76 69 64 65  bKey(dataProvide
2f3b0 72 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20  rKey,..         
2f3c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f3d0 20 20 20 22 53 75 70 70 6f 72 74 65 64 4f 62 6a     "SupportedObj
2f3e0 65 63 74 73 5c 5c 44 61 74 61 4f 62 6a 65 63 74  ects\\DataObject
2f3f0 53 75 70 70 6f 72 74 22 2c 20 77 68 61 74 49 66  Support", whatIf
2f400 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
2f410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 76                 v
2f420 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20  erbose);....    
2f430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f440 20 20 20 20 52 65 67 69 73 74 72 79 48 65 6c 70      RegistryHelp
2f450 65 72 2e 43 72 65 61 74 65 53 75 62 4b 65 79 28  er.CreateSubKey(
2f460 64 61 74 61 50 72 6f 76 69 64 65 72 4b 65 79 2c  dataProviderKey,
2f470 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2f480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 53                "S
2f490 75 70 70 6f 72 74 65 64 4f 62 6a 65 63 74 73 5c  upportedObjects\
2f4a0 5c 44 61 74 61 56 69 65 77 53 75 70 70 6f 72 74  \DataViewSupport
2f4b0 22 2c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20  ", whatIf,..    
2f4c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f4d0 20 20 20 20 20 20 20 20 76 65 72 62 6f 73 65 29          verbose)
2f4e0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
2f4f0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
2f500 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
2f510 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
2f520 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
2f530 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20   true;..        
2f540 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  }....        ///
2f550 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f560 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f570 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f580 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f590 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
2f5a0 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 62  private static b
2f5b0 6f 6f 6c 20 52 65 6d 6f 76 65 56 73 44 61 74 61  ool RemoveVsData
2f5c0 50 72 6f 76 69 64 65 72 28 0d 0a 20 20 20 20 20  Provider(..     
2f5d0 20 20 20 20 20 20 20 4d 6f 63 6b 52 65 67 69 73         MockRegis
2f5e0 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79 2c 0d  tryKey rootKey,.
2f5f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 56 65 72  .            Ver
2f600 73 69 6f 6e 20 76 73 56 65 72 73 69 6f 6e 2c 0d  sion vsVersion,.
2f610 0a 20 20 20 20 20 20 20 20 20 20 20 20 50 61 63  .            Pac
2f620 6b 61 67 65 20 70 61 63 6b 61 67 65 2c 0d 0a 20  kage package,.. 
2f630 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
2f640 77 6f 77 36 34 2c 0d 0a 20 20 20 20 20 20 20 20  wow64,..        
2f650 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c      bool whatIf,
2f660 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
2f670 6f 6c 20 76 65 72 62 6f 73 65 2c 0d 0a 20 20 20  ol verbose,..   
2f680 20 20 20 20 20 20 20 20 20 72 65 66 20 73 74 72           ref str
2f690 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20 20 20  ing error..     
2f6a0 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
2f6b0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
2f6c0 20 69 66 20 28 76 73 56 65 72 73 69 6f 6e 20 3d   if (vsVersion =
2f6d0 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
2f6e0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
2f6f0 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
2f700 22 69 6e 76 61 6c 69 64 20 56 53 20 76 65 72 73  "invalid VS vers
2f710 69 6f 6e 22 3b 0d 0a 20 20 20 20 20 20 20 20 20  ion";..         
2f720 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
2f730 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lse;..          
2f740 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
2f750 20 20 20 73 74 72 69 6e 67 20 6b 65 79 4e 61 6d     string keyNam
2f760 65 20 3d 20 47 65 74 56 73 4b 65 79 4e 61 6d 65  e = GetVsKeyName
2f770 28 76 73 56 65 72 73 69 6f 6e 2c 20 77 6f 77 36  (vsVersion, wow6
2f780 34 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  4);....         
2f790 20 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65     using (MockRe
2f7a0 67 69 73 74 72 79 4b 65 79 20 6b 65 79 20 3d 20  gistryKey key = 
2f7b0 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 4f  RegistryHelper.O
2f7c0 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20 20  penSubKey(..    
2f7d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f7e0 72 6f 6f 74 4b 65 79 2c 20 6b 65 79 4e 61 6d 65  rootKey, keyName
2f7f0 2c 20 66 61 6c 73 65 2c 20 77 68 61 74 49 66 2c  , false, whatIf,
2f800 20 76 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 20   verbose))..    
2f810 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
2f820 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6b             if (k
2f830 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ey == null)..   
2f840 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
2f850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f860 20 20 20 20 65 72 72 6f 72 20 3d 20 53 74 72 69      error = Stri
2f870 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ng.Format(..    
2f880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f890 20 20 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20 6f      "could not o
2f8a0 70 65 6e 20 72 65 67 69 73 74 72 79 20 6b 65 79  pen registry key
2f8b0 3a 20 7b 30 7d 5c 5c 7b 31 7d 22 2c 0d 0a 20 20  : {0}\\{1}",..  
2f8c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f8d0 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 6b        rootKey, k
2f8e0 65 79 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20  eyName);....    
2f8f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f900 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20  return false;.. 
2f910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
2f920 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2f930 20 20 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52      using (MockR
2f940 65 67 69 73 74 72 79 4b 65 79 20 73 75 62 4b 65  egistryKey subKe
2f950 79 20 3d 20 52 65 67 69 73 74 72 79 48 65 6c 70  y = RegistryHelp
2f960 65 72 2e 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a  er.OpenSubKey(..
2f970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f980 20 20 20 20 20 20 20 20 6b 65 79 2c 20 22 44 61          key, "Da
2f990 74 61 50 72 6f 76 69 64 65 72 73 22 2c 20 74 72  taProviders", tr
2f9a0 75 65 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62  ue, whatIf, verb
2f9b0 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ose))..         
2f9c0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
2f9d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
2f9e0 20 28 73 75 62 4b 65 79 20 3d 3d 20 6e 75 6c 6c   (subKey == null
2f9f0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
2fa00 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
2fa10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fa20 20 20 65 72 72 6f 72 20 3d 20 53 74 72 69 6e 67    error = String
2fa30 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  .Format(..      
2fa40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fa50 20 20 20 20 20 20 22 63 6f 75 6c 64 20 6e 6f 74        "could not
2fa60 20 6f 70 65 6e 20 72 65 67 69 73 74 72 79 20 6b   open registry k
2fa70 65 79 3a 20 7b 30 7d 5c 5c 44 61 74 61 50 72 6f  ey: {0}\\DataPro
2fa80 76 69 64 65 72 73 22 2c 0d 0a 20 20 20 20 20 20  viders",..      
2fa90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2faa0 20 20 20 20 20 20 6b 65 79 29 3b 0d 0a 0d 0a 20        key);.... 
2fab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fac0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
2fad0 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lse;..          
2fae0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
2faf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fb00 20 20 20 52 65 67 69 73 74 72 79 48 65 6c 70 65     RegistryHelpe
2fb10 72 2e 44 65 6c 65 74 65 53 75 62 4b 65 79 54 72  r.DeleteSubKeyTr
2fb20 65 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ee(..           
2fb30 20 20 20 20 20 20 20 20 20 20 20 20 20 73 75 62               sub
2fb40 4b 65 79 2c 20 70 61 63 6b 61 67 65 2e 44 61 74  Key, package.Dat
2fb50 61 50 72 6f 76 69 64 65 72 49 64 2e 54 6f 53 74  aProviderId.ToSt
2fb60 72 69 6e 67 28 56 73 49 64 46 6f 72 6d 61 74 29  ring(VsIdFormat)
2fb70 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
2fb80 20 20 20 20 20 20 20 20 20 20 20 77 68 61 74 49             whatI
2fb90 66 2c 20 76 65 72 62 6f 73 65 29 3b 0d 0a 20 20  f, verbose);..  
2fba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
2fbb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
2fbc0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
2fbd0 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20  turn true;..    
2fbe0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
2fbf0 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
2fc00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2fc10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2fc20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2fc30 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
2fc40 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74      private stat
2fc50 69 63 20 62 6f 6f 6c 20 50 72 6f 63 65 73 73 56  ic bool ProcessV
2fc60 73 44 61 74 61 50 72 6f 76 69 64 65 72 28 0d 0a  sDataProvider(..
2fc70 20 20 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b              Mock
2fc80 52 65 67 69 73 74 72 79 4b 65 79 20 72 6f 6f 74  RegistryKey root
2fc90 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  Key,..          
2fca0 20 20 56 65 72 73 69 6f 6e 20 76 73 56 65 72 73    Version vsVers
2fcb0 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ion,..          
2fcc0 20 20 50 61 63 6b 61 67 65 20 70 61 63 6b 61 67    Package packag
2fcd0 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
2fce0 6f 62 6a 65 63 74 20 63 6c 69 65 6e 74 44 61 74  object clientDat
2fcf0 61 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  a,..            
2fd00 62 6f 6f 6c 20 77 6f 77 36 34 2c 0d 0a 20 20 20  bool wow64,..   
2fd10 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 74 68           bool th
2fd20 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 2c 0d 0a 20  rowOnMissing,.. 
2fd30 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
2fd40 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20  whatIf,..       
2fd50 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73       bool verbos
2fd60 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
2fd70 72 65 66 20 73 74 72 69 6e 67 20 65 72 72 6f 72  ref string error
2fd80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d  ..            ).
2fd90 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
2fda0 20 20 20 20 20 20 20 20 41 6e 79 50 61 69 72 3c          AnyPair<
2fdb0 73 74 72 69 6e 67 2c 20 62 6f 6f 6c 3e 20 70 61  string, bool> pa
2fdc0 69 72 20 3d 20 63 6c 69 65 6e 74 44 61 74 61 20  ir = clientData 
2fdd0 61 73 20 41 6e 79 50 61 69 72 3c 73 74 72 69 6e  as AnyPair<strin
2fde0 67 2c 20 62 6f 6f 6c 3e 3b 0d 0a 0d 0a 20 20 20  g, bool>;....   
2fdf0 20 20 20 20 20 20 20 20 20 69 66 20 28 70 61 69           if (pai
2fe00 72 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  r == null)..    
2fe10 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
2fe20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72             error
2fe30 20 3d 20 22 69 6e 76 61 6c 69 64 20 56 53 20 63   = "invalid VS c
2fe40 61 6c 6c 62 61 63 6b 20 64 61 74 61 22 3b 0d 0a  allback data";..
2fe50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fe60 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20  return false;.. 
2fe70 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
2fe80 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
2fe90 70 61 69 72 2e 59 29 0d 0a 20 20 20 20 20 20 20  pair.Y)..       
2fea0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
2feb0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 41          return A
2fec0 64 64 56 73 44 61 74 61 50 72 6f 76 69 64 65 72  ddVsDataProvider
2fed0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
2fee0 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20         rootKey, 
2fef0 76 73 56 65 72 73 69 6f 6e 2c 20 70 61 63 6b 61  vsVersion, packa
2ff00 67 65 2c 20 70 61 69 72 2e 58 2c 20 77 6f 77 36  ge, pair.X, wow6
2ff10 34 2c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20  4, whatIf,..    
2ff20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ff30 76 65 72 62 6f 73 65 2c 20 72 65 66 20 65 72 72  verbose, ref err
2ff40 6f 72 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  or);..          
2ff50 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
2ff60 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20   else..         
2ff70 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
2ff80 20 20 20 20 20 20 72 65 74 75 72 6e 20 52 65 6d        return Rem
2ff90 6f 76 65 56 73 44 61 74 61 50 72 6f 76 69 64 65  oveVsDataProvide
2ffa0 72 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  r(..            
2ffb0 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c          rootKey,
2ffc0 20 76 73 56 65 72 73 69 6f 6e 2c 20 70 61 63 6b   vsVersion, pack
2ffd0 61 67 65 2c 20 77 6f 77 36 34 2c 20 77 68 61 74  age, wow64, what
2ffe0 49 66 2c 20 76 65 72 62 6f 73 65 2c 0d 0a 20 20  If, verbose,..  
2fff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30000 20 20 72 65 66 20 65 72 72 6f 72 29 3b 0d 0a 20    ref error);.. 
30010 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
30020 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
30030 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20   #endregion.... 
30040 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
30050 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30060 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30070 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30080 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
30090 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f  ..        #regio
300a0 6e 20 56 69 73 75 61 6c 20 53 74 75 64 69 6f 20  n Visual Studio 
300b0 50 61 63 6b 61 67 65 20 48 61 6e 64 6c 69 6e 67  Package Handling
300c0 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
300d0 65 20 73 74 61 74 69 63 20 76 6f 69 64 20 49 6e  e static void In
300e0 69 74 69 61 6c 69 7a 65 56 73 50 61 63 6b 61 67  itializeVsPackag
300f0 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
30100 41 73 73 65 6d 62 6c 79 4e 61 6d 65 20 61 73 73  AssemblyName ass
30110 65 6d 62 6c 79 4e 61 6d 65 2c 0d 0a 20 20 20 20  emblyName,..    
30120 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 67 6c 6f          bool glo
30130 62 61 6c 41 73 73 65 6d 62 6c 79 43 61 63 68 65  balAssemblyCache
30140 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  ,..            r
30150 65 66 20 50 61 63 6b 61 67 65 20 70 61 63 6b 61  ef Package packa
30160 67 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ge..            
30170 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
30180 20 20 20 20 20 20 20 20 20 20 69 66 20 28 70 61            if (pa
30190 63 6b 61 67 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  ckage == null)..
301a0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
301b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70                 p
301c0 61 63 6b 61 67 65 20 3d 20 6e 65 77 20 50 61 63  ackage = new Pac
301d0 6b 61 67 65 28 29 3b 0d 0a 0d 0a 20 20 20 20 20  kage();....     
301e0 20 20 20 20 20 20 20 20 20 20 20 70 61 63 6b 61             packa
301f0 67 65 2e 41 73 73 65 6d 62 6c 79 4e 61 6d 65 20  ge.AssemblyName 
30200 3d 20 61 73 73 65 6d 62 6c 79 4e 61 6d 65 3b 0d  = assemblyName;.
30210 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
30220 20 70 61 63 6b 61 67 65 2e 47 6c 6f 62 61 6c 41   package.GlobalA
30230 73 73 65 6d 62 6c 79 43 61 63 68 65 20 3d 20 67  ssemblyCache = g
30240 6c 6f 62 61 6c 41 73 73 65 6d 62 6c 79 43 61 63  lobalAssemblyCac
30250 68 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  he;....         
30260 20 20 20 20 20 20 20 70 61 63 6b 61 67 65 2e 41         package.A
30270 64 6f 4e 65 74 54 65 63 68 6e 6f 6c 6f 67 79 49  doNetTechnologyI
30280 64 20 3d 20 6e 65 77 20 47 75 69 64 28 0d 0a 20  d = new Guid(.. 
30290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
302a0 20 20 20 22 37 37 41 42 39 41 39 44 2d 37 38 42     "77AB9A9D-78B
302b0 39 2d 34 42 41 37 2d 39 31 41 43 2d 38 37 33 46  9-4BA7-91AC-873F
302c0 35 33 33 38 46 31 44 32 22 29 3b 0d 0a 0d 0a 20  5338F1D2");.... 
302d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70                 p
302e0 61 63 6b 61 67 65 2e 50 61 63 6b 61 67 65 49 64  ackage.PackageId
302f0 20 3d 20 6e 65 77 20 47 75 69 64 28 0d 0a 20 20   = new Guid(..  
30300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30310 20 20 22 44 43 42 45 36 43 38 44 2d 30 45 35 37    "DCBE6C8D-0E57
30320 2d 34 30 39 39 2d 41 31 38 33 2d 39 38 46 46 37  -4099-A183-98FF7
30330 34 43 36 34 44 39 43 22 29 3b 0d 0a 0d 0a 20 20  4C64D9C");....  
30340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 61                pa
30350 63 6b 61 67 65 2e 53 65 72 76 69 63 65 49 64 20  ckage.ServiceId 
30360 3d 20 6e 65 77 20 47 75 69 64 28 0d 0a 20 20 20  = new Guid(..   
30370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30380 20 22 44 43 42 45 36 43 38 44 2d 30 45 35 37 2d   "DCBE6C8D-0E57-
30390 34 30 39 39 2d 41 31 38 33 2d 39 38 46 46 37 34  4099-A183-98FF74
303a0 43 36 34 44 39 44 22 29 3b 0d 0a 0d 0a 20 20 20  C64D9D");....   
303b0 20 20 20 20 20 20 20 20 20 20 20 20 20 70 61 63               pac
303c0 6b 61 67 65 2e 44 61 74 61 53 6f 75 72 63 65 49  kage.DataSourceI
303d0 64 20 3d 20 6e 65 77 20 47 75 69 64 28 0d 0a 20  d = new Guid(.. 
303e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
303f0 20 20 20 22 30 45 42 41 41 42 36 45 2d 43 41 38     "0EBAAB6E-CA8
30400 30 2d 34 42 34 41 2d 38 44 44 46 2d 43 42 45 36  0-4B4A-8DDF-CBE6
30410 42 46 30 35 38 43 37 31 22 29 3b 0d 0a 0d 0a 20  BF058C71");.... 
30420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70                 p
30430 61 63 6b 61 67 65 2e 44 61 74 61 50 72 6f 76 69  ackage.DataProvi
30440 64 65 72 49 64 20 3d 20 6e 65 77 20 47 75 69 64  derId = new Guid
30450 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
30460 20 20 20 20 20 20 20 22 30 45 42 41 41 42 36 45         "0EBAAB6E
30470 2d 43 41 38 30 2d 34 42 34 41 2d 38 44 44 46 2d  -CA80-4B4A-8DDF-
30480 43 42 45 36 42 46 30 35 38 43 37 30 22 29 3b 0d  CBE6BF058C70");.
30490 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
304a0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
304b0 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
304c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
304d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
304e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
304f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
30500 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
30510 73 74 61 74 69 63 20 62 6f 6f 6c 20 41 64 64 56  static bool AddV
30520 73 50 61 63 6b 61 67 65 28 0d 0a 20 20 20 20 20  sPackage(..     
30530 20 20 20 20 20 20 20 4d 6f 63 6b 52 65 67 69 73         MockRegis
30540 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79 2c 0d  tryKey rootKey,.
30550 0a 20 20 20 20 20 20 20 20 20 20 20 20 56 65 72  .            Ver
30560 73 69 6f 6e 20 76 73 56 65 72 73 69 6f 6e 2c 0d  sion vsVersion,.
30570 0a 20 20 20 20 20 20 20 20 20 20 20 20 50 61 63  .            Pac
30580 6b 61 67 65 20 70 61 63 6b 61 67 65 2c 0d 0a 20  kage package,.. 
30590 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
305a0 67 20 66 69 6c 65 4e 61 6d 65 2c 0d 0a 20 20 20  g fileName,..   
305b0 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 6f           bool wo
305c0 77 36 34 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  w64,..          
305d0 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a    bool whatIf,..
305e0 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
305f0 20 76 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20   verbose,..     
30600 20 20 20 20 20 20 20 72 65 66 20 73 74 72 69 6e         ref strin
30610 67 20 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20  g error..       
30620 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
30630 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  {..            i
30640 66 20 28 76 73 56 65 72 73 69 6f 6e 20 3d 3d 20  f (vsVersion == 
30650 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
30660 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
30670 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 69        error = "i
30680 6e 76 61 6c 69 64 20 56 53 20 76 65 72 73 69 6f  nvalid VS versio
30690 6e 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n";..           
306a0 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
306b0 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
306c0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
306d0 20 69 66 20 28 70 61 63 6b 61 67 65 20 3d 3d 20   if (package == 
306e0 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
306f0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
30700 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 69        error = "i
30710 6e 76 61 6c 69 64 20 56 53 20 70 61 63 6b 61 67  nvalid VS packag
30720 65 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e";..           
30730 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
30740 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
30750 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
30760 20 73 74 72 69 6e 67 20 6b 65 79 4e 61 6d 65 20   string keyName 
30770 3d 20 47 65 74 56 73 4b 65 79 4e 61 6d 65 28 76  = GetVsKeyName(v
30780 73 56 65 72 73 69 6f 6e 2c 20 77 6f 77 36 34 29  sVersion, wow64)
30790 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
307a0 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69   using (MockRegi
307b0 73 74 72 79 4b 65 79 20 6b 65 79 20 3d 20 52 65  stryKey key = Re
307c0 67 69 73 74 72 79 48 65 6c 70 65 72 2e 4f 70 65  gistryHelper.Ope
307d0 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20  nSubKey(..      
307e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f                ro
307f0 6f 74 4b 65 79 2c 20 6b 65 79 4e 61 6d 65 2c 20  otKey, keyName, 
30800 66 61 6c 73 65 2c 20 77 68 61 74 49 66 2c 20 76  false, whatIf, v
30810 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20 20  erbose))..      
30820 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
30830 20 20 20 20 20 20 20 20 20 69 66 20 28 6b 65 79           if (key
30840 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
30850 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
30860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30870 20 20 65 72 72 6f 72 20 3d 20 53 74 72 69 6e 67    error = String
30880 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  .Format(..      
30890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
308a0 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20 6f 70 65    "could not ope
308b0 6e 20 72 65 67 69 73 74 72 79 20 6b 65 79 3a 20  n registry key: 
308c0 7b 30 7d 5c 5c 7b 31 7d 22 2c 0d 0a 20 20 20 20  {0}\\{1}",..    
308d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
308e0 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 6b 65 79      rootKey, key
308f0 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  Name);....      
30900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
30910 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20  turn false;..   
30920 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
30930 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
30940 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67    using (MockReg
30950 69 73 74 72 79 4b 65 79 20 73 75 62 4b 65 79 20  istryKey subKey 
30960 3d 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72  = RegistryHelper
30970 2e 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20  .OpenSubKey(..  
30980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30990 20 20 20 20 20 20 6b 65 79 2c 20 22 50 61 63 6b        key, "Pack
309a0 61 67 65 73 22 2c 20 74 72 75 65 2c 20 77 68 61  ages", true, wha
309b0 74 49 66 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a  tIf, verbose))..
309c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
309d0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
309e0 20 20 20 20 20 20 20 69 66 20 28 73 75 62 4b 65         if (subKe
309f0 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  y == null)..    
30a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30a10 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
30a20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72             error
30a30 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74   = String.Format
30a40 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
30a50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
30a60 63 6f 75 6c 64 20 6e 6f 74 20 6f 70 65 6e 20 72  could not open r
30a70 65 67 69 73 74 72 79 20 6b 65 79 3a 20 7b 30 7d  egistry key: {0}
30a80 5c 5c 50 61 63 6b 61 67 65 73 22 2c 0d 0a 20 20  \\Packages",..  
30a90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30aa0 20 20 20 20 20 20 20 20 20 20 6b 65 79 29 3b 0d            key);.
30ab0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
30ac0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
30ad0 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  n false;..      
30ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
30af0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
30b00 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
30b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
30b20 2f 20 4e 4f 54 45 3a 20 2a 57 41 52 4e 49 4e 47  / NOTE: *WARNING
30b30 2a 20 43 68 61 6e 67 69 6e 67 20 61 6e 79 20 6f  * Changing any o
30b40 66 20 74 68 65 73 65 20 76 61 6c 75 65 73 20 77  f these values w
30b50 69 6c 6c 20 6c 69 6b 65 6c 79 0d 0a 20 20 20 20  ill likely..    
30b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30b70 2f 2f 20 20 20 20 20 20 20 72 65 71 75 69 72 65  //       require
30b80 20 61 20 6e 65 77 20 22 70 61 63 6b 61 67 65 20   a new "package 
30b90 6c 6f 61 64 20 6b 65 79 22 20 28 50 4c 4b 29 20  load key" (PLK) 
30ba0 74 6f 20 62 65 0d 0a 20 20 20 20 20 20 20 20 20  to be..         
30bb0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
30bc0 20 20 20 20 67 65 6e 65 72 61 74 65 64 20 69 6e      generated in
30bd0 20 6f 72 64 65 72 20 74 6f 20 70 72 6f 70 65 72   order to proper
30be0 6c 79 20 73 75 70 70 6f 72 74 20 6c 6f 61 64 69  ly support loadi
30bf0 6e 67 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20  ng the..        
30c00 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
30c10 20 20 20 20 20 70 61 63 6b 61 67 65 20 69 6e 74       package int
30c20 6f 20 56 69 73 75 61 6c 20 53 74 75 64 69 6f 20  o Visual Studio 
30c30 32 30 30 38 20 61 6e 64 20 65 61 72 6c 69 65 72  2008 and earlier
30c40 20 77 69 74 68 6f 75 74 0d 0a 20 20 20 20 20 20   without..      
30c50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
30c60 20 20 20 20 20 20 20 74 68 65 20 6d 61 74 63 68         the match
30c70 69 6e 67 20 56 69 73 75 61 6c 20 53 74 75 64 69  ing Visual Studi
30c80 6f 20 53 44 4b 20 62 65 69 6e 67 20 69 6e 73 74  o SDK being inst
30c90 61 6c 6c 65 64 2e 0d 0a 20 20 20 20 20 20 20 20  alled...        
30ca0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
30cb0 20 20 20 20 20 50 6c 65 61 73 65 20 72 65 66 65       Please refe
30cc0 72 20 74 6f 20 74 68 65 20 22 53 51 4c 69 74 65  r to the "SQLite
30cd0 2e 44 65 73 69 67 6e 65 72 5c 70 6c 6b 2e 74 78  .Designer\plk.tx
30ce0 74 22 20 66 69 6c 65 0d 0a 20 20 20 20 20 20 20  t" file..       
30cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
30d00 20 20 20 20 20 20 66 6f 72 20 74 68 65 20 65 78        for the ex
30d10 69 73 74 69 6e 67 20 6f 66 66 69 63 69 61 6c 20  isting official 
30d20 76 61 6c 75 65 73 20 61 6e 64 20 75 70 64 61 74  values and updat
30d30 65 20 74 68 65 6d 20 69 66 0d 0a 20 20 20 20 20  e them if..     
30d40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
30d50 2f 20 20 20 20 20 20 20 6e 65 63 65 73 73 61 72  /       necessar
30d60 79 2e 20 20 41 6c 73 6f 2c 20 74 68 65 20 6e 65  y.  Also, the ne
30d70 77 6c 79 20 67 65 6e 65 72 61 74 65 64 20 70 61  wly generated pa
30d80 63 6b 61 67 65 20 6c 6f 61 64 0d 0a 20 20 20 20  ckage load..    
30d90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30da0 2f 2f 20 20 20 20 20 20 20 6b 65 79 20 69 74 73  //       key its
30db0 65 6c 66 2c 20 77 68 69 63 68 20 69 73 20 61 20  elf, which is a 
30dc0 31 32 38 20 63 68 61 72 61 63 74 65 72 20 61 6c  128 character al
30dd0 70 68 61 6e 75 6d 65 72 69 63 0d 0a 20 20 20 20  phanumeric..    
30de0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30df0 2f 2f 20 20 20 20 20 20 20 73 74 72 69 6e 67 2c  //       string,
30e00 20 6d 75 73 74 20 62 65 20 70 6c 61 63 65 64 20   must be placed 
30e10 69 6e 20 74 68 65 20 72 65 73 6f 75 72 63 65 20  in the resource 
30e20 73 74 72 69 6e 67 20 6e 61 6d 65 64 0d 0a 20 20  string named..  
30e30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30e40 20 20 2f 2f 20 20 20 20 20 20 20 22 34 30 30 22    //       "400"
30e50 20 69 6e 20 74 68 65 20 22 53 51 4c 69 74 65 2e   in the "SQLite.
30e60 44 65 73 69 67 6e 65 72 5c 56 53 50 61 63 6b 61  Designer\VSPacka
30e70 67 65 2e 72 65 73 78 22 20 66 69 6c 65 0d 0a 20  ge.resx" file.. 
30e80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30e90 20 20 20 2f 2f 20 20 20 20 20 20 20 61 6e 64 20     //       and 
30ea0 74 68 65 6e 20 74 68 65 20 64 65 73 69 67 6e 65  then the designe
30eb0 72 20 61 73 73 65 6d 62 6c 79 20 69 74 73 65 6c  r assembly itsel
30ec0 66 20 6d 75 73 74 20 62 65 0d 0a 20 20 20 20 20  f must be..     
30ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
30ee0 2f 20 20 20 20 20 20 20 72 65 63 6f 6d 70 69 6c  /       recompil
30ef0 65 64 2e 20 20 41 73 20 6f 66 20 74 68 69 73 20  ed.  As of this 
30f00 77 72 69 74 69 6e 67 20 28 69 6e 20 46 65 62 72  writing (in Febr
30f10 75 61 72 79 20 32 30 31 32 29 2c 0d 0a 20 20 20  uary 2012),..   
30f20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30f30 20 2f 2f 20 20 20 20 20 20 20 74 68 65 20 66 6f   //       the fo
30f40 6c 6c 6f 77 69 6e 67 20 55 52 4c 20 69 73 20 74  llowing URL is t
30f50 68 65 20 70 72 6f 70 65 72 20 70 6c 61 63 65 20  he proper place 
30f60 74 6f 20 67 65 6e 65 72 61 74 65 0d 0a 20 20 20  to generate..   
30f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30f80 20 2f 2f 20 20 20 20 20 20 20 70 61 63 6b 61 67   //       packag
30f90 65 20 6c 6f 61 64 20 6b 65 79 73 3a 0d 0a 20 20  e load keys:..  
30fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30fb0 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
30fc0 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
30fd0 20 20 20 68 74 74 70 3a 2f 2f 6d 73 64 6e 2e 6d     http://msdn.m
30fe0 69 63 72 6f 73 6f 66 74 2e 63 6f 6d 2f 65 6e 2d  icrosoft.com/en-
30ff0 75 73 2f 76 73 74 75 64 69 6f 2f 63 63 36 35 35  us/vstudio/cc655
31000 37 39 35 0d 0a 20 20 20 20 20 20 20 20 20 20 20  795..           
31010 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
31020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31030 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69   using (MockRegi
31040 73 74 72 79 4b 65 79 20 70 61 63 6b 61 67 65 4b  stryKey packageK
31050 65 79 20 3d 0d 0a 20 20 20 20 20 20 20 20 20 20  ey =..          
31060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31070 20 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72    RegistryHelper
31080 2e 43 72 65 61 74 65 53 75 62 4b 65 79 28 73 75  .CreateSubKey(su
31090 62 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20  bKey,..         
310a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
310b0 20 20 20 70 61 63 6b 61 67 65 2e 50 61 63 6b 61     package.Packa
310c0 67 65 49 64 2e 54 6f 53 74 72 69 6e 67 28 56 73  geId.ToString(Vs
310d0 49 64 46 6f 72 6d 61 74 29 2c 20 77 68 61 74 49  IdFormat), whatI
310e0 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  f,..            
310f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31100 76 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20  verbose))..     
31110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
31120 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
31130 20 20 20 20 20 20 20 20 20 20 69 66 20 28 70 61            if (pa
31140 63 6b 61 67 65 4b 65 79 20 3d 3d 20 6e 75 6c 6c  ckageKey == null
31150 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
31160 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
31170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31180 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20            error 
31190 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  = String.Format(
311a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
311b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
311c0 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20 63 72 65    "could not cre
311d0 61 74 65 20 72 65 67 69 73 74 72 79 20 6b 65 79  ate registry key
311e0 3a 20 7b 30 7d 5c 5c 7b 31 7d 22 2c 0d 0a 20 20  : {0}\\{1}",..  
311f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6b 65                ke
31210 79 2c 20 70 61 63 6b 61 67 65 2e 50 61 63 6b 61  y, package.Packa
31220 67 65 49 64 2e 54 6f 53 74 72 69 6e 67 28 56 73  geId.ToString(Vs
31230 49 64 46 6f 72 6d 61 74 29 29 3b 0d 0a 0d 0a 20  IdFormat));.... 
31240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31250 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
31260 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  n false;..      
31270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31280 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
31290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52                 R
312a0 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 53 65  egistryHelper.Se
312b0 74 56 61 6c 75 65 28 70 61 63 6b 61 67 65 4b 65  tValue(packageKe
312c0 79 2c 20 6e 75 6c 6c 2c 0d 0a 20 20 20 20 20 20  y, null,..      
312d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
312e0 20 20 20 20 20 20 53 74 72 69 6e 67 2e 46 6f 72        String.For
312f0 6d 61 74 28 22 7b 30 7d 20 44 65 73 69 67 6e 65  mat("{0} Designe
31300 72 20 50 61 63 6b 61 67 65 22 2c 20 50 72 6f 6a  r Package", Proj
31310 65 63 74 4e 61 6d 65 29 2c 0d 0a 20 20 20 20 20  ectName),..     
31320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31330 20 20 20 20 20 20 20 77 68 61 74 49 66 2c 20 76         whatIf, v
31340 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20  erbose);....    
31350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31360 20 20 20 20 52 65 67 69 73 74 72 79 48 65 6c 70      RegistryHelp
31370 65 72 2e 53 65 74 56 61 6c 75 65 28 70 61 63 6b  er.SetValue(pack
31380 61 67 65 4b 65 79 2c 20 22 43 6c 61 73 73 22 2c  ageKey, "Class",
31390 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
313a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 53                "S
313b0 51 4c 69 74 65 2e 44 65 73 69 67 6e 65 72 2e 53  QLite.Designer.S
313c0 51 4c 69 74 65 50 61 63 6b 61 67 65 22 2c 20 77  QLitePackage", w
313d0 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 3b  hatIf, verbose);
313e0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
313f0 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69              Regi
31400 73 74 72 79 48 65 6c 70 65 72 2e 53 65 74 56 61  stryHelper.SetVa
31410 6c 75 65 28 70 61 63 6b 61 67 65 4b 65 79 2c 20  lue(packageKey, 
31420 22 43 6f 64 65 42 61 73 65 22 2c 0d 0a 20 20 20  "CodeBase",..   
31430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31440 20 20 20 20 20 20 20 20 20 66 69 6c 65 4e 61 6d           fileNam
31450 65 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f  e, whatIf, verbo
31460 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  se);....        
31470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31480 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 53  RegistryHelper.S
31490 65 74 56 61 6c 75 65 28 70 61 63 6b 61 67 65 4b  etValue(packageK
314a0 65 79 2c 20 22 49 44 22 2c 20 34 30 30 2c 20 77  ey, "ID", 400, w
314b0 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20  hatIf,..        
314c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
314d0 20 20 20 20 76 65 72 62 6f 73 65 29 3b 0d 0a 0d      verbose);...
314e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
314f0 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
31500 64 69 72 65 63 74 6f 72 79 20 3d 20 47 65 74 53  directory = GetS
31510 79 73 74 65 6d 44 69 72 65 63 74 6f 72 79 28 77  ystemDirectory(w
31520 6f 77 36 34 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  ow64);....      
31530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31540 20 20 69 66 20 28 64 69 72 65 63 74 6f 72 79 20    if (directory 
31550 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
31560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31570 20 20 20 20 20 20 64 69 72 65 63 74 6f 72 79 20        directory 
31580 3d 20 53 74 72 69 6e 67 2e 45 6d 70 74 79 3b 0d  = String.Empty;.
31590 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
315a0 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73             Regis
315b0 74 72 79 48 65 6c 70 65 72 2e 53 65 74 56 61 6c  tryHelper.SetVal
315c0 75 65 28 70 61 63 6b 61 67 65 4b 65 79 2c 20 22  ue(packageKey, "
315d0 49 6e 70 72 6f 63 53 65 72 76 65 72 33 32 22 2c  InprocServer32",
315e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
315f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 50 61                Pa
31600 74 68 2e 43 6f 6d 62 69 6e 65 28 64 69 72 65 63  th.Combine(direc
31610 74 6f 72 79 2c 20 22 6d 73 63 6f 72 65 65 2e 64  tory, "mscoree.d
31620 6c 6c 22 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  ll"),..         
31630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31640 20 20 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f     whatIf, verbo
31650 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  se);....        
31660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31670 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 53  RegistryHelper.S
31680 65 74 56 61 6c 75 65 28 70 61 63 6b 61 67 65 4b  etValue(packageK
31690 65 79 2c 20 22 43 6f 6d 70 61 6e 79 4e 61 6d 65  ey, "CompanyName
316a0 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
316b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
316c0 22 68 74 74 70 3a 2f 2f 73 79 73 74 65 6d 2e 64  "http://system.d
316d0 61 74 61 2e 73 71 6c 69 74 65 2e 6f 72 67 2f 22  ata.sqlite.org/"
316e0 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73  , whatIf, verbos
316f0 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e);....         
31700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52                 R
31710 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 53 65  egistryHelper.Se
31720 74 56 61 6c 75 65 28 70 61 63 6b 61 67 65 4b 65  tValue(packageKe
31730 79 2c 20 22 4d 69 6e 45 64 69 74 69 6f 6e 22 2c  y, "MinEdition",
31740 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
31750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 73                "s
31760 74 61 6e 64 61 72 64 22 2c 20 77 68 61 74 49 66  tandard", whatIf
31770 2c 20 76 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20  , verbose);.... 
31780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31790 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79 48         RegistryH
317a0 65 6c 70 65 72 2e 53 65 74 56 61 6c 75 65 28 70  elper.SetValue(p
317b0 61 63 6b 61 67 65 4b 65 79 2c 20 22 50 72 6f 64  ackageKey, "Prod
317c0 75 63 74 4e 61 6d 65 22 2c 0d 0a 20 20 20 20 20  uctName",..     
317d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
317e0 20 20 20 20 20 20 20 53 74 72 69 6e 67 2e 46 6f         String.Fo
317f0 72 6d 61 74 28 22 7b 30 7d 20 44 65 73 69 67 6e  rmat("{0} Design
31800 65 72 20 50 61 63 6b 61 67 65 22 2c 20 50 72 6f  er Package", Pro
31810 6a 65 63 74 4e 61 6d 65 29 2c 0d 0a 20 20 20 20  jectName),..    
31820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31830 20 20 20 20 20 20 20 20 77 68 61 74 49 66 2c 20          whatIf, 
31840 76 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20  verbose);....   
31850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31860 20 20 20 20 20 52 65 67 69 73 74 72 79 48 65 6c       RegistryHel
31870 70 65 72 2e 53 65 74 56 61 6c 75 65 28 70 61 63  per.SetValue(pac
31880 6b 61 67 65 4b 65 79 2c 20 22 50 72 6f 64 75 63  kageKey, "Produc
31890 74 56 65 72 73 69 6f 6e 22 2c 0d 0a 20 20 20 20  tVersion",..    
318a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
318b0 20 20 20 20 20 20 20 20 22 31 2e 30 22 2c 20 77          "1.0", w
318c0 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 3b  hatIf, verbose);
318d0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
318e0 20 20 20 20 20 20 20 20 20 20 20 20 75 73 69 6e              usin
318f0 67 20 28 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b  g (MockRegistryK
31900 65 79 20 74 6f 6f 6c 62 6f 78 4b 65 79 20 3d 0d  ey toolboxKey =.
31910 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
31920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31930 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e   RegistryHelper.
31940 43 72 65 61 74 65 53 75 62 4b 65 79 28 70 61 63  CreateSubKey(pac
31950 6b 61 67 65 4b 65 79 2c 0d 0a 20 20 20 20 20 20  kageKey,..      
31960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31970 20 20 20 20 20 20 20 20 20 20 22 54 6f 6f 6c 62            "Toolb
31980 6f 78 22 2c 20 77 68 61 74 49 66 2c 20 76 65 72  ox", whatIf, ver
31990 62 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20  bose))..        
319a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
319b0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
319c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
319d0 66 20 28 74 6f 6f 6c 62 6f 78 4b 65 79 20 3d 3d  f (toolboxKey ==
319e0 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
319f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31a00 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
31a10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31a20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 53         error = S
31a30 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
31a40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31a50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31a60 20 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20 63 72     "could not cr
31a70 65 61 74 65 20 72 65 67 69 73 74 72 79 20 6b 65  eate registry ke
31a80 79 3a 20 22 20 2b 0d 0a 20 20 20 20 20 20 20 20  y: " +..        
31a90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31aa0 20 20 20 20 20 20 20 20 20 20 20 20 22 7b 30 7d              "{0}
31ab0 5c 5c 54 6f 6f 6c 62 6f 78 22 2c 20 70 61 63 6b  \\Toolbox", pack
31ac0 61 67 65 4b 65 79 29 3b 0d 0a 0d 0a 20 20 20 20  ageKey);....    
31ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31ae0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
31af0 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20  rn false;..     
31b00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31b10 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
31b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31b30 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79          Registry
31b40 48 65 6c 70 65 72 2e 53 65 74 56 61 6c 75 65 28  Helper.SetValue(
31b50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
31b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31b70 20 20 74 6f 6f 6c 62 6f 78 4b 65 79 2c 20 22 44    toolboxKey, "D
31b80 65 66 61 75 6c 74 20 49 74 65 6d 73 22 2c 20 33  efault Items", 3
31b90 2c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20  , whatIf,..     
31ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31bb0 20 20 20 20 20 20 20 20 20 20 20 76 65 72 62 6f             verbo
31bc0 73 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  se);..          
31bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
31be0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
31bf0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
31c00 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
31c10 20 20 20 20 20 20 20 20 20 20 20 20 20 75 73 69               usi
31c20 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73 74 72 79  ng (MockRegistry
31c30 4b 65 79 20 73 75 62 4b 65 79 20 3d 20 52 65 67  Key subKey = Reg
31c40 69 73 74 72 79 48 65 6c 70 65 72 2e 4f 70 65 6e  istryHelper.Open
31c50 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20  SubKey(..       
31c60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31c70 20 6b 65 79 2c 20 22 4d 65 6e 75 73 22 2c 20 74   key, "Menus", t
31c80 72 75 65 2c 20 77 68 61 74 49 66 2c 20 76 65 72  rue, whatIf, ver
31c90 62 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20  bose))..        
31ca0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
31cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
31cc0 66 20 28 73 75 62 4b 65 79 20 3d 3d 20 6e 75 6c  f (subKey == nul
31cd0 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
31ce0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
31cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31d00 20 20 20 65 72 72 6f 72 20 3d 20 53 74 72 69 6e     error = Strin
31d10 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
31d20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31d30 20 20 20 20 20 20 20 22 63 6f 75 6c 64 20 6e 6f         "could no
31d40 74 20 6f 70 65 6e 20 72 65 67 69 73 74 72 79 20  t open registry 
31d50 6b 65 79 3a 20 7b 30 7d 5c 5c 4d 65 6e 75 73 22  key: {0}\\Menus"
31d60 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
31d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6b                 k
31d80 65 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ey);....        
31d90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31da0 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20  return false;.. 
31db0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31dc0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
31dd0 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69              Regi
31de0 73 74 72 79 48 65 6c 70 65 72 2e 53 65 74 56 61  stryHelper.SetVa
31df0 6c 75 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  lue(..          
31e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 75                su
31e10 62 4b 65 79 2c 20 70 61 63 6b 61 67 65 2e 50 61  bKey, package.Pa
31e20 63 6b 61 67 65 49 64 2e 54 6f 53 74 72 69 6e 67  ckageId.ToString
31e30 28 56 73 49 64 46 6f 72 6d 61 74 29 2c 0d 0a 20  (VsIdFormat),.. 
31e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31e50 20 20 20 20 20 20 20 22 2c 20 31 30 30 30 2c 20         ", 1000, 
31e60 33 22 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62  3", whatIf, verb
31e70 6f 73 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ose);..         
31e80 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
31e90 20 20 20 20 20 20 20 20 20 20 20 20 75 73 69 6e              usin
31ea0 67 20 28 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b  g (MockRegistryK
31eb0 65 79 20 73 75 62 4b 65 79 20 3d 20 52 65 67 69  ey subKey = Regi
31ec0 73 74 72 79 48 65 6c 70 65 72 2e 4f 70 65 6e 53  stryHelper.OpenS
31ed0 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20  ubKey(..        
31ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31ef0 6b 65 79 2c 20 22 53 65 72 76 69 63 65 73 22 2c  key, "Services",
31f00 20 74 72 75 65 2c 20 77 68 61 74 49 66 2c 20 76   true, whatIf, v
31f10 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20 20  erbose))..      
31f20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
31f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31f40 20 69 66 20 28 73 75 62 4b 65 79 20 3d 3d 20 6e   if (subKey == n
31f50 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
31f60 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
31f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31f80 20 20 20 20 20 65 72 72 6f 72 20 3d 20 53 74 72       error = Str
31f90 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
31fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31fb0 20 20 20 20 20 20 20 20 20 22 63 6f 75 6c 64 20           "could 
31fc0 6e 6f 74 20 6f 70 65 6e 20 72 65 67 69 73 74 72  not open registr
31fd0 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c 53 65 72 76  y key: {0}\\Serv
31fe0 69 63 65 73 22 2c 0d 0a 20 20 20 20 20 20 20 20  ices",..        
31ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32000 20 20 20 20 6b 65 79 29 3b 0d 0a 0d 0a 20 20 20      key);....   
32010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32020 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
32030 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
32040 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
32050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32060 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69   using (MockRegi
32070 73 74 72 79 4b 65 79 20 73 65 72 76 69 63 65 4b  stryKey serviceK
32080 65 79 20 3d 0d 0a 20 20 20 20 20 20 20 20 20 20  ey =..          
32090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
320a0 20 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72    RegistryHelper
320b0 2e 43 72 65 61 74 65 53 75 62 4b 65 79 28 73 75  .CreateSubKey(su
320c0 62 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20  bKey,..         
320d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
320e0 20 20 20 70 61 63 6b 61 67 65 2e 53 65 72 76 69     package.Servi
320f0 63 65 49 64 2e 54 6f 53 74 72 69 6e 67 28 56 73  ceId.ToString(Vs
32100 49 64 46 6f 72 6d 61 74 29 2c 20 77 68 61 74 49  IdFormat), whatI
32110 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  f,..            
32120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32130 76 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20  verbose))..     
32140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
32150 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
32160 20 20 20 20 20 20 20 20 20 20 69 66 20 28 73 65            if (se
32170 72 76 69 63 65 4b 65 79 20 3d 3d 20 6e 75 6c 6c  rviceKey == null
32180 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
32190 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
321a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
321b0 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20            error 
321c0 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  = String.Format(
321d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
321e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
321f0 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20 63 72 65    "could not cre
32200 61 74 65 20 72 65 67 69 73 74 72 79 20 6b 65 79  ate registry key
32210 3a 20 7b 30 7d 5c 5c 7b 31 7d 22 2c 0d 0a 20 20  : {0}\\{1}",..  
32220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6b 65                ke
32240 79 2c 20 70 61 63 6b 61 67 65 2e 53 65 72 76 69  y, package.Servi
32250 63 65 49 64 2e 54 6f 53 74 72 69 6e 67 28 56 73  ceId.ToString(Vs
32260 49 64 46 6f 72 6d 61 74 29 29 3b 0d 0a 0d 0a 20  IdFormat));.... 
32270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32280 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
32290 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  n false;..      
322a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
322b0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
322c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52                 R
322d0 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 53 65  egistryHelper.Se
322e0 74 56 61 6c 75 65 28 73 65 72 76 69 63 65 4b 65  tValue(serviceKe
322f0 79 2c 20 6e 75 6c 6c 2c 0d 0a 20 20 20 20 20 20  y, null,..      
32300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32310 20 20 20 20 20 20 70 61 63 6b 61 67 65 2e 50 61        package.Pa
32320 63 6b 61 67 65 49 64 2e 54 6f 53 74 72 69 6e 67  ckageId.ToString
32330 28 56 73 49 64 46 6f 72 6d 61 74 29 2c 20 77 68  (VsIdFormat), wh
32340 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20  atIf,..         
32350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32360 20 20 20 76 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a     verbose);....
32370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32380 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79          Registry
32390 48 65 6c 70 65 72 2e 53 65 74 56 61 6c 75 65 28  Helper.SetValue(
323a0 73 65 72 76 69 63 65 4b 65 79 2c 20 22 4e 61 6d  serviceKey, "Nam
323b0 65 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e",..           
323c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
323d0 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 22   String.Format("
323e0 7b 30 7d 20 44 65 73 69 67 6e 65 72 20 53 65 72  {0} Designer Ser
323f0 76 69 63 65 22 2c 20 50 72 6f 6a 65 63 74 4e 61  vice", ProjectNa
32400 6d 65 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  me),..          
32410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32420 20 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73    whatIf, verbos
32430 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e);..           
32440 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
32450 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
32460 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
32470 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
32480 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20  rn true;..      
32490 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f    }....        /
324a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
324b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
324c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
324d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
324e0 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
324f0 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63    private static
32500 20 62 6f 6f 6c 20 52 65 6d 6f 76 65 56 73 50 61   bool RemoveVsPa
32510 63 6b 61 67 65 28 0d 0a 20 20 20 20 20 20 20 20  ckage(..        
32520 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79      MockRegistry
32530 4b 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20  Key rootKey,..  
32540 20 20 20 20 20 20 20 20 20 20 56 65 72 73 69 6f            Versio
32550 6e 20 76 73 56 65 72 73 69 6f 6e 2c 0d 0a 20 20  n vsVersion,..  
32560 20 20 20 20 20 20 20 20 20 20 50 61 63 6b 61 67            Packag
32570 65 20 70 61 63 6b 61 67 65 2c 0d 0a 20 20 20 20  e package,..    
32580 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 6f 77          bool wow
32590 36 34 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  64,..           
325a0 20 62 6f 6f 6c 20 74 68 72 6f 77 4f 6e 4d 69 73   bool throwOnMis
325b0 73 69 6e 67 2c 0d 0a 20 20 20 20 20 20 20 20 20  sing,..         
325c0 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d     bool whatIf,.
325d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f  .            boo
325e0 6c 20 76 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20  l verbose,..    
325f0 20 20 20 20 20 20 20 20 72 65 66 20 73 74 72 69          ref stri
32600 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20 20 20 20  ng error..      
32610 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
32620 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
32630 69 66 20 28 76 73 56 65 72 73 69 6f 6e 20 3d 3d  if (vsVersion ==
32640 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
32650 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
32660 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22         error = "
32670 69 6e 76 61 6c 69 64 20 56 53 20 76 65 72 73 69  invalid VS versi
32680 6f 6e 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  on";..          
32690 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
326a0 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se;..           
326b0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
326c0 20 20 69 66 20 28 70 61 63 6b 61 67 65 20 3d 3d    if (package ==
326d0 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
326e0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
326f0 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22         error = "
32700 69 6e 76 61 6c 69 64 20 56 53 20 70 61 63 6b 61  invalid VS packa
32710 67 65 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ge";..          
32720 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
32730 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se;..           
32740 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
32750 20 20 73 74 72 69 6e 67 20 6b 65 79 4e 61 6d 65    string keyName
32760 20 3d 20 47 65 74 56 73 4b 65 79 4e 61 6d 65 28   = GetVsKeyName(
32770 76 73 56 65 72 73 69 6f 6e 2c 20 77 6f 77 36 34  vsVersion, wow64
32780 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
32790 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67    using (MockReg
327a0 69 73 74 72 79 4b 65 79 20 6b 65 79 20 3d 20 52  istryKey key = R
327b0 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 4f 70  egistryHelper.Op
327c0 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20  enSubKey(..     
327d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
327e0 6f 6f 74 4b 65 79 2c 20 6b 65 79 4e 61 6d 65 2c  ootKey, keyName,
327f0 20 66 61 6c 73 65 2c 20 77 68 61 74 49 66 2c 20   false, whatIf, 
32800 76 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20  verbose))..     
32810 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
32820 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6b 65            if (ke
32830 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  y == null)..    
32840 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
32850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32860 20 20 20 65 72 72 6f 72 20 3d 20 53 74 72 69 6e     error = Strin
32870 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
32880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32890 20 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20 6f 70     "could not op
328a0 65 6e 20 72 65 67 69 73 74 72 79 20 6b 65 79 3a  en registry key:
328b0 20 7b 30 7d 5c 5c 7b 31 7d 22 2c 0d 0a 20 20 20   {0}\\{1}",..   
328c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
328d0 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 6b 65       rootKey, ke
328e0 79 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20  yName);....     
328f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
32900 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20  eturn false;..  
32910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
32920 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
32930 20 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65     using (MockRe
32940 67 69 73 74 72 79 4b 65 79 20 73 75 62 4b 65 79  gistryKey subKey
32950 20 3d 20 52 65 67 69 73 74 72 79 48 65 6c 70 65   = RegistryHelpe
32960 72 2e 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20  r.OpenSubKey(.. 
32970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32980 20 20 20 20 20 20 20 6b 65 79 2c 20 22 50 61 63         key, "Pac
32990 6b 61 67 65 73 22 2c 20 74 72 75 65 2c 20 77 68  kages", true, wh
329a0 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 29 0d  atIf, verbose)).
329b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
329c0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
329d0 20 20 20 20 20 20 20 20 69 66 20 28 73 75 62 4b          if (subK
329e0 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ey == null)..   
329f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32a00 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
32a10 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
32a20 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  r = String.Forma
32a30 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
32a40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32a50 22 63 6f 75 6c 64 20 6e 6f 74 20 6f 70 65 6e 20  "could not open 
32a60 72 65 67 69 73 74 72 79 20 6b 65 79 3a 20 7b 30  registry key: {0
32a70 7d 5c 5c 50 61 63 6b 61 67 65 73 22 2c 0d 0a 20  }\\Packages",.. 
32a80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32a90 20 20 20 20 20 20 20 20 20 20 20 6b 65 79 29 3b             key);
32aa0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
32ab0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
32ac0 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20  rn false;..     
32ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
32ae0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
32af0 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79          Registry
32b00 48 65 6c 70 65 72 2e 44 65 6c 65 74 65 53 75 62  Helper.DeleteSub
32b10 4b 65 79 54 72 65 65 28 0d 0a 20 20 20 20 20 20  KeyTree(..      
32b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32b30 20 20 73 75 62 4b 65 79 2c 20 70 61 63 6b 61 67    subKey, packag
32b40 65 2e 50 61 63 6b 61 67 65 49 64 2e 54 6f 53 74  e.PackageId.ToSt
32b50 72 69 6e 67 28 56 73 49 64 46 6f 72 6d 61 74 29  ring(VsIdFormat)
32b60 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
32b70 20 20 20 20 20 20 20 20 20 20 20 77 68 61 74 49             whatI
32b80 66 2c 20 76 65 72 62 6f 73 65 29 3b 0d 0a 20 20  f, verbose);..  
32b90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
32ba0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
32bb0 20 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65     using (MockRe
32bc0 67 69 73 74 72 79 4b 65 79 20 73 75 62 4b 65 79  gistryKey subKey
32bd0 20 3d 20 52 65 67 69 73 74 72 79 48 65 6c 70 65   = RegistryHelpe
32be0 72 2e 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20  r.OpenSubKey(.. 
32bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32c00 20 20 20 20 20 20 20 6b 65 79 2c 20 22 4d 65 6e         key, "Men
32c10 75 73 22 2c 20 74 72 75 65 2c 20 77 68 61 74 49  us", true, whatI
32c20 66 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a 20 20  f, verbose))..  
32c30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
32c40 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
32c50 20 20 20 20 20 69 66 20 28 73 75 62 4b 65 79 20       if (subKey 
32c60 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
32c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
32c80 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
32c90 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
32ca0 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d   String.Format(.
32cb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
32cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 63 6f               "co
32cd0 75 6c 64 20 6e 6f 74 20 6f 70 65 6e 20 72 65 67  uld not open reg
32ce0 69 73 74 72 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c  istry key: {0}\\
32cf0 4d 65 6e 75 73 22 2c 0d 0a 20 20 20 20 20 20 20  Menus",..       
32d00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32d10 20 20 20 20 20 6b 65 79 29 3b 0d 0a 0d 0a 20 20       key);....  
32d20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32d30 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
32d40 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se;..           
32d50 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
32d60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32d70 20 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72    RegistryHelper
32d80 2e 44 65 6c 65 74 65 56 61 6c 75 65 28 0d 0a 20  .DeleteValue(.. 
32d90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32da0 20 20 20 20 20 20 20 73 75 62 4b 65 79 2c 20 70         subKey, p
32db0 61 63 6b 61 67 65 2e 50 61 63 6b 61 67 65 49 64  ackage.PackageId
32dc0 2e 54 6f 53 74 72 69 6e 67 28 56 73 49 64 46 6f  .ToString(VsIdFo
32dd0 72 6d 61 74 29 2c 0d 0a 20 20 20 20 20 20 20 20  rmat),..        
32de0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32df0 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 2c 20  throwOnMissing, 
32e00 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29  whatIf, verbose)
32e10 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
32e20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
32e30 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 4d          using (M
32e40 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 73  ockRegistryKey s
32e50 75 62 4b 65 79 20 3d 20 52 65 67 69 73 74 72 79  ubKey = Registry
32e60 48 65 6c 70 65 72 2e 4f 70 65 6e 53 75 62 4b 65  Helper.OpenSubKe
32e70 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y(..            
32e80 20 20 20 20 20 20 20 20 20 20 20 20 6b 65 79 2c              key,
32e90 20 22 53 65 72 76 69 63 65 73 22 2c 20 74 72 75   "Services", tru
32ea0 65 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f  e, whatIf, verbo
32eb0 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  se))..          
32ec0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
32ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
32ee0 28 73 75 62 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29  (subKey == null)
32ef0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
32f00 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
32f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32f20 20 65 72 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e   error = String.
32f30 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
32f40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32f50 20 20 20 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20       "could not 
32f60 6f 70 65 6e 20 72 65 67 69 73 74 72 79 20 6b 65  open registry ke
32f70 79 3a 20 7b 30 7d 5c 5c 53 65 72 76 69 63 65 73  y: {0}\\Services
32f80 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
32f90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32fa0 6b 65 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  key);....       
32fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32fc0 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
32fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32fe0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
32ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67               Reg
33000 69 73 74 72 79 48 65 6c 70 65 72 2e 44 65 6c 65  istryHelper.Dele
33010 74 65 53 75 62 4b 65 79 54 72 65 65 28 0d 0a 20  teSubKeyTree(.. 
33020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33030 20 20 20 20 20 20 20 73 75 62 4b 65 79 2c 20 70         subKey, p
33040 61 63 6b 61 67 65 2e 53 65 72 76 69 63 65 49 64  ackage.ServiceId
33050 2e 54 6f 53 74 72 69 6e 67 28 56 73 49 64 46 6f  .ToString(VsIdFo
33060 72 6d 61 74 29 2c 0d 0a 20 20 20 20 20 20 20 20  rmat),..        
33070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33080 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29  whatIf, verbose)
33090 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
330a0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
330b0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
330c0 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d     return true;.
330d0 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....  
330e0 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
330f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33100 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33110 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33120 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
33130 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
33140 20 73 74 61 74 69 63 20 62 6f 6f 6c 20 50 72 6f   static bool Pro
33150 63 65 73 73 56 73 50 61 63 6b 61 67 65 28 0d 0a  cessVsPackage(..
33160 20 20 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b              Mock
33170 52 65 67 69 73 74 72 79 4b 65 79 20 72 6f 6f 74  RegistryKey root
33180 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  Key,..          
33190 20 20 56 65 72 73 69 6f 6e 20 76 73 56 65 72 73    Version vsVers
331a0 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ion,..          
331b0 20 20 50 61 63 6b 61 67 65 20 70 61 63 6b 61 67    Package packag
331c0 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
331d0 6f 62 6a 65 63 74 20 63 6c 69 65 6e 74 44 61 74  object clientDat
331e0 61 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  a,..            
331f0 62 6f 6f 6c 20 77 6f 77 36 34 2c 0d 0a 20 20 20  bool wow64,..   
33200 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 74 68           bool th
33210 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 2c 0d 0a 20  rowOnMissing,.. 
33220 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
33230 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20  whatIf,..       
33240 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73       bool verbos
33250 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
33260 72 65 66 20 73 74 72 69 6e 67 20 65 72 72 6f 72  ref string error
33270 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d  ..            ).
33280 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
33290 20 20 20 20 20 20 20 20 41 6e 79 50 61 69 72 3c          AnyPair<
332a0 73 74 72 69 6e 67 2c 20 62 6f 6f 6c 3e 20 70 61  string, bool> pa
332b0 69 72 20 3d 20 63 6c 69 65 6e 74 44 61 74 61 20  ir = clientData 
332c0 61 73 20 41 6e 79 50 61 69 72 3c 73 74 72 69 6e  as AnyPair<strin
332d0 67 2c 20 62 6f 6f 6c 3e 3b 0d 0a 0d 0a 20 20 20  g, bool>;....   
332e0 20 20 20 20 20 20 20 20 20 69 66 20 28 70 61 69           if (pai
332f0 72 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  r == null)..    
33300 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
33310 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72             error
33320 20 3d 20 22 69 6e 76 61 6c 69 64 20 56 53 20 63   = "invalid VS c
33330 61 6c 6c 62 61 63 6b 20 64 61 74 61 22 3b 0d 0a  allback data";..
33340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33350 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20  return false;.. 
33360 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
33370 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
33380 70 61 69 72 2e 59 29 0d 0a 20 20 20 20 20 20 20  pair.Y)..       
33390 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
333a0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 41          return A
333b0 64 64 56 73 50 61 63 6b 61 67 65 28 0d 0a 20 20  ddVsPackage(..  
333c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
333d0 20 20 72 6f 6f 74 4b 65 79 2c 20 76 73 56 65 72    rootKey, vsVer
333e0 73 69 6f 6e 2c 20 70 61 63 6b 61 67 65 2c 20 70  sion, package, p
333f0 61 69 72 2e 58 2c 20 77 6f 77 36 34 2c 20 77 68  air.X, wow64, wh
33400 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20  atIf,..         
33410 20 20 20 20 20 20 20 20 20 20 20 76 65 72 62 6f             verbo
33420 73 65 2c 20 72 65 66 20 65 72 72 6f 72 29 3b 0d  se, ref error);.
33430 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
33440 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65              else
33450 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
33460 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
33470 20 72 65 74 75 72 6e 20 52 65 6d 6f 76 65 56 73   return RemoveVs
33480 50 61 63 6b 61 67 65 28 0d 0a 20 20 20 20 20 20  Package(..      
33490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f                ro
334a0 6f 74 4b 65 79 2c 20 76 73 56 65 72 73 69 6f 6e  otKey, vsVersion
334b0 2c 20 70 61 63 6b 61 67 65 2c 20 77 6f 77 36 34  , package, wow64
334c0 2c 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67  , throwOnMissing
334d0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
334e0 20 20 20 20 20 20 20 77 68 61 74 49 66 2c 20 76         whatIf, v
334f0 65 72 62 6f 73 65 2c 20 72 65 66 20 65 72 72 6f  erbose, ref erro
33500 72 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  r);..           
33510 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20   }..        }.. 
33520 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f         #endregio
33530 6e 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72  n..        #endr
33540 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20  egion....       
33550 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
33560 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33570 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33580 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33590 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
335a0 20 20 20 20 23 72 65 67 69 6f 6e 20 41 70 70 6c      #region Appl
335b0 69 63 61 74 69 6f 6e 20 45 6e 74 72 79 20 50 6f  ication Entry Po
335c0 69 6e 74 0d 0a 20 20 20 20 20 20 20 20 5b 4d 65  int..        [Me
335d0 74 68 6f 64 49 6d 70 6c 28 4d 65 74 68 6f 64 49  thodImpl(MethodI
335e0 6d 70 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e 6c  mplOptions.NoInl
335f0 69 6e 69 6e 67 29 5d 0d 0a 20 20 20 20 20 20 20  ining)]..       
33600 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
33610 69 6e 74 20 4d 61 69 6e 28 0d 0a 20 20 20 20 20  int Main(..     
33620 20 20 20 20 20 20 20 73 74 72 69 6e 67 5b 5d 20         string[] 
33630 61 72 67 73 0d 0a 20 20 20 20 20 20 20 20 20 20  args..          
33640 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a    )..        {..
33650 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79 0d              try.
33660 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
33670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33680 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 63 6f  Configuration co
33690 6e 66 69 67 75 72 61 74 69 6f 6e 20 3d 20 6e 75  nfiguration = nu
336a0 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll;..           
336b0 20 20 20 20 20 73 74 72 69 6e 67 20 65 72 72 6f       string erro
336c0 72 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20  r = null;....   
336d0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f               ///
336e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
336f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33700 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33710 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
33720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33730 23 72 65 67 69 6f 6e 20 44 65 62 75 67 67 65 72  #region Debugger
33740 20 48 6f 6f 6b 0d 0a 20 20 20 20 20 20 20 20 20   Hook..         
33750 20 20 20 20 20 20 20 69 66 20 28 45 6e 76 69 72         if (Envir
33760 6f 6e 6d 65 6e 74 2e 47 65 74 45 6e 76 69 72 6f  onment.GetEnviro
33770 6e 6d 65 6e 74 56 61 72 69 61 62 6c 65 28 22 42  nmentVariable("B
33780 72 65 61 6b 22 29 20 21 3d 20 6e 75 6c 6c 29 0d  reak") != null).
33790 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
337a0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
337b0 20 20 20 20 20 20 20 20 43 6f 6e 73 6f 6c 65 2e          Console.
337c0 57 72 69 74 65 4c 69 6e 65 28 0d 0a 20 20 20 20  WriteLine(..    
337d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
337e0 20 20 20 20 22 41 74 74 61 63 68 20 61 20 64 65      "Attach a de
337f0 62 75 67 67 65 72 20 74 6f 20 70 72 6f 63 65 73  bugger to proces
33800 73 20 7b 30 7d 20 61 6e 64 20 22 20 2b 0d 0a 20  s {0} and " +.. 
33810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33820 20 20 20 20 20 20 20 22 70 72 65 73 73 20 61 6e         "press an
33830 79 20 6b 65 79 20 74 6f 20 63 6f 6e 74 69 6e 75  y key to continu
33840 65 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  e.",..          
33850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 50 72                Pr
33860 6f 63 65 73 73 2e 47 65 74 43 75 72 72 65 6e 74  ocess.GetCurrent
33870 50 72 6f 63 65 73 73 28 29 2e 49 64 29 3b 0d 0a  Process().Id);..
33880 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
33890 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20        try..     
338a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
338b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
338c0 20 20 20 20 20 20 20 20 20 20 43 6f 6e 73 6f 6c            Consol
338d0 65 2e 52 65 61 64 4b 65 79 28 74 72 75 65 29 3b  e.ReadKey(true);
338e0 20 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a 20 20   /* throw */..  
338f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33900 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
33910 20 20 20 20 20 20 20 20 20 63 61 74 63 68 20 28           catch (
33920 49 6e 76 61 6c 69 64 4f 70 65 72 61 74 69 6f 6e  InvalidOperation
33930 45 78 63 65 70 74 69 6f 6e 29 20 2f 2f 20 43 6f  Exception) // Co
33940 6e 73 6f 6c 65 2e 52 65 61 64 4b 65 79 0d 0a 20  nsole.ReadKey.. 
33950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33960 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
33970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
33980 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20   do nothing...  
33990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
339a0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
339b0 20 20 20 20 20 20 20 20 20 20 20 44 65 62 75 67             Debug
339c0 67 65 72 2e 42 72 65 61 6b 28 29 3b 0d 0a 20 20  ger.Break();..  
339d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
339e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
339f0 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20   #endregion.... 
33a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
33a10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33a20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33a30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33a40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
33a50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
33a60 20 20 23 72 65 67 69 6f 6e 20 43 6f 6d 6d 61 6e    #region Comman
33a70 64 20 4c 69 6e 65 20 50 72 6f 63 65 73 73 69 6e  d Line Processin
33a80 67 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  g..             
33a90 20 20 20 69 66 20 28 21 43 6f 6e 66 69 67 75 72     if (!Configur
33aa0 61 74 69 6f 6e 2e 46 72 6f 6d 41 72 67 73 28 0d  ation.FromArgs(.
33ab0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
33ac0 20 20 20 20 20 20 20 20 20 61 72 67 73 2c 20 74           args, t
33ad0 72 75 65 2c 20 72 65 66 20 63 6f 6e 66 69 67 75  rue, ref configu
33ae0 72 61 74 69 6f 6e 2c 20 72 65 66 20 65 72 72 6f  ration, ref erro
33af0 72 29 20 7c 7c 0d 0a 20 20 20 20 20 20 20 20 20  r) ||..         
33b00 20 20 20 20 20 20 20 20 20 20 20 21 43 6f 6e 66             !Conf
33b10 69 67 75 72 61 74 69 6f 6e 2e 50 72 6f 63 65 73  iguration.Proces
33b20 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  s(..            
33b30 20 20 20 20 20 20 20 20 20 20 20 20 61 72 67 73              args
33b40 2c 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2c  , configuration,
33b50 20 74 72 75 65 2c 20 72 65 66 20 65 72 72 6f 72   true, ref error
33b60 29 20 7c 7c 0d 0a 20 20 20 20 20 20 20 20 20 20  ) ||..          
33b70 20 20 20 20 20 20 20 20 20 20 21 43 6f 6e 66 69            !Confi
33b80 67 75 72 61 74 69 6f 6e 2e 43 68 65 63 6b 52 75  guration.CheckRu
33b90 6e 74 69 6d 65 56 65 72 73 69 6f 6e 28 0d 0a 20  ntimeVersion(.. 
33ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33bb0 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61         configura
33bc0 74 69 6f 6e 2c 20 74 72 75 65 2c 20 72 65 66 20  tion, true, ref 
33bd0 65 72 72 6f 72 29 29 0d 0a 20 20 20 20 20 20 20  error))..       
33be0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
33bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33c00 54 72 61 63 65 4f 70 73 2e 53 68 6f 77 4d 65 73  TraceOps.ShowMes
33c10 73 61 67 65 28 54 72 61 63 65 50 72 69 6f 72 69  sage(TracePriori
33c20 74 79 2e 48 69 67 68 65 73 74 2c 0d 0a 20 20 20  ty.Highest,..   
33c30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33c40 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61       debugCallba
33c50 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63  ck, traceCallbac
33c60 6b 2c 20 74 68 69 73 41 73 73 65 6d 62 6c 79 2c  k, thisAssembly,
33c70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
33c80 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 2c            error,
33c90 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 2c 20   traceCategory, 
33ca0 4d 65 73 73 61 67 65 42 6f 78 42 75 74 74 6f 6e  MessageBoxButton
33cb0 73 2e 4f 4b 2c 0d 0a 20 20 20 20 20 20 20 20 20  s.OK,..         
33cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4d                 M
33cd0 65 73 73 61 67 65 42 6f 78 49 63 6f 6e 2e 45 72  essageBoxIcon.Er
33ce0 72 6f 72 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ror);....       
33cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61               Tra
33d00 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72  ceOps.DebugAndTr
33d10 61 63 65 28 54 72 61 63 65 50 72 69 6f 72 69 74  ace(TracePriorit
33d20 79 2e 4d 65 64 69 75 6d 48 69 67 68 2c 0d 0a 20  y.MediumHigh,.. 
33d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33d40 20 20 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c         debugCall
33d50 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62  back, traceCallb
33d60 61 63 6b 2c 20 22 46 61 69 6c 75 72 65 2e 22 2c  ack, "Failure.",
33d70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
33d80 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
33d90 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20  ategory);....   
33da0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33db0 20 72 65 74 75 72 6e 20 31 3b 20 2f 2a 20 46 41   return 1; /* FA
33dc0 49 4c 55 52 45 20 2a 2f 0d 0a 20 20 20 20 20 20  ILURE */..      
33dd0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
33de0 20 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e               #en
33df0 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
33e00 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
33e10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33e20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33e30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33e40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
33e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 75 73                us
33e60 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73 74 72  ing (MockRegistr
33e70 79 20 72 65 67 69 73 74 72 79 20 3d 20 6e 65 77  y registry = new
33e80 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 28 0d 0a   MockRegistry(..
33e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33ea0 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72          configur
33eb0 61 74 69 6f 6e 2e 57 68 61 74 49 66 2c 20 66 61  ation.WhatIf, fa
33ec0 6c 73 65 2c 20 66 61 6c 73 65 29 29 0d 0a 20 20  lse, false))..  
33ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
33ee0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
33ef0 20 20 20 20 20 23 72 65 67 69 6f 6e 20 43 6f 72       #region Cor
33f00 65 20 41 73 73 65 6d 62 6c 79 20 4e 61 6d 65 20  e Assembly Name 
33f10 43 68 65 63 6b 0d 0a 20 20 20 20 20 20 20 20 20  Check..         
33f20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
33f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33f40 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 44 6f 20 74     // NOTE: Do t
33f50 68 69 73 20 66 69 72 73 74 2c 20 62 65 66 6f 72  his first, befor
33f60 65 20 6d 61 6b 69 6e 67 20 61 6e 79 20 63 68 61  e making any cha
33f70 6e 67 65 73 20 74 6f 20 74 68 65 0d 0a 20 20 20  nges to the..   
33f80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33f90 20 2f 2f 20 20 20 20 20 20 20 73 79 73 74 65 6d   //       system
33fa0 2c 20 62 65 63 61 75 73 65 20 69 74 20 77 69 6c  , because it wil
33fb0 6c 20 74 68 72 6f 77 20 61 6e 20 65 78 63 65 70  l throw an excep
33fc0 74 69 6f 6e 20 69 66 20 74 68 65 0d 0a 20 20 20  tion if the..   
33fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33fe0 20 2f 2f 20 20 20 20 20 20 20 66 69 6c 65 20 6e   //       file n
33ff0 61 6d 65 20 64 6f 65 73 20 6e 6f 74 20 72 65 70  ame does not rep
34000 72 65 73 65 6e 74 20 61 20 76 61 6c 69 64 20 6d  resent a valid m
34010 61 6e 61 67 65 64 0d 0a 20 20 20 20 20 20 20 20  anaged..        
34020 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
34030 20 20 20 20 20 61 73 73 65 6d 62 6c 79 2e 0d 0a       assembly...
34040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34050 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
34060 20 20 20 20 20 20 20 20 20 20 20 20 41 73 73 65              Asse
34070 6d 62 6c 79 4e 61 6d 65 20 63 6f 72 65 41 73 73  mblyName coreAss
34080 65 6d 62 6c 79 4e 61 6d 65 20 3d 0d 0a 20 20 20  emblyName =..   
34090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
340a0 20 20 20 20 20 41 73 73 65 6d 62 6c 79 4e 61 6d       AssemblyNam
340b0 65 2e 47 65 74 41 73 73 65 6d 62 6c 79 4e 61 6d  e.GetAssemblyNam
340c0 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
340d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
340e0 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 43 6f  configuration.Co
340f0 72 65 46 69 6c 65 4e 61 6d 65 29 3b 20 2f 2a 20  reFileName); /* 
34100 74 68 72 6f 77 20 2a 2f 0d 0a 0d 0a 20 20 20 20  throw */....    
34110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34120 41 73 73 65 6d 62 6c 79 4e 61 6d 65 20 64 65 73  AssemblyName des
34130 69 67 6e 65 72 41 73 73 65 6d 62 6c 79 4e 61 6d  ignerAssemblyNam
34140 65 20 3d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e =..           
34150 20 20 20 20 20 20 20 20 20 20 20 20 20 41 73 73               Ass
34160 65 6d 62 6c 79 4e 61 6d 65 2e 47 65 74 41 73 73  emblyName.GetAss
34170 65 6d 62 6c 79 4e 61 6d 65 28 0d 0a 20 20 20 20  emblyName(..    
34180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34190 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72          configur
341a0 61 74 69 6f 6e 2e 44 65 73 69 67 6e 65 72 46 69  ation.DesignerFi
341b0 6c 65 4e 61 6d 65 29 3b 20 2f 2a 20 74 68 72 6f  leName); /* thro
341c0 77 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20  w */..          
341d0 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65            #endre
341e0 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20  gion....        
341f0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
34200 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34210 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34220 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34230 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
34240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23                 #
34250 72 65 67 69 6f 6e 20 53 79 73 74 65 6d 20 44 69  region System Di
34260 72 65 63 74 6f 72 79 20 43 68 65 63 6b 0d 0a 20  rectory Check.. 
34270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34280 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
34290 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f             // NO
342a0 54 45 3a 20 47 65 74 74 69 6e 67 20 74 68 65 20  TE: Getting the 
342b0 73 79 73 74 65 6d 20 64 69 72 65 63 74 6f 72 79  system directory
342c0 20 76 61 6c 75 65 20 68 65 72 65 20 73 65 72 76   value here serv
342d0 65 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  es..            
342e0 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
342f0 20 74 77 6f 20 70 75 72 70 6f 73 65 73 3a 0d 0a   two purposes:..
34300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34310 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
34320 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
34330 20 20 20 20 20 31 2e 20 49 74 20 65 6e 61 62 6c       1. It enabl
34340 65 73 20 75 73 20 74 6f 20 6c 6f 67 20 74 68 65  es us to log the
34350 20 73 79 73 74 65 6d 20 64 69 72 65 63 74 6f 72   system director
34360 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  y..             
34370 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
34380 20 20 20 76 61 6c 75 65 20 76 65 72 79 20 65 61     value very ea
34390 72 6c 79 20 69 6e 20 74 68 65 20 69 6e 73 74 61  rly in the insta
343a0 6c 6c 61 74 69 6f 6e 20 70 72 6f 63 65 73 73 0d  llation process.
343b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
343c0 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 20 20       //         
343d0 20 28 69 2e 65 2e 20 65 76 65 6e 20 74 68 6f 75   (i.e. even thou
343e0 67 68 20 74 68 65 20 76 61 6c 75 65 20 69 74 73  gh the value its
343f0 65 6c 66 20 69 73 20 6e 6f 74 0d 0a 20 20 20 20  elf is not..    
34400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34410 2f 2f 20 20 20 20 20 20 20 20 20 20 6e 65 65 64  //          need
34420 65 64 20 75 6e 74 69 6c 20 6d 75 63 68 20 6c 61  ed until much la
34430 74 65 72 29 2e 0d 0a 20 20 20 20 20 20 20 20 20  ter)...         
34440 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
34450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34460 20 20 20 2f 2f 20 20 20 20 20 20 20 32 2e 20 53     //       2. S
34470 69 6e 63 65 20 74 68 65 20 76 61 6c 75 65 20 69  ince the value i
34480 73 20 63 61 63 68 65 64 2c 20 69 74 20 70 72 65  s cached, it pre
34490 76 65 6e 74 73 20 61 6e 0d 0a 20 20 20 20 20 20  vents an..      
344a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
344b0 20 20 20 20 20 20 20 20 20 20 65 78 63 65 70 74            except
344c0 69 6f 6e 20 66 72 6f 6d 20 62 65 69 6e 67 20 74  ion from being t
344d0 68 72 6f 77 6e 20 6d 75 63 68 20 6c 61 74 65 72  hrown much later
344e0 20 64 75 72 69 6e 67 0d 0a 20 20 20 20 20 20 20   during..       
344f0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
34500 20 20 20 20 20 20 20 20 20 74 68 65 20 69 6e 73           the ins
34510 74 61 6c 6c 20 77 68 65 6e 20 74 68 65 20 76 61  tall when the va
34520 6c 75 65 20 69 73 20 71 75 65 72 69 65 64 20 61  lue is queried a
34530 67 61 69 6e 0d 0a 20 20 20 20 20 20 20 20 20 20  gain..          
34540 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
34550 20 20 20 20 20 20 28 69 2e 65 2e 20 77 69 74 68        (i.e. with
34560 20 74 68 65 20 73 61 6d 65 20 76 61 6c 75 65 20   the same value 
34570 66 6f 72 20 74 68 65 20 22 77 6f 77 36 34 22 0d  for the "wow64".
34580 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
34590 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 20 20       //         
345a0 20 70 61 72 61 6d 65 74 65 72 29 2e 0d 0a 20 20   parameter)...  
345b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
345c0 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
345d0 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f            TraceO
345e0 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65  ps.DebugAndTrace
345f0 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4d  (TracePriority.M
34600 65 64 69 75 6d 4c 6f 77 2c 0d 0a 20 20 20 20 20  ediumLow,..     
34610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34620 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b     debugCallback
34630 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c  , traceCallback,
34640 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d   String.Format(.
34650 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
34660 20 20 20 20 20 20 20 20 20 22 53 79 73 74 65 6d           "System
34670 20 64 69 72 65 63 74 6f 72 79 20 69 73 20 7b 30   directory is {0
34680 7d 2e 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28  }.", ForDisplay(
34690 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
346a0 20 20 20 20 20 20 20 20 20 20 47 65 74 53 79 73            GetSys
346b0 74 65 6d 44 69 72 65 63 74 6f 72 79 28 63 6f 6e  temDirectory(con
346c0 66 69 67 75 72 61 74 69 6f 6e 2e 57 6f 77 36 34  figuration.Wow64
346d0 29 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ))),..          
346e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
346f0 61 63 65 43 61 74 65 67 6f 72 79 29 3b 20 2f 2a  aceCategory); /*
34700 20 74 68 72 6f 77 20 2a 2f 0d 0a 20 20 20 20 20   throw */..     
34710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23                 #
34720 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20  endregion....   
34730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34740 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
34750 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34760 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34770 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
34780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34790 20 20 20 20 23 72 65 67 69 6f 6e 20 2e 4e 45 54      #region .NET
347a0 20 46 72 61 6d 65 77 6f 72 6b 20 2f 20 56 69 73   Framework / Vis
347b0 75 61 6c 20 53 74 75 64 69 6f 20 44 61 74 61 0d  ual Studio Data.
347c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
347d0 20 20 20 20 20 50 61 63 6b 61 67 65 20 70 61 63       Package pac
347e0 6b 61 67 65 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20  kage = null;..  
347f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34800 20 20 46 72 61 6d 65 77 6f 72 6b 4c 69 73 74 20    FrameworkList 
34810 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 20 3d 20  frameworkList = 
34820 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20  null;..         
34830 20 20 20 20 20 20 20 20 20 20 20 56 73 4c 69 73             VsLis
34840 74 20 76 73 4c 69 73 74 20 3d 20 6e 75 6c 6c 3b  t vsList = null;
34850 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
34860 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
34870 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34880 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34890 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
348a0 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
348b0 20 20 20 20 20 20 20 20 20 20 20 49 6e 69 74 69             Initi
348c0 61 6c 69 7a 65 56 73 50 61 63 6b 61 67 65 28 64  alizeVsPackage(d
348d0 65 73 69 67 6e 65 72 41 73 73 65 6d 62 6c 79 4e  esignerAssemblyN
348e0 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ame,..          
348f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
34900 6e 66 69 67 75 72 61 74 69 6f 6e 2e 48 61 73 46  nfiguration.HasF
34910 6c 61 67 73 28 0d 0a 20 20 20 20 20 20 20 20 20  lags(..         
34920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34930 20 20 20 49 6e 73 74 61 6c 6c 46 6c 61 67 73 2e     InstallFlags.
34940 47 6c 6f 62 61 6c 41 73 73 65 6d 62 6c 79 43 61  GlobalAssemblyCa
34950 63 68 65 2c 20 74 72 75 65 29 20 26 26 0d 0a 20  che, true) &&.. 
34960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34970 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61         configura
34980 74 69 6f 6e 2e 48 61 73 46 6c 61 67 73 28 0d 0a  tion.HasFlags(..
34990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
349a0 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 73 74              Inst
349b0 61 6c 6c 46 6c 61 67 73 2e 56 73 50 61 63 6b 61  allFlags.VsPacka
349c0 67 65 47 6c 6f 62 61 6c 41 73 73 65 6d 62 6c 79  geGlobalAssembly
349d0 43 61 63 68 65 2c 20 74 72 75 65 29 2c 0d 0a 20  Cache, true),.. 
349e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
349f0 20 20 20 20 20 20 20 72 65 66 20 70 61 63 6b 61         ref packa
34a00 67 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ge);....        
34a10 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
34a20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34a30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34a40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34a50 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
34a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 49                 I
34a70 6e 69 74 69 61 6c 69 7a 65 46 72 61 6d 65 77 6f  nitializeFramewo
34a80 72 6b 4c 69 73 74 28 72 65 67 69 73 74 72 79 2e  rkList(registry.
34a90 4c 6f 63 61 6c 4d 61 63 68 69 6e 65 2c 0d 0a 20  LocalMachine,.. 
34aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34ab0 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61         configura
34ac0 74 69 6f 6e 2c 20 72 65 66 20 66 72 61 6d 65 77  tion, ref framew
34ad0 6f 72 6b 4c 69 73 74 29 3b 0d 0a 0d 0a 20 20 20  orkList);....   
34ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34af0 20 49 6e 69 74 69 61 6c 69 7a 65 56 73 4c 69 73   InitializeVsLis
34b00 74 28 72 65 67 69 73 74 72 79 2e 4c 6f 63 61 6c  t(registry.Local
34b10 4d 61 63 68 69 6e 65 2c 20 63 6f 6e 66 69 67 75  Machine, configu
34b20 72 61 74 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20  ration,..       
34b30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34b40 20 72 65 66 20 76 73 4c 69 73 74 29 3b 0d 0a 20   ref vsList);.. 
34b50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34b60 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
34b70 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
34b80 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
34b90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34ba0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34bb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34bc0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
34bd0 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20          #region 
34be0 53 68 61 72 65 64 20 43 6c 69 65 6e 74 20 44 61  Shared Client Da
34bf0 74 61 20 43 72 65 61 74 69 6f 6e 0d 0a 20 20 20  ta Creation..   
34c00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34c10 20 6f 62 6a 65 63 74 20 64 69 72 65 63 74 6f 72   object director
34c20 79 44 61 74 61 20 3d 20 6e 65 77 20 41 6e 79 50  yData = new AnyP
34c30 61 69 72 3c 73 74 72 69 6e 67 2c 20 62 6f 6f 6c  air<string, bool
34c40 3e 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  >(..            
34c50 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66              conf
34c60 69 67 75 72 61 74 69 6f 6e 2e 44 69 72 65 63 74  iguration.Direct
34c70 6f 72 79 2c 20 63 6f 6e 66 69 67 75 72 61 74 69  ory, configurati
34c80 6f 6e 2e 49 6e 73 74 61 6c 6c 29 3b 0d 0a 0d 0a  on.Install);....
34c90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34ca0 20 20 20 20 6f 62 6a 65 63 74 20 66 69 6c 65 4e      object fileN
34cb0 61 6d 65 44 61 74 61 20 3d 20 6e 65 77 20 41 6e  ameData = new An
34cc0 79 50 61 69 72 3c 73 74 72 69 6e 67 2c 20 62 6f  yPair<string, bo
34cd0 6f 6c 3e 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ol>(..          
34ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
34cf0 6e 66 69 67 75 72 61 74 69 6f 6e 2e 44 65 73 69  nfiguration.Desi
34d00 67 6e 65 72 46 69 6c 65 4e 61 6d 65 2c 20 63 6f  gnerFileName, co
34d10 6e 66 69 67 75 72 61 74 69 6f 6e 2e 49 6e 73 74  nfiguration.Inst
34d20 61 6c 6c 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  all);..         
34d30 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 72             #endr
34d40 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20  egion....       
34d50 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f               ///
34d60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34d70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34d80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34d90 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
34da0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34db0 23 72 65 67 69 6f 6e 20 2e 4e 45 54 20 47 41 43  #region .NET GAC
34dc0 20 49 6e 73 74 61 6c 6c 2f 52 65 6d 6f 76 65 0d   Install/Remove.
34dd0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
34de0 20 20 20 20 20 69 66 20 28 63 6f 6e 66 69 67 75       if (configu
34df0 72 61 74 69 6f 6e 2e 48 61 73 46 6c 61 67 73 28  ration.HasFlags(
34e00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
34e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 49 6e                In
34e20 73 74 61 6c 6c 46 6c 61 67 73 2e 47 6c 6f 62 61  stallFlags.Globa
34e30 6c 41 73 73 65 6d 62 6c 79 43 61 63 68 65 2c 20  lAssemblyCache, 
34e40 74 72 75 65 29 29 0d 0a 20 20 20 20 20 20 20 20  true))..        
34e50 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
34e60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34e70 20 20 20 20 20 20 20 50 75 62 6c 69 73 68 20 70         Publish p
34e80 75 62 6c 69 73 68 20 3d 20 6e 75 6c 6c 3b 0d 0a  ublish = null;..
34e90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
34ea0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21 63            if (!c
34eb0 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 57 68 61  onfiguration.Wha
34ec0 74 49 66 29 0d 0a 20 20 20 20 20 20 20 20 20 20  tIf)..          
34ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34ee0 20 20 70 75 62 6c 69 73 68 20 3d 20 6e 65 77 20    publish = new 
34ef0 50 75 62 6c 69 73 68 28 29 3b 0d 0a 0d 0a 20 20  Publish();....  
34f00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34f10 20 20 20 20 20 20 69 66 20 28 63 6f 6e 66 69 67        if (config
34f20 75 72 61 74 69 6f 6e 2e 49 6e 73 74 61 6c 6c 29  uration.Install)
34f30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
34f40 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
34f50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34f60 20 20 20 20 20 20 20 20 20 69 66 20 28 21 63 6f           if (!co
34f70 6e 66 69 67 75 72 61 74 69 6f 6e 2e 57 68 61 74  nfiguration.What
34f80 49 66 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  If)..           
34f90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34fa0 20 20 20 20 20 2f 2a 20 74 68 72 6f 77 20 2a 2f       /* throw */
34fb0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
34fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34fd0 20 20 70 75 62 6c 69 73 68 2e 47 61 63 49 6e 73    publish.GacIns
34fe0 74 61 6c 6c 28 63 6f 6e 66 69 67 75 72 61 74 69  tall(configurati
34ff0 6f 6e 2e 43 6f 72 65 46 69 6c 65 4e 61 6d 65 29  on.CoreFileName)
35000 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
35010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35020 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41   TraceOps.DebugA
35030 6e 64 54 72 61 63 65 28 54 72 61 63 65 50 72 69  ndTrace(TracePri
35040 6f 72 69 74 79 2e 48 69 67 68 65 73 74 2c 0d 0a  ority.Highest,..
35050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35070 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74  debugCallback, t
35080 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74  raceCallback, St
35090 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
350a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
350b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 47                "G
350c0 61 63 49 6e 73 74 61 6c 6c 3a 20 61 73 73 65 6d  acInstall: assem
350d0 62 6c 79 50 61 74 68 20 3d 20 7b 30 7d 22 2c 0d  blyPath = {0}",.
350e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
350f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35100 20 46 6f 72 44 69 73 70 6c 61 79 28 63 6f 6e 66   ForDisplay(conf
35110 69 67 75 72 61 74 69 6f 6e 2e 43 6f 72 65 46 69  iguration.CoreFi
35120 6c 65 4e 61 6d 65 29 29 2c 0d 0a 20 20 20 20 20  leName)),..     
35130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35140 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
35150 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
35160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35170 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21 63            if (!c
35180 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 57 68 61  onfiguration.Wha
35190 74 49 66 29 0d 0a 20 20 20 20 20 20 20 20 20 20  tIf)..          
351a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
351b0 20 20 20 20 20 20 2f 2a 20 74 68 72 6f 77 20 2a        /* throw *
351c0 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
351d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
351e0 20 20 20 70 75 62 6c 69 73 68 2e 47 61 63 49 6e     publish.GacIn
351f0 73 74 61 6c 6c 28 63 6f 6e 66 69 67 75 72 61 74  stall(configurat
35200 69 6f 6e 2e 4c 69 6e 71 46 69 6c 65 4e 61 6d 65  ion.LinqFileName
35210 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
35220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35230 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67    TraceOps.Debug
35240 41 6e 64 54 72 61 63 65 28 54 72 61 63 65 50 72  AndTrace(TracePr
35250 69 6f 72 69 74 79 2e 48 69 67 68 65 73 74 2c 0d  iority.Highest,.
35260 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
35270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35280 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20   debugCallback, 
35290 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53  traceCallback, S
352a0 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
352b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
352c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
352d0 47 61 63 49 6e 73 74 61 6c 6c 3a 20 61 73 73 65  GacInstall: asse
352e0 6d 62 6c 79 50 61 74 68 20 3d 20 7b 30 7d 22 2c  mblyPath = {0}",
352f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
35300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35310 20 20 46 6f 72 44 69 73 70 6c 61 79 28 63 6f 6e    ForDisplay(con
35320 66 69 67 75 72 61 74 69 6f 6e 2e 4c 69 6e 71 46  figuration.LinqF
35330 69 6c 65 4e 61 6d 65 29 29 2c 0d 0a 20 20 20 20  ileName)),..    
35340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35350 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
35360 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
35370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35380 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 63             if (c
35390 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 48 61 73  onfiguration.Has
353a0 46 6c 61 67 73 28 0d 0a 20 20 20 20 20 20 20 20  Flags(..        
353b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
353c0 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 73 74              Inst
353d0 61 6c 6c 46 6c 61 67 73 2e 56 73 50 61 63 6b 61  allFlags.VsPacka
353e0 67 65 47 6c 6f 62 61 6c 41 73 73 65 6d 62 6c 79  geGlobalAssembly
353f0 43 61 63 68 65 2c 20 74 72 75 65 29 29 0d 0a 20  Cache, true)).. 
35400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35410 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
35420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
35440 20 28 21 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e   (!configuration
35450 2e 57 68 61 74 49 66 29 0d 0a 20 20 20 20 20 20  .WhatIf)..      
35460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
35480 20 74 68 72 6f 77 20 2a 2f 0d 0a 20 20 20 20 20   throw */..     
35490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
354a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70                 p
354b0 75 62 6c 69 73 68 2e 47 61 63 49 6e 73 74 61 6c  ublish.GacInstal
354c0 6c 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e  l(configuration.
354d0 44 65 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65  DesignerFileName
354e0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
354f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35500 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44        TraceOps.D
35510 65 62 75 67 41 6e 64 54 72 61 63 65 28 54 72 61  ebugAndTrace(Tra
35520 63 65 50 72 69 6f 72 69 74 79 2e 48 69 67 68 65  cePriority.Highe
35530 73 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  st,..           
35540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35550 20 20 20 20 20 20 20 20 20 64 65 62 75 67 43 61           debugCa
35560 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c  llback, traceCal
35570 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f  lback, String.Fo
35580 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
35590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
355a0 20 20 20 20 20 20 20 20 20 20 20 22 47 61 63 49             "GacI
355b0 6e 73 74 61 6c 6c 3a 20 61 73 73 65 6d 62 6c 79  nstall: assembly
355c0 50 61 74 68 20 3d 20 7b 30 7d 22 2c 0d 0a 20 20  Path = {0}",..  
355d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
355e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
355f0 20 20 46 6f 72 44 69 73 70 6c 61 79 28 63 6f 6e    ForDisplay(con
35600 66 69 67 75 72 61 74 69 6f 6e 2e 44 65 73 69 67  figuration.Desig
35610 6e 65 72 46 69 6c 65 4e 61 6d 65 29 29 2c 0d 0a  nerFileName)),..
35620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35640 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72      traceCategor
35650 79 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  y);..           
35660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35670 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
35680 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
35690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
356a0 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20         else..   
356b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
356c0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
356d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
356e0 20 20 20 20 69 66 20 28 63 6f 6e 66 69 67 75 72      if (configur
356f0 61 74 69 6f 6e 2e 48 61 73 46 6c 61 67 73 28 0d  ation.HasFlags(.
35700 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
35710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35720 20 20 20 20 20 49 6e 73 74 61 6c 6c 46 6c 61 67       InstallFlag
35730 73 2e 56 73 50 61 63 6b 61 67 65 47 6c 6f 62 61  s.VsPackageGloba
35740 6c 41 73 73 65 6d 62 6c 79 43 61 63 68 65 2c 20  lAssemblyCache, 
35750 74 72 75 65 29 29 0d 0a 20 20 20 20 20 20 20 20  true))..        
35760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35770 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
35780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35790 20 20 20 20 20 20 20 69 66 20 28 21 63 6f 6e 66         if (!conf
357a0 69 67 75 72 61 74 69 6f 6e 2e 57 68 61 74 49 66  iguration.WhatIf
357b0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
357c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
357d0 20 20 20 20 20 20 20 2f 2a 20 74 68 72 6f 77 20         /* throw 
357e0 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  */..            
357f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35800 20 20 20 20 20 20 20 20 70 75 62 6c 69 73 68 2e          publish.
35810 47 61 63 52 65 6d 6f 76 65 28 63 6f 6e 66 69 67  GacRemove(config
35820 75 72 61 74 69 6f 6e 2e 44 65 73 69 67 6e 65 72  uration.Designer
35830 46 69 6c 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20  FileName);....  
35840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
35860 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54  aceOps.DebugAndT
35870 72 61 63 65 28 54 72 61 63 65 50 72 69 6f 72 69  race(TracePriori
35880 74 79 2e 48 69 67 68 65 73 74 2c 0d 0a 20 20 20  ty.Highest,..   
35890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
358a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
358b0 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20   debugCallback, 
358c0 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53  traceCallback, S
358d0 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
358e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
358f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35900 20 20 20 22 47 61 63 52 65 6d 6f 76 65 3a 20 61     "GacRemove: a
35910 73 73 65 6d 62 6c 79 50 61 74 68 20 3d 20 7b 30  ssemblyPath = {0
35920 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }",..           
35930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35940 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70           ForDisp
35950 6c 61 79 28 63 6f 6e 66 69 67 75 72 61 74 69 6f  lay(configuratio
35960 6e 2e 44 65 73 69 67 6e 65 72 46 69 6c 65 4e 61  n.DesignerFileNa
35970 6d 65 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  me)),..         
35980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35990 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
359a0 43 61 74 65 67 6f 72 79 29 3b 0d 0a 20 20 20 20  Category);..    
359b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
359c0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
359d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
359e0 20 20 20 20 20 20 20 20 20 69 66 20 28 21 63 6f           if (!co
359f0 6e 66 69 67 75 72 61 74 69 6f 6e 2e 57 68 61 74  nfiguration.What
35a00 49 66 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  If)..           
35a10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35a20 20 20 20 20 20 2f 2a 20 74 68 72 6f 77 20 2a 2f       /* throw */
35a30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
35a40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35a50 20 20 70 75 62 6c 69 73 68 2e 47 61 63 52 65 6d    publish.GacRem
35a60 6f 76 65 28 63 6f 6e 66 69 67 75 72 61 74 69 6f  ove(configuratio
35a70 6e 2e 4c 69 6e 71 46 69 6c 65 4e 61 6d 65 29 3b  n.LinqFileName);
35a80 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
35a90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35aa0 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e  TraceOps.DebugAn
35ab0 64 54 72 61 63 65 28 54 72 61 63 65 50 72 69 6f  dTrace(TracePrio
35ac0 72 69 74 79 2e 48 69 67 68 65 73 74 2c 0d 0a 20  rity.Highest,.. 
35ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
35af0 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72  ebugCallback, tr
35b00 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72  aceCallback, Str
35b10 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
35b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35b30 20 20 20 20 20 20 20 20 20 20 20 20 20 22 47 61               "Ga
35b40 63 52 65 6d 6f 76 65 3a 20 61 73 73 65 6d 62 6c  cRemove: assembl
35b50 79 50 61 74 68 20 3d 20 7b 30 7d 22 2c 0d 0a 20  yPath = {0}",.. 
35b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35b70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46                 F
35b80 6f 72 44 69 73 70 6c 61 79 28 63 6f 6e 66 69 67  orDisplay(config
35b90 75 72 61 74 69 6f 6e 2e 4c 69 6e 71 46 69 6c 65  uration.LinqFile
35ba0 4e 61 6d 65 29 29 2c 0d 0a 20 20 20 20 20 20 20  Name)),..       
35bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35bc0 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
35bd0 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
35be0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35bf0 20 20 20 20 20 20 20 20 69 66 20 28 21 63 6f 6e          if (!con
35c00 66 69 67 75 72 61 74 69 6f 6e 2e 57 68 61 74 49  figuration.WhatI
35c10 66 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  f)..            
35c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35c30 20 20 20 20 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d      /* throw */.
35c40 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
35c50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35c60 20 70 75 62 6c 69 73 68 2e 47 61 63 52 65 6d 6f   publish.GacRemo
35c70 76 65 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  ve(configuration
35c80 2e 43 6f 72 65 46 69 6c 65 4e 61 6d 65 29 3b 0d  .CoreFileName);.
35c90 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
35ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
35cb0 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64  raceOps.DebugAnd
35cc0 54 72 61 63 65 28 54 72 61 63 65 50 72 69 6f 72  Trace(TracePrior
35cd0 69 74 79 2e 48 69 67 68 65 73 74 2c 0d 0a 20 20  ity.Highest,..  
35ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65                de
35d00 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61  bugCallback, tra
35d10 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69  ceCallback, Stri
35d20 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ng.Format(..    
35d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35d40 20 20 20 20 20 20 20 20 20 20 20 20 22 47 61 63              "Gac
35d50 52 65 6d 6f 76 65 3a 20 61 73 73 65 6d 62 6c 79  Remove: assembly
35d60 50 61 74 68 20 3d 20 7b 30 7d 22 2c 0d 0a 20 20  Path = {0}",..  
35d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f                Fo
35d90 72 44 69 73 70 6c 61 79 28 63 6f 6e 66 69 67 75  rDisplay(configu
35da0 72 61 74 69 6f 6e 2e 43 6f 72 65 46 69 6c 65 4e  ration.CoreFileN
35db0 61 6d 65 29 29 2c 0d 0a 20 20 20 20 20 20 20 20  ame)),..        
35dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35dd0 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74          traceCat
35de0 65 67 6f 72 79 29 3b 0d 0a 20 20 20 20 20 20 20  egory);..       
35df0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35e00 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
35e10 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
35e20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23                 #
35e30 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20  endregion....   
35e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35e50 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
35e60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35e70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35e80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
35e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35ea0 20 20 20 20 23 72 65 67 69 6f 6e 20 2e 4e 45 54      #region .NET
35eb0 20 41 73 73 65 6d 62 6c 79 46 6f 6c 64 65 72 73   AssemblyFolders
35ec0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
35ed0 20 20 20 20 20 20 69 66 20 28 63 6f 6e 66 69 67        if (config
35ee0 75 72 61 74 69 6f 6e 2e 48 61 73 46 6c 61 67 73  uration.HasFlags
35ef0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
35f00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 49                 I
35f10 6e 73 74 61 6c 6c 46 6c 61 67 73 2e 41 73 73 65  nstallFlags.Asse
35f20 6d 62 6c 79 46 6f 6c 64 65 72 73 2c 20 74 72 75  mblyFolders, tru
35f30 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e))..           
35f40 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
35f50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35f60 20 20 20 20 69 66 20 28 21 46 6f 72 45 61 63 68      if (!ForEach
35f70 46 72 61 6d 65 77 6f 72 6b 52 65 67 69 73 74 72  FrameworkRegistr
35f80 79 28 72 65 67 69 73 74 72 79 2c 0d 0a 20 20 20  y(registry,..   
35f90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 66 72 61               fra
35fb0 6d 65 77 6f 72 6b 4c 69 73 74 2c 20 50 72 6f 63  meworkList, Proc
35fc0 65 73 73 41 73 73 65 6d 62 6c 79 46 6f 6c 64 65  essAssemblyFolde
35fd0 72 73 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  rs,..           
35fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35ff0 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69       configurati
36000 6f 6e 2e 52 65 67 69 73 74 72 79 56 65 72 73 69  on.RegistryVersi
36010 6f 6e 2c 20 64 69 72 65 63 74 6f 72 79 44 61 74  on, directoryDat
36020 61 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  a,..            
36030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36040 20 20 20 20 4e 65 74 46 78 49 73 33 32 42 69 74      NetFxIs32Bit
36050 4f 6e 6c 79 20 7c 7c 20 63 6f 6e 66 69 67 75 72  Only || configur
36060 61 74 69 6f 6e 2e 57 6f 77 36 34 2c 0d 0a 20 20  ation.Wow64,..  
36070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
36090 6e 66 69 67 75 72 61 74 69 6f 6e 2e 54 68 72 6f  nfiguration.Thro
360a0 77 4f 6e 4d 69 73 73 69 6e 67 2c 0d 0a 20 20 20  wOnMissing,..   
360b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
360c0 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
360d0 66 69 67 75 72 61 74 69 6f 6e 2e 57 68 61 74 49  figuration.WhatI
360e0 66 2c 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  f, configuration
360f0 2e 56 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20  .Verbose,..     
36100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36110 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20 65             ref e
36120 72 72 6f 72 29 29 0d 0a 20 20 20 20 20 20 20 20  rror))..        
36130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36140 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
36150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
36160 72 61 63 65 4f 70 73 2e 53 68 6f 77 4d 65 73 73  raceOps.ShowMess
36170 61 67 65 28 54 72 61 63 65 50 72 69 6f 72 69 74  age(TracePriorit
36180 79 2e 48 69 67 68 65 73 74 2c 0d 0a 20 20 20 20  y.Highest,..    
36190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
361a0 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62 75              debu
361b0 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65  gCallback, trace
361c0 43 61 6c 6c 62 61 63 6b 2c 20 74 68 69 73 41 73  Callback, thisAs
361d0 73 65 6d 62 6c 79 2c 0d 0a 20 20 20 20 20 20 20  sembly,..       
361e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
361f0 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 2c 20           error, 
36200 74 72 61 63 65 43 61 74 65 67 6f 72 79 2c 20 4d  traceCategory, M
36210 65 73 73 61 67 65 42 6f 78 42 75 74 74 6f 6e 73  essageBoxButtons
36220 2e 4f 4b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  .OK,..          
36230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36240 20 20 20 20 20 20 4d 65 73 73 61 67 65 42 6f 78        MessageBox
36250 49 63 6f 6e 2e 45 72 72 6f 72 29 3b 0d 0a 0d 0a  Icon.Error);....
36260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36270 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
36280 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61  eOps.DebugAndTra
36290 63 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 79  ce(TracePriority
362a0 2e 4d 65 64 69 75 6d 48 69 67 68 2c 0d 0a 20 20  .MediumHigh,..  
362b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
362c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65                de
362d0 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61  bugCallback, tra
362e0 63 65 43 61 6c 6c 62 61 63 6b 2c 20 22 46 61 69  ceCallback, "Fai
362f0 6c 75 72 65 2e 22 2c 0d 0a 20 20 20 20 20 20 20  lure.",..       
36300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36310 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
36320 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
36330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36340 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 31          return 1
36350 3b 20 2f 2a 20 46 41 49 4c 55 52 45 20 2a 2f 0d  ; /* FAILURE */.
36360 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
36370 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
36380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36390 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
363a0 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f         #endregio
363b0 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n....           
363c0 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
363d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
363e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
363f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36400 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
36410 20 20 20 20 20 20 20 20 20 20 20 20 23 72 65 67              #reg
36420 69 6f 6e 20 2e 4e 45 54 20 44 62 50 72 6f 76 69  ion .NET DbProvi
36430 64 65 72 46 61 63 74 6f 72 79 0d 0a 20 20 20 20  derFactory..    
36440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36450 69 66 20 28 63 6f 6e 66 69 67 75 72 61 74 69 6f  if (configuratio
36460 6e 2e 48 61 73 46 6c 61 67 73 28 0d 0a 20 20 20  n.HasFlags(..   
36470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36480 20 20 20 20 20 20 20 20 20 49 6e 73 74 61 6c 6c           Install
36490 46 6c 61 67 73 2e 44 62 50 72 6f 76 69 64 65 72  Flags.DbProvider
364a0 46 61 63 74 6f 72 79 2c 20 74 72 75 65 29 29 0d  Factory, true)).
364b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
364c0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
364d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
364e0 62 6f 6f 6c 20 73 61 76 65 64 20 3d 20 66 61 6c  bool saved = fal
364f0 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  se;....         
36500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
36510 66 20 28 21 46 6f 72 45 61 63 68 46 72 61 6d 65  f (!ForEachFrame
36520 77 6f 72 6b 43 6f 6e 66 69 67 28 72 65 67 69 73  workConfig(regis
36530 74 72 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  try,..          
36540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36550 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 4c        frameworkL
36560 69 73 74 2c 20 50 72 6f 63 65 73 73 44 62 50 72  ist, ProcessDbPr
36570 6f 76 69 64 65 72 46 61 63 74 6f 72 79 2c 0d 0a  oviderFactory,..
36580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
365a0 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 43 6f  configuration.Co
365b0 6e 66 69 67 56 65 72 73 69 6f 6e 2c 20 49 6e 76  nfigVersion, Inv
365c0 61 72 69 61 6e 74 4e 61 6d 65 2c 0d 0a 20 20 20  ariantName,..   
365d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
365e0 20 20 20 20 20 20 20 20 20 20 20 20 20 50 72 6f               Pro
365f0 76 69 64 65 72 4e 61 6d 65 2c 20 44 65 73 63 72  viderName, Descr
36600 69 70 74 69 6f 6e 2c 20 46 61 63 74 6f 72 79 54  iption, FactoryT
36610 79 70 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20  ypeName,..      
36620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36630 20 20 20 20 20 20 20 20 20 20 63 6f 72 65 41 73            coreAs
36640 73 65 6d 62 6c 79 4e 61 6d 65 2c 20 64 69 72 65  semblyName, dire
36650 63 74 6f 72 79 44 61 74 61 2c 0d 0a 20 20 20 20  ctoryData,..    
36660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36670 20 20 20 20 20 20 20 20 20 20 20 20 4e 65 74 46              NetF
36680 78 49 73 33 32 42 69 74 4f 6e 6c 79 20 7c 7c 20  xIs32BitOnly || 
36690 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 57 6f  configuration.Wo
366a0 77 36 34 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  w64,..          
366b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
366c0 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74        configurat
366d0 69 6f 6e 2e 54 68 72 6f 77 4f 6e 4d 69 73 73 69  ion.ThrowOnMissi
366e0 6e 67 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ng,..           
366f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36700 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69       configurati
36710 6f 6e 2e 57 68 61 74 49 66 2c 20 63 6f 6e 66 69  on.WhatIf, confi
36720 67 75 72 61 74 69 6f 6e 2e 56 65 72 62 6f 73 65  guration.Verbose
36730 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
36740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36750 20 20 20 72 65 66 20 73 61 76 65 64 2c 20 72 65     ref saved, re
36760 66 20 65 72 72 6f 72 29 29 0d 0a 20 20 20 20 20  f error))..     
36770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36780 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
36790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
367a0 20 20 54 72 61 63 65 4f 70 73 2e 53 68 6f 77 4d    TraceOps.ShowM
367b0 65 73 73 61 67 65 28 54 72 61 63 65 50 72 69 6f  essage(TracePrio
367c0 72 69 74 79 2e 48 69 67 68 65 73 74 2c 0d 0a 20  rity.Highest,.. 
367d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
367e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
367f0 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72  ebugCallback, tr
36800 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 74 68 69  aceCallback, thi
36810 73 41 73 73 65 6d 62 6c 79 2c 0d 0a 20 20 20 20  sAssembly,..    
36820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36830 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
36840 72 2c 20 74 72 61 63 65 43 61 74 65 67 6f 72 79  r, traceCategory
36850 2c 20 4d 65 73 73 61 67 65 42 6f 78 42 75 74 74  , MessageBoxButt
36860 6f 6e 73 2e 4f 4b 2c 0d 0a 20 20 20 20 20 20 20  ons.OK,..       
36870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36880 20 20 20 20 20 20 20 20 20 4d 65 73 73 61 67 65           Message
36890 42 6f 78 49 63 6f 6e 2e 45 72 72 6f 72 29 3b 0d  BoxIcon.Error);.
368a0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
368b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
368c0 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64  raceOps.DebugAnd
368d0 54 72 61 63 65 28 54 72 61 63 65 50 72 69 6f 72  Trace(TracePrior
368e0 69 74 79 2e 4d 65 64 69 75 6d 48 69 67 68 2c 0d  ity.MediumHigh,.
368f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
36900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36910 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20   debugCallback, 
36920 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 22  traceCallback, "
36930 46 61 69 6c 75 72 65 2e 22 2c 0d 0a 20 20 20 20  Failure.",..    
36940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36950 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
36960 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
36970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36980 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
36990 6e 20 31 3b 20 2f 2a 20 46 41 49 4c 55 52 45 20  n 1; /* FAILURE 
369a0 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  */..            
369b0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
369c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
369d0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
369e0 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65            #endre
369f0 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20  gion....        
36a00 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
36a10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36a20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36a30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36a40 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
36a50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23                 #
36a60 72 65 67 69 6f 6e 20 56 53 20 50 61 63 6b 61 67  region VS Packag
36a70 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..             
36a80 20 20 20 20 20 20 20 69 66 20 28 63 6f 6e 66 69         if (confi
36a90 67 75 72 61 74 69 6f 6e 2e 48 61 73 46 6c 61 67  guration.HasFlag
36aa0 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  s(..            
36ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36ac0 49 6e 73 74 61 6c 6c 46 6c 61 67 73 2e 56 73 50  InstallFlags.VsP
36ad0 61 63 6b 61 67 65 2c 20 74 72 75 65 29 29 0d 0a  ackage, true))..
36ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36af0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
36b00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
36b10 66 20 28 21 46 6f 72 45 61 63 68 56 73 56 65 72  f (!ForEachVsVer
36b20 73 69 6f 6e 52 65 67 69 73 74 72 79 28 72 65 67  sionRegistry(reg
36b30 69 73 74 72 79 2c 0d 0a 20 20 20 20 20 20 20 20  istry,..        
36b40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36b50 20 20 20 20 20 20 20 20 76 73 4c 69 73 74 2c 20          vsList, 
36b60 50 72 6f 63 65 73 73 56 73 50 61 63 6b 61 67 65  ProcessVsPackage
36b70 2c 20 70 61 63 6b 61 67 65 2c 0d 0a 20 20 20 20  , package,..    
36b80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36b90 20 20 20 20 20 20 20 20 20 20 20 20 66 69 6c 65              file
36ba0 4e 61 6d 65 44 61 74 61 2c 0d 0a 20 20 20 20 20  NameData,..     
36bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36bc0 20 20 20 20 20 20 20 20 20 20 20 56 73 49 73 33             VsIs3
36bd0 32 42 69 74 4f 6e 6c 79 20 7c 7c 20 63 6f 6e 66  2BitOnly || conf
36be0 69 67 75 72 61 74 69 6f 6e 2e 57 6f 77 36 34 2c  iguration.Wow64,
36bf0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
36c00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36c10 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e    configuration.
36c20 54 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 2c 0d  ThrowOnMissing,.
36c30 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
36c40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36c50 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 57   configuration.W
36c60 68 61 74 49 66 2c 20 63 6f 6e 66 69 67 75 72 61  hatIf, configura
36c70 74 69 6f 6e 2e 56 65 72 62 6f 73 65 2c 0d 0a 20  tion.Verbose,.. 
36c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36c90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
36ca0 65 66 20 65 72 72 6f 72 29 29 0d 0a 20 20 20 20  ef error))..    
36cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36cc0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
36cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36ce0 20 20 20 54 72 61 63 65 4f 70 73 2e 53 68 6f 77     TraceOps.Show
36cf0 4d 65 73 73 61 67 65 28 54 72 61 63 65 50 72 69  Message(TracePri
36d00 6f 72 69 74 79 2e 48 69 67 68 65 73 74 2c 0d 0a  ority.Highest,..
36d10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36d20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36d30 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74  debugCallback, t
36d40 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 74 68  raceCallback, th
36d50 69 73 41 73 73 65 6d 62 6c 79 2c 0d 0a 20 20 20  isAssembly,..   
36d60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36d70 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
36d80 6f 72 2c 20 74 72 61 63 65 43 61 74 65 67 6f 72  or, traceCategor
36d90 79 2c 20 4d 65 73 73 61 67 65 42 6f 78 42 75 74  y, MessageBoxBut
36da0 74 6f 6e 73 2e 4f 4b 2c 0d 0a 20 20 20 20 20 20  tons.OK,..      
36db0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36dc0 20 20 20 20 20 20 20 20 20 20 4d 65 73 73 61 67            Messag
36dd0 65 42 6f 78 49 63 6f 6e 2e 45 72 72 6f 72 29 3b  eBoxIcon.Error);
36de0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
36df0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36e00 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e  TraceOps.DebugAn
36e10 64 54 72 61 63 65 28 54 72 61 63 65 50 72 69 6f  dTrace(TracePrio
36e20 72 69 74 79 2e 4d 65 64 69 75 6d 48 69 67 68 2c  rity.MediumHigh,
36e30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
36e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36e50 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c    debugCallback,
36e60 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20   traceCallback, 
36e70 22 46 61 69 6c 75 72 65 2e 22 2c 0d 0a 20 20 20  "Failure.",..   
36e80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36e90 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
36ea0 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
36eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36ec0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
36ed0 72 6e 20 31 3b 20 2f 2a 20 46 41 49 4c 55 52 45  rn 1; /* FAILURE
36ee0 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   */..           
36ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
36f00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36f10 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
36f20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 72             #endr
36f30 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20  egion....       
36f40 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f               ///
36f50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36f60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36f70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36f80 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
36f90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36fa0 23 72 65 67 69 6f 6e 20 56 53 20 44 61 74 61 53  #region VS DataS
36fb0 6f 75 72 63 65 0d 0a 20 20 20 20 20 20 20 20 20  ource..         
36fc0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 63             if (c
36fd0 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 48 61 73  onfiguration.Has
36fe0 46 6c 61 67 73 28 0d 0a 20 20 20 20 20 20 20 20  Flags(..        
36ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37000 20 20 20 20 49 6e 73 74 61 6c 6c 46 6c 61 67 73      InstallFlags
37010 2e 56 73 44 61 74 61 53 6f 75 72 63 65 2c 20 74  .VsDataSource, t
37020 72 75 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20  rue))..         
37030 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
37040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37050 20 20 20 20 20 20 69 66 20 28 21 46 6f 72 45 61        if (!ForEa
37060 63 68 56 73 56 65 72 73 69 6f 6e 52 65 67 69 73  chVsVersionRegis
37070 74 72 79 28 72 65 67 69 73 74 72 79 2c 0d 0a 20  try(registry,.. 
37080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 76                 v
370a0 73 4c 69 73 74 2c 20 50 72 6f 63 65 73 73 56 73  sList, ProcessVs
370b0 44 61 74 61 53 6f 75 72 63 65 2c 20 70 61 63 6b  DataSource, pack
370c0 61 67 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  age,..          
370d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
370e0 20 20 20 20 20 20 66 69 6c 65 4e 61 6d 65 44 61        fileNameDa
370f0 74 61 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ta,..           
37100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37110 20 20 20 20 20 56 73 49 73 33 32 42 69 74 4f 6e       VsIs32BitOn
37120 6c 79 20 7c 7c 20 63 6f 6e 66 69 67 75 72 61 74  ly || configurat
37130 69 6f 6e 2e 57 6f 77 36 34 2c 0d 0a 20 20 20 20  ion.Wow64,..    
37140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37150 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66              conf
37160 69 67 75 72 61 74 69 6f 6e 2e 54 68 72 6f 77 4f  iguration.ThrowO
37170 6e 4d 69 73 73 69 6e 67 2c 0d 0a 20 20 20 20 20  nMissing,..     
37180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37190 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69             confi
371a0 67 75 72 61 74 69 6f 6e 2e 57 68 61 74 49 66 2c  guration.WhatIf,
371b0 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 56   configuration.V
371c0 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20  erbose,..       
371d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
371e0 20 20 20 20 20 20 20 20 20 72 65 66 20 65 72 72           ref err
371f0 6f 72 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  or))..          
37200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
37210 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
37220 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61               Tra
37230 63 65 4f 70 73 2e 53 68 6f 77 4d 65 73 73 61 67  ceOps.ShowMessag
37240 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e  e(TracePriority.
37250 48 69 67 68 65 73 74 2c 0d 0a 20 20 20 20 20 20  Highest,..      
37260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37270 20 20 20 20 20 20 20 20 20 20 64 65 62 75 67 43            debugC
37280 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61  allback, traceCa
37290 6c 6c 62 61 63 6b 2c 20 74 68 69 73 41 73 73 65  llback, thisAsse
372a0 6d 62 6c 79 2c 0d 0a 20 20 20 20 20 20 20 20 20  mbly,..         
372b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
372c0 20 20 20 20 20 20 20 65 72 72 6f 72 2c 20 74 72         error, tr
372d0 61 63 65 43 61 74 65 67 6f 72 79 2c 20 4d 65 73  aceCategory, Mes
372e0 73 61 67 65 42 6f 78 42 75 74 74 6f 6e 73 2e 4f  sageBoxButtons.O
372f0 4b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  K,..            
37300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37310 20 20 20 20 4d 65 73 73 61 67 65 42 6f 78 49 63      MessageBoxIc
37320 6f 6e 2e 45 72 72 6f 72 29 3b 0d 0a 0d 0a 20 20  on.Error);....  
37330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37340 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f            TraceO
37350 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65  ps.DebugAndTrace
37360 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4d  (TracePriority.M
37370 65 64 69 75 6d 48 69 67 68 2c 0d 0a 20 20 20 20  ediumHigh,..    
37380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37390 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62 75              debu
373a0 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65  gCallback, trace
373b0 43 61 6c 6c 62 61 63 6b 2c 20 22 46 61 69 6c 75  Callback, "Failu
373c0 72 65 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  re.",..         
373d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
373e0 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65         traceCate
373f0 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
37400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37410 20 20 20 20 20 20 72 65 74 75 72 6e 20 31 3b 20        return 1; 
37420 2f 2a 20 46 41 49 4c 55 52 45 20 2a 2f 0d 0a 20  /* FAILURE */.. 
37430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37440 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
37450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
37460 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
37470 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d       #endregion.
37480 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
37490 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
374a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
374b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
374c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
374d0 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
374e0 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f            #regio
374f0 6e 20 56 53 20 44 61 74 61 50 72 6f 76 69 64 65  n VS DataProvide
37500 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  r..             
37510 20 20 20 20 20 20 20 69 66 20 28 63 6f 6e 66 69         if (confi
37520 67 75 72 61 74 69 6f 6e 2e 48 61 73 46 6c 61 67  guration.HasFlag
37530 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  s(..            
37540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37550 49 6e 73 74 61 6c 6c 46 6c 61 67 73 2e 56 73 44  InstallFlags.VsD
37560 61 74 61 50 72 6f 76 69 64 65 72 2c 20 74 72 75  ataProvider, tru
37570 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e))..           
37580 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
37590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
375a0 20 20 20 20 69 66 20 28 21 46 6f 72 45 61 63 68      if (!ForEach
375b0 56 73 56 65 72 73 69 6f 6e 52 65 67 69 73 74 72  VsVersionRegistr
375c0 79 28 72 65 67 69 73 74 72 79 2c 0d 0a 20 20 20  y(registry,..   
375d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
375e0 20 20 20 20 20 20 20 20 20 20 20 20 20 76 73 4c               vsL
375f0 69 73 74 2c 20 50 72 6f 63 65 73 73 56 73 44 61  ist, ProcessVsDa
37600 74 61 50 72 6f 76 69 64 65 72 2c 20 70 61 63 6b  taProvider, pack
37610 61 67 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  age,..          
37620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37630 20 20 20 20 20 20 66 69 6c 65 4e 61 6d 65 44 61        fileNameDa
37640 74 61 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ta,..           
37650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37660 20 20 20 20 20 56 73 49 73 33 32 42 69 74 4f 6e       VsIs32BitOn
37670 6c 79 20 7c 7c 20 63 6f 6e 66 69 67 75 72 61 74  ly || configurat
37680 69 6f 6e 2e 57 6f 77 36 34 2c 0d 0a 20 20 20 20  ion.Wow64,..    
37690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
376a0 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66              conf
376b0 69 67 75 72 61 74 69 6f 6e 2e 54 68 72 6f 77 4f  iguration.ThrowO
376c0 6e 4d 69 73 73 69 6e 67 2c 0d 0a 20 20 20 20 20  nMissing,..     
376d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
376e0 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69             confi
376f0 67 75 72 61 74 69 6f 6e 2e 57 68 61 74 49 66 2c  guration.WhatIf,
37700 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 56   configuration.V
37710 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20  erbose,..       
37720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37730 20 20 20 20 20 20 20 20 20 72 65 66 20 65 72 72           ref err
37740 6f 72 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  or))..          
37750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
37760 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
37770 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61               Tra
37780 63 65 4f 70 73 2e 53 68 6f 77 4d 65 73 73 61 67  ceOps.ShowMessag
37790 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e  e(TracePriority.
377a0 48 69 67 68 65 73 74 2c 0d 0a 20 20 20 20 20 20  Highest,..      
377b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
377c0 20 20 20 20 20 20 20 20 20 20 64 65 62 75 67 43            debugC
377d0 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61  allback, traceCa
377e0 6c 6c 62 61 63 6b 2c 20 74 68 69 73 41 73 73 65  llback, thisAsse
377f0 6d 62 6c 79 2c 0d 0a 20 20 20 20 20 20 20 20 20  mbly,..         
37800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37810 20 20 20 20 20 20 20 65 72 72 6f 72 2c 20 74 72         error, tr
37820 61 63 65 43 61 74 65 67 6f 72 79 2c 20 4d 65 73  aceCategory, Mes
37830 73 61 67 65 42 6f 78 42 75 74 74 6f 6e 73 2e 4f  sageBoxButtons.O
37840 4b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  K,..            
37850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37860 20 20 20 20 4d 65 73 73 61 67 65 42 6f 78 49 63      MessageBoxIc
37870 6f 6e 2e 45 72 72 6f 72 29 3b 0d 0a 0d 0a 20 20  on.Error);....  
37880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37890 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f            TraceO
378a0 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65  ps.DebugAndTrace
378b0 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4d  (TracePriority.M
378c0 65 64 69 75 6d 48 69 67 68 2c 0d 0a 20 20 20 20  ediumHigh,..    
378d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
378e0 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62 75              debu
378f0 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65  gCallback, trace
37900 43 61 6c 6c 62 61 63 6b 2c 20 22 46 61 69 6c 75  Callback, "Failu
37910 72 65 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  re.",..         
37920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37930 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65         traceCate
37940 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
37950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37960 20 20 20 20 20 20 72 65 74 75 72 6e 20 31 3b 20        return 1; 
37970 2f 2a 20 46 41 49 4c 55 52 45 20 2a 2f 0d 0a 20  /* FAILURE */.. 
37980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37990 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
379a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
379b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
379c0 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d       #endregion.
379d0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
379e0 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
379f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37a00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37a10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37a20 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
37a30 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f            #regio
37a40 6e 20 4c 6f 67 20 53 75 6d 6d 61 72 79 0d 0a 20  n Log Summary.. 
37a50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37a60 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75     TraceOps.Debu
37a70 67 41 6e 64 54 72 61 63 65 28 54 72 61 63 65 50  gAndTrace(TraceP
37a80 72 69 6f 72 69 74 79 2e 4d 65 64 69 75 6d 48 69  riority.MediumHi
37a90 67 68 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  gh,..           
37aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62               deb
37ab0 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63  ugCallback, trac
37ac0 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e  eCallback, Strin
37ad0 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
37ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37af0 20 20 20 22 73 75 62 4b 65 79 73 43 72 65 61 74     "subKeysCreat
37b00 65 64 20 3d 20 7b 30 7d 2c 20 73 75 62 4b 65 79  ed = {0}, subKey
37b10 73 44 65 6c 65 74 65 64 20 3d 20 7b 31 7d 2c 20  sDeleted = {1}, 
37b20 22 20 2b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  " +..           
37b30 20 20 20 20 20 20 20 20 20 20 20 20 20 22 6b 65               "ke
37b40 79 56 61 6c 75 65 73 53 65 74 20 3d 20 7b 32 7d  yValuesSet = {2}
37b50 2c 20 6b 65 79 56 61 6c 75 65 73 44 65 6c 65 74  , keyValuesDelet
37b60 65 64 20 3d 20 7b 33 7d 22 2c 0d 0a 20 20 20 20  ed = {3}",..    
37b70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37b80 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 52      ForDisplay(R
37b90 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 53 75  egistryHelper.Su
37ba0 62 4b 65 79 73 43 72 65 61 74 65 64 29 2c 0d 0a  bKeysCreated),..
37bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37bc0 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c          ForDispl
37bd0 61 79 28 52 65 67 69 73 74 72 79 48 65 6c 70 65  ay(RegistryHelpe
37be0 72 2e 53 75 62 4b 65 79 73 44 65 6c 65 74 65 64  r.SubKeysDeleted
37bf0 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
37c00 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44              ForD
37c10 69 73 70 6c 61 79 28 52 65 67 69 73 74 72 79 48  isplay(RegistryH
37c20 65 6c 70 65 72 2e 4b 65 79 56 61 6c 75 65 73 53  elper.KeyValuesS
37c30 65 74 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  et),..          
37c40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f                Fo
37c50 72 44 69 73 70 6c 61 79 28 52 65 67 69 73 74 72  rDisplay(Registr
37c60 79 48 65 6c 70 65 72 2e 4b 65 79 56 61 6c 75 65  yHelper.KeyValue
37c70 73 44 65 6c 65 74 65 64 29 29 2c 0d 0a 20 20 20  sDeleted)),..   
37c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37c90 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f       traceCatego
37ca0 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
37cb0 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
37cc0 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61  eOps.DebugAndTra
37cd0 63 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 79  ce(TracePriority
37ce0 2e 4d 65 64 69 75 6d 48 69 67 68 2c 0d 0a 20 20  .MediumHigh,..  
37cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37d00 20 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62        debugCallb
37d10 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61  ack, traceCallba
37d20 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ck, String.Forma
37d30 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
37d40 20 20 20 20 20 20 20 20 20 20 20 20 22 66 69 6c              "fil
37d50 65 73 43 72 65 61 74 65 64 20 3d 20 7b 30 7d 2c  esCreated = {0},
37d60 20 66 69 6c 65 73 4d 6f 64 69 66 69 65 64 20 3d   filesModified =
37d70 20 7b 31 7d 2c 20 22 20 2b 0d 0a 20 20 20 20 20   {1}, " +..     
37d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37d90 20 20 20 22 66 69 6c 65 73 44 65 6c 65 74 65 64     "filesDeleted
37da0 20 3d 20 7b 32 7d 22 2c 20 46 6f 72 44 69 73 70   = {2}", ForDisp
37db0 6c 61 79 28 66 69 6c 65 73 43 72 65 61 74 65 64  lay(filesCreated
37dc0 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
37dd0 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44              ForD
37de0 69 73 70 6c 61 79 28 66 69 6c 65 73 4d 6f 64 69  isplay(filesModi
37df0 66 69 65 64 29 2c 20 46 6f 72 44 69 73 70 6c 61  fied), ForDispla
37e00 79 28 66 69 6c 65 73 44 65 6c 65 74 65 64 29 29  y(filesDeleted))
37e10 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
37e20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
37e30 43 61 74 65 67 6f 72 79 29 3b 0d 0a 20 20 20 20  Category);..    
37e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37e50 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20  #endregion....  
37e60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37e70 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
37e80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37e90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37ea0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
37eb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
37ec0 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65       TraceOps.De
37ed0 62 75 67 41 6e 64 54 72 61 63 65 28 54 72 61 63  bugAndTrace(Trac
37ee0 65 50 72 69 6f 72 69 74 79 2e 4d 65 64 69 75 6d  ePriority.Medium
37ef0 48 69 67 68 2c 0d 0a 20 20 20 20 20 20 20 20 20  High,..         
37f00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
37f10 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72  ebugCallback, tr
37f20 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 22 53 75  aceCallback, "Su
37f30 63 63 65 73 73 2e 22 2c 0d 0a 20 20 20 20 20 20  ccess.",..      
37f40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37f50 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29    traceCategory)
37f60 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
37f70 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
37f80 30 3b 20 2f 2a 20 53 55 43 43 45 53 53 20 2a 2f  0; /* SUCCESS */
37f90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
37fa0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
37fb0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
37fc0 63 61 74 63 68 20 28 45 78 63 65 70 74 69 6f 6e  catch (Exception
37fd0 20 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20   e)..           
37fe0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
37ff0 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62      TraceOps.Deb
38000 75 67 41 6e 64 54 72 61 63 65 28 54 72 61 63 65  ugAndTrace(Trace
38010 50 72 69 6f 72 69 74 79 2e 48 69 67 68 65 73 74  Priority.Highest
38020 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
38030 20 20 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c         debugCall
38040 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62  back, traceCallb
38050 61 63 6b 2c 20 65 2c 20 74 72 61 63 65 43 61 74  ack, e, traceCat
38060 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  egory);....     
38070 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77             throw
38080 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
38090 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..   
380a0 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d       #endregion.
380b0 0a 20 20 20 20 7d 0d 0a 20 20 20 20 23 65 6e 64  .    }..    #end
380c0 72 65 67 69 6f 6e 0d 0a 7d 0d 0a                 region..}..