System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact 6752d070927be9be9b6b538e570f142d7ea4400d:


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 70            bool p
f140: 65 72 55 73 65 72 2c 0d 0a 20 20 20 20 20 20 20  erUser,..       
f150: 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 69 6e           bool in
f160: 73 74 61 6c 6c 2c 0d 0a 20 20 20 20 20 20 20 20  stall,..        
f170: 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 6f 77          bool wow
f180: 36 34 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  64,..           
f190: 20 20 20 20 20 62 6f 6f 6c 20 6e 6f 52 75 6e 74       bool noRunt
f1a0: 69 6d 65 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20  imeVersion,..   
f1b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f               boo
f1c0: 6c 20 6e 6f 44 65 73 6b 74 6f 70 2c 0d 0a 20 20  l noDesktop,..  
f1d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f                bo
f1e0: 6f 6c 20 6e 6f 43 6f 6d 70 61 63 74 2c 0d 0a 20  ol noCompact,.. 
f1f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62                 b
f200: 6f 6f 6c 20 6e 6f 4e 65 74 46 78 32 30 2c 0d 0a  ool noNetFx20,..
f210: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f220: 62 6f 6f 6c 20 6e 6f 4e 65 74 46 78 34 30 2c 0d  bool noNetFx40,.
f230: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
f240: 20 62 6f 6f 6c 20 6e 6f 4e 65 74 46 78 34 35 2c   bool noNetFx45,
f250: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
f260: 20 20 62 6f 6f 6c 20 6e 6f 56 73 32 30 30 35 2c    bool noVs2005,
f270: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
f280: 20 20 62 6f 6f 6c 20 6e 6f 56 73 32 30 30 38 2c    bool noVs2008,
f290: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
f2a0: 20 20 62 6f 6f 6c 20 6e 6f 56 73 32 30 31 30 2c    bool noVs2010,
f2b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
f2c0: 20 20 62 6f 6f 6c 20 6e 6f 56 73 32 30 31 32 2c    bool noVs2012,
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 54 72 61 63 65 2c 0d    bool noTrace,.
f2f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
f300: 20 62 6f 6f 6c 20 6e 6f 43 6f 6e 73 6f 6c 65 2c   bool noConsole,
f310: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
f320: 20 20 62 6f 6f 6c 20 6e 6f 4c 6f 67 2c 0d 0a 20    bool noLog,.. 
f330: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62                 b
f340: 6f 6f 6c 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69  ool throwOnMissi
f350: 6e 67 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ng,..           
f360: 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66       bool whatIf
f370: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
f380: 20 20 20 62 6f 6f 6c 20 64 65 62 75 67 2c 0d 0a     bool debug,..
f390: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f3a0: 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 0d 0a 20  bool verbose,.. 
f3b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62                 b
f3c0: 6f 6f 6c 20 63 6f 6e 66 69 72 6d 0d 0a 20 20 20  ool confirm..   
f3d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a               )..
f3e0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
f3f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
f400: 68 69 73 2e 61 73 73 65 6d 62 6c 79 20 3d 20 61  his.assembly = a
f410: 73 73 65 6d 62 6c 79 3b 0d 0a 20 20 20 20 20 20  ssembly;..      
f420: 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 6c            this.l
f430: 6f 67 46 69 6c 65 4e 61 6d 65 20 3d 20 6c 6f 67  ogFileName = log
f440: 46 69 6c 65 4e 61 6d 65 3b 0d 0a 20 20 20 20 20  FileName;..     
f450: 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e             this.
f460: 64 69 72 65 63 74 6f 72 79 20 3d 20 64 69 72 65  directory = dire
f470: 63 74 6f 72 79 3b 0d 0a 20 20 20 20 20 20 20 20  ctory;..        
f480: 20 20 20 20 20 20 20 20 74 68 69 73 2e 63 6f 72          this.cor
f490: 65 46 69 6c 65 4e 61 6d 65 20 3d 20 63 6f 72 65  eFileName = core
f4a0: 46 69 6c 65 4e 61 6d 65 3b 0d 0a 20 20 20 20 20  FileName;..     
f4b0: 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e             this.
f4c0: 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 20 3d 20 6c  linqFileName = l
f4d0: 69 6e 71 46 69 6c 65 4e 61 6d 65 3b 0d 0a 20 20  inqFileName;..  
f4e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
f4f0: 69 73 2e 64 65 73 69 67 6e 65 72 46 69 6c 65 4e  is.designerFileN
f500: 61 6d 65 20 3d 20 64 65 73 69 67 6e 65 72 46 69  ame = designerFi
f510: 6c 65 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20  leName;..       
f520: 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 72 65           this.re
f530: 67 69 73 74 72 79 56 65 72 73 69 6f 6e 20 3d 20  gistryVersion = 
f540: 72 65 67 69 73 74 72 79 56 65 72 73 69 6f 6e 3b  registryVersion;
f550: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
f560: 20 20 74 68 69 73 2e 63 6f 6e 66 69 67 56 65 72    this.configVer
f570: 73 69 6f 6e 20 3d 20 63 6f 6e 66 69 67 56 65 72  sion = configVer
f580: 73 69 6f 6e 3b 0d 0a 20 20 20 20 20 20 20 20 20  sion;..         
f590: 20 20 20 20 20 20 20 74 68 69 73 2e 64 65 62 75         this.debu
f5a0: 67 46 6f 72 6d 61 74 20 3d 20 64 65 62 75 67 46  gFormat = debugF
f5b0: 6f 72 6d 61 74 3b 0d 0a 20 20 20 20 20 20 20 20  ormat;..        
f5c0: 20 20 20 20 20 20 20 20 74 68 69 73 2e 74 72 61          this.tra
f5d0: 63 65 46 6f 72 6d 61 74 20 3d 20 74 72 61 63 65  ceFormat = trace
f5e0: 46 6f 72 6d 61 74 3b 0d 0a 20 20 20 20 20 20 20  Format;..       
f5f0: 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 69 6e           this.in
f600: 73 74 61 6c 6c 46 6c 61 67 73 20 3d 20 69 6e 73  stallFlags = ins
f610: 74 61 6c 6c 46 6c 61 67 73 3b 0d 0a 20 20 20 20  tallFlags;..    
f620: 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73              this
f630: 2e 64 65 62 75 67 50 72 69 6f 72 69 74 79 20 3d  .debugPriority =
f640: 20 64 65 62 75 67 50 72 69 6f 72 69 74 79 3b 0d   debugPriority;.
f650: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
f660: 20 74 68 69 73 2e 74 72 61 63 65 50 72 69 6f 72   this.tracePrior
f670: 69 74 79 20 3d 20 74 72 61 63 65 50 72 69 6f 72  ity = tracePrior
f680: 69 74 79 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ity;..          
f690: 20 20 20 20 20 20 74 68 69 73 2e 70 65 72 55 73        this.perUs
f6a0: 65 72 20 3d 20 70 65 72 55 73 65 72 3b 0d 0a 20  er = perUser;.. 
f6b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
f6c0: 68 69 73 2e 69 6e 73 74 61 6c 6c 20 3d 20 69 6e  his.install = in
f6d0: 73 74 61 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20  stall;..        
f6e0: 20 20 20 20 20 20 20 20 74 68 69 73 2e 77 6f 77          this.wow
f6f0: 36 34 20 3d 20 77 6f 77 36 34 3b 0d 0a 20 20 20  64 = wow64;..   
f700: 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69               thi
f710: 73 2e 6e 6f 52 75 6e 74 69 6d 65 56 65 72 73 69  s.noRuntimeVersi
f720: 6f 6e 20 3d 20 6e 6f 52 75 6e 74 69 6d 65 56 65  on = noRuntimeVe
f730: 72 73 69 6f 6e 3b 0d 0a 20 20 20 20 20 20 20 20  rsion;..        
f740: 20 20 20 20 20 20 20 20 74 68 69 73 2e 6e 6f 44          this.noD
f750: 65 73 6b 74 6f 70 20 3d 20 6e 6f 44 65 73 6b 74  esktop = noDeskt
f760: 6f 70 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  op;..           
f770: 20 20 20 20 20 74 68 69 73 2e 6e 6f 43 6f 6d 70       this.noComp
f780: 61 63 74 20 3d 20 6e 6f 43 6f 6d 70 61 63 74 3b  act = noCompact;
f790: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
f7a0: 20 20 74 68 69 73 2e 6e 6f 4e 65 74 46 78 32 30    this.noNetFx20
f7b0: 20 3d 20 6e 6f 4e 65 74 46 78 32 30 3b 0d 0a 20   = noNetFx20;.. 
f7c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
f7d0: 68 69 73 2e 6e 6f 4e 65 74 46 78 34 30 20 3d 20  his.noNetFx40 = 
f7e0: 6e 6f 4e 65 74 46 78 34 30 3b 0d 0a 20 20 20 20  noNetFx40;..    
f7f0: 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73              this
f800: 2e 6e 6f 4e 65 74 46 78 34 35 20 3d 20 6e 6f 4e  .noNetFx45 = noN
f810: 65 74 46 78 34 35 3b 0d 0a 20 20 20 20 20 20 20  etFx45;..       
f820: 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 6e 6f           this.no
f830: 56 73 32 30 30 35 20 3d 20 6e 6f 56 73 32 30 30  Vs2005 = noVs200
f840: 35 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  5;..            
f850: 20 20 20 20 74 68 69 73 2e 6e 6f 56 73 32 30 30      this.noVs200
f860: 38 20 3d 20 6e 6f 56 73 32 30 30 38 3b 0d 0a 20  8 = noVs2008;.. 
f870: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
f880: 68 69 73 2e 6e 6f 56 73 32 30 31 30 20 3d 20 6e  his.noVs2010 = n
f890: 6f 56 73 32 30 31 30 3b 0d 0a 20 20 20 20 20 20  oVs2010;..      
f8a0: 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 6e            this.n
f8b0: 6f 56 73 32 30 31 32 20 3d 20 6e 6f 56 73 32 30  oVs2012 = noVs20
f8c0: 31 32 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  12;..           
f8d0: 20 20 20 20 20 74 68 69 73 2e 6e 6f 54 72 61 63       this.noTrac
f8e0: 65 20 3d 20 6e 6f 54 72 61 63 65 3b 0d 0a 20 20  e = noTrace;..  
f8f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
f900: 69 73 2e 6e 6f 43 6f 6e 73 6f 6c 65 20 3d 20 6e  is.noConsole = n
f910: 6f 43 6f 6e 73 6f 6c 65 3b 0d 0a 20 20 20 20 20  oConsole;..     
f920: 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e             this.
f930: 6e 6f 4c 6f 67 20 3d 20 6e 6f 4c 6f 67 3b 0d 0a  noLog = noLog;..
f940: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f950: 74 68 69 73 2e 74 68 72 6f 77 4f 6e 4d 69 73 73  this.throwOnMiss
f960: 69 6e 67 20 3d 20 74 68 72 6f 77 4f 6e 4d 69 73  ing = throwOnMis
f970: 73 69 6e 67 3b 0d 0a 20 20 20 20 20 20 20 20 20  sing;..         
f980: 20 20 20 20 20 20 20 74 68 69 73 2e 77 68 61 74         this.what
f990: 49 66 20 3d 20 77 68 61 74 49 66 3b 0d 0a 20 20  If = whatIf;..  
f9a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
f9b0: 69 73 2e 64 65 62 75 67 20 3d 20 64 65 62 75 67  is.debug = debug
f9c0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
f9d0: 20 20 20 74 68 69 73 2e 76 65 72 62 6f 73 65 20     this.verbose 
f9e0: 3d 20 76 65 72 62 6f 73 65 3b 0d 0a 20 20 20 20  = verbose;..    
f9f0: 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73              this
fa00: 2e 63 6f 6e 66 69 72 6d 20 3d 20 63 6f 6e 66 69  .confirm = confi
fa10: 72 6d 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  rm;..           
fa20: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
fa30: 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20  #endregion....  
fa40: 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
fa50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fa60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fa70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fa80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
fa90: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 72 65  .            #re
faa0: 67 69 6f 6e 20 50 72 69 76 61 74 65 20 53 74 61  gion Private Sta
fab0: 74 69 63 20 4d 65 74 68 6f 64 73 0d 0a 20 20 20  tic Methods..   
fac0: 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65           private
fad0: 20 73 74 61 74 69 63 20 76 6f 69 64 20 47 65 74   static void Get
fae0: 44 65 66 61 75 6c 74 46 69 6c 65 4e 61 6d 65 73  DefaultFileNames
faf0: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
fb00: 20 20 20 72 65 66 20 73 74 72 69 6e 67 20 64 69     ref string di
fb10: 72 65 63 74 6f 72 79 2c 0d 0a 20 20 20 20 20 20  rectory,..      
fb20: 20 20 20 20 20 20 20 20 20 20 72 65 66 20 73 74            ref st
fb30: 72 69 6e 67 20 63 6f 72 65 46 69 6c 65 4e 61 6d  ring coreFileNam
fb40: 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
fb50: 20 20 20 20 72 65 66 20 73 74 72 69 6e 67 20 6c      ref string l
fb60: 69 6e 71 46 69 6c 65 4e 61 6d 65 2c 0d 0a 20 20  inqFileName,..  
fb70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
fb80: 66 20 73 74 72 69 6e 67 20 64 65 73 69 67 6e 65  f string designe
fb90: 72 46 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 20 20  rFileName..     
fba0: 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
fbb0: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
fbc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
fbd0: 28 74 68 69 73 41 73 73 65 6d 62 6c 79 20 3d 3d  (thisAssembly ==
fbe0: 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
fbf0: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
fc00: 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  rn;....         
fc10: 20 20 20 20 20 20 20 64 69 72 65 63 74 6f 72 79         directory
fc20: 20 3d 20 50 61 74 68 2e 47 65 74 44 69 72 65 63   = Path.GetDirec
fc30: 74 6f 72 79 4e 61 6d 65 28 74 68 69 73 41 73 73  toryName(thisAss
fc40: 65 6d 62 6c 79 2e 4c 6f 63 61 74 69 6f 6e 29 3b  embly.Location);
fc50: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
fc60: 20 20 20 20 69 66 20 28 53 74 72 69 6e 67 2e 49      if (String.I
fc70: 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 64 69 72  sNullOrEmpty(dir
fc80: 65 63 74 6f 72 79 29 29 0d 0a 20 20 20 20 20 20  ectory))..      
fc90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
fca0: 74 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  turn;....       
fcb0: 20 20 20 20 20 20 20 20 20 63 6f 72 65 46 69 6c           coreFil
fcc0: 65 4e 61 6d 65 20 3d 20 50 61 74 68 2e 43 6f 6d  eName = Path.Com
fcd0: 62 69 6e 65 28 64 69 72 65 63 74 6f 72 79 2c 0d  bine(directory,.
fce0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
fcf0: 20 20 20 20 20 49 6e 73 74 61 6c 6c 65 72 2e 43       Installer.C
fd00: 6f 72 65 46 69 6c 65 4e 61 6d 65 29 3b 0d 0a 0d  oreFileName);...
fd10: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
fd20: 20 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 20 3d 20   linqFileName = 
fd30: 50 61 74 68 2e 43 6f 6d 62 69 6e 65 28 64 69 72  Path.Combine(dir
fd40: 65 63 74 6f 72 79 2c 0d 0a 20 20 20 20 20 20 20  ectory,..       
fd50: 20 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 73               Ins
fd60: 74 61 6c 6c 65 72 2e 4c 69 6e 71 46 69 6c 65 4e  taller.LinqFileN
fd70: 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ame);....       
fd80: 20 20 20 20 20 20 20 20 20 64 65 73 69 67 6e 65           designe
fd90: 72 46 69 6c 65 4e 61 6d 65 20 3d 20 50 61 74 68  rFileName = Path
fda0: 2e 43 6f 6d 62 69 6e 65 28 64 69 72 65 63 74 6f  .Combine(directo
fdb0: 72 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ry,..           
fdc0: 20 20 20 20 20 20 20 20 20 49 6e 73 74 61 6c 6c           Install
fdd0: 65 72 2e 44 65 73 69 67 6e 65 72 46 69 6c 65 4e  er.DesignerFileN
fde0: 61 6d 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ame);..         
fdf0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
fe00: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
fe10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fe20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fe30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fe40: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
fe50: 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
fe60: 74 61 74 69 63 20 62 6f 6f 6c 20 43 68 65 63 6b  tatic bool Check
fe70: 4f 70 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20  Option(..       
fe80: 20 20 20 20 20 20 20 20 20 72 65 66 20 73 74 72           ref str
fe90: 69 6e 67 20 61 72 67 0d 0a 20 20 20 20 20 20 20  ing arg..       
fea0: 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
feb0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
fec0: 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
fed0: 67 20 72 65 73 75 6c 74 20 3d 20 61 72 67 3b 0d  g result = arg;.
fee0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
fef0: 20 20 20 69 66 20 28 21 53 74 72 69 6e 67 2e 49     if (!String.I
ff00: 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 72 65 73  sNullOrEmpty(res
ff10: 75 6c 74 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ult))..         
ff20: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
ff30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
ff40: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
ff50: 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 52        // NOTE: R
ff60: 65 6d 6f 76 65 20 61 6c 6c 20 6c 65 61 64 69 6e  emove all leadin
ff70: 67 20 73 77 69 74 63 68 20 63 68 61 72 73 2e 0d  g switch chars..
ff80: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
ff90: 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
ffa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 73               res
ffb0: 75 6c 74 20 3d 20 72 65 73 75 6c 74 2e 54 72 69  ult = result.Tri
ffc0: 6d 53 74 61 72 74 28 53 77 69 74 63 68 43 68 61  mStart(SwitchCha
ffd0: 72 73 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  rs);....        
ffe0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
fff0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10000 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 48 6f 77      // NOTE: How
10010 20 6d 61 6e 79 20 63 68 61 72 73 20 77 65 72 65   many chars were
10020 20 72 65 6d 6f 76 65 64 3f 0d 0a 20 20 20 20 20   removed?..     
10030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
10040 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
10050 20 20 20 20 20 20 20 69 6e 74 20 63 6f 75 6e 74         int count
10060 20 3d 20 61 72 67 2e 4c 65 6e 67 74 68 20 2d 20   = arg.Length - 
10070 72 65 73 75 6c 74 2e 4c 65 6e 67 74 68 3b 0d 0a  result.Length;..
10080 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
10090 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
100a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
100b0 20 4e 4f 54 45 3a 20 57 61 73 20 74 68 65 72 65   NOTE: Was there
100c0 20 61 74 20 6c 65 61 73 74 20 6f 6e 65 3f 0d 0a   at least one?..
100d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
100e0 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
100f0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
10100 63 6f 75 6e 74 20 3e 20 30 29 0d 0a 20 20 20 20  count > 0)..    
10110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10120 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
10130 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
10140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10150 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20         // NOTE: 
10160 4f 6b 2c 20 72 65 70 6c 61 63 65 20 74 68 65 69  Ok, replace thei
10170 72 20 6f 72 69 67 69 6e 61 6c 0d 0a 20 20 20 20  r original..    
10180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10190 20 20 20 20 2f 2f 20 20 20 20 20 20 20 61 72 67      //       arg
101a0 75 6d 65 6e 74 2e 0d 0a 20 20 20 20 20 20 20 20  ument...        
101b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
101c0 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
101d0 20 20 20 20 20 20 20 20 20 20 20 20 61 72 67 20              arg 
101e0 3d 20 72 65 73 75 6c 74 3b 0d 0a 0d 0a 20 20 20  = result;....   
101f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10200 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
10210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10220 20 2f 2f 20 4e 4f 54 45 3a 20 59 65 73 2c 20 74   // NOTE: Yes, t
10230 68 69 73 20 69 73 20 61 20 73 77 69 74 63 68 2e  his is a switch.
10240 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
10250 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
10260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10270 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75        return tru
10280 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
10290 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
102a0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
102b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
102c0 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20  return false;.. 
102d0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
102e0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
102f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10300 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10310 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10320 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
10330 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
10340 72 69 76 61 74 65 20 73 74 61 74 69 63 20 62 6f  rivate static bo
10350 6f 6c 20 4d 61 74 63 68 4f 70 74 69 6f 6e 28 0d  ol MatchOption(.
10360 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
10370 20 73 74 72 69 6e 67 20 61 72 67 2c 0d 0a 20 20   string arg,..  
10380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
10390 72 69 6e 67 20 6f 70 74 69 6f 6e 0d 0a 20 20 20  ring option..   
103a0 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a               )..
103b0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
103c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
103d0 66 20 28 28 61 72 67 20 3d 3d 20 6e 75 6c 6c 29  f ((arg == null)
103e0 20 7c 7c 20 28 6f 70 74 69 6f 6e 20 3d 3d 20 6e   || (option == n
103f0 75 6c 6c 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ull))..         
10400 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
10410 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20  n false;....    
10420 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
10430 72 6e 20 53 74 72 69 6e 67 2e 43 6f 6d 70 61 72  rn String.Compar
10440 65 28 61 72 67 2c 20 30 2c 20 6f 70 74 69 6f 6e  e(arg, 0, option
10450 2c 20 30 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  , 0,..          
10460 20 20 20 20 20 20 20 20 20 20 61 72 67 2e 4c 65            arg.Le
10470 6e 67 74 68 2c 20 53 74 72 69 6e 67 43 6f 6d 70  ngth, StringComp
10480 61 72 69 73 6f 6e 2e 4f 72 64 69 6e 61 6c 49 67  arison.OrdinalIg
10490 6e 6f 72 65 43 61 73 65 29 20 3d 3d 20 30 3b 0d  noreCase) == 0;.
104a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
104b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
104c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
104d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
104e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
104f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10500 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
10510 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
10520 62 6f 6f 6c 3f 20 50 61 72 73 65 42 6f 6f 6c 65  bool? ParseBoole
10530 61 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  an(..           
10540 20 20 20 20 20 73 74 72 69 6e 67 20 74 65 78 74       string text
10550 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
10560 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20    )..           
10570 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
10580 20 20 20 20 69 66 20 28 21 53 74 72 69 6e 67 2e      if (!String.
10590 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 74 65  IsNullOrEmpty(te
105a0 78 74 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  xt))..          
105b0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
105c0 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f               boo
105d0 6c 20 76 61 6c 75 65 3b 0d 0a 0d 0a 20 20 20 20  l value;....    
105e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
105f0 69 66 20 28 62 6f 6f 6c 2e 54 72 79 50 61 72 73  if (bool.TryPars
10600 65 28 74 65 78 74 2c 20 6f 75 74 20 76 61 6c 75  e(text, out valu
10610 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e))..           
10620 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
10630 75 72 6e 20 76 61 6c 75 65 3b 0d 0a 20 20 20 20  urn value;..    
10640 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
10650 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
10660 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 20   return null;.. 
10670 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
10680 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
10690 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
106a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
106b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
106c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
106d0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
106e0 72 69 76 61 74 65 20 73 74 61 74 69 63 20 6f 62  rivate static ob
106f0 6a 65 63 74 20 50 61 72 73 65 45 6e 75 6d 28 0d  ject ParseEnum(.
10700 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
10710 20 54 79 70 65 20 65 6e 75 6d 54 79 70 65 2c 0d   Type enumType,.
10720 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
10730 20 73 74 72 69 6e 67 20 74 65 78 74 2c 0d 0a 20   string text,.. 
10740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62                 b
10750 6f 6f 6c 20 6e 6f 43 61 73 65 0d 0a 20 20 20 20  ool noCase..    
10760 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
10770 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
10780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
10790 20 28 28 65 6e 75 6d 54 79 70 65 20 3d 3d 20 6e   ((enumType == n
107a0 75 6c 6c 29 20 7c 7c 20 21 65 6e 75 6d 54 79 70  ull) || !enumTyp
107b0 65 2e 49 73 45 6e 75 6d 29 0d 0a 20 20 20 20 20  e.IsEnum)..     
107c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
107d0 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20  eturn null;.... 
107e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
107f0 66 20 28 21 53 74 72 69 6e 67 2e 49 73 4e 75 6c  f (!String.IsNul
10800 6c 4f 72 45 6d 70 74 79 28 74 65 78 74 29 29 0d  lOrEmpty(text)).
10810 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
10820 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
10830 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20          try..   
10840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10850 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
10860 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
10870 72 6e 20 45 6e 75 6d 2e 50 61 72 73 65 28 65 6e  rn Enum.Parse(en
10880 75 6d 54 79 70 65 2c 20 74 65 78 74 2c 20 6e 6f  umType, text, no
10890 43 61 73 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  Case);..        
108a0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
108b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
108c0 20 20 20 63 61 74 63 68 0d 0a 20 20 20 20 20 20     catch..      
108d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
108e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
108f0 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e           // do n
10900 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20  othing...       
10910 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
10920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10930 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
10940 20 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c       return null
10950 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
10960 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 65  ..            #e
10970 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20  ndregion....    
10980 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
10990 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
109a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
109b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
109c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
109d0 20 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69             #regi
109e0 6f 6e 20 50 75 62 6c 69 63 20 53 74 61 74 69 63  on Public Static
109f0 20 4d 65 74 68 6f 64 73 0d 0a 20 20 20 20 20 20   Methods..      
10a00 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61        public sta
10a10 74 69 63 20 43 6f 6e 66 69 67 75 72 61 74 69 6f  tic Configuratio
10a20 6e 20 43 72 65 61 74 65 44 65 66 61 75 6c 74 28  n CreateDefault(
10a30 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
10a40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
10a50 20 20 73 74 72 69 6e 67 20 64 69 72 65 63 74 6f    string directo
10a60 72 79 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20  ry = null;..    
10a70 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
10a80 6e 67 20 63 6f 72 65 46 69 6c 65 4e 61 6d 65 20  ng coreFileName 
10a90 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20  = null;..       
10aa0 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
10ab0 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 20 3d 20 6e  linqFileName = n
10ac0 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ull;..          
10ad0 20 20 20 20 20 20 73 74 72 69 6e 67 20 64 65 73        string des
10ae0 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 20 3d 20  ignerFileName = 
10af0 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  null;....       
10b00 20 20 20 20 20 20 20 20 20 47 65 74 44 65 66 61           GetDefa
10b10 75 6c 74 46 69 6c 65 4e 61 6d 65 73 28 0d 0a 20  ultFileNames(.. 
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 69 72 65 63 74 6f 72 79     ref directory
10b40 2c 20 72 65 66 20 63 6f 72 65 46 69 6c 65 4e 61  , ref coreFileNa
10b50 6d 65 2c 20 72 65 66 20 6c 69 6e 71 46 69 6c 65  me, ref linqFile
10b60 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  Name,..         
10b70 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20 64             ref d
10b80 65 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 29  esignerFileName)
10b90 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
10ba0 20 20 20 20 20 72 65 74 75 72 6e 20 6e 65 77 20       return new 
10bb0 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 28 74 68  Configuration(th
10bc0 69 73 41 73 73 65 6d 62 6c 79 2c 20 6e 75 6c 6c  isAssembly, null
10bd0 2c 20 64 69 72 65 63 74 6f 72 79 2c 0d 0a 20 20  , directory,..  
10be0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10bf0 20 20 63 6f 72 65 46 69 6c 65 4e 61 6d 65 2c 20    coreFileName, 
10c00 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 2c 20 64 65  linqFileName, de
10c10 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 2c 20  signerFileName, 
10c20 6e 75 6c 6c 2c 20 6e 75 6c 6c 2c 0d 0a 20 20 20  null, null,..   
10c30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10c40 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 46   TraceOps.DebugF
10c50 6f 72 6d 61 74 2c 20 54 72 61 63 65 4f 70 73 2e  ormat, TraceOps.
10c60 54 72 61 63 65 46 6f 72 6d 61 74 2c 0d 0a 20 20  TraceFormat,..  
10c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10c80 20 20 49 6e 73 74 61 6c 6c 46 6c 61 67 73 2e 44    InstallFlags.D
10c90 65 66 61 75 6c 74 2c 20 54 72 61 63 65 50 72 69  efault, TracePri
10ca0 6f 72 69 74 79 2e 44 65 66 61 75 6c 74 2c 0d 0a  ority.Default,..
10cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10cc0 20 20 20 20 54 72 61 63 65 50 72 69 6f 72 69 74      TracePriorit
10cd0 79 2e 44 65 66 61 75 6c 74 2c 20 66 61 6c 73 65  y.Default, false
10ce0 2c 20 74 72 75 65 2c 20 66 61 6c 73 65 2c 20 66  , true, false, f
10cf0 61 6c 73 65 2c 20 66 61 6c 73 65 2c 0d 0a 20 20  alse, false,..  
10d00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10d10 20 20 66 61 6c 73 65 2c 20 66 61 6c 73 65 2c 20    false, false, 
10d20 66 61 6c 73 65 2c 20 66 61 6c 73 65 2c 20 66 61  false, false, fa
10d30 6c 73 65 2c 20 66 61 6c 73 65 2c 20 66 61 6c 73  lse, false, fals
10d40 65 2c 20 66 61 6c 73 65 2c 0d 0a 20 20 20 20 20  e, false,..     
10d50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66                 f
10d60 61 6c 73 65 2c 20 66 61 6c 73 65 2c 20 66 61 6c  alse, false, fal
10d70 73 65 2c 20 74 72 75 65 2c 20 74 72 75 65 2c 20  se, true, true, 
10d80 66 61 6c 73 65 2c 20 66 61 6c 73 65 2c 20 66 61  false, false, fa
10d90 6c 73 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  lse);..         
10da0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
10db0 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
10dc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10dd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10de0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10df0 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
10e00 20 20 20 20 20 20 20 5b 4d 65 74 68 6f 64 49 6d         [MethodIm
10e10 70 6c 28 4d 65 74 68 6f 64 49 6d 70 6c 4f 70 74  pl(MethodImplOpt
10e20 69 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e 69 6e 67 29  ions.NoInlining)
10e30 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ]..            p
10e40 75 62 6c 69 63 20 73 74 61 74 69 63 20 62 6f 6f  ublic static boo
10e50 6c 20 46 72 6f 6d 41 72 67 73 28 0d 0a 20 20 20  l FromArgs(..   
10e60 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72               str
10e70 69 6e 67 5b 5d 20 61 72 67 73 2c 0d 0a 20 20 20  ing[] args,..   
10e80 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f               boo
10e90 6c 20 73 74 72 69 63 74 2c 0d 0a 20 20 20 20 20  l strict,..     
10ea0 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20 43             ref C
10eb0 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 63 6f 6e  onfiguration con
10ec0 66 69 67 75 72 61 74 69 6f 6e 2c 0d 0a 20 20 20  figuration,..   
10ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66               ref
10ee0 20 73 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20   string error.. 
10ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29                 )
10f00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
10f10 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
10f20 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20   try..          
10f30 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
10f40 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
10f50 28 61 72 67 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  (args == null)..
10f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10f70 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74          return t
10f80 72 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  rue;....        
10f90 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
10fa0 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 3d 3d  configuration ==
10fb0 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
10fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10fd0 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 3d 20  configuration = 
10fe0 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 43 72  Configuration.Cr
10ff0 65 61 74 65 44 65 66 61 75 6c 74 28 29 3b 0d 0a  eateDefault();..
11000 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
11010 20 20 20 20 20 20 69 6e 74 20 6c 65 6e 67 74 68        int length
11020 20 3d 20 61 72 67 73 2e 4c 65 6e 67 74 68 3b 0d   = args.Length;.
11030 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
11040 20 20 20 20 20 20 20 66 6f 72 20 28 69 6e 74 20         for (int 
11050 69 6e 64 65 78 20 3d 20 30 3b 20 69 6e 64 65 78  index = 0; index
11060 20 3c 20 6c 65 6e 67 74 68 3b 20 69 6e 64 65 78   < length; index
11070 2b 2b 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ++)..           
11080 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
11090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
110a0 20 20 20 20 73 74 72 69 6e 67 20 61 72 67 20 3d      string arg =
110b0 20 61 72 67 73 5b 69 6e 64 65 78 5d 3b 0d 0a 0d   args[index];...
110c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
110d0 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
110e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
110f0 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 53 6b       // NOTE: Sk
11100 69 70 20 61 6e 79 20 61 72 67 75 6d 65 6e 74 20  ip any argument 
11110 74 68 61 74 20 69 73 20 6e 75 6c 6c 20 28 3f 29  that is null (?)
11120 20 6f 72 20 61 6e 20 65 6d 70 74 79 0d 0a 20 20   or an empty..  
11130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11140 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 73        //       s
11150 74 72 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20  tring...        
11160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11170 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
11180 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
11190 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45  String.IsNullOrE
111a0 6d 70 74 79 28 61 72 67 29 29 0d 0a 20 20 20 20  mpty(arg))..    
111b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
111c0 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65          continue
111d0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
111e0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
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 4e 4f 54 45           // NOTE
11210 3a 20 57 65 20 61 72 65 20 67 6f 69 6e 67 20 74  : We are going t
11220 6f 20 6d 6f 64 69 66 79 20 74 68 65 20 6f 72 69  o modify the ori
11230 67 69 6e 61 6c 20 61 72 67 75 6d 65 6e 74 0d 0a  ginal argument..
11240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11250 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
11260 20 62 79 20 72 65 6d 6f 76 69 6e 67 20 61 6e 79   by removing any
11270 20 6c 65 61 64 69 6e 67 20 6f 70 74 69 6f 6e 20   leading option 
11280 63 68 61 72 61 63 74 65 72 73 3b 0d 0a 20 20 20  characters;..   
11290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
112a0 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 74 68       //       th
112b0 65 72 65 66 6f 72 65 2c 20 77 65 20 75 73 65 20  erefore, we use 
112c0 61 20 6e 65 77 20 73 74 72 69 6e 67 20 74 6f 20  a new string to 
112d0 68 6f 6c 64 20 74 68 65 0d 0a 20 20 20 20 20 20  hold the..      
112e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
112f0 20 20 2f 2f 20 20 20 20 20 20 20 6d 6f 64 69 66    //       modif
11300 69 65 64 20 61 72 67 75 6d 65 6e 74 2e 0d 0a 20  ied argument... 
11310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11320 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
11330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11340 20 20 20 73 74 72 69 6e 67 20 6e 65 77 41 72 67     string newArg
11350 20 3d 20 61 72 67 3b 0d 0a 0d 0a 20 20 20 20 20   = arg;....     
11360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11370 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
11380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
11390 2f 20 4e 4f 54 45 3a 20 41 6c 6c 20 74 68 65 20  / NOTE: All the 
113a0 73 75 70 70 6f 72 74 65 64 20 63 6f 6d 6d 61 6e  supported comman
113b0 64 20 6c 69 6e 65 20 6f 70 74 69 6f 6e 73 20 6d  d line options m
113c0 75 73 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ust..           
113d0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
113e0 20 20 20 20 20 20 62 65 67 69 6e 20 77 69 74 68        begin with
113f0 20 61 6e 20 6f 70 74 69 6f 6e 20 63 68 61 72 61   an option chara
11400 63 74 65 72 20 28 65 2e 67 2e 20 61 20 6d 69 6e  cter (e.g. a min
11410 75 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  us..            
11420 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
11430 20 20 20 20 20 6f 72 20 66 6f 72 77 61 72 64 20       or forward 
11440 73 6c 61 73 68 29 3b 20 61 74 74 65 6d 70 74 20  slash); attempt 
11450 74 6f 20 76 61 6c 69 64 61 74 65 20 74 68 61 74  to validate that
11460 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
11470 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
11480 20 20 20 6e 6f 77 2e 20 20 49 66 20 77 65 20 66     now.  If we f
11490 61 69 6c 20 69 6e 20 73 74 72 69 63 74 20 6d 6f  ail in strict mo
114a0 64 65 2c 20 77 65 20 61 72 65 20 64 6f 6e 65 3b  de, we are done;
114b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
114c0 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
114d0 20 20 20 6f 74 68 65 72 77 69 73 65 2c 20 6a 75     otherwise, ju
114e0 73 74 20 73 6b 69 70 20 74 68 69 73 20 61 72 67  st skip this arg
114f0 75 6d 65 6e 74 20 61 6e 64 20 61 64 76 61 6e 63  ument and advanc
11500 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..             
11510 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
11520 20 20 20 20 74 6f 20 74 68 65 20 6e 65 78 74 20      to the next 
11530 6f 6e 65 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  one...          
11540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
11550 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
11560 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21 43            if (!C
11570 68 65 63 6b 4f 70 74 69 6f 6e 28 72 65 66 20 6e  heckOption(ref n
11580 65 77 41 72 67 29 29 0d 0a 20 20 20 20 20 20 20  ewArg))..       
11590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
115a0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
115b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
115c0 65 72 72 6f 72 20 3d 20 54 72 61 63 65 4f 70 73  error = TraceOps
115d0 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 0d  .DebugAndTrace(.
115e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
115f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11600 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c   TracePriority.L
11610 6f 77 65 73 74 2c 20 64 65 62 75 67 43 61 6c 6c  owest, debugCall
11620 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20  back,..         
11630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11640 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c         traceCall
11650 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72  back, String.For
11660 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
11670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11680 20 20 20 20 20 20 22 55 6e 73 75 70 70 6f 72 74        "Unsupport
11690 65 64 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 20  ed command line 
116a0 61 72 67 75 6d 65 6e 74 3a 20 7b 30 7d 22 2c 0d  argument: {0}",.
116b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
116c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
116d0 20 46 6f 72 44 69 73 70 6c 61 79 28 61 72 67 29   ForDisplay(arg)
116e0 29 2c 20 74 72 61 63 65 43 61 74 65 67 6f 72 79  ), traceCategory
116f0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
11700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11710 20 20 69 66 20 28 73 74 72 69 63 74 29 0d 0a 20    if (strict).. 
11720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
11740 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a  eturn false;....
11750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11760 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74              cont
11770 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  inue;..         
11780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
11790 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
117a0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
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 20 2f 2f 20 4e 4f 54 45 3a          // NOTE:
117d0 20 41 6c 6c 20 74 68 65 20 73 75 70 70 6f 72 74   All the support
117e0 65 64 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 20  ed command line 
117f0 6f 70 74 69 6f 6e 73 20 6d 75 73 74 0d 0a 20 20  options must..  
11800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11810 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 68        //       h
11820 61 76 65 20 61 20 76 61 6c 75 65 3b 20 74 68 65  ave a value; the
11830 72 65 66 6f 72 65 2c 20 61 74 74 65 6d 70 74 20  refore, attempt 
11840 74 6f 20 61 64 76 61 6e 63 65 0d 0a 20 20 20 20  to advance..    
11850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11860 20 20 20 20 2f 2f 20 20 20 20 20 20 20 74 6f 20      //       to 
11870 69 74 20 6e 6f 77 2e 20 20 49 66 20 77 65 20 66  it now.  If we f
11880 61 69 6c 2c 20 77 65 20 61 72 65 20 64 6f 6e 65  ail, we are done
11890 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
118a0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
118b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
118c0 20 20 20 20 20 20 20 69 6e 64 65 78 2b 2b 3b 0d         index++;.
118d0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
118e0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 69             if (i
118f0 6e 64 65 78 20 3e 3d 20 6c 65 6e 67 74 68 29 0d  ndex >= length).
11900 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
11910 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
11920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11930 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
11940 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e  TraceOps.DebugAn
11950 64 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20  dTrace(..       
11960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11970 20 20 20 20 20 20 20 20 20 54 72 61 63 65 50 72           TracePr
11980 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64  iority.Lowest, d
11990 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20  ebugCallback,.. 
119a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
119b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
119c0 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74  raceCallback, St
119d0 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
119e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
119f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 4d                "M
11a00 69 73 73 69 6e 67 20 76 61 6c 75 65 20 66 6f 72  issing value for
11a10 20 6f 70 74 69 6f 6e 3a 20 7b 30 7d 22 2c 0d 0a   option: {0}",..
11a20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11a30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11a40 46 6f 72 44 69 73 70 6c 61 79 28 61 72 67 29 29  ForDisplay(arg))
11a50 2c 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29  , traceCategory)
11a60 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
11a70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11a80 20 69 66 20 28 73 74 72 69 63 74 29 0d 0a 20 20   if (strict)..  
11a90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
11ab0 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20  turn false;.... 
11ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11ad0 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b             break
11ae0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
11af0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
11b00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11b10 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
11b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11b30 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 47 72 61      // NOTE: Gra
11b40 62 20 74 68 65 20 74 65 78 74 75 61 6c 20 76 61  b the textual va
11b50 6c 75 65 20 6f 66 20 74 68 69 73 20 63 6f 6d 6d  lue of this comm
11b60 61 6e 64 20 6c 69 6e 65 0d 0a 20 20 20 20 20 20  and line..      
11b70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11b80 20 20 2f 2f 20 20 20 20 20 20 20 6f 70 74 69 6f    //       optio
11b90 6e 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n...            
11ba0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
11bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11bc0 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 74          string t
11bd0 65 78 74 20 3d 20 61 72 67 73 5b 69 6e 64 65 78  ext = args[index
11be0 5d 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  ];....          
11bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
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 4e 4f 54            // NOT
11c20 45 3a 20 46 69 67 75 72 65 20 6f 75 74 20 77 68  E: Figure out wh
11c30 69 63 68 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65  ich command line
11c40 20 6f 70 74 69 6f 6e 20 74 68 69 73 20 69 73 0d   option this is.
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 28 62 61 73 65 64 20 6f 6e 20 61 20 70 61    (based on a pa
11c80 72 74 69 61 6c 20 6e 61 6d 65 20 6d 61 74 63 68  rtial name match
11c90 29 20 61 6e 64 20 74 68 65 6e 20 74 72 79 0d 0a  ) and then try..
11ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11cb0 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
11cc0 20 74 6f 20 69 6e 74 65 72 70 72 65 74 20 74 68   to interpret th
11cd0 65 20 74 65 78 74 75 61 6c 20 76 61 6c 75 65 20  e textual value 
11ce0 61 73 20 74 68 65 20 63 6f 72 72 65 63 74 0d 0a  as the correct..
11cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11d00 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
11d10 20 74 79 70 65 2e 0d 0a 20 20 20 20 20 20 20 20   type...        
11d20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11d30 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
11d40 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
11d50 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41  MatchOption(newA
11d60 72 67 2c 20 22 63 6f 6e 66 69 67 56 65 72 73 69  rg, "configVersi
11d70 6f 6e 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20  on"))..         
11d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
11d90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
11da0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
11db0 6e 66 69 67 75 72 61 74 69 6f 6e 2e 63 6f 6e 66  nfiguration.conf
11dc0 69 67 56 65 72 73 69 6f 6e 20 3d 20 74 65 78 74  igVersion = text
11dd0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
11de0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
11df0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11e00 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d        else if (M
11e10 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72  atchOption(newAr
11e20 67 2c 20 22 63 6f 6e 66 69 72 6d 22 29 29 0d 0a  g, "confirm"))..
11e30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11e40 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
11e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11e60 20 20 20 20 20 20 20 62 6f 6f 6c 3f 20 76 61 6c         bool? val
11e70 75 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c 65 61  ue = ParseBoolea
11e80 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20  n(text);....    
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 69 66 20 28 76 61 6c 75          if (valu
11eb0 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  e == null)..    
11ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11ed0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
11ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11ef0 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72             error
11f00 20 3d 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75   = TraceOps.Debu
11f10 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 20 20 20  gAndTrace(..    
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 20 20 20 20 20                  
11f40 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f  TracePriority.Lo
11f50 77 65 73 74 2c 20 64 65 62 75 67 43 61 6c 6c 62  west, debugCallb
11f60 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ack,..          
11f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11f80 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
11f90 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e  allback, String.
11fa0 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
11fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 49 6e               "In
11fd0 76 61 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c 65 61  valid {0} boolea
11fe0 6e 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a  n value: {1}",..
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 20 20                  
12010 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 61      ForDisplay(a
12020 72 67 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28  rg), ForDisplay(
12030 74 65 78 74 29 29 2c 0d 0a 20 20 20 20 20 20 20  text)),..       
12040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12050 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
12060 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
12070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12090 69 66 20 28 73 74 72 69 63 74 29 0d 0a 20 20 20  if (strict)..   
120a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
120b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
120c0 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
120d0 0d 0a 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 20 20 20 20 20                  
120f0 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20    continue;..   
12100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12110 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
12120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12130 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67            config
12140 75 72 61 74 69 6f 6e 2e 63 6f 6e 66 69 72 6d 20  uration.confirm 
12150 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a  = (bool)value;..
12160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12170 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
12180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12190 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63     else if (Matc
121a0 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20  hOption(newArg, 
121b0 22 63 6f 72 65 46 69 6c 65 4e 61 6d 65 22 29 29  "coreFileName"))
121c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
121d0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
121e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
121f0 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75           configu
12200 72 61 74 69 6f 6e 2e 63 6f 72 65 46 69 6c 65 4e  ration.coreFileN
12210 61 6d 65 20 3d 20 74 65 78 74 3b 0d 0a 20 20 20  ame = text;..   
12220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12230 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
12240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12250 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70  else if (MatchOp
12260 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 64 65  tion(newArg, "de
12270 62 75 67 22 29 29 0d 0a 20 20 20 20 20 20 20 20  bug"))..        
12280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12290 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
122a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62                 b
122b0 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d 20 50 61 72  ool? value = Par
122c0 73 65 42 6f 6f 6c 65 61 6e 28 74 65 78 74 29 3b  seBoolean(text);
122d0 0d 0a 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 69 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c  if (value == nul
12300 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
12310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12320 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
12330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12340 20 20 20 65 72 72 6f 72 20 3d 20 54 72 61 63 65     error = Trace
12350 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63  Ops.DebugAndTrac
12360 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
12370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12380 20 20 20 20 20 20 20 20 54 72 61 63 65 50 72 69          TracePri
12390 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65  ority.Lowest, de
123a0 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20  bugCallback,..  
123b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
123c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
123d0 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c    traceCallback,
123e0 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d   String.Format(.
123f0 0a 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 20 20 20                  
12410 20 20 20 20 20 22 49 6e 76 61 6c 69 64 20 7b 30       "Invalid {0
12420 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 3a  } boolean value:
12430 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20   {1}",..        
12440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12450 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44              ForD
12460 69 73 70 6c 61 79 28 61 72 67 29 2c 20 46 6f 72  isplay(arg), For
12470 44 69 73 70 6c 61 79 28 74 65 78 74 29 29 2c 0d  Display(text)),.
12480 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
12490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
124a0 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f       traceCatego
124b0 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
124c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
124d0 20 20 20 20 20 20 20 20 69 66 20 28 73 74 72 69          if (stri
124e0 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ct)..           
124f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12500 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
12510 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  false;....      
12520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12530 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e            contin
12540 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
12550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12560 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
12570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12580 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e    configuration.
12590 64 65 62 75 67 20 3d 20 28 62 6f 6f 6c 29 76 61  debug = (bool)va
125a0 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lue;..          
125b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
125c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
125d0 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66           else if
125e0 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65   (MatchOption(ne
125f0 77 41 72 67 2c 20 22 64 65 62 75 67 46 6f 72 6d  wArg, "debugForm
12600 61 74 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20  at"))..         
12610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
12620 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
12630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
12640 6e 66 69 67 75 72 61 74 69 6f 6e 2e 64 65 62 75  nfiguration.debu
12650 67 46 6f 72 6d 61 74 20 3d 20 74 65 78 74 3b 0d  gFormat = text;.
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 20 20 20 20 54 72 61               Tra
12680 63 65 4f 70 73 2e 44 65 62 75 67 46 6f 72 6d 61  ceOps.DebugForma
12690 74 20 3d 20 63 6f 6e 66 69 67 75 72 61 74 69 6f  t = configuratio
126a0 6e 2e 64 65 62 75 67 46 6f 72 6d 61 74 3b 0d 0a  n.debugFormat;..
126b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
126c0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
126d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
126e0 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63     else if (Matc
126f0 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20  hOption(newArg, 
12700 22 64 65 62 75 67 50 72 69 6f 72 69 74 79 22 29  "debugPriority")
12710 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
12720 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
12730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12740 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74            object
12750 20 76 61 6c 75 65 20 3d 20 50 61 72 73 65 45 6e   value = ParseEn
12760 75 6d 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  um(..           
12770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12780 20 20 20 20 20 74 79 70 65 6f 66 28 54 72 61 63       typeof(Trac
12790 65 50 72 69 6f 72 69 74 79 29 2c 20 74 65 78 74  ePriority), text
127a0 2c 20 74 72 75 65 29 3b 0d 0a 0d 0a 20 20 20 20  , true);....    
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 69 66 20 28 76 61 6c 75          if (valu
127d0 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  e == null)..    
127e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
127f0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
12800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12810 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72             error
12820 20 3d 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75   = TraceOps.Debu
12830 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 20 20 20  gAndTrace(..    
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 20 20 20 20 20                  
12860 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f  TracePriority.Lo
12870 77 65 73 74 2c 20 64 65 62 75 67 43 61 6c 6c 62  west, debugCallb
12880 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ack,..          
12890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
128a0 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
128b0 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e  allback, String.
128c0 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
128d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
128e0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 49 6e               "In
128f0 76 61 6c 69 64 20 7b 30 7d 20 76 61 6c 75 65 3a  valid {0} value:
12900 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20   {1}",..        
12910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12920 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44              ForD
12930 69 73 70 6c 61 79 28 61 72 67 29 2c 20 46 6f 72  isplay(arg), For
12940 44 69 73 70 6c 61 79 28 74 65 78 74 29 29 2c 0d  Display(text)),.
12950 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
12960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12970 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f       traceCatego
12980 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
12990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
129a0 20 20 20 20 20 20 20 20 69 66 20 28 73 74 72 69          if (stri
129b0 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ct)..           
129c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
129d0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
129e0 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  false;....      
129f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12a00 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e            contin
12a10 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
12a20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12a30 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
12a40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12a50 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e    configuration.
12a60 64 65 62 75 67 50 72 69 6f 72 69 74 79 20 3d 20  debugPriority = 
12a70 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 29 76  (TracePriority)v
12a80 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alue;..         
12a90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12aa0 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75     TraceOps.Debu
12ab0 67 50 72 69 6f 72 69 74 79 20 3d 20 63 6f 6e 66  gPriority = conf
12ac0 69 67 75 72 61 74 69 6f 6e 2e 64 65 62 75 67 50  iguration.debugP
12ad0 72 69 6f 72 69 74 79 3b 0d 0a 20 20 20 20 20 20  riority;..      
12ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12af0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
12b00 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73               els
12b10 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f  e if (MatchOptio
12b20 6e 28 6e 65 77 41 72 67 2c 20 22 64 65 73 69 67  n(newArg, "desig
12b30 6e 65 72 46 69 6c 65 4e 61 6d 65 22 29 29 0d 0a  nerFileName"))..
12b40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12b50 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
12b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12b70 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61         configura
12b80 74 69 6f 6e 2e 64 65 73 69 67 6e 65 72 46 69 6c  tion.designerFil
12b90 65 4e 61 6d 65 20 3d 20 74 65 78 74 3b 0d 0a 20  eName = text;.. 
12ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12bb0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
12bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12bd0 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68    else if (Match
12be0 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22  Option(newArg, "
12bf0 64 69 72 65 63 74 6f 72 79 22 29 29 0d 0a 20 20  directory"))..  
12c00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12c10 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
12c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12c30 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69       configurati
12c40 6f 6e 2e 64 69 72 65 63 74 6f 72 79 20 3d 20 74  on.directory = t
12c50 65 78 74 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ext;....        
12c60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12c70 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
12c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12c90 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 2a 53 50      // NOTE: *SP
12ca0 45 43 49 41 4c 2a 20 4d 75 73 74 20 72 65 66 72  ECIAL* Must refr
12cb0 65 73 68 20 74 68 65 20 66 69 6c 65 20 6e 61 6d  esh the file nam
12cc0 65 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  es..            
12cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12ce0 2f 2f 20 20 20 20 20 20 20 68 65 72 65 20 62 65  //       here be
12cf0 63 61 75 73 65 20 74 68 65 20 75 6e 64 65 72 6c  cause the underl
12d00 79 69 6e 67 20 64 69 72 65 63 74 6f 72 79 0d 0a  ying directory..
12d10 20 20 20 20 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 2f 2f 20 20              //  
12d30 20 20 20 20 20 68 61 73 20 63 68 61 6e 67 65 64       has changed
12d40 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
12d50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
12d60 2f 0d 0a 20 20 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 73                 s
12d80 74 72 69 6e 67 20 63 6f 72 65 46 69 6c 65 4e 61  tring coreFileNa
12d90 6d 65 20 3d 20 63 6f 6e 66 69 67 75 72 61 74 69  me = configurati
12da0 6f 6e 2e 63 6f 72 65 46 69 6c 65 4e 61 6d 65 3b  on.coreFileName;
12db0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
12dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12dd0 69 66 20 28 21 53 74 72 69 6e 67 2e 49 73 4e 75  if (!String.IsNu
12de0 6c 6c 4f 72 45 6d 70 74 79 28 63 6f 72 65 46 69  llOrEmpty(coreFi
12df0 6c 65 4e 61 6d 65 29 29 0d 0a 20 20 20 20 20 20  leName))..      
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 20 63 6f 72 65 46 69            coreFi
12e20 6c 65 4e 61 6d 65 20 3d 20 50 61 74 68 2e 47 65  leName = Path.Ge
12e30 74 46 69 6c 65 4e 61 6d 65 28 63 6f 72 65 46 69  tFileName(coreFi
12e40 6c 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20  leName);....    
12e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12e60 20 20 20 20 20 20 20 20 69 66 20 28 53 74 72 69          if (Stri
12e70 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79  ng.IsNullOrEmpty
12e80 28 63 6f 72 65 46 69 6c 65 4e 61 6d 65 29 29 0d  (coreFileName)).
12e90 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
12ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12eb0 20 63 6f 72 65 46 69 6c 65 4e 61 6d 65 20 3d 20   coreFileName = 
12ec0 49 6e 73 74 61 6c 6c 65 72 2e 43 6f 72 65 46 69  Installer.CoreFi
12ed0 6c 65 4e 61 6d 65 3b 0d 0a 0d 0a 20 20 20 20 20  leName;....     
12ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12ef0 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61         configura
12f00 74 69 6f 6e 2e 63 6f 72 65 46 69 6c 65 4e 61 6d  tion.coreFileNam
12f10 65 20 3d 20 50 61 74 68 2e 43 6f 6d 62 69 6e 65  e = Path.Combine
12f20 28 0d 0a 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 20 20 20 20 20                  
12f40 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e     configuration
12f50 2e 64 69 72 65 63 74 6f 72 79 2c 20 63 6f 72 65  .directory, core
12f60 46 69 6c 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20  FileName);....  
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 73 74 72 69 6e 67            string
12f90 20 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 20 3d 20   linqFileName = 
12fa0 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6c 69  configuration.li
12fb0 6e 71 46 69 6c 65 4e 61 6d 65 3b 0d 0a 0d 0a 20  nqFileName;.... 
12fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12fd0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21             if (!
12fe0 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45  String.IsNullOrE
12ff0 6d 70 74 79 28 6c 69 6e 71 46 69 6c 65 4e 61 6d  mpty(linqFileNam
13000 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e))..           
13010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13020 20 20 20 20 20 6c 69 6e 71 46 69 6c 65 4e 61 6d       linqFileNam
13030 65 20 3d 20 50 61 74 68 2e 47 65 74 46 69 6c 65  e = Path.GetFile
13040 4e 61 6d 65 28 6c 69 6e 71 46 69 6c 65 4e 61 6d  Name(linqFileNam
13050 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e);....         
13060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13070 20 20 20 69 66 20 28 53 74 72 69 6e 67 2e 49 73     if (String.Is
13080 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 6c 69 6e 71  NullOrEmpty(linq
13090 46 69 6c 65 4e 61 6d 65 29 29 0d 0a 20 20 20 20  FileName))..    
130a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
130b0 20 20 20 20 20 20 20 20 20 20 20 20 6c 69 6e 71              linq
130c0 46 69 6c 65 4e 61 6d 65 20 3d 20 49 6e 73 74 61  FileName = Insta
130d0 6c 6c 65 72 2e 4c 69 6e 71 46 69 6c 65 4e 61 6d  ller.LinqFileNam
130e0 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
130f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13100 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e    configuration.
13110 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 20 3d 20 50  linqFileName = P
13120 61 74 68 2e 43 6f 6d 62 69 6e 65 28 0d 0a 20 20  ath.Combine(..  
13130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
13150 6e 66 69 67 75 72 61 74 69 6f 6e 2e 64 69 72 65  nfiguration.dire
13160 63 74 6f 72 79 2c 20 6c 69 6e 71 46 69 6c 65 4e  ctory, linqFileN
13170 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ame);....       
13180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13190 20 20 20 20 20 73 74 72 69 6e 67 20 64 65 73 69       string desi
131a0 67 6e 65 72 46 69 6c 65 4e 61 6d 65 20 3d 20 63  gnerFileName = c
131b0 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 64 65 73  onfiguration.des
131c0 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 3b 0d 0a  ignerFileName;..
131d0 0d 0a 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 20 69 66                if
131f0 20 28 21 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c   (!String.IsNull
13200 4f 72 45 6d 70 74 79 28 64 65 73 69 67 6e 65 72  OrEmpty(designer
13210 46 69 6c 65 4e 61 6d 65 29 29 0d 0a 20 20 20 20  FileName))..    
13220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13230 20 20 20 20 20 20 20 20 20 20 20 20 64 65 73 69              desi
13240 67 6e 65 72 46 69 6c 65 4e 61 6d 65 20 3d 20 50  gnerFileName = P
13250 61 74 68 2e 47 65 74 46 69 6c 65 4e 61 6d 65 28  ath.GetFileName(
13260 64 65 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65  designerFileName
13270 29 3b 0d 0a 0d 0a 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 20 20 69 66 20 28 53 74 72 69 6e 67 2e 49 73 4e    if (String.IsN
132a0 75 6c 6c 4f 72 45 6d 70 74 79 28 64 65 73 69 67  ullOrEmpty(desig
132b0 6e 65 72 46 69 6c 65 4e 61 6d 65 29 29 0d 0a 20  nerFileName)).. 
132c0 20 20 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 20 64                 d
132e0 65 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 20  esignerFileName 
132f0 3d 20 49 6e 73 74 61 6c 6c 65 72 2e 44 65 73 69  = Installer.Desi
13300 67 6e 65 72 46 69 6c 65 4e 61 6d 65 3b 0d 0a 0d  gnerFileName;...
13310 0a 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 63 6f 6e               con
13330 66 69 67 75 72 61 74 69 6f 6e 2e 64 65 73 69 67  figuration.desig
13340 6e 65 72 46 69 6c 65 4e 61 6d 65 20 3d 20 50 61  nerFileName = Pa
13350 74 68 2e 43 6f 6d 62 69 6e 65 28 0d 0a 20 20 20  th.Combine(..   
13360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13370 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
13380 66 69 67 75 72 61 74 69 6f 6e 2e 64 69 72 65 63  figuration.direc
13390 74 6f 72 79 2c 20 64 65 73 69 67 6e 65 72 46 69  tory, designerFi
133a0 6c 65 4e 61 6d 65 29 3b 0d 0a 20 20 20 20 20 20  leName);..      
133b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
133c0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
133d0 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73               els
133e0 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f  e if (MatchOptio
133f0 6e 28 6e 65 77 41 72 67 2c 20 22 69 6e 73 74 61  n(newArg, "insta
13400 6c 6c 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ll"))..         
13410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
13420 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
13430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f                bo
13440 6f 6c 3f 20 76 61 6c 75 65 20 3d 20 50 61 72 73  ol? value = Pars
13450 65 42 6f 6f 6c 65 61 6e 28 74 65 78 74 29 3b 0d  eBoolean(text);.
13460 0a 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 69                 i
13480 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c  f (value == null
13490 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
134a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
134b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
134c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
134d0 20 20 65 72 72 6f 72 20 3d 20 54 72 61 63 65 4f    error = TraceO
134e0 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65  ps.DebugAndTrace
134f0 28 0d 0a 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 20 20 20 20 20 54 72 61 63 65 50 72 69 6f         TracePrio
13520 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62  rity.Lowest, deb
13530 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20  ugCallback,..   
13540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13560 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20   traceCallback, 
13570 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
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 20 20 20 20                  
135a0 20 20 20 20 22 49 6e 76 61 6c 69 64 20 7b 30 7d      "Invalid {0}
135b0 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 3a 20   boolean value: 
135c0 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  {1}",..         
135d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
135e0 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69             ForDi
135f0 73 70 6c 61 79 28 61 72 67 29 2c 20 46 6f 72 44  splay(arg), ForD
13600 69 73 70 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a  isplay(text)),..
13610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13630 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72      traceCategor
13640 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
13650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13660 20 20 20 20 20 20 20 69 66 20 28 73 74 72 69 63         if (stric
13670 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t)..            
13680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13690 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
136a0 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  alse;....       
136b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
136c0 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75           continu
136d0 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
136e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
136f0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
13700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13710 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 69   configuration.i
13720 6e 73 74 61 6c 6c 20 3d 20 28 62 6f 6f 6c 29 76  nstall = (bool)v
13730 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alue;..         
13740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
13750 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
13760 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69            else i
13770 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e  f (MatchOption(n
13780 65 77 41 72 67 2c 20 22 69 6e 73 74 61 6c 6c 46  ewArg, "installF
13790 6c 61 67 73 22 29 29 0d 0a 20 20 20 20 20 20 20  lags"))..       
137a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
137b0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
137c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
137d0 6f 62 6a 65 63 74 20 76 61 6c 75 65 20 3d 20 50  object value = P
137e0 61 72 73 65 45 6e 75 6d 28 0d 0a 20 20 20 20 20  arseEnum(..     
137f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13800 20 20 20 20 20 20 20 20 20 20 20 74 79 70 65 6f             typeo
13810 66 28 49 6e 73 74 61 6c 6c 46 6c 61 67 73 29 2c  f(InstallFlags),
13820 20 74 65 78 74 2c 20 74 72 75 65 29 3b 0d 0a 0d   text, true);...
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 69 66 20               if 
13850 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d  (value == null).
13860 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
13870 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
13880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
138a0 65 72 72 6f 72 20 3d 20 54 72 61 63 65 4f 70 73  error = TraceOps
138b0 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 0d  .DebugAndTrace(.
138c0 0a 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 20 20 20 20 20 54 72 61 63 65 50 72 69 6f 72 69       TracePriori
138f0 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75 67  ty.Lowest, debug
13900 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20  Callback,..     
13910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
13930 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74  raceCallback, St
13940 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
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 20 20 20 20                  
13970 20 20 22 49 6e 76 61 6c 69 64 20 69 6e 73 74 61    "Invalid insta
13980 6c 6c 20 66 6c 61 67 73 20 76 61 6c 75 65 3a 20  ll flags value: 
13990 7b 30 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  {0}",..         
139a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
139b0 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69             ForDi
139c0 73 70 6c 61 79 28 74 65 78 74 29 29 2c 20 74 72  splay(text)), tr
139d0 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  aceCategory);...
139e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
139f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13a00 20 69 66 20 28 73 74 72 69 63 74 29 0d 0a 20 20   if (strict)..  
13a10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13a20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13a30 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
13a40 0a 0d 0a 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 20 20 20 20                  
13a60 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20     continue;..  
13a70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13a80 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
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 20 20 20 20 63 6f 6e 66 69             confi
13ab0 67 75 72 61 74 69 6f 6e 2e 69 6e 73 74 61 6c 6c  guration.install
13ac0 46 6c 61 67 73 20 3d 20 28 49 6e 73 74 61 6c 6c  Flags = (Install
13ad0 46 6c 61 67 73 29 76 61 6c 75 65 3b 0d 0a 20 20  Flags)value;..  
13ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13af0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
13b00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13b10 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f   else if (MatchO
13b20 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 6c  ption(newArg, "l
13b30 69 6e 71 46 69 6c 65 4e 61 6d 65 22 29 29 0d 0a  inqFileName"))..
13b40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13b50 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
13b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13b70 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61         configura
13b80 74 69 6f 6e 2e 6c 69 6e 71 46 69 6c 65 4e 61 6d  tion.linqFileNam
13b90 65 20 3d 20 74 65 78 74 3b 0d 0a 20 20 20 20 20  e = text;..     
13ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13bb0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
13bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c                el
13bd0 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69  se if (MatchOpti
13be0 6f 6e 28 6e 65 77 41 72 67 2c 20 22 6c 6f 67 46  on(newArg, "logF
13bf0 69 6c 65 4e 61 6d 65 22 29 29 0d 0a 20 20 20 20  ileName"))..    
13c00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13c10 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
13c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13c30 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e     configuration
13c40 2e 6c 6f 67 46 69 6c 65 4e 61 6d 65 20 3d 20 74  .logFileName = t
13c50 65 78 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ext;..          
13c60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
13c70 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
13c80 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66           else if
13c90 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65   (MatchOption(ne
13ca0 77 41 72 67 2c 20 22 6e 6f 43 6f 6d 70 61 63 74  wArg, "noCompact
13cb0 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  "))..           
13cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
13cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13ce0 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
13cf0 3f 20 76 61 6c 75 65 20 3d 20 50 61 72 73 65 42  ? value = ParseB
13d00 6f 6f 6c 65 61 6e 28 74 65 78 74 29 3b 0d 0a 0d  oolean(text);...
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 69 66 20               if 
13d30 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d  (value == null).
13d40 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
13d50 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
13d60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13d80 65 72 72 6f 72 20 3d 20 54 72 61 63 65 4f 70 73  error = TraceOps
13d90 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 0d  .DebugAndTrace(.
13da0 0a 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 20 20 20 20 20 54 72 61 63 65 50 72 69 6f 72 69       TracePriori
13dd0 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75 67  ty.Lowest, debug
13de0 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20  Callback,..     
13df0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
13e10 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74  raceCallback, St
13e20 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
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 20 20 20 20 20 20                  
13e50 20 20 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20 62    "Invalid {0} b
13e60 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 3a 20 7b 31  oolean value: {1
13e70 7d 22 2c 0d 0a 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 20 20 20 20 20 20 46 6f 72 44 69 73 70           ForDisp
13ea0 6c 61 79 28 61 72 67 29 2c 20 46 6f 72 44 69 73  lay(arg), ForDis
13eb0 70 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a 20 20  play(text)),..  
13ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13ee0 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29    traceCategory)
13ef0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
13f00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13f10 20 20 20 20 20 69 66 20 28 73 74 72 69 63 74 29       if (strict)
13f20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
13f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13f40 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
13f50 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  se;....         
13f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13f70 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b         continue;
13f80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
13f90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
13fa0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
13fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
13fc0 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 43  onfiguration.noC
13fd0 6f 6d 70 61 63 74 20 3d 20 28 62 6f 6f 6c 29 76  ompact = (bool)v
13fe0 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alue;..         
13ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
14000 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
14010 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69            else i
14020 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e  f (MatchOption(n
14030 65 77 41 72 67 2c 20 22 6e 6f 43 6f 6e 73 6f 6c  ewArg, "noConsol
14040 65 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  e"))..          
14050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
14060 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
14070 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f               boo
14080 6c 3f 20 76 61 6c 75 65 20 3d 20 50 61 72 73 65  l? value = Parse
14090 42 6f 6f 6c 65 61 6e 28 74 65 78 74 29 3b 0d 0a  Boolean(text);..
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 69 66                if
140c0 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29   (value == null)
140d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
140e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
140f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
14100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14110 20 65 72 72 6f 72 20 3d 20 54 72 61 63 65 4f 70   error = TraceOp
14120 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28  s.DebugAndTrace(
14130 0d 0a 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 20 20 20 20 20 54 72 61 63 65 50 72 69 6f 72        TracePrior
14160 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75  ity.Lowest, debu
14170 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20  gCallback,..    
14180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
141a0 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53  traceCallback, S
141b0 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
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 20 20 20 20 20                  
141e0 20 20 20 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20     "Invalid {0} 
141f0 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 3a 20 7b  boolean value: {
14200 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  1}",..          
14210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14220 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73            ForDis
14230 70 6c 61 79 28 61 72 67 29 2c 20 46 6f 72 44 69  play(arg), ForDi
14240 73 70 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a 20  splay(text)),.. 
14250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14270 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
14280 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
14290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
142a0 20 20 20 20 20 20 69 66 20 28 73 74 72 69 63 74        if (strict
142b0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
142c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
142d0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
142e0 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  lse;....        
142f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14300 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65          continue
14310 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
14320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
14330 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
14340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14350 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f  configuration.no
14360 43 6f 6e 73 6f 6c 65 20 3d 20 28 62 6f 6f 6c 29  Console = (bool)
14370 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20  value;..        
14380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14390 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
143a0 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20             else 
143b0 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28  if (MatchOption(
143c0 6e 65 77 41 72 67 2c 20 22 6e 6f 44 65 73 6b 74  newArg, "noDeskt
143d0 6f 70 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20  op"))..         
143e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
143f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
14400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f                bo
14410 6f 6c 3f 20 76 61 6c 75 65 20 3d 20 50 61 72 73  ol? value = Pars
14420 65 42 6f 6f 6c 65 61 6e 28 74 65 78 74 29 3b 0d  eBoolean(text);.
14430 0a 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 69                 i
14450 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c  f (value == null
14460 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
14470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
14480 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
14490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
144a0 20 20 65 72 72 6f 72 20 3d 20 54 72 61 63 65 4f    error = TraceO
144b0 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65  ps.DebugAndTrace
144c0 28 0d 0a 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 20 20 20 20 20 54 72 61 63 65 50 72 69 6f         TracePrio
144f0 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62  rity.Lowest, deb
14500 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20  ugCallback,..   
14510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14530 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20   traceCallback, 
14540 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
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 20 20 20 20                  
14570 20 20 20 20 22 49 6e 76 61 6c 69 64 20 7b 30 7d      "Invalid {0}
14580 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 3a 20   boolean value: 
14590 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  {1}",..         
145a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
145b0 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69             ForDi
145c0 73 70 6c 61 79 28 61 72 67 29 2c 20 46 6f 72 44  splay(arg), ForD
145d0 69 73 70 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a  isplay(text)),..
145e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
145f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14600 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72      traceCategor
14610 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
14620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14630 20 20 20 20 20 20 20 69 66 20 28 73 74 72 69 63         if (stric
14640 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t)..            
14650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14660 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
14670 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  alse;....       
14680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14690 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75           continu
146a0 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
146b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
146c0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
146d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
146e0 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e   configuration.n
146f0 6f 44 65 73 6b 74 6f 70 20 3d 20 28 62 6f 6f 6c  oDesktop = (bool
14700 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20  )value;..       
14710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14720 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
14730 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65              else
14740 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e   if (MatchOption
14750 28 6e 65 77 41 72 67 2c 20 22 6e 6f 4c 6f 67 22  (newArg, "noLog"
14760 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
14770 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
14780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14790 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 3f             bool?
147a0 20 76 61 6c 75 65 20 3d 20 50 61 72 73 65 42 6f   value = ParseBo
147b0 6f 6c 65 61 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a  olean(text);....
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 69 66 20 28              if (
147e0 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  value == null)..
147f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14800 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
14810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
14830 72 72 6f 72 20 3d 20 54 72 61 63 65 4f 70 73 2e  rror = TraceOps.
14840 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 0d 0a  DebugAndTrace(..
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 20                  
14870 20 20 20 20 54 72 61 63 65 50 72 69 6f 72 69 74      TracePriorit
14880 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75 67 43  y.Lowest, debugC
14890 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20  allback,..      
148a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
148b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
148c0 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72  aceCallback, Str
148d0 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
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 20 20 20 20 20 20 20                  
14900 20 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20 62 6f   "Invalid {0} bo
14910 6f 6c 65 61 6e 20 76 61 6c 75 65 3a 20 7b 31 7d  olean value: {1}
14920 22 2c 0d 0a 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 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c          ForDispl
14950 61 79 28 61 72 67 29 2c 20 46 6f 72 44 69 73 70  ay(arg), ForDisp
14960 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a 20 20 20  lay(text)),..   
14970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14990 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
149a0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
149b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
149c0 20 20 20 20 69 66 20 28 73 74 72 69 63 74 29 0d      if (strict).
149d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
149e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
149f0 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
14a00 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
14a10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14a20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d        continue;.
14a30 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
14a40 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
14a50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
14a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
14a70 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 4c 6f  nfiguration.noLo
14a80 67 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 65 3b  g = (bool)value;
14a90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
14aa0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
14ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14ac0 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61       else if (Ma
14ad0 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67  tchOption(newArg
14ae0 2c 20 22 6e 6f 4e 65 74 46 78 32 30 22 29 29 0d  , "noNetFx20")).
14af0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
14b00 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
14b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14b20 20 20 20 20 20 20 20 20 62 6f 6f 6c 3f 20 76 61          bool? va
14b30 6c 75 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c 65  lue = ParseBoole
14b40 61 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20 20  an(text);....   
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 69 66 20 28 76 61 6c           if (val
14b70 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ue == null)..   
14b80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14b90 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
14ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14bb0 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
14bc0 72 20 3d 20 54 72 61 63 65 4f 70 73 2e 44 65 62  r = TraceOps.Deb
14bd0 75 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 20 20  ugAndTrace(..   
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 20 20 20 20                  
14c00 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c   TracePriority.L
14c10 6f 77 65 73 74 2c 20 64 65 62 75 67 43 61 6c 6c  owest, debugCall
14c20 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20  back,..         
14c30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14c40 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
14c50 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67  Callback, String
14c60 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  .Format(..      
14c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 49                "I
14c90 6e 76 61 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c 65  nvalid {0} boole
14ca0 61 6e 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d  an value: {1}",.
14cb0 0a 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 20                  
14cd0 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28       ForDisplay(
14ce0 61 72 67 29 2c 20 46 6f 72 44 69 73 70 6c 61 79  arg), ForDisplay
14cf0 28 74 65 78 74 29 29 2c 0d 0a 20 20 20 20 20 20  (text)),..      
14d00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14d10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
14d20 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  aceCategory);...
14d30 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
14d40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14d50 20 69 66 20 28 73 74 72 69 63 74 29 0d 0a 20 20   if (strict)..  
14d60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14d80 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
14d90 0a 0d 0a 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 20 20 20 20                  
14db0 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20     continue;..  
14dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14dd0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
14de0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14df0 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69             confi
14e00 67 75 72 61 74 69 6f 6e 2e 6e 6f 4e 65 74 46 78  guration.noNetFx
14e10 32 30 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 65  20 = (bool)value
14e20 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
14e30 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
14e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14e50 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d        else if (M
14e60 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72  atchOption(newAr
14e70 67 2c 20 22 6e 6f 4e 65 74 46 78 34 30 22 29 29  g, "noNetFx40"))
14e80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
14e90 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
14ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14eb0 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 3f 20 76           bool? v
14ec0 61 6c 75 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c  alue = ParseBool
14ed0 65 61 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20  ean(text);....  
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 69 66 20 28 76 61            if (va
14f00 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  lue == null)..  
14f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14f20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
14f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14f40 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
14f50 6f 72 20 3d 20 54 72 61 63 65 4f 70 73 2e 44 65  or = TraceOps.De
14f60 62 75 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 20  bugAndTrace(..  
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 20 20 20                  
14f90 20 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e    TracePriority.
14fa0 4c 6f 77 65 73 74 2c 20 64 65 62 75 67 43 61 6c  Lowest, debugCal
14fb0 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20  lback,..        
14fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14fd0 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
14fe0 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e  eCallback, Strin
14ff0 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
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 20 20 20 20 20 20 20 20 22                 "
15020 49 6e 76 61 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c  Invalid {0} bool
15030 65 61 6e 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c  ean value: {1}",
15040 0d 0a 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 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79        ForDisplay
15070 28 61 72 67 29 2c 20 46 6f 72 44 69 73 70 6c 61  (arg), ForDispla
15080 79 28 74 65 78 74 29 29 2c 0d 0a 20 20 20 20 20  y(text)),..     
15090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
150a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
150b0 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
150c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
150d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
150e0 20 20 69 66 20 28 73 74 72 69 63 74 29 0d 0a 20    if (strict).. 
150f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15110 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
15120 0d 0a 0d 0a 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 20 20 20                  
15140 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20      continue;.. 
15150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15160 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
15170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15180 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66              conf
15190 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 4e 65 74 46  iguration.noNetF
151a0 78 34 30 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75  x40 = (bool)valu
151b0 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
151c0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
151d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
151e0 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28         else if (
151f0 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41  MatchOption(newA
15200 72 67 2c 20 22 6e 6f 4e 65 74 46 78 34 35 22 29  rg, "noNetFx45")
15210 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
15220 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
15230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15240 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 3f 20            bool? 
15250 76 61 6c 75 65 20 3d 20 50 61 72 73 65 42 6f 6f  value = ParseBoo
15260 6c 65 61 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a 20  lean(text);.... 
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 69 66 20 28 76             if (v
15290 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  alue == null).. 
152a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
152b0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
152c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
152d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72                er
152e0 72 6f 72 20 3d 20 54 72 61 63 65 4f 70 73 2e 44  ror = TraceOps.D
152f0 65 62 75 67 41 6e 64 54 72 61 63 65 28 0d 0a 20  ebugAndTrace(.. 
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 20 20                  
15320 20 20 20 54 72 61 63 65 50 72 69 6f 72 69 74 79     TracePriority
15330 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75 67 43 61  .Lowest, debugCa
15340 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20  llback,..       
15350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15360 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
15370 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69  ceCallback, Stri
15380 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ng.Format(..    
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 20 20 20 20 20 20 20 20                  
153b0 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20 62 6f 6f  "Invalid {0} boo
153c0 6c 65 61 6e 20 76 61 6c 75 65 3a 20 7b 31 7d 22  lean value: {1}"
153d0 2c 0d 0a 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 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61         ForDispla
15400 79 28 61 72 67 29 2c 20 46 6f 72 44 69 73 70 6c  y(arg), ForDispl
15410 61 79 28 74 65 78 74 29 29 2c 0d 0a 20 20 20 20  ay(text)),..    
15420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15440 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
15450 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
15460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15470 20 20 20 69 66 20 28 73 74 72 69 63 74 29 0d 0a     if (strict)..
15480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
154a0 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
154b0 3b 0d 0a 0d 0a 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 20 20                  
154d0 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a       continue;..
154e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
154f0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
15500 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
15510 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
15520 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 4e 65 74  figuration.noNet
15530 46 78 34 35 20 3d 20 28 62 6f 6f 6c 29 76 61 6c  Fx45 = (bool)val
15540 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
15550 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
15560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15570 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20          else if 
15580 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77  (MatchOption(new
15590 41 72 67 2c 20 22 6e 6f 52 75 6e 74 69 6d 65 56  Arg, "noRuntimeV
155a0 65 72 73 69 6f 6e 22 29 29 0d 0a 20 20 20 20 20  ersion"))..     
155b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
155c0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
155d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
155e0 20 20 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d 20    bool? value = 
155f0 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65 78  ParseBoolean(tex
15600 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  t);....         
15610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15620 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d 3d 20     if (value == 
15630 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
15640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15650 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
15660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15670 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 54 72        error = Tr
15680 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54  aceOps.DebugAndT
15690 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20  race(..         
156a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
156b0 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
156c0 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c  Priority.Lowest,
156d0 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d   debugCallback,.
156e0 0a 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 20 20 20 20 20 20 20                  
15700 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61       traceCallba
15710 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ck, String.Forma
15720 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
15730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15740 20 20 20 20 20 20 20 20 22 49 6e 76 61 6c 69 64          "Invalid
15750 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 6c   {0} boolean val
15760 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20  ue: {1}",..     
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 20 20 20 20 20 20 46                 F
15790 6f 72 44 69 73 70 6c 61 79 28 61 72 67 29 2c 20  orDisplay(arg), 
157a0 46 6f 72 44 69 73 70 6c 61 79 28 74 65 78 74 29  ForDisplay(text)
157b0 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
157c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
157d0 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74          traceCat
157e0 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  egory);....     
157f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15800 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 73             if (s
15810 74 72 69 63 74 29 0d 0a 20 20 20 20 20 20 20 20  trict)..        
15820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15830 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
15840 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20  rn false;....   
15850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15860 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
15870 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20  tinue;..        
15880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15890 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
158a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
158b0 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69       configurati
158c0 6f 6e 2e 6e 6f 52 75 6e 74 69 6d 65 56 65 72 73  on.noRuntimeVers
158d0 69 6f 6e 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75  ion = (bool)valu
158e0 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
158f0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
15900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15910 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28         else if (
15920 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41  MatchOption(newA
15930 72 67 2c 20 22 6e 6f 54 72 61 63 65 22 29 29 0d  rg, "noTrace")).
15940 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
15950 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
15960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15970 20 20 20 20 20 20 20 20 62 6f 6f 6c 3f 20 76 61          bool? va
15980 6c 75 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c 65  lue = ParseBoole
15990 61 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20 20  an(text);....   
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 69 66 20 28 76 61 6c           if (val
159c0 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ue == null)..   
159d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
159e0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
159f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15a00 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
15a10 72 20 3d 20 54 72 61 63 65 4f 70 73 2e 44 65 62  r = TraceOps.Deb
15a20 75 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 20 20  ugAndTrace(..   
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 20 20 20 20                  
15a50 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c   TracePriority.L
15a60 6f 77 65 73 74 2c 20 64 65 62 75 67 43 61 6c 6c  owest, debugCall
15a70 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20  back,..         
15a80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15a90 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
15aa0 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67  Callback, String
15ab0 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  .Format(..      
15ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 49                "I
15ae0 6e 76 61 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c 65  nvalid {0} boole
15af0 61 6e 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d  an value: {1}",.
15b00 0a 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 20                  
15b20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28       ForDisplay(
15b30 61 72 67 29 2c 20 46 6f 72 44 69 73 70 6c 61 79  arg), ForDisplay
15b40 28 74 65 78 74 29 29 2c 0d 0a 20 20 20 20 20 20  (text)),..      
15b50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
15b70 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  aceCategory);...
15b80 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
15b90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15ba0 20 69 66 20 28 73 74 72 69 63 74 29 0d 0a 20 20   if (strict)..  
15bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15bd0 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
15be0 0a 0d 0a 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 20 20 20 20                  
15c00 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20     continue;..  
15c10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15c20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
15c30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15c40 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69             confi
15c50 67 75 72 61 74 69 6f 6e 2e 6e 6f 54 72 61 63 65  guration.noTrace
15c60 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d   = (bool)value;.
15c70 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
15c80 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
15c90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15ca0 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74      else if (Mat
15cb0 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c  chOption(newArg,
15cc0 20 22 6e 6f 56 73 32 30 30 35 22 29 29 0d 0a 20   "noVs2005")).. 
15cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15ce0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
15cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15d00 20 20 20 20 20 20 62 6f 6f 6c 3f 20 76 61 6c 75        bool? valu
15d10 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e  e = ParseBoolean
15d20 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20  (text);....     
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 69 66 20 28 76 61 6c 75 65         if (value
15d50 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
15d60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15d70 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
15d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15d90 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20            error 
15da0 3d 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67  = TraceOps.Debug
15db0 41 6e 64 54 72 61 63 65 28 0d 0a 20 20 20 20 20  AndTrace(..     
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 20 20 20 20 20 54                 T
15de0 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77  racePriority.Low
15df0 65 73 74 2c 20 64 65 62 75 67 43 61 6c 6c 62 61  est, debugCallba
15e00 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ck,..           
15e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15e20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
15e30 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46  llback, String.F
15e40 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
15e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15e60 20 20 20 20 20 20 20 20 20 20 20 20 22 49 6e 76              "Inv
15e70 61 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e  alid {0} boolean
15e80 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20   value: {1}",.. 
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 20 20 20                  
15eb0 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 61 72     ForDisplay(ar
15ec0 67 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 74  g), ForDisplay(t
15ed0 65 78 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20  ext)),..        
15ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15ef0 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
15f00 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
15f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15f20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
15f30 66 20 28 73 74 72 69 63 74 29 0d 0a 20 20 20 20  f (strict)..    
15f40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15f50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15f60 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d  return false;...
15f70 0a 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 20 20 20 20 20 20                  
15f90 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20   continue;..    
15fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15fb0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
15fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15fd0 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75           configu
15fe0 72 61 74 69 6f 6e 2e 6e 6f 56 73 32 30 30 35 20  ration.noVs2005 
15ff0 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a  = (bool)value;..
16000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16010 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
16020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16030 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63     else if (Matc
16040 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20  hOption(newArg, 
16050 22 6e 6f 56 73 32 30 30 38 22 29 29 0d 0a 20 20  "noVs2008"))..  
16060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16070 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
16080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16090 20 20 20 20 20 62 6f 6f 6c 3f 20 76 61 6c 75 65       bool? value
160a0 20 3d 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28   = ParseBoolean(
160b0 74 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  text);....      
160c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
160d0 20 20 20 20 20 20 69 66 20 28 76 61 6c 75 65 20        if (value 
160e0 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
160f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16100 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
16110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16120 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
16130 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41   TraceOps.DebugA
16140 6e 64 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20  ndTrace(..      
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 20 20 20 20 20 54 72                Tr
16170 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65  acePriority.Lowe
16180 73 74 2c 20 64 65 62 75 67 43 61 6c 6c 62 61 63  st, debugCallbac
16190 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  k,..            
161a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
161b0 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c          traceCal
161c0 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f  lback, String.Fo
161d0 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
161e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
161f0 20 20 20 20 20 20 20 20 20 20 20 22 49 6e 76 61             "Inva
16200 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20  lid {0} boolean 
16210 76 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20  value: {1}",..  
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 20 20 20 20                  
16240 20 20 46 6f 72 44 69 73 70 6c 61 79 28 61 72 67    ForDisplay(arg
16250 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 74 65  ), ForDisplay(te
16260 78 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  xt)),..         
16270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16280 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
16290 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
162a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
162b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
162c0 20 28 73 74 72 69 63 74 29 0d 0a 20 20 20 20 20   (strict)..     
162d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
162e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
162f0 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a  eturn false;....
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 20 20 20 20 20 20 20                  
16320 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20  continue;..     
16330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16340 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
16350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16360 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72          configur
16370 61 74 69 6f 6e 2e 6e 6f 56 73 32 30 30 38 20 3d  ation.noVs2008 =
16380 20 28 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20   (bool)value;.. 
16390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
163a0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
163b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
163c0 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68    else if (Match
163d0 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22  Option(newArg, "
163e0 6e 6f 56 73 32 30 31 30 22 29 29 0d 0a 20 20 20  noVs2010"))..   
163f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16400 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
16410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16420 20 20 20 20 62 6f 6f 6c 3f 20 76 61 6c 75 65 20      bool? value 
16430 3d 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74  = ParseBoolean(t
16440 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ext);....       
16450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16460 20 20 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d       if (value =
16470 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
16480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16490 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
164a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
164b0 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
164c0 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e  TraceOps.DebugAn
164d0 64 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20  dTrace(..       
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 20 20 20 20 20 54 72 61               Tra
16500 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73  cePriority.Lowes
16510 74 2c 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b  t, debugCallback
16520 2c 0d 0a 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 20 20 20 20 20                  
16540 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c         traceCall
16550 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72  back, String.For
16560 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
16570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16580 20 20 20 20 20 20 20 20 20 20 22 49 6e 76 61 6c            "Inval
16590 69 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76  id {0} boolean v
165a0 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20  alue: {1}",..   
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 20 20 20 20 20                  
165d0 20 46 6f 72 44 69 73 70 6c 61 79 28 61 72 67 29   ForDisplay(arg)
165e0 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 74 65 78  , ForDisplay(tex
165f0 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  t)),..          
16600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16610 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
16620 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20  ategory);....   
16630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16640 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
16650 28 73 74 72 69 63 74 29 0d 0a 20 20 20 20 20 20  (strict)..      
16660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
16680 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20  turn false;.... 
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 20 20 20 20 20 20 20 63                 c
166b0 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20  ontinue;..      
166c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
166d0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
166e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
166f0 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61         configura
16700 74 69 6f 6e 2e 6e 6f 56 73 32 30 31 30 20 3d 20  tion.noVs2010 = 
16710 28 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20 20  (bool)value;..  
16720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16730 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
16740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16750 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f   else if (MatchO
16760 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 6e  ption(newArg, "n
16770 6f 56 73 32 30 31 32 22 29 29 0d 0a 20 20 20 20  oVs2012"))..    
16780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16790 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
167a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
167b0 20 20 20 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d     bool? value =
167c0 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65   ParseBoolean(te
167d0 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  xt);....        
167e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
167f0 20 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d 3d      if (value ==
16800 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
16810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16820 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
16830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16840 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 54         error = T
16850 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64  raceOps.DebugAnd
16860 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20  Trace(..        
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 20 20 20 20 20 54 72 61 63              Trac
16890 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74  ePriority.Lowest
168a0 2c 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c  , debugCallback,
168b0 0d 0a 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 20 20 20 20 20 20                  
168d0 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62        traceCallb
168e0 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d  ack, String.Form
168f0 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
16900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16910 20 20 20 20 20 20 20 20 20 22 49 6e 76 61 6c 69           "Invali
16920 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61  d {0} boolean va
16930 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20  lue: {1}",..    
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 20 20 20 20 20 20                  
16960 46 6f 72 44 69 73 70 6c 61 79 28 61 72 67 29 2c  ForDisplay(arg),
16970 20 46 6f 72 44 69 73 70 6c 61 79 28 74 65 78 74   ForDisplay(text
16980 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  )),..           
16990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
169a0 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
169b0 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
169c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
169d0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
169e0 73 74 72 69 63 74 29 0d 0a 20 20 20 20 20 20 20  strict)..       
169f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16a00 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
16a10 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20  urn false;....  
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 20 20 20 20 20 20 20 63 6f                co
16a40 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20  ntinue;..       
16a50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16a60 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
16a70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16a80 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74        configurat
16a90 69 6f 6e 2e 6e 6f 56 73 32 30 31 32 20 3d 20 28  ion.noVs2012 = (
16aa0 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20 20 20  bool)value;..   
16ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16ac0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
16ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16ae0 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70  else if (MatchOp
16af0 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 70 65  tion(newArg, "pe
16b00 72 55 73 65 72 22 29 29 0d 0a 20 20 20 20 20 20  rUser"))..      
16b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16b20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
16b30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16b40 20 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d 20 50   bool? value = P
16b50 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65 78 74  arseBoolean(text
16b60 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
16b70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16b80 20 20 69 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e    if (value == n
16b90 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
16ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16bb0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
16bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16bd0 20 20 20 20 20 65 72 72 6f 72 20 3d 20 54 72 61       error = Tra
16be0 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72  ceOps.DebugAndTr
16bf0 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ace(..          
16c00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16c10 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 50            TraceP
16c20 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20  riority.Lowest, 
16c30 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a  debugCallback,..
16c40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16c50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16c60 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63      traceCallbac
16c70 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  k, String.Format
16c80 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
16c90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16ca0 20 20 20 20 20 20 20 22 49 6e 76 61 6c 69 64 20         "Invalid 
16cb0 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75  {0} boolean valu
16cc0 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20  e: {1}",..      
16cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f                Fo
16cf0 72 44 69 73 70 6c 61 79 28 61 72 67 29 2c 20 46  rDisplay(arg), F
16d00 6f 72 44 69 73 70 6c 61 79 28 74 65 78 74 29 29  orDisplay(text))
16d10 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
16d20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16d30 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65         traceCate
16d40 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
16d50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16d60 20 20 20 20 20 20 20 20 20 20 69 66 20 28 73 74            if (st
16d70 72 69 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20  rict)..         
16d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16d90 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
16da0 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20  n false;....    
16db0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16dc0 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74              cont
16dd0 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  inue;..         
16de0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16df0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
16e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16e10 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f      configuratio
16e20 6e 2e 70 65 72 55 73 65 72 20 3d 20 28 62 6f 6f  n.perUser = (boo
16e30 6c 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20  l)value;..      
16e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16e50 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
16e60 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73               els
16e70 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f  e if (MatchOptio
16e80 6e 28 6e 65 77 41 72 67 2c 20 22 72 65 67 69 73  n(newArg, "regis
16e90 74 72 79 56 65 72 73 69 6f 6e 22 29 29 0d 0a 20  tryVersion")).. 
16ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16eb0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
16ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16ed0 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74        configurat
16ee0 69 6f 6e 2e 72 65 67 69 73 74 72 79 56 65 72 73  ion.registryVers
16ef0 69 6f 6e 20 3d 20 74 65 78 74 3b 0d 0a 20 20 20  ion = text;..   
16f00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16f10 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
16f20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16f30 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70  else if (MatchOp
16f40 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 73 74  tion(newArg, "st
16f50 72 69 63 74 22 29 29 0d 0a 20 20 20 20 20 20 20  rict"))..       
16f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16f70 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
16f80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16f90 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d 20 50 61  bool? value = Pa
16fa0 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65 78 74 29  rseBoolean(text)
16fb0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
16fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16fd0 20 69 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75   if (value == nu
16fe0 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
16ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17000 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
17010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17020 20 20 20 20 65 72 72 6f 72 20 3d 20 54 72 61 63      error = Trac
17030 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61  eOps.DebugAndTra
17040 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ce(..           
17050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17060 20 20 20 20 20 20 20 20 20 54 72 61 63 65 50 72           TracePr
17070 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64  iority.Lowest, d
17080 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20  ebugCallback,.. 
17090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
170a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
170b0 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b     traceCallback
170c0 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  , String.Format(
170d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
170e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
170f0 20 20 20 20 20 20 22 49 6e 76 61 6c 69 64 20 7b        "Invalid {
17100 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65  0} boolean value
17110 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20  : {1}",..       
17120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17130 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72               For
17140 44 69 73 70 6c 61 79 28 61 72 67 29 2c 20 46 6f  Display(arg), Fo
17150 72 44 69 73 70 6c 61 79 28 74 65 78 74 29 29 2c  rDisplay(text)),
17160 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
17170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17180 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67        traceCateg
17190 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
171a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
171b0 20 20 20 20 20 20 20 20 20 69 66 20 28 73 74 72           if (str
171c0 69 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ict)..          
171d0 20 20 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 72 65 74 75 72 6e            return
171f0 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20   false;....     
17200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17210 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69             conti
17220 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  nue;..          
17230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17240 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
17250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17260 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
17270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17280 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 41 6c 6c 6f     // NOTE: Allo
17290 77 20 74 68 65 20 63 6f 6d 6d 61 6e 64 20 6c 69  w the command li
172a0 6e 65 20 61 72 67 75 6d 65 6e 74 73 20 74 6f 0d  ne arguments to.
172b0 0a 20 20 20 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 2f 2f 20               // 
172d0 20 20 20 20 20 20 6f 76 65 72 72 69 64 65 20 74        override t
172e0 68 65 20 22 73 74 72 69 63 74 6e 65 73 73 22 20  he "strictness" 
172f0 73 65 74 74 69 6e 67 0d 0a 20 20 20 20 20 20 20  setting..       
17300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17310 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 70 72       //       pr
17320 6f 76 69 64 65 64 20 62 79 20 6f 75 72 20 63 61  ovided by our ca
17330 6c 6c 65 72 2e 0d 0a 20 20 20 20 20 20 20 20 20  ller...         
17340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17350 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
17360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17370 20 20 20 73 74 72 69 63 74 20 3d 20 28 62 6f 6f     strict = (boo
17380 6c 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20  l)value;..      
17390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
173a0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
173b0 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73               els
173c0 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f  e if (MatchOptio
173d0 6e 28 6e 65 77 41 72 67 2c 20 22 74 68 72 6f 77  n(newArg, "throw
173e0 4f 6e 4d 69 73 73 69 6e 67 22 29 29 0d 0a 20 20  OnMissing"))..  
173f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17400 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
17410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17420 20 20 20 20 20 62 6f 6f 6c 3f 20 76 61 6c 75 65       bool? value
17430 20 3d 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28   = ParseBoolean(
17440 74 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  text);....      
17450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17460 20 20 20 20 20 20 69 66 20 28 76 61 6c 75 65 20        if (value 
17470 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
17480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17490 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
174a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
174b0 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
174c0 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41   TraceOps.DebugA
174d0 6e 64 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20  ndTrace(..      
174e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
174f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
17500 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65  acePriority.Lowe
17510 73 74 2c 20 64 65 62 75 67 43 61 6c 6c 62 61 63  st, debugCallbac
17520 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  k,..            
17530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17540 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c          traceCal
17550 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f  lback, String.Fo
17560 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
17570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17580 20 20 20 20 20 20 20 20 20 20 20 22 49 6e 76 61             "Inva
17590 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20  lid {0} boolean 
175a0 76 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20  value: {1}",..  
175b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
175c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
175d0 20 20 46 6f 72 44 69 73 70 6c 61 79 28 61 72 67    ForDisplay(arg
175e0 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 74 65  ), ForDisplay(te
175f0 78 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  xt)),..         
17600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17610 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
17620 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
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 20 69 66                if
17650 20 28 73 74 72 69 63 74 29 0d 0a 20 20 20 20 20   (strict)..     
17660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
17680 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a  eturn false;....
17690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
176a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
176b0 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20  continue;..     
176c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
176d0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
176e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
176f0 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72          configur
17700 61 74 69 6f 6e 2e 74 68 72 6f 77 4f 6e 4d 69 73  ation.throwOnMis
17710 73 69 6e 67 20 3d 20 28 62 6f 6f 6c 29 76 61 6c  sing = (bool)val
17720 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
17730 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
17740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17750 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20          else if 
17760 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77  (MatchOption(new
17770 41 72 67 2c 20 22 74 72 61 63 65 46 6f 72 6d 61  Arg, "traceForma
17780 74 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  t"))..          
17790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
177a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
177b0 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
177c0 66 69 67 75 72 61 74 69 6f 6e 2e 74 72 61 63 65  figuration.trace
177d0 46 6f 72 6d 61 74 20 3d 20 74 65 78 74 3b 0d 0a  Format = text;..
177e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
177f0 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
17800 65 4f 70 73 2e 54 72 61 63 65 46 6f 72 6d 61 74  eOps.TraceFormat
17810 20 3d 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e   = configuration
17820 2e 74 72 61 63 65 46 6f 72 6d 61 74 3b 0d 0a 20  .traceFormat;.. 
17830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17840 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
17850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17860 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68    else if (Match
17870 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22  Option(newArg, "
17880 74 72 61 63 65 50 72 69 6f 72 69 74 79 22 29 29  tracePriority"))
17890 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
178a0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
178b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
178c0 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20           object 
178d0 76 61 6c 75 65 20 3d 20 50 61 72 73 65 45 6e 75  value = ParseEnu
178e0 6d 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  m(..            
178f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17900 20 20 20 20 74 79 70 65 6f 66 28 54 72 61 63 65      typeof(Trace
17910 50 72 69 6f 72 69 74 79 29 2c 20 74 65 78 74 2c  Priority), text,
17920 20 74 72 75 65 29 3b 0d 0a 0d 0a 20 20 20 20 20   true);....     
17930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17940 20 20 20 20 20 20 20 69 66 20 28 76 61 6c 75 65         if (value
17950 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
17960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17970 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
17980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17990 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20            error 
179a0 3d 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67  = TraceOps.Debug
179b0 41 6e 64 54 72 61 63 65 28 0d 0a 20 20 20 20 20  AndTrace(..     
179c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
179d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
179e0 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77  racePriority.Low
179f0 65 73 74 2c 20 64 65 62 75 67 43 61 6c 6c 62 61  est, debugCallba
17a00 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ck,..           
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 74 72 61 63 65 43 61           traceCa
17a30 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46  llback, String.F
17a40 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
17a50 20 20 20 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 22 49 6e 76              "Inv
17a70 61 6c 69 64 20 7b 30 7d 20 76 61 6c 75 65 3a 20  alid {0} value: 
17a80 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  {1}",..         
17a90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17aa0 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69             ForDi
17ab0 73 70 6c 61 79 28 61 72 67 29 2c 20 46 6f 72 44  splay(arg), ForD
17ac0 69 73 70 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a  isplay(text)),..
17ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17af0 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72      traceCategor
17b00 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
17b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17b20 20 20 20 20 20 20 20 69 66 20 28 73 74 72 69 63         if (stric
17b30 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t)..            
17b40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17b50 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
17b60 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  alse;....       
17b70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17b80 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75           continu
17b90 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
17ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17bb0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
17bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17bd0 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 74   configuration.t
17be0 72 61 63 65 50 72 69 6f 72 69 74 79 20 3d 20 28  racePriority = (
17bf0 54 72 61 63 65 50 72 69 6f 72 69 74 79 29 76 61  TracePriority)va
17c00 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lue;..          
17c10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17c20 20 20 54 72 61 63 65 4f 70 73 2e 54 72 61 63 65    TraceOps.Trace
17c30 50 72 69 6f 72 69 74 79 20 3d 20 63 6f 6e 66 69  Priority = confi
17c40 67 75 72 61 74 69 6f 6e 2e 74 72 61 63 65 50 72  guration.tracePr
17c50 69 6f 72 69 74 79 3b 0d 0a 20 20 20 20 20 20 20  iority;..       
17c60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17c70 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
17c80 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65              else
17c90 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e   if (MatchOption
17ca0 28 6e 65 77 41 72 67 2c 20 22 76 65 72 62 6f 73  (newArg, "verbos
17cb0 65 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  e"))..          
17cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
17cd0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
17ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f               boo
17cf0 6c 3f 20 76 61 6c 75 65 20 3d 20 50 61 72 73 65  l? value = Parse
17d00 42 6f 6f 6c 65 61 6e 28 74 65 78 74 29 3b 0d 0a  Boolean(text);..
17d10 0d 0a 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 69 66                if
17d30 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29   (value == null)
17d40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
17d50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
17d60 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
17d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17d80 20 65 72 72 6f 72 20 3d 20 54 72 61 63 65 4f 70   error = TraceOp
17d90 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28  s.DebugAndTrace(
17da0 0d 0a 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 20 20 20 20 20 20 54 72 61 63 65 50 72 69 6f 72        TracePrior
17dd0 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75  ity.Lowest, debu
17de0 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20  gCallback,..    
17df0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17e10 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53  traceCallback, S
17e20 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
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 20 20 20 20 20 20                  
17e50 20 20 20 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20     "Invalid {0} 
17e60 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 3a 20 7b  boolean value: {
17e70 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  1}",..          
17e80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17e90 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73            ForDis
17ea0 70 6c 61 79 28 61 72 67 29 2c 20 46 6f 72 44 69  play(arg), ForDi
17eb0 73 70 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a 20  splay(text)),.. 
17ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17ee0 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
17ef0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
17f00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17f10 20 20 20 20 20 20 69 66 20 28 73 74 72 69 63 74        if (strict
17f20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
17f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17f40 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
17f50 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  lse;....        
17f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17f70 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65          continue
17f80 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
17f90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
17fa0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
17fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17fc0 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 76 65  configuration.ve
17fd0 72 62 6f 73 65 20 3d 20 28 62 6f 6f 6c 29 76 61  rbose = (bool)va
17fe0 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lue;..          
17ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
18000 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
18010 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66           else if
18020 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65   (MatchOption(ne
18030 77 41 72 67 2c 20 22 77 68 61 74 49 66 22 29 29  wArg, "whatIf"))
18040 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
18050 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
18060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18070 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 3f 20 76           bool? v
18080 61 6c 75 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c  alue = ParseBool
18090 65 61 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20  ean(text);....  
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 69 66 20 28 76 61            if (va
180c0 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  lue == null)..  
180d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
180e0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
180f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18100 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
18110 6f 72 20 3d 20 54 72 61 63 65 4f 70 73 2e 44 65  or = TraceOps.De
18120 62 75 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 20  bugAndTrace(..  
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 20 20 20 20 20 20                  
18150 20 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e    TracePriority.
18160 4c 6f 77 65 73 74 2c 20 64 65 62 75 67 43 61 6c  Lowest, debugCal
18170 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20  lback,..        
18180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18190 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
181a0 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e  eCallback, Strin
181b0 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
181c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
181d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
181e0 49 6e 76 61 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c  Invalid {0} bool
181f0 65 61 6e 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c  ean value: {1}",
18200 0d 0a 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 20 20 20                  
18220 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79        ForDisplay
18230 28 61 72 67 29 2c 20 46 6f 72 44 69 73 70 6c 61  (arg), ForDispla
18240 79 28 74 65 78 74 29 29 2c 0d 0a 20 20 20 20 20  y(text)),..     
18250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
18270 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
18280 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
18290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
182a0 20 20 69 66 20 28 73 74 72 69 63 74 29 0d 0a 20    if (strict).. 
182b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
182c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
182d0 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
182e0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
182f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18300 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20      continue;.. 
18310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18320 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
18330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18340 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66              conf
18350 69 67 75 72 61 74 69 6f 6e 2e 77 68 61 74 49 66  iguration.whatIf
18360 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d   = (bool)value;.
18370 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
18380 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
18390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
183a0 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74      else if (Mat
183b0 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c  chOption(newArg,
183c0 20 22 77 6f 77 36 34 22 29 29 0d 0a 20 20 20 20   "wow64"))..    
183d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
183e0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
183f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18400 20 20 20 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d     bool? value =
18410 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65   ParseBoolean(te
18420 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  xt);....        
18430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18440 20 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d 3d      if (value ==
18450 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
18460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18470 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
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 65 72 72 6f 72 20 3d 20 54         error = T
184a0 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64  raceOps.DebugAnd
184b0 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20  Trace(..        
184c0 20 20 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 54 72 61 63              Trac
184e0 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74  ePriority.Lowest
184f0 2c 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c  , debugCallback,
18500 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
18510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18520 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62        traceCallb
18530 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d  ack, String.Form
18540 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
18550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18560 20 20 20 20 20 20 20 20 20 22 49 6e 76 61 6c 69           "Invali
18570 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61  d {0} boolean va
18580 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20  lue: {1}",..    
18590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
185a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
185b0 46 6f 72 44 69 73 70 6c 61 79 28 61 72 67 29 2c  ForDisplay(arg),
185c0 20 46 6f 72 44 69 73 70 6c 61 79 28 74 65 78 74   ForDisplay(text
185d0 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  )),..           
185e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
185f0 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
18600 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
18610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18620 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
18630 73 74 72 69 63 74 29 0d 0a 20 20 20 20 20 20 20  strict)..       
18640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18650 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
18660 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20  urn false;....  
18670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
18690 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20  ntinue;..       
186a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
186b0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
186c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
186d0 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74        configurat
186e0 69 6f 6e 2e 77 6f 77 36 34 20 3d 20 28 62 6f 6f  ion.wow64 = (boo
186f0 6c 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20  l)value;..      
18700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18710 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
18720 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73               els
18730 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..             
18740 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
18750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18760 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20            error 
18770 3d 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67  = TraceOps.Debug
18780 41 6e 64 54 72 61 63 65 28 0d 0a 20 20 20 20 20  AndTrace(..     
18790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
187a0 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
187b0 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c  Priority.Lowest,
187c0 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d   debugCallback,.
187d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
187e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
187f0 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20   traceCallback, 
18800 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
18810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18830 22 55 6e 73 75 70 70 6f 72 74 65 64 20 63 6f 6d  "Unsupported com
18840 6d 61 6e 64 20 6c 69 6e 65 20 6f 70 74 69 6f 6e  mand line option
18850 3a 20 7b 30 7d 22 2c 0d 0a 20 20 20 20 20 20 20  : {0}",..       
18860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18870 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70           ForDisp
18880 6c 61 79 28 61 72 67 29 29 2c 20 74 72 61 63 65  lay(arg)), trace
18890 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
188a0 20 20 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 69 66 20 28 73 74            if (st
188c0 72 69 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20  rict)..         
188d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
188e0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
188f0 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lse;..          
18900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
18910 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
18920 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
18930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
18940 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20  turn true;..    
18950 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
18960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
18970 61 74 63 68 20 28 45 78 63 65 70 74 69 6f 6e 20  atch (Exception 
18980 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e)..            
18990 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
189a0 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
189b0 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63  Ops.DebugAndTrac
189c0 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e  e(TracePriority.
189d0 48 69 67 68 65 73 74 2c 0d 0a 20 20 20 20 20 20  Highest,..      
189e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
189f0 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c    debugCallback,
18a00 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20   traceCallback, 
18a10 65 2c 20 74 72 61 63 65 43 61 74 65 67 6f 72 79  e, traceCategory
18a20 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
18a30 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20            error 
18a40 3d 20 22 46 61 69 6c 65 64 20 74 6f 20 6d 6f 64  = "Failed to mod
18a50 69 66 79 20 63 6f 6e 66 69 67 75 72 61 74 69 6f  ify configuratio
18a60 6e 2e 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  n.";..          
18a70 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
18a80 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
18a90 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  n false;..      
18aa0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
18ab0 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
18ac0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18ad0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18ae0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18af0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
18b00 20 20 20 20 20 20 20 20 20 20 5b 4d 65 74 68 6f            [Metho
18b10 64 49 6d 70 6c 28 4d 65 74 68 6f 64 49 6d 70 6c  dImpl(MethodImpl
18b20 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e 69  Options.NoInlini
18b30 6e 67 29 5d 0d 0a 20 20 20 20 20 20 20 20 20 20  ng)]..          
18b40 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20    public static 
18b50 62 6f 6f 6c 20 50 72 6f 63 65 73 73 28 0d 0a 20  bool Process(.. 
18b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
18b70 74 72 69 6e 67 5b 5d 20 61 72 67 73 2c 0d 0a 20  tring[] args,.. 
18b80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43                 C
18b90 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 63 6f 6e  onfiguration con
18ba0 66 69 67 75 72 61 74 69 6f 6e 2c 0d 0a 20 20 20  figuration,..   
18bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f               boo
18bc0 6c 20 73 74 72 69 63 74 2c 0d 0a 20 20 20 20 20  l strict,..     
18bd0 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20 73             ref s
18be0 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20  tring error..   
18bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a               )..
18c00 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
18c10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
18c20 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ry..            
18c30 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
18c40 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 63             if (c
18c50 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 3d 3d 20  onfiguration == 
18c60 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
18c70 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
18c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18c90 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 49        error = "I
18ca0 6e 76 61 6c 69 64 20 63 6f 6e 66 69 67 75 72 61  nvalid configura
18cb0 74 69 6f 6e 2e 22 3b 0d 0a 20 20 20 20 20 20 20  tion.";..       
18cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18cd0 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
18ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18cf0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
18d00 20 20 20 20 20 20 20 20 20 20 20 20 20 41 73 73               Ass
18d10 65 6d 62 6c 79 20 61 73 73 65 6d 62 6c 79 20 3d  embly assembly =
18d20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 61   configuration.a
18d30 73 73 65 6d 62 6c 79 3b 0d 0a 0d 0a 20 20 20 20  ssembly;....    
18d40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18d50 69 66 20 28 61 73 73 65 6d 62 6c 79 20 3d 3d 20  if (assembly == 
18d60 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
18d70 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
18d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18d90 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 49        error = "I
18da0 6e 76 61 6c 69 64 20 61 73 73 65 6d 62 6c 79 2e  nvalid assembly.
18db0 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ";..            
18dc0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
18dd0 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20  rn false;..     
18de0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
18df0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
18e00 20 20 20 20 20 20 20 20 69 66 20 28 21 63 6f 6e          if (!con
18e10 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 54 72 61  figuration.noTra
18e20 63 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ce)..           
18e30 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
18e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18e50 20 20 20 20 69 66 20 28 21 63 6f 6e 66 69 67 75      if (!configu
18e60 72 61 74 69 6f 6e 2e 6e 6f 4c 6f 67 20 26 26 0d  ration.noLog &&.
18e70 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
18e80 20 20 20 20 20 20 20 20 20 20 20 20 20 53 74 72               Str
18e90 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74  ing.IsNullOrEmpt
18ea0 79 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e  y(configuration.
18eb0 6c 6f 67 46 69 6c 65 4e 61 6d 65 29 29 0d 0a 20  logFileName)).. 
18ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18ed0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
18ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18ef0 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
18f00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18f10 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 55        // NOTE: U
18f20 73 65 20 74 68 65 20 64 65 66 61 75 6c 74 20 6c  se the default l
18f30 6f 67 20 66 69 6c 65 20 6e 61 6d 65 2e 0d 0a 20  og file name... 
18f40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18f50 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
18f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18f70 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69             confi
18f80 67 75 72 61 74 69 6f 6e 2e 6c 6f 67 46 69 6c 65  guration.logFile
18f90 4e 61 6d 65 20 3d 20 47 65 74 4c 6f 67 46 69 6c  Name = GetLogFil
18fa0 65 4e 61 6d 65 28 0d 0a 20 20 20 20 20 20 20 20  eName(..        
18fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18fc0 20 20 20 20 20 20 20 20 22 74 72 61 63 65 22 29          "trace")
18fd0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
18fe0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
18ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19000 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
19010 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19020 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19030 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
19040 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
19050 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21             if (!
19060 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f  configuration.no
19070 43 6f 6e 73 6f 6c 65 29 0d 0a 20 20 20 20 20 20  Console)..      
19080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19090 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
190a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
190b0 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
190c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
190d0 20 2f 2f 20 4e 4f 54 45 3a 20 49 6e 20 76 65 72   // NOTE: In ver
190e0 62 6f 73 65 20 6d 6f 64 65 2c 20 64 65 62 75 67  bose mode, debug
190f0 20 6f 75 74 70 75 74 20 28 74 68 61 74 20 6d 65   output (that me
19100 65 74 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ets..           
19110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19120 20 2f 2f 20 20 20 20 20 20 20 74 68 65 20 63 6f   //       the co
19130 6e 66 69 67 75 72 65 64 20 70 72 69 6f 72 69 74  nfigured priorit
19140 79 20 63 72 69 74 65 72 69 61 29 20 77 69 6c 6c  y criteria) will
19150 20 62 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20   be..           
19160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19170 20 2f 2f 20 20 20 20 20 20 20 64 69 73 70 6c 61   //       displa
19180 79 65 64 20 74 6f 20 74 68 65 20 63 6f 6e 73 6f  yed to the conso
19190 6c 65 3b 20 6f 74 68 65 72 77 69 73 65 2c 20 74  le; otherwise, t
191a0 72 61 63 65 0d 0a 20 20 20 20 20 20 20 20 20 20  race..          
191b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
191c0 20 20 2f 2f 20 20 20 20 20 20 20 6f 75 74 70 75    //       outpu
191d0 74 20 28 74 68 61 74 20 6d 65 65 74 73 20 74 68  t (that meets th
191e0 65 20 63 6f 6e 66 69 67 75 72 65 64 20 70 72 69  e configured pri
191f0 6f 72 69 74 79 0d 0a 20 20 20 20 20 20 20 20 20  ority..         
19200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19210 20 20 20 2f 2f 20 20 20 20 20 20 20 63 72 69 74     //       crit
19220 65 72 69 61 29 20 77 69 6c 6c 20 62 65 20 64 69  eria) will be di
19230 73 70 6c 61 79 65 64 20 74 6f 20 74 68 65 20 63  splayed to the c
19240 6f 6e 73 6f 6c 65 2e 0d 0a 20 20 20 20 20 20 20  onsole...       
19250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19260 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
19270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19280 20 20 20 20 20 69 66 20 28 63 6f 6e 66 69 67 75       if (configu
19290 72 61 74 69 6f 6e 2e 64 65 62 75 67 29 0d 0a 20  ration.debug).. 
192a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
192b0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
192c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
192d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
192e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
192f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19300 20 20 2f 2f 20 4e 4f 54 45 3a 20 41 64 64 20 74    // NOTE: Add t
19310 68 65 20 63 6f 6e 73 6f 6c 65 20 74 72 61 63 65  he console trace
19320 20 6c 69 73 74 65 6e 65 72 20 74 6f 20 74 68 65   listener to the
19330 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
19340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19350 20 20 2f 2f 20 20 20 20 20 20 20 6c 69 73 74 20    //       list 
19360 6f 66 20 74 72 61 63 65 20 6c 69 73 74 65 6e 65  of trace listene
19370 72 73 20 6d 61 69 6e 74 61 69 6e 65 64 20 62 79  rs maintained by
19380 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
19390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
193a0 20 20 2f 2f 20 20 20 20 20 20 20 74 68 65 20 54    //       the T
193b0 72 61 63 65 4f 70 73 20 63 6c 61 73 73 20 28 69  raceOps class (i
193c0 2e 65 2e 20 6f 6e 6c 79 20 6d 65 73 73 61 67 65  .e. only message
193d0 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  s..             
193e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
193f0 20 20 20 2f 2f 20 20 20 20 20 20 20 74 68 61 74     //       that
19400 20 6d 65 65 74 20 74 68 65 20 64 65 62 75 67 20   meet the debug 
19410 70 72 69 6f 72 69 74 79 20 77 69 6c 6c 20 62 65  priority will be
19420 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
19430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19440 20 20 2f 2f 20 20 20 20 20 20 20 73 65 65 6e 20    //       seen 
19450 6f 6e 20 74 68 65 20 63 6f 6e 73 6f 6c 65 29 2e  on the console).
19460 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
19470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19480 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
19490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
194a0 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 53        TraceOps.S
194b0 65 74 75 70 44 65 62 75 67 4c 69 73 74 65 6e 65  etupDebugListene
194c0 72 73 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  rs();..         
194d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
194e0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
194f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19500 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20    else..        
19510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19520 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
19530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19540 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
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 20 20 20 20 2f 2f 20 4e 4f             // NO
19570 54 45 3a 20 41 64 64 20 74 68 65 20 63 6f 6e 73  TE: Add the cons
19580 6f 6c 65 20 74 72 61 63 65 20 6c 69 73 74 65 6e  ole trace listen
19590 65 72 20 74 6f 20 74 68 65 0d 0a 20 20 20 20 20  er to the..     
195a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
195b0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
195c0 20 20 20 20 6c 69 73 74 20 6f 66 20 62 75 69 6c      list of buil
195d0 74 2d 69 6e 20 74 72 61 63 65 20 6c 69 73 74 65  t-in trace liste
195e0 6e 65 72 73 20 28 69 2e 65 2e 0d 0a 20 20 20 20  ners (i.e...    
195f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19600 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
19610 20 20 20 20 20 6f 6e 6c 79 20 6d 65 73 73 61 67       only messag
19620 65 73 20 74 68 61 74 20 6d 65 65 74 20 74 68 65  es that meet the
19630 20 74 72 61 63 65 0d 0a 20 20 20 20 20 20 20 20   trace..        
19640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19650 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
19660 20 70 72 69 6f 72 69 74 79 20 77 69 6c 6c 20 62   priority will b
19670 65 20 73 65 65 6e 20 6f 6e 20 74 68 65 20 63 6f  e seen on the co
19680 6e 73 6f 6c 65 29 2e 0d 0a 20 20 20 20 20 20 20  nsole)...       
19690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
196a0 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
196b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
196c0 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61               Tra
196d0 63 65 2e 4c 69 73 74 65 6e 65 72 73 2e 41 64 64  ce.Listeners.Add
196e0 28 6e 65 77 20 43 6f 6e 73 6f 6c 65 54 72 61 63  (new ConsoleTrac
196f0 65 4c 69 73 74 65 6e 65 72 28 29 29 3b 0d 0a 20  eListener());.. 
19700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19710 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
19720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19730 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
19740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19750 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
19760 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19770 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19780 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
19790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
197a0 20 20 20 20 20 20 69 66 20 28 21 63 6f 6e 66 69        if (!confi
197b0 67 75 72 61 74 69 6f 6e 2e 6e 6f 4c 6f 67 20 26  guration.noLog &
197c0 26 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  &..             
197d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 21                 !
197e0 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45  String.IsNullOrE
197f0 6d 70 74 79 28 63 6f 6e 66 69 67 75 72 61 74 69  mpty(configurati
19800 6f 6e 2e 6c 6f 67 46 69 6c 65 4e 61 6d 65 29 29  on.logFileName))
19810 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
19820 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
19830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19840 20 20 20 20 20 20 20 20 20 54 72 61 63 65 2e 4c           Trace.L
19850 69 73 74 65 6e 65 72 73 2e 41 64 64 28 6e 65 77  isteners.Add(new
19860 20 54 65 78 74 57 72 69 74 65 72 54 72 61 63 65   TextWriterTrace
19870 4c 69 73 74 65 6e 65 72 28 0d 0a 20 20 20 20 20  Listener(..     
19880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19890 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69             confi
198a0 67 75 72 61 74 69 6f 6e 2e 6c 6f 67 46 69 6c 65  guration.logFile
198b0 4e 61 6d 65 29 29 3b 0d 0a 0d 0a 20 20 20 20 20  Name));....     
198c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
198d0 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
198e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
198f0 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20         // NOTE: 
19900 54 65 63 68 6e 69 63 61 6c 6c 79 2c 20 77 65 20  Technically, we 
19910 63 72 65 61 74 65 64 20 74 68 65 20 6c 6f 67 20  created the log 
19920 66 69 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 20  file...         
19930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19940 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
19950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19960 20 20 20 66 69 6c 65 73 43 72 65 61 74 65 64 2b     filesCreated+
19970 2b 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  +;..            
19980 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
19990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
199a0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
199b0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
199c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
199d0 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 44 75 6d      // NOTE: Dum
199e0 70 20 74 68 65 20 63 6f 6e 66 69 67 75 72 61 74  p the configurat
199f0 69 6f 6e 20 6e 6f 77 20 69 6e 20 63 61 73 65 20  ion now in case 
19a00 77 65 20 6e 65 65 64 20 74 6f 0d 0a 20 20 20 20  we need to..    
19a10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19a20 2f 2f 20 20 20 20 20 20 20 74 72 6f 75 62 6c 65  //       trouble
19a30 73 68 6f 6f 74 20 61 6e 79 20 69 73 73 75 65 73  shoot any issues
19a40 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
19a50 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
19a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
19a70 66 20 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  f (configuration
19a80 2e 64 65 62 75 67 50 72 69 6f 72 69 74 79 20 3c  .debugPriority <
19a90 3d 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e  = TracePriority.
19aa0 4d 65 64 69 75 6d 29 0d 0a 20 20 20 20 20 20 20  Medium)..       
19ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19ac0 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 44   configuration.D
19ad0 75 6d 70 28 64 65 62 75 67 43 61 6c 6c 62 61 63  ump(debugCallbac
19ae0 6b 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  k);....         
19af0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 63             if (c
19b00 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 74 72 61  onfiguration.tra
19b10 63 65 50 72 69 6f 72 69 74 79 20 3c 3d 20 54 72  cePriority <= Tr
19b20 61 63 65 50 72 69 6f 72 69 74 79 2e 4d 65 64 69  acePriority.Medi
19b30 75 6d 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  um)..           
19b40 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
19b50 66 69 67 75 72 61 74 69 6f 6e 2e 44 75 6d 70 28  figuration.Dump(
19b60 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 29 3b 0d  traceCallback);.
19b70 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
19b80 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
19b90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
19ba0 2f 20 4e 4f 54 45 3a 20 53 68 6f 77 20 77 68 65  / NOTE: Show whe
19bb0 72 65 20 77 65 20 61 72 65 20 72 75 6e 6e 69 6e  re we are runnin
19bc0 67 20 66 72 6f 6d 20 61 6e 64 20 68 6f 77 20 77  g from and how w
19bd0 65 20 77 65 72 65 0d 0a 20 20 20 20 20 20 20 20  e were..        
19be0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
19bf0 20 20 20 20 20 69 6e 76 6f 6b 65 64 2e 0d 0a 20       invoked... 
19c00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19c10 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
19c20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
19c30 67 20 6c 6f 63 61 74 69 6f 6e 20 3d 20 61 73 73  g location = ass
19c40 65 6d 62 6c 79 2e 4c 6f 63 61 74 69 6f 6e 3b 0d  embly.Location;.
19c50 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
19c60 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e         TraceOps.
19c70 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 54 72  DebugAndTrace(Tr
19c80 61 63 65 50 72 69 6f 72 69 74 79 2e 4d 65 64 69  acePriority.Medi
19c90 75 6d 4c 6f 77 2c 0d 0a 20 20 20 20 20 20 20 20  umLow,..        
19ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19cb0 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74  debugCallback, t
19cc0 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74  raceCallback, St
19cd0 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
19ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19cf0 20 20 20 20 20 20 22 52 75 6e 6e 69 6e 67 20 65        "Running e
19d00 78 65 63 75 74 61 62 6c 65 20 69 73 3a 20 7b 30  xecutable is: {0
19d10 7d 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 6c  }", ForDisplay(l
19d20 6f 63 61 74 69 6f 6e 29 29 2c 0d 0a 20 20 20 20  ocation)),..    
19d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19d40 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72      traceCategor
19d50 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
19d60 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
19d70 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63  Ops.DebugAndTrac
19d80 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e  e(TracePriority.
19d90 4d 65 64 69 75 6d 4c 6f 77 2c 0d 0a 20 20 20 20  MediumLow,..    
19da0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19db0 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63      debugCallbac
19dc0 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b  k, traceCallback
19dd0 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  , String.Format(
19de0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
19df0 20 20 20 20 20 20 20 20 20 20 22 4f 72 69 67 69            "Origi
19e00 6e 61 6c 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65  nal command line
19e10 20 69 73 3a 20 7b 30 7d 22 2c 0d 0a 20 20 20 20   is: {0}",..    
19e20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19e30 20 20 20 20 45 6e 76 69 72 6f 6e 6d 65 6e 74 2e      Environment.
19e40 43 6f 6d 6d 61 6e 64 4c 69 6e 65 29 2c 20 74 72  CommandLine), tr
19e50 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  aceCategory);...
19e60 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
19e70 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65       TraceOps.De
19e80 62 75 67 41 6e 64 54 72 61 63 65 28 54 72 61 63  bugAndTrace(Trac
19e90 65 50 72 69 6f 72 69 74 79 2e 4d 65 64 69 75 6d  ePriority.Medium
19ea0 4c 6f 77 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  Low,..          
19eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65                de
19ec0 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61  bugCallback, tra
19ed0 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69  ceCallback, Stri
19ee0 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ng.Format(..    
19ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19f00 20 20 20 20 22 52 75 6e 6e 69 6e 67 20 70 72 6f      "Running pro
19f10 63 65 73 73 20 69 73 20 7b 30 7d 2e 22 2c 20 49  cess is {0}.", I
19f20 73 36 34 42 69 74 50 72 6f 63 65 73 73 28 29 20  s64BitProcess() 
19f30 3f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ?..             
19f40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
19f50 36 34 2d 62 69 74 22 20 3a 20 22 33 32 2d 62 69  64-bit" : "32-bi
19f60 74 22 29 2c 20 74 72 61 63 65 43 61 74 65 67 6f  t"), traceCatego
19f70 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
19f80 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
19f90 21 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 77  !configuration.w
19fa0 68 61 74 49 66 29 0d 0a 20 20 20 20 20 20 20 20  hatIf)..        
19fb0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
19fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19fd0 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
19fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19ff0 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 49 66 20 74     // NOTE: If t
1a000 68 65 20 64 65 62 75 67 67 65 72 20 69 73 20 61  he debugger is a
1a010 74 74 61 63 68 65 64 20 61 6e 64 20 57 68 61 74  ttached and What
1a020 2d 49 66 20 6d 6f 64 65 0d 0a 20 20 20 20 20 20  -If mode..      
1a030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a040 20 20 2f 2f 20 20 20 20 20 20 20 69 73 20 5b 6e    //       is [n
1a050 6f 77 5d 20 64 69 73 61 62 6c 65 64 2c 20 69 73  ow] disabled, is
1a060 73 75 65 20 61 20 77 61 72 6e 69 6e 67 2e 0d 0a  sue a warning...
1a070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a080 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
1a090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a0a0 20 20 20 20 69 66 20 28 44 65 62 75 67 67 65 72      if (Debugger
1a0b0 2e 49 73 41 74 74 61 63 68 65 64 29 0d 0a 20 20  .IsAttached)..  
1a0c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a0d0 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f            TraceO
1a0e0 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65  ps.DebugAndTrace
1a0f0 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4d  (TracePriority.M
1a100 65 64 69 75 6d 48 69 67 68 2c 0d 0a 20 20 20 20  ediumHigh,..    
1a110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a120 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62 75              debu
1a130 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65  gCallback, trace
1a140 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20  Callback,..     
1a150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a160 20 20 20 20 20 20 20 20 20 20 20 22 46 6f 72 63             "Forc
1a170 65 64 20 74 6f 20 64 69 73 61 62 6c 65 20 5c 22  ed to disable \"
1a180 77 68 61 74 2d 69 66 5c 22 20 6d 6f 64 65 20 77  what-if\" mode w
1a190 69 74 68 20 22 20 2b 0d 0a 20 20 20 20 20 20 20  ith " +..       
1a1a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a1b0 20 20 20 20 20 20 20 20 20 22 64 65 62 75 67 67           "debugg
1a1c0 65 72 20 61 74 74 61 63 68 65 64 2e 22 2c 20 74  er attached.", t
1a1d0 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
1a1e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a1f0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
1a200 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d             else.
1a210 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1a220 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
1a230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a240 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e  TraceOps.DebugAn
1a250 64 54 72 61 63 65 28 54 72 61 63 65 50 72 69 6f  dTrace(TracePrio
1a260 72 69 74 79 2e 4d 65 64 69 75 6d 48 69 67 68 2c  rity.MediumHigh,
1a270 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1a280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65                de
1a290 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61  bugCallback, tra
1a2a0 63 65 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20  ceCallback,..   
1a2b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a2c0 20 20 20 20 20 20 20 20 20 22 4e 6f 20 61 63 74           "No act
1a2d0 75 61 6c 20 63 68 61 6e 67 65 73 20 77 69 6c 6c  ual changes will
1a2e0 20 62 65 20 6d 61 64 65 20 74 6f 20 74 68 69 73   be made to this
1a2f0 20 22 20 2b 0d 0a 20 20 20 20 20 20 20 20 20 20   " +..          
1a300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a310 20 20 22 73 79 73 74 65 6d 20 62 65 63 61 75 73    "system becaus
1a320 65 20 5c 22 77 68 61 74 2d 69 66 5c 22 20 6d 6f  e \"what-if\" mo
1a330 64 65 20 69 73 20 65 6e 61 62 6c 65 64 2e 22 2c  de is enabled.",
1a340 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1a350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
1a360 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 20  aceCategory);.. 
1a370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a380 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
1a390 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
1a3a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a3b0 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 49 66 20      // NOTE: If 
1a3c0 74 68 65 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65  the command line
1a3d0 20 68 61 73 20 6e 6f 74 20 62 65 65 6e 20 6d 61   has not been ma
1a3e0 6e 75 61 6c 6c 79 0d 0a 20 20 20 20 20 20 20 20  nually..        
1a3f0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
1a400 20 20 20 20 20 63 6f 6e 66 69 72 6d 65 64 20 28       confirmed (
1a410 69 2e 65 2e 20 76 69 61 20 74 68 65 20 65 78 70  i.e. via the exp
1a420 6c 69 63 69 74 20 63 6f 6d 6d 61 6e 64 20 6c 69  licit command li
1a430 6e 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ne..            
1a440 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
1a450 20 6f 70 74 69 6f 6e 29 2c 20 74 68 65 6e 20 73   option), then s
1a460 74 6f 70 20 70 72 6f 63 65 73 73 69 6e 67 20 6e  top processing n
1a470 6f 77 2e 20 20 57 65 20 65 6e 66 6f 72 63 65 0d  ow.  We enforce.
1a480 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1a490 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 74 68       //       th
1a4a0 69 73 20 72 75 6c 65 20 73 6f 20 74 68 61 74 20  is rule so that 
1a4b0 73 69 6d 70 6c 79 20 64 6f 75 62 6c 65 2d 63 6c  simply double-cl
1a4c0 69 63 6b 69 6e 67 20 74 68 65 0d 0a 20 20 20 20  icking the..    
1a4d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a4e0 2f 2f 20 20 20 20 20 20 20 65 78 65 63 75 74 61  //       executa
1a4f0 62 6c 65 20 77 69 6c 6c 20 6e 6f 74 20 72 65 73  ble will not res
1a500 75 6c 74 20 69 6e 20 61 6e 79 20 63 68 61 6e 67  ult in any chang
1a510 65 73 20 62 65 69 6e 67 0d 0a 20 20 20 20 20 20  es being..      
1a520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
1a530 20 20 20 20 20 20 20 6d 61 64 65 20 74 6f 20 74         made to t
1a540 68 65 20 73 79 73 74 65 6d 2e 0d 0a 20 20 20 20  he system...    
1a550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a560 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
1a570 20 20 20 20 20 20 20 20 69 66 20 28 21 63 6f 6e          if (!con
1a580 66 69 67 75 72 61 74 69 6f 6e 2e 63 6f 6e 66 69  figuration.confi
1a590 72 6d 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  rm)..           
1a5a0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
1a5b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a5c0 20 20 20 20 65 72 72 6f 72 20 3d 20 22 43 61 6e      error = "Can
1a5d0 6e 6f 74 20 63 6f 6e 74 69 6e 75 65 2c 20 74 68  not continue, th
1a5e0 65 20 5c 22 63 6f 6e 66 69 72 6d 5c 22 20 6f 70  e \"confirm\" op
1a5f0 74 69 6f 6e 20 69 73 20 22 20 2b 0d 0a 20 20 20  tion is " +..   
1a600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a610 20 20 20 20 20 20 20 20 20 22 6e 6f 74 20 65 6e           "not en
1a620 61 62 6c 65 64 2e 22 3b 0d 0a 0d 0a 20 20 20 20  abled.";....    
1a630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a640 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
1a650 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
1a660 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
1a670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a680 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20  return true;..  
1a690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
1a6a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1a6b0 20 63 61 74 63 68 20 28 45 78 63 65 70 74 69 6f   catch (Exceptio
1a6c0 6e 20 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20  n e)..          
1a6d0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
1a6e0 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61               Tra
1a6f0 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72  ceOps.DebugAndTr
1a700 61 63 65 28 54 72 61 63 65 50 72 69 6f 72 69 74  ace(TracePriorit
1a710 79 2e 48 69 67 68 65 73 74 2c 0d 0a 20 20 20 20  y.Highest,..    
1a720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a730 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63      debugCallbac
1a740 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b  k, traceCallback
1a750 2c 20 65 2c 20 74 72 61 63 65 43 61 74 65 67 6f  , e, traceCatego
1a760 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
1a770 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
1a780 72 20 3d 20 22 46 61 69 6c 65 64 20 74 6f 20 70  r = "Failed to p
1a790 72 6f 63 65 73 73 20 63 6f 6e 66 69 67 75 72 61  rocess configura
1a7a0 74 69 6f 6e 2e 22 3b 0d 0a 20 20 20 20 20 20 20  tion.";..       
1a7b0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
1a7c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
1a7d0 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20  turn false;..   
1a7e0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
1a7f0 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
1a800 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a810 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a820 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a830 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
1a840 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 4d 65  .            [Me
1a850 74 68 6f 64 49 6d 70 6c 28 4d 65 74 68 6f 64 49  thodImpl(MethodI
1a860 6d 70 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e 6c  mplOptions.NoInl
1a870 69 6e 69 6e 67 29 5d 0d 0a 20 20 20 20 20 20 20  ining)]..       
1a880 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74       public stat
1a890 69 63 20 62 6f 6f 6c 20 43 68 65 63 6b 52 75 6e  ic bool CheckRun
1a8a0 74 69 6d 65 56 65 72 73 69 6f 6e 28 0d 0a 20 20  timeVersion(..  
1a8b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43 6f                Co
1a8c0 6e 66 69 67 75 72 61 74 69 6f 6e 20 63 6f 6e 66  nfiguration conf
1a8d0 69 67 75 72 61 74 69 6f 6e 2c 0d 0a 20 20 20 20  iguration,..    
1a8e0 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
1a8f0 20 73 74 72 69 63 74 2c 0d 0a 20 20 20 20 20 20   strict,..      
1a900 20 20 20 20 20 20 20 20 20 20 72 65 66 20 73 74            ref st
1a910 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20 20  ring error..    
1a920 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
1a930 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
1a940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
1a950 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  y..             
1a960 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
1a970 20 20 20 20 20 20 20 20 20 20 69 66 20 28 63 6f            if (co
1a980 6e 66 69 67 75 72 61 74 69 6f 6e 20 3d 3d 20 6e  nfiguration == n
1a990 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
1a9a0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
1a9b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a9c0 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 49 6e       error = "In
1a9d0 76 61 6c 69 64 20 63 6f 6e 66 69 67 75 72 61 74  valid configurat
1a9e0 69 6f 6e 2e 22 3b 0d 0a 20 20 20 20 20 20 20 20  ion.";..        
1a9f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1aa00 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20  return false;.. 
1aa10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1aa20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
1aa30 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
1aa40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1aa50 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 57 68 61      // NOTE: Wha
1aa60 74 20 76 65 72 73 69 6f 6e 20 6f 66 20 74 68 65  t version of the
1aa70 20 72 75 6e 74 69 6d 65 20 77 61 73 20 74 68 65   runtime was the
1aa80 20 63 6f 72 65 20 28 70 72 69 6d 61 72 79 29 0d   core (primary).
1aa90 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1aaa0 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 61 73       //       as
1aab0 73 65 6d 62 6c 79 20 63 6f 6d 70 69 6c 65 64 20  sembly compiled 
1aac0 61 67 61 69 6e 73 74 20 28 65 2e 67 2e 20 22 76  against (e.g. "v
1aad0 32 2e 30 2e 35 30 37 32 37 22 20 6f 72 0d 0a 20  2.0.50727" or.. 
1aae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1aaf0 20 20 20 2f 2f 20 20 20 20 20 20 20 22 76 34 2e     //       "v4.
1ab00 30 2e 33 30 33 31 39 22 29 2e 0d 0a 20 20 20 20  0.30319")...    
1ab10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ab20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
1ab30 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 63          string c
1ab40 6f 72 65 49 6d 61 67 65 52 75 6e 74 69 6d 65 56  oreImageRuntimeV
1ab50 65 72 73 69 6f 6e 20 3d 20 47 65 74 49 6d 61 67  ersion = GetImag
1ab60 65 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 28  eRuntimeVersion(
1ab70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1ab80 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67            config
1ab90 75 72 61 74 69 6f 6e 2e 63 6f 72 65 46 69 6c 65  uration.coreFile
1aba0 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  Name);....      
1abb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
1abc0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1abd0 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 57        // NOTE: W
1abe0 65 20 61 6c 6c 6f 77 20 74 68 65 20 61 63 74 75  e allow the actu
1abf0 61 6c 20 69 6d 61 67 65 20 72 75 6e 74 69 6d 65  al image runtime
1ac00 20 63 68 65 63 6b 69 6e 67 20 74 6f 20 62 65 0d   checking to be.
1ac10 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1ac20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 62 79       //       by
1ac30 70 61 73 73 65 64 20 76 69 61 20 74 68 65 20 22  passed via the "
1ac40 2d 6e 6f 52 75 6e 74 69 6d 65 56 65 72 73 69 6f  -noRuntimeVersio
1ac50 6e 22 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 0d  n" command line.
1ac60 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1ac70 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 6f 70       //       op
1ac80 74 69 6f 6e 2e 20 20 54 68 65 20 63 6f 6d 6d 61  tion.  The comma
1ac90 6e 64 20 6c 69 6e 65 20 6f 70 74 69 6f 6e 20 69  nd line option i
1aca0 73 20 69 6e 74 65 6e 64 65 64 20 66 6f 72 0d 0a  s intended for..
1acb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1acc0 20 20 20 20 2f 2f 20 20 20 20 20 20 20 65 78 70      //       exp
1acd0 65 72 74 20 75 73 65 20 6f 6e 6c 79 2e 0d 0a 20  ert use only... 
1ace0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1acf0 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
1ad00 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 63             if (c
1ad10 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 52  onfiguration.noR
1ad20 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 29 0d 0a  untimeVersion)..
1ad30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ad40 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
1ad50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
1ad60 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64  raceOps.DebugAnd
1ad70 54 72 61 63 65 28 54 72 61 63 65 50 72 69 6f 72  Trace(TracePrior
1ad80 69 74 79 2e 4d 65 64 69 75 6d 2c 0d 0a 20 20 20  ity.Medium,..   
1ad90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ada0 20 20 20 20 20 20 20 20 20 64 65 62 75 67 43 61           debugCa
1adb0 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c  llback, traceCal
1adc0 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f  lback, String.Fo
1add0 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
1ade0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1adf0 20 20 20 22 41 73 73 65 6d 62 6c 79 20 69 73 20     "Assembly is 
1ae00 63 6f 6d 70 69 6c 65 64 20 66 6f 72 20 74 68 65  compiled for the
1ae10 20 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b 20   .NET Framework 
1ae20 7b 30 7d 3b 20 22 20 2b 0d 0a 20 20 20 20 20 20  {0}; " +..      
1ae30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ae40 20 20 20 20 20 20 22 68 6f 77 65 76 65 72 2c 20        "however, 
1ae50 69 6e 73 74 61 6c 6c 61 74 69 6f 6e 20 72 65 73  installation res
1ae60 74 72 69 63 74 69 6f 6e 73 20 62 61 73 65 64 20  trictions based 
1ae70 6f 6e 20 74 68 69 73 20 22 20 2b 0d 0a 20 20 20  on this " +..   
1ae80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ae90 20 20 20 20 20 20 20 20 20 22 66 61 63 74 20 68           "fact h
1aea0 61 76 65 20 62 65 65 6e 20 64 69 73 61 62 6c 65  ave been disable
1aeb0 64 20 76 69 61 20 74 68 65 20 63 6f 6d 6d 61 6e  d via the comman
1aec0 64 20 6c 69 6e 65 2e 22 2c 0d 0a 20 20 20 20 20  d line.",..     
1aed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1aee0 20 20 20 20 20 20 20 63 6f 72 65 49 6d 61 67 65         coreImage
1aef0 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 29 2c  RuntimeVersion),
1af00 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
1af10 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1af20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
1af30 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20  rn true;..      
1af40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
1af50 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
1af60 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
1af70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1af80 2f 20 54 4f 44 4f 3a 20 52 65 73 74 72 69 63 74  / TODO: Restrict
1af90 20 74 68 65 20 63 6f 6e 66 69 67 75 72 61 74 69   the configurati
1afa0 6f 6e 20 62 61 73 65 64 20 6f 6e 20 77 68 69 63  on based on whic
1afb0 68 20 69 6d 61 67 65 0d 0a 20 20 20 20 20 20 20  h image..       
1afc0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
1afd0 20 20 20 20 20 20 72 75 6e 74 69 6d 65 20 76 65        runtime ve
1afe0 72 73 69 6f 6e 73 20 28 77 68 69 63 68 20 6d 6f  rsions (which mo
1aff0 72 65 2d 6f 72 2d 6c 65 73 73 20 63 6f 72 72 65  re-or-less corre
1b000 73 70 6f 6e 64 0d 0a 20 20 20 20 20 20 20 20 20  spond..         
1b010 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
1b020 20 20 20 20 74 6f 20 2e 4e 45 54 20 46 72 61 6d      to .NET Fram
1b030 65 77 6f 72 6b 20 76 65 72 73 69 6f 6e 73 29 20  ework versions) 
1b040 61 72 65 20 73 75 70 70 6f 72 74 65 64 20 62 79  are supported by
1b050 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 20 20   the..          
1b060 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
1b070 20 20 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 56     versions of V
1b080 69 73 75 61 6c 20 53 74 75 64 69 6f 20 74 68 61  isual Studio tha
1b090 74 20 61 72 65 20 69 6e 73 74 61 6c 6c 65 64 2e  t are installed.
1b0a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1b0b0 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
1b0c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
1b0d0 20 28 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f   (String.IsNullO
1b0e0 72 45 6d 70 74 79 28 63 6f 72 65 49 6d 61 67 65  rEmpty(coreImage
1b0f0 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 29 29  RuntimeVersion))
1b100 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1b110 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
1b120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b130 20 65 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69   error = "invali
1b140 64 20 63 6f 72 65 20 66 69 6c 65 20 69 6d 61 67  d core file imag
1b150 65 20 72 75 6e 74 69 6d 65 20 76 65 72 73 69 6f  e runtime versio
1b160 6e 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n";..           
1b170 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
1b180 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20  urn false;..    
1b190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b1a0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
1b1b0 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28         else if (
1b1c0 53 74 72 69 6e 67 2e 45 71 75 61 6c 73 28 0d 0a  String.Equals(..
1b1d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b1e0 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 72 65              core
1b1f0 49 6d 61 67 65 52 75 6e 74 69 6d 65 56 65 72 73  ImageRuntimeVers
1b200 69 6f 6e 2c 20 43 4c 52 76 32 49 6d 61 67 65 52  ion, CLRv2ImageR
1b210 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 2c 0d 0a  untimeVersion,..
1b220 20 20 20 20 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 53 74 72 69              Stri
1b240 6e 67 43 6f 6d 70 61 72 69 73 6f 6e 2e 4f 72 64  ngComparison.Ord
1b250 69 6e 61 6c 29 29 0d 0a 20 20 20 20 20 20 20 20  inal))..        
1b260 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
1b270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b280 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
1b290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b2a0 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 46 6f 72 20     // NOTE: For 
1b2b0 74 68 65 20 43 4c 52 20 76 32 2e 30 20 72 75 6e  the CLR v2.0 run
1b2c0 74 69 6d 65 2c 20 6d 61 6b 65 20 73 75 72 65 20  time, make sure 
1b2d0 77 65 20 64 69 73 61 62 6c 65 0d 0a 20 20 20 20  we disable..    
1b2e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b2f0 20 20 20 20 2f 2f 20 20 20 20 20 20 20 61 6e 79      //       any
1b300 20 61 74 74 65 6d 70 74 20 74 6f 20 75 73 65 20   attempt to use 
1b310 69 74 20 66 6f 72 20 74 68 69 6e 67 73 20 74 68  it for things th
1b320 61 74 20 72 65 71 75 69 72 65 0d 0a 20 20 20 20  at require..    
1b330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b340 20 20 20 20 2f 2f 20 20 20 20 20 20 20 61 6e 20      //       an 
1b350 61 73 73 65 6d 62 6c 79 20 63 6f 6d 70 69 6c 65  assembly compile
1b360 64 20 66 6f 72 20 74 68 65 20 43 4c 52 20 76 34  d for the CLR v4
1b370 2e 30 2e 20 20 49 74 20 69 73 0d 0a 20 20 20 20  .0.  It is..    
1b380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b390 20 20 20 20 2f 2f 20 20 20 20 20 20 20 75 6e 63      //       unc
1b3a0 65 72 74 61 69 6e 20 69 66 20 74 68 69 73 20 69  ertain if this i
1b3b0 73 20 61 63 74 75 61 6c 6c 79 20 61 20 70 72 6f  s actually a pro
1b3c0 62 6c 65 6d 20 69 6e 0d 0a 20 20 20 20 20 20 20  blem in..       
1b3d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b3e0 20 2f 2f 20 20 20 20 20 20 20 70 72 61 63 74 69   //       practi
1b3f0 63 65 20 61 73 20 74 68 65 20 43 4c 52 20 76 34  ce as the CLR v4
1b400 2e 30 20 63 61 6e 20 6c 6f 61 64 20 61 6e 64 20  .0 can load and 
1b410 75 73 65 20 61 6e 0d 0a 20 20 20 20 20 20 20 20  use an..        
1b420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b430 2f 2f 20 20 20 20 20 20 20 61 73 73 65 6d 62 6c  //       assembl
1b440 79 20 63 6f 6d 70 69 6c 65 64 20 77 69 74 68 20  y compiled with 
1b450 74 68 65 20 43 4c 52 20 76 32 2e 30 3b 20 68 6f  the CLR v2.0; ho
1b460 77 65 76 65 72 2c 0d 0a 20 20 20 20 20 20 20 20  wever,..        
1b470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b480 2f 2f 20 20 20 20 20 20 20 73 69 6e 63 65 20 74  //       since t
1b490 68 69 73 20 70 72 6f 6a 65 63 74 20 6f 66 66 65  his project offe
1b4a0 72 73 20 62 6f 74 68 20 63 6f 6e 66 69 67 75 72  rs both configur
1b4b0 61 74 69 6f 6e 73 2c 0d 0a 20 20 20 20 20 20 20  ations,..       
1b4c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b4d0 20 2f 2f 20 20 20 20 20 20 20 77 65 20 63 75 72   //       we cur
1b4e0 72 65 6e 74 6c 79 20 64 69 73 61 6c 6c 6f 77 20  rently disallow 
1b4f0 74 68 69 73 20 6d 69 73 6d 61 74 63 68 2e 0d 0a  this mismatch...
1b500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b510 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
1b520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b530 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f      configuratio
1b540 6e 2e 6e 6f 4e 65 74 46 78 34 30 20 3d 20 74 72  n.noNetFx40 = tr
1b550 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
1b560 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
1b570 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 4e 65 74  figuration.noNet
1b580 46 78 34 35 20 3d 20 74 72 75 65 3b 0d 0a 20 20  Fx45 = true;..  
1b590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b5a0 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74        configurat
1b5b0 69 6f 6e 2e 6e 6f 56 73 32 30 31 30 20 3d 20 74  ion.noVs2010 = t
1b5c0 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  rue;..          
1b5d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
1b5e0 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 56 73  nfiguration.noVs
1b5f0 32 30 31 32 20 3d 20 74 72 75 65 3b 0d 0a 0d 0a  2012 = true;....
1b600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b610 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73          TraceOps
1b620 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 54  .DebugAndTrace(T
1b630 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4d 65 64  racePriority.Med
1b640 69 75 6d 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ium,..          
1b650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b660 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c    debugCallback,
1b670 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20   traceCallback, 
1b680 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
1b690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b6a0 20 20 20 20 20 20 20 20 20 20 20 20 22 41 73 73              "Ass
1b6b0 65 6d 62 6c 79 20 69 73 20 63 6f 6d 70 69 6c 65  embly is compile
1b6c0 64 20 66 6f 72 20 74 68 65 20 2e 4e 45 54 20 46  d for the .NET F
1b6d0 72 61 6d 65 77 6f 72 6b 20 7b 30 7d 2c 20 22 20  ramework {0}, " 
1b6e0 2b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  +..             
1b6f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
1b700 73 75 70 70 6f 72 74 20 66 6f 72 20 2e 4e 45 54  support for .NET
1b710 20 46 72 61 6d 65 77 6f 72 6b 20 7b 31 7d 20 69   Framework {1} i
1b720 73 20 6e 6f 77 20 64 69 73 61 62 6c 65 64 2e 22  s now disabled."
1b730 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
1b740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43                 C
1b750 4c 52 76 32 49 6d 61 67 65 52 75 6e 74 69 6d 65  LRv2ImageRuntime
1b760 56 65 72 73 69 6f 6e 2c 20 43 4c 52 76 34 49 6d  Version, CLRv4Im
1b770 61 67 65 52 75 6e 74 69 6d 65 56 65 72 73 69 6f  ageRuntimeVersio
1b780 6e 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n),..           
1b790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b7a0 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
1b7b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1b7c0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
1b7d0 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73               els
1b7e0 65 20 69 66 20 28 53 74 72 69 6e 67 2e 45 71 75  e if (String.Equ
1b7f0 61 6c 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20  als(..          
1b800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b810 20 20 63 6f 72 65 49 6d 61 67 65 52 75 6e 74 69    coreImageRunti
1b820 6d 65 56 65 72 73 69 6f 6e 2c 20 43 4c 52 76 34  meVersion, CLRv4
1b830 49 6d 61 67 65 52 75 6e 74 69 6d 65 56 65 72 73  ImageRuntimeVers
1b840 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ion,..          
1b850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b860 20 20 53 74 72 69 6e 67 43 6f 6d 70 61 72 69 73    StringComparis
1b870 6f 6e 2e 4f 72 64 69 6e 61 6c 29 29 0d 0a 20 20  on.Ordinal))..  
1b880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b890 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
1b8a0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
1b8b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1b8c0 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45           // NOTE
1b8d0 3a 20 46 6f 72 20 74 68 65 20 43 4c 52 20 76 34  : For the CLR v4
1b8e0 2e 30 20 72 75 6e 74 69 6d 65 2c 20 6d 61 6b 65  .0 runtime, make
1b8f0 20 73 75 72 65 20 77 65 20 64 69 73 61 62 6c 65   sure we disable
1b900 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1b910 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
1b920 20 20 20 61 6e 79 20 61 74 74 65 6d 70 74 20 74     any attempt t
1b930 6f 20 75 73 65 20 69 74 20 66 6f 72 20 74 68 69  o use it for thi
1b940 6e 67 73 20 74 68 61 74 20 72 65 71 75 69 72 65  ngs that require
1b950 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1b960 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
1b970 20 20 20 61 6e 20 61 73 73 65 6d 62 6c 79 20 63     an assembly c
1b980 6f 6d 70 69 6c 65 64 20 66 6f 72 20 74 68 65 20  ompiled for the 
1b990 43 4c 52 20 76 32 2e 30 2e 0d 0a 20 20 20 20 20  CLR v2.0...     
1b9a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b9b0 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
1b9c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
1b9d0 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 4e  onfiguration.noN
1b9e0 65 74 46 78 32 30 20 3d 20 74 72 75 65 3b 0d 0a  etFx20 = true;..
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 63 6f 6e 66 69 67 75 72          configur
1ba10 61 74 69 6f 6e 2e 6e 6f 56 73 32 30 30 35 20 3d  ation.noVs2005 =
1ba20 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20   true;..        
1ba30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ba40 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f  configuration.no
1ba50 56 73 32 30 30 38 20 3d 20 74 72 75 65 3b 0d 0a  Vs2008 = true;..
1ba60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1ba70 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f            TraceO
1ba80 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65  ps.DebugAndTrace
1ba90 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4d  (TracePriority.M
1baa0 65 64 69 75 6d 2c 0d 0a 20 20 20 20 20 20 20 20  edium,..        
1bab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bac0 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63      debugCallbac
1bad0 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b  k, traceCallback
1bae0 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  , String.Format(
1baf0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1bb00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 41                "A
1bb10 73 73 65 6d 62 6c 79 20 69 73 20 63 6f 6d 70 69  ssembly is compi
1bb20 6c 65 64 20 66 6f 72 20 74 68 65 20 2e 4e 45 54  led for the .NET
1bb30 20 46 72 61 6d 65 77 6f 72 6b 20 7b 30 7d 2c 20   Framework {0}, 
1bb40 22 20 2b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  " +..           
1bb50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bb60 20 22 73 75 70 70 6f 72 74 20 66 6f 72 20 2e 4e   "support for .N
1bb70 45 54 20 46 72 61 6d 65 77 6f 72 6b 20 7b 31 7d  ET Framework {1}
1bb80 20 69 73 20 6e 6f 77 20 64 69 73 61 62 6c 65 64   is now disabled
1bb90 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  .",..           
1bba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bbb0 20 46 6f 72 44 69 73 70 6c 61 79 28 43 4c 52 76   ForDisplay(CLRv
1bbc0 34 49 6d 61 67 65 52 75 6e 74 69 6d 65 56 65 72  4ImageRuntimeVer
1bbd0 73 69 6f 6e 29 2c 0d 0a 20 20 20 20 20 20 20 20  sion),..        
1bbe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bbf0 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 43      ForDisplay(C
1bc00 4c 52 76 32 49 6d 61 67 65 52 75 6e 74 69 6d 65  LRv2ImageRuntime
1bc10 56 65 72 73 69 6f 6e 29 29 2c 0d 0a 20 20 20 20  Version)),..    
1bc20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bc30 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74          traceCat
1bc40 65 67 6f 72 79 29 3b 0d 0a 20 20 20 20 20 20 20  egory);..       
1bc50 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
1bc60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bc70 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20      else..      
1bc80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
1bc90 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1bca0 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
1bcb0 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d   String.Format(.
1bcc0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1bcd0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 75 6e               "un
1bce0 73 75 70 70 6f 72 74 65 64 20 63 6f 72 65 20 66  supported core f
1bcf0 69 6c 65 20 69 6d 61 67 65 20 72 75 6e 74 69 6d  ile image runtim
1bd00 65 20 76 65 72 73 69 6f 6e 20 22 20 2b 0d 0a 20  e version " +.. 
1bd10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bd20 20 20 20 20 20 20 20 20 20 20 20 22 7b 30 7d 2c             "{0},
1bd30 20 6d 75 73 74 20 62 65 20 7b 31 7d 20 6f 72 20   must be {1} or 
1bd40 7b 32 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  {2}",..         
1bd50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bd60 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 63 6f     ForDisplay(co
1bd70 72 65 49 6d 61 67 65 52 75 6e 74 69 6d 65 56 65  reImageRuntimeVe
1bd80 72 73 69 6f 6e 29 2c 0d 0a 20 20 20 20 20 20 20  rsion),..       
1bd90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bda0 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28       ForDisplay(
1bdb0 43 4c 52 76 32 49 6d 61 67 65 52 75 6e 74 69 6d  CLRv2ImageRuntim
1bdc0 65 56 65 72 73 69 6f 6e 29 2c 0d 0a 20 20 20 20  eVersion),..    
1bdd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bde0 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c          ForDispl
1bdf0 61 79 28 43 4c 52 76 34 49 6d 61 67 65 52 75 6e  ay(CLRv4ImageRun
1be00 74 69 6d 65 56 65 72 73 69 6f 6e 29 29 3b 0d 0a  timeVersion));..
1be10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1be20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
1be30 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20   false;..       
1be40 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
1be50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1be60 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75        return tru
1be70 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
1be80 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
1be90 20 20 20 20 20 20 20 63 61 74 63 68 20 28 45 78         catch (Ex
1bea0 63 65 70 74 69 6f 6e 20 65 29 0d 0a 20 20 20 20  ception e)..    
1beb0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
1bec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bed0 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75     TraceOps.Debu
1bee0 67 41 6e 64 54 72 61 63 65 28 54 72 61 63 65 50  gAndTrace(TraceP
1bef0 72 69 6f 72 69 74 79 2e 48 69 67 68 65 73 74 2c  riority.Highest,
1bf00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1bf10 20 20 20 20 20 20 20 20 20 20 64 65 62 75 67 43            debugC
1bf20 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61  allback, traceCa
1bf30 6c 6c 62 61 63 6b 2c 20 65 2c 20 74 72 61 63 65  llback, e, trace
1bf40 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
1bf50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bf60 20 20 65 72 72 6f 72 20 3d 20 22 46 61 69 6c 65    error = "Faile
1bf70 64 20 74 6f 20 63 68 65 63 6b 20 69 6d 61 67 65  d to check image
1bf80 20 72 75 6e 74 69 6d 65 20 76 65 72 73 69 6f 6e   runtime version
1bf90 2e 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  .";..           
1bfa0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
1bfb0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
1bfc0 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20   false;..       
1bfd0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
1bfe0 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
1bff0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
1c000 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c010 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c020 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c030 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c040 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
1c050 20 23 72 65 67 69 6f 6e 20 50 75 62 6c 69 63 20   #region Public 
1c060 4d 65 74 68 6f 64 73 0d 0a 20 20 20 20 20 20 20  Methods..       
1c070 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c       public bool
1c080 20 48 61 73 46 6c 61 67 73 28 0d 0a 20 20 20 20   HasFlags(..    
1c090 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 73 74              Inst
1c0a0 61 6c 6c 46 6c 61 67 73 20 68 61 73 46 6c 61 67  allFlags hasFlag
1c0b0 73 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  s,..            
1c0c0 20 20 20 20 62 6f 6f 6c 20 61 6c 6c 0d 0a 20 20      bool all..  
1c0d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d                ).
1c0e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
1c0f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c100 69 66 20 28 61 6c 6c 29 0d 0a 20 20 20 20 20 20  if (all)..      
1c110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
1c120 74 75 72 6e 20 28 28 69 6e 73 74 61 6c 6c 46 6c  turn ((installFl
1c130 61 67 73 20 26 20 68 61 73 46 6c 61 67 73 29 20  ags & hasFlags) 
1c140 3d 3d 20 68 61 73 46 6c 61 67 73 29 3b 0d 0a 20  == hasFlags);.. 
1c150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
1c160 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  lse..           
1c170 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
1c180 28 28 69 6e 73 74 61 6c 6c 46 6c 61 67 73 20 26  ((installFlags &
1c190 20 68 61 73 46 6c 61 67 73 29 20 21 3d 20 49 6e   hasFlags) != In
1c1a0 73 74 61 6c 6c 46 6c 61 67 73 2e 4e 6f 6e 65 29  stallFlags.None)
1c1b0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
1c1c0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1c1d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c1e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c1f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c200 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c210 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
1c220 20 20 20 70 75 62 6c 69 63 20 76 6f 69 64 20 44     public void D
1c230 75 6d 70 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ump(..          
1c240 20 20 20 20 20 20 54 72 61 63 65 43 61 6c 6c 62        TraceCallb
1c250 61 63 6b 20 74 72 61 63 65 43 61 6c 6c 62 61 63  ack traceCallbac
1c260 6b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  k..             
1c270 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20     )..          
1c280 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
1c290 20 20 20 20 20 69 66 20 28 74 72 61 63 65 43 61       if (traceCa
1c2a0 6c 6c 62 61 63 6b 20 21 3d 20 6e 75 6c 6c 29 0d  llback != null).
1c2b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1c2c0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
1c2d0 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c          traceCal
1c2e0 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72  lback(String.For
1c2f0 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65  mat(NameAndValue
1c300 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20  Format,..       
1c310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c320 20 22 41 73 73 65 6d 62 6c 79 22 2c 20 46 6f 72   "Assembly", For
1c330 44 69 73 70 6c 61 79 28 61 73 73 65 6d 62 6c 79  Display(assembly
1c340 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  )),..           
1c350 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
1c360 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
1c370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c380 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63      traceCallbac
1c390 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  k(String.Format(
1c3a0 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d  NameAndValueForm
1c3b0 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at,..           
1c3c0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 4c 6f               "Lo
1c3d0 67 46 69 6c 65 4e 61 6d 65 22 2c 20 46 6f 72 44  gFileName", ForD
1c3e0 69 73 70 6c 61 79 28 6c 6f 67 46 69 6c 65 4e 61  isplay(logFileNa
1c3f0 6d 65 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  me)),..         
1c400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
1c410 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
1c420 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1c430 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62        traceCallb
1c440 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ack(String.Forma
1c450 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f  t(NameAndValueFo
1c460 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20  rmat,..         
1c470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
1c480 44 69 72 65 63 74 6f 72 79 22 2c 20 46 6f 72 44  Directory", ForD
1c490 69 73 70 6c 61 79 28 64 69 72 65 63 74 6f 72 79  isplay(directory
1c4a0 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  )),..           
1c4b0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
1c4c0 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
1c4d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c4e0 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63      traceCallbac
1c4f0 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  k(String.Format(
1c500 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d  NameAndValueForm
1c510 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at,..           
1c520 20 20 20 20 20 20 20 20 20 20 20 20 20 22 43 6f               "Co
1c530 72 65 46 69 6c 65 4e 61 6d 65 22 2c 20 46 6f 72  reFileName", For
1c540 44 69 73 70 6c 61 79 28 63 6f 72 65 46 69 6c 65  Display(coreFile
1c550 4e 61 6d 65 29 29 2c 0d 0a 20 20 20 20 20 20 20  Name)),..       
1c560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c570 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
1c580 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1c590 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c          traceCal
1c5a0 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72  lback(String.For
1c5b0 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65  mat(NameAndValue
1c5c0 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20  Format,..       
1c5d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c5e0 20 22 4c 69 6e 71 46 69 6c 65 4e 61 6d 65 22 2c   "LinqFileName",
1c5f0 20 46 6f 72 44 69 73 70 6c 61 79 28 6c 69 6e 71   ForDisplay(linq
1c600 46 69 6c 65 4e 61 6d 65 29 29 2c 0d 0a 20 20 20  FileName)),..   
1c610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c620 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f       traceCatego
1c630 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
1c640 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
1c650 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67  eCallback(String
1c660 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56  .Format(NameAndV
1c670 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20  alueFormat,..   
1c680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c690 20 20 20 20 20 22 44 65 73 69 67 6e 65 72 46 69       "DesignerFi
1c6a0 6c 65 4e 61 6d 65 22 2c 20 46 6f 72 44 69 73 70  leName", ForDisp
1c6b0 6c 61 79 28 64 65 73 69 67 6e 65 72 46 69 6c 65  lay(designerFile
1c6c0 4e 61 6d 65 29 29 2c 0d 0a 20 20 20 20 20 20 20  Name)),..       
1c6d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c6e0 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
1c6f0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1c700 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c          traceCal
1c710 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72  lback(String.For
1c720 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65  mat(NameAndValue
1c730 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20  Format,..       
1c740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c750 20 22 52 65 67 69 73 74 72 79 56 65 72 73 69 6f   "RegistryVersio
1c760 6e 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 72  n", ForDisplay(r
1c770 65 67 69 73 74 72 79 56 65 72 73 69 6f 6e 29 29  egistryVersion))
1c780 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
1c790 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
1c7a0 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
1c7b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c7c0 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28    traceCallback(
1c7d0 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61  String.Format(Na
1c7e0 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74  meAndValueFormat
1c7f0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
1c800 20 20 20 20 20 20 20 20 20 20 20 22 43 6f 6e 66             "Conf
1c810 69 67 56 65 72 73 69 6f 6e 22 2c 20 46 6f 72 44  igVersion", ForD
1c820 69 73 70 6c 61 79 28 63 6f 6e 66 69 67 56 65 72  isplay(configVer
1c830 73 69 6f 6e 29 29 2c 0d 0a 20 20 20 20 20 20 20  sion)),..       
1c840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c850 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
1c860 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1c870 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c          traceCal
1c880 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72  lback(String.For
1c890 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65  mat(NameAndValue
1c8a0 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20  Format,..       
1c8b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c8c0 20 22 44 65 62 75 67 46 6f 72 6d 61 74 22 2c 20   "DebugFormat", 
1c8d0 46 6f 72 44 69 73 70 6c 61 79 28 64 65 62 75 67  ForDisplay(debug
1c8e0 46 6f 72 6d 61 74 29 29 2c 0d 0a 20 20 20 20 20  Format)),..     
1c8f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c900 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
1c910 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
1c920 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
1c930 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46  allback(String.F
1c940 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c  ormat(NameAndVal
1c950 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20  ueFormat,..     
1c960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c970 20 20 20 22 54 72 61 63 65 46 6f 72 6d 61 74 22     "TraceFormat"
1c980 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 74 72 61  , ForDisplay(tra
1c990 63 65 46 6f 72 6d 61 74 29 29 2c 0d 0a 20 20 20  ceFormat)),..   
1c9a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c9b0 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f       traceCatego
1c9c0 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
1c9d0 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
1c9e0 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67  eCallback(String
1c9f0 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56  .Format(NameAndV
1ca00 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20  alueFormat,..   
1ca10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ca20 20 20 20 20 20 22 49 6e 73 74 61 6c 6c 46 6c 61       "InstallFla
1ca30 67 73 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28  gs", ForDisplay(
1ca40 69 6e 73 74 61 6c 6c 46 6c 61 67 73 29 29 2c 0d  installFlags)),.
1ca50 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1ca60 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
1ca70 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
1ca80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ca90 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74  traceCallback(St
1caa0 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65  ring.Format(Name
1cab0 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d  AndValueFormat,.
1cac0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1cad0 20 20 20 20 20 20 20 20 20 22 44 65 62 75 67 50           "DebugP
1cae0 72 69 6f 72 69 74 79 22 2c 20 46 6f 72 44 69 73  riority", ForDis
1caf0 70 6c 61 79 28 64 65 62 75 67 50 72 69 6f 72 69  play(debugPriori
1cb00 74 79 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  ty)),..         
1cb10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
1cb20 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
1cb30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1cb40 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62        traceCallb
1cb50 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ack(String.Forma
1cb60 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f  t(NameAndValueFo
1cb70 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20  rmat,..         
1cb80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
1cb90 54 72 61 63 65 50 72 69 6f 72 69 74 79 22 2c 20  TracePriority", 
1cba0 46 6f 72 44 69 73 70 6c 61 79 28 74 72 61 63 65  ForDisplay(trace
1cbb0 50 72 69 6f 72 69 74 79 29 29 2c 0d 0a 20 20 20  Priority)),..   
1cbc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cbd0 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f       traceCatego
1cbe0 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
1cbf0 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
1cc00 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67  eCallback(String
1cc10 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56  .Format(NameAndV
1cc20 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20  alueFormat,..   
1cc30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cc40 20 20 20 20 20 22 50 65 72 55 73 65 72 22 2c 20       "PerUser", 
1cc50 46 6f 72 44 69 73 70 6c 61 79 28 70 65 72 55 73  ForDisplay(perUs
1cc60 65 72 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  er)),..         
1cc70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
1cc80 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
1cc90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1cca0 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62        traceCallb
1ccb0 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ack(String.Forma
1ccc0 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f  t(NameAndValueFo
1ccd0 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20  rmat,..         
1cce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
1ccf0 49 6e 73 74 61 6c 6c 22 2c 20 46 6f 72 44 69 73  Install", ForDis
1cd00 70 6c 61 79 28 69 6e 73 74 61 6c 6c 29 29 2c 0d  play(install)),.
1cd10 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1cd20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
1cd30 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
1cd40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cd50 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74  traceCallback(St
1cd60 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65  ring.Format(Name
1cd70 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d  AndValueFormat,.
1cd80 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1cd90 20 20 20 20 20 20 20 20 20 22 57 6f 77 36 34 22           "Wow64"
1cda0 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 77 6f 77  , ForDisplay(wow
1cdb0 36 34 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  64)),..         
1cdc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
1cdd0 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
1cde0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1cdf0 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62        traceCallb
1ce00 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ack(String.Forma
1ce10 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f  t(NameAndValueFo
1ce20 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20  rmat,..         
1ce30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
1ce40 4e 6f 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e  NoRuntimeVersion
1ce50 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 6e 6f  ", ForDisplay(no
1ce60 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 29 29  RuntimeVersion))
1ce70 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
1ce80 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
1ce90 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
1cea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ceb0 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28    traceCallback(
1cec0 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61  String.Format(Na
1ced0 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74  meAndValueFormat
1cee0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
1cef0 20 20 20 20 20 20 20 20 20 20 20 22 4e 6f 44 65             "NoDe
1cf00 73 6b 74 6f 70 22 2c 20 46 6f 72 44 69 73 70 6c  sktop", ForDispl
1cf10 61 79 28 6e 6f 44 65 73 6b 74 6f 70 29 29 2c 0d  ay(noDesktop)),.
1cf20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1cf30 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
1cf40 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
1cf50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cf60 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74  traceCallback(St
1cf70 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65  ring.Format(Name
1cf80 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d  AndValueFormat,.
1cf90 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1cfa0 20 20 20 20 20 20 20 20 20 22 4e 6f 43 6f 6d 70           "NoComp
1cfb0 61 63 74 22 2c 20 46 6f 72 44 69 73 70 6c 61 79  act", ForDisplay
1cfc0 28 6e 6f 43 6f 6d 70 61 63 74 29 29 2c 0d 0a 20  (noCompact)),.. 
1cfd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cfe0 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65         traceCate
1cff0 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
1d000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
1d010 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69  aceCallback(Stri
1d020 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e  ng.Format(NameAn
1d030 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20  dValueFormat,.. 
1d040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d050 20 20 20 20 20 20 20 22 4e 6f 4e 65 74 46 78 32         "NoNetFx2
1d060 30 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 6e  0", ForDisplay(n
1d070 6f 4e 65 74 46 78 32 30 29 29 2c 0d 0a 20 20 20  oNetFx20)),..   
1d080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d090 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f       traceCatego
1d0a0 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
1d0b0 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
1d0c0 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67  eCallback(String
1d0d0 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56  .Format(NameAndV
1d0e0 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20  alueFormat,..   
1d0f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d100 20 20 20 20 20 22 4e 6f 4e 65 74 46 78 34 30 22       "NoNetFx40"
1d110 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 6e 6f 4e  , ForDisplay(noN
1d120 65 74 46 78 34 30 29 29 2c 0d 0a 20 20 20 20 20  etFx40)),..     
1d130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d140 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
1d150 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
1d160 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
1d170 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46  allback(String.F
1d180 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c  ormat(NameAndVal
1d190 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20  ueFormat,..     
1d1a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d1b0 20 20 20 22 4e 6f 4e 65 74 46 78 34 35 22 2c 20     "NoNetFx45", 
1d1c0 46 6f 72 44 69 73 70 6c 61 79 28 6e 6f 4e 65 74  ForDisplay(noNet
1d1d0 46 78 34 35 29 29 2c 0d 0a 20 20 20 20 20 20 20  Fx45)),..       
1d1e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d1f0 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
1d200 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1d210 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c          traceCal
1d220 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72  lback(String.For
1d230 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65  mat(NameAndValue
1d240 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20  Format,..       
1d250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d260 20 22 4e 6f 56 73 32 30 30 35 22 2c 20 46 6f 72   "NoVs2005", For
1d270 44 69 73 70 6c 61 79 28 6e 6f 56 73 32 30 30 35  Display(noVs2005
1d280 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  )),..           
1d290 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
1d2a0 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
1d2b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d2c0 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63      traceCallbac
1d2d0 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  k(String.Format(
1d2e0 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d  NameAndValueForm
1d2f0 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at,..           
1d300 20 20 20 20 20 20 20 20 20 20 20 20 20 22 4e 6f               "No
1d310 56 73 32 30 30 38 22 2c 20 46 6f 72 44 69 73 70  Vs2008", ForDisp
1d320 6c 61 79 28 6e 6f 56 73 32 30 30 38 29 29 2c 0d  lay(noVs2008)),.
1d330 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1d340 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
1d350 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
1d360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d370 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74  traceCallback(St
1d380 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65  ring.Format(Name
1d390 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d  AndValueFormat,.
1d3a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1d3b0 20 20 20 20 20 20 20 20 20 22 4e 6f 56 73 32 30           "NoVs20
1d3c0 31 30 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28  10", ForDisplay(
1d3d0 6e 6f 56 73 32 30 31 30 29 29 2c 0d 0a 20 20 20  noVs2010)),..   
1d3e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d3f0 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f       traceCatego
1d400 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
1d410 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
1d420 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67  eCallback(String
1d430 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56  .Format(NameAndV
1d440 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20  alueFormat,..   
1d450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d460 20 20 20 20 20 22 4e 6f 56 73 32 30 31 32 22 2c       "NoVs2012",
1d470 20 46 6f 72 44 69 73 70 6c 61 79 28 6e 6f 56 73   ForDisplay(noVs
1d480 32 30 31 32 29 29 2c 0d 0a 20 20 20 20 20 20 20  2012)),..       
1d490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d4a0 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
1d4b0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1d4c0 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c          traceCal
1d4d0 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72  lback(String.For
1d4e0 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65  mat(NameAndValue
1d4f0 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20  Format,..       
1d500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d510 20 22 4e 6f 54 72 61 63 65 22 2c 20 46 6f 72 44   "NoTrace", ForD
1d520 69 73 70 6c 61 79 28 6e 6f 54 72 61 63 65 29 29  isplay(noTrace))
1d530 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
1d540 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
1d550 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
1d560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d570 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28    traceCallback(
1d580 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61  String.Format(Na
1d590 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74  meAndValueFormat
1d5a0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
1d5b0 20 20 20 20 20 20 20 20 20 20 20 22 4e 6f 43 6f             "NoCo
1d5c0 6e 73 6f 6c 65 22 2c 20 46 6f 72 44 69 73 70 6c  nsole", ForDispl
1d5d0 61 79 28 6e 6f 43 6f 6e 73 6f 6c 65 29 29 2c 0d  ay(noConsole)),.
1d5e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1d5f0 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
1d600 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
1d610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d620 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74  traceCallback(St
1d630 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65  ring.Format(Name
1d640 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d  AndValueFormat,.
1d650 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1d660 20 20 20 20 20 20 20 20 20 22 4e 6f 4c 6f 67 22           "NoLog"
1d670 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 6e 6f 4c  , ForDisplay(noL
1d680 6f 67 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  og)),..         
1d690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
1d6a0 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
1d6b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1d6c0 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62        traceCallb
1d6d0 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ack(String.Forma
1d6e0 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f  t(NameAndValueFo
1d6f0 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20  rmat,..         
1d700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
1d710 54 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 22 2c  ThrowOnMissing",
1d720 20 46 6f 72 44 69 73 70 6c 61 79 28 74 68 72 6f   ForDisplay(thro
1d730 77 4f 6e 4d 69 73 73 69 6e 67 29 29 2c 0d 0a 20  wOnMissing)),.. 
1d740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d750 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65         traceCate
1d760 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
1d770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
1d780 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69  aceCallback(Stri
1d790 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e  ng.Format(NameAn
1d7a0 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20  dValueFormat,.. 
1d7b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d7c0 20 20 20 20 20 20 20 22 57 68 61 74 49 66 22 2c         "WhatIf",
1d7d0 20 46 6f 72 44 69 73 70 6c 61 79 28 77 68 61 74   ForDisplay(what
1d7e0 49 66 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  If)),..         
1d7f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
1d800 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
1d810 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1d820 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62        traceCallb
1d830 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ack(String.Forma
1d840 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f  t(NameAndValueFo
1d850 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20  rmat,..         
1d860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
1d870 44 65 62 75 67 22 2c 20 46 6f 72 44 69 73 70 6c  Debug", ForDispl
1d880 61 79 28 64 65 62 75 67 29 29 2c 0d 0a 20 20 20  ay(debug)),..   
1d890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d8a0 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f       traceCatego
1d8b0 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
1d8c0 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
1d8d0 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67  eCallback(String
1d8e0 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56  .Format(NameAndV
1d8f0 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20  alueFormat,..   
1d900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d910 20 20 20 20 20 22 56 65 72 62 6f 73 65 22 2c 20       "Verbose", 
1d920 46 6f 72 44 69 73 70 6c 61 79 28 76 65 72 62 6f  ForDisplay(verbo
1d930 73 65 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  se)),..         
1d940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
1d950 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
1d960 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1d970 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62        traceCallb
1d980 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ack(String.Forma
1d990 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f  t(NameAndValueFo
1d9a0 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20  rmat,..         
1d9b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
1d9c0 43 6f 6e 66 69 72 6d 22 2c 20 46 6f 72 44 69 73  Confirm", ForDis
1d9d0 70 6c 61 79 28 63 6f 6e 66 69 72 6d 29 29 2c 0d  play(confirm)),.
1d9e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1d9f0 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
1da00 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
1da10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1da20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1da30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1da40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1da50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
1da60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1da70 20 20 20 69 66 20 28 61 73 73 65 6d 62 6c 79 20     if (assembly 
1da80 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  != null)..      
1da90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
1daa0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1dab0 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
1dac0 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f  llback(String.Fo
1dad0 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75  rmat(NameAndValu
1dae0 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20  eFormat,..      
1daf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1db00 20 20 20 20 20 20 22 41 73 73 65 6d 62 6c 79 54        "AssemblyT
1db10 69 74 6c 65 22 2c 0d 0a 20 20 20 20 20 20 20 20  itle",..        
1db20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1db30 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 47      ForDisplay(G
1db40 65 74 41 73 73 65 6d 62 6c 79 54 69 74 6c 65 28  etAssemblyTitle(
1db50 61 73 73 65 6d 62 6c 79 29 29 29 2c 0d 0a 20 20  assembly))),..  
1db60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1db70 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
1db80 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20  ategory);....   
1db90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dba0 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61       traceCallba
1dbb0 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  ck(String.Format
1dbc0 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72  (NameAndValueFor
1dbd0 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  mat,..          
1dbe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dbf0 20 20 22 41 73 73 65 6d 62 6c 79 43 6f 6e 66 69    "AssemblyConfi
1dc00 67 75 72 61 74 69 6f 6e 22 2c 0d 0a 20 20 20 20  guration",..    
1dc10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dc20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c          ForDispl
1dc30 61 79 28 47 65 74 41 73 73 65 6d 62 6c 79 43 6f  ay(GetAssemblyCo
1dc40 6e 66 69 67 75 72 61 74 69 6f 6e 28 61 73 73 65  nfiguration(asse
1dc50 6d 62 6c 79 29 29 29 2c 0d 0a 20 20 20 20 20 20  mbly))),..      
1dc60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dc70 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67        traceCateg
1dc80 6f 72 79 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ory);..         
1dc90 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
1dca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
1dcb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
1dcc0 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64              #end
1dcd0 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20  region....      
1dce0 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
1dcf0 2f 2f 2f 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 0d 0a 0d 0a 20 20 20  /////////....   
1dd30 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e           #region
1dd40 20 50 75 62 6c 69 63 20 50 72 6f 70 65 72 74 69   Public Properti
1dd50 65 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  es..            
1dd60 70 72 69 76 61 74 65 20 41 73 73 65 6d 62 6c 79  private Assembly
1dd70 20 61 73 73 65 6d 62 6c 79 3b 0d 0a 20 20 20 20   assembly;..    
1dd80 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 41          public A
1dd90 73 73 65 6d 62 6c 79 20 41 73 73 65 6d 62 6c 79  ssembly Assembly
1dda0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
1ddb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1ddc0 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 61 73   get { return as
1ddd0 73 65 6d 62 6c 79 3b 20 7d 0d 0a 20 20 20 20 20  sembly; }..     
1dde0 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b             set {
1ddf0 20 61 73 73 65 6d 62 6c 79 20 3d 20 76 61 6c 75   assembly = valu
1de00 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  e; }..          
1de10 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
1de20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1de60 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
1de70 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74        private st
1de80 72 69 6e 67 20 6c 6f 67 46 69 6c 65 4e 61 6d 65  ring logFileName
1de90 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ;..            p
1dea0 75 62 6c 69 63 20 73 74 72 69 6e 67 20 4c 6f 67  ublic string Log
1deb0 46 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 20 20 20  FileName..      
1dec0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
1ded0 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72           get { r
1dee0 65 74 75 72 6e 20 6c 6f 67 46 69 6c 65 4e 61 6d  eturn logFileNam
1def0 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  e; }..          
1df00 20 20 20 20 20 20 73 65 74 20 7b 20 6c 6f 67 46        set { logF
1df10 69 6c 65 4e 61 6d 65 20 3d 20 76 61 6c 75 65 3b  ileName = value;
1df20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
1df30 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
1df40 20 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
1df90 20 20 20 20 70 72 69 76 61 74 65 20 73 74 72 69      private stri
1dfa0 6e 67 20 64 69 72 65 63 74 6f 72 79 3b 0d 0a 20  ng directory;.. 
1dfb0 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
1dfc0 63 20 73 74 72 69 6e 67 20 44 69 72 65 63 74 6f  c string Directo
1dfd0 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ry..            
1dfe0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
1dff0 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20     get { return 
1e000 64 69 72 65 63 74 6f 72 79 3b 20 7d 0d 0a 20 20  directory; }..  
1e010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65                se
1e020 74 20 7b 20 64 69 72 65 63 74 6f 72 79 20 3d 20  t { directory = 
1e030 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20  value; }..      
1e040 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
1e050 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
1e060 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e070 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20  //////////....  
1e0a0 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
1e0b0 65 20 73 74 72 69 6e 67 20 63 6f 72 65 46 69 6c  e string coreFil
1e0c0 65 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20  eName;..        
1e0d0 20 20 20 20 70 75 62 6c 69 63 20 73 74 72 69 6e      public strin
1e0e0 67 20 43 6f 72 65 46 69 6c 65 4e 61 6d 65 0d 0a  g CoreFileName..
1e0f0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
1e100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67                 g
1e110 65 74 20 7b 20 72 65 74 75 72 6e 20 63 6f 72 65  et { return core
1e120 46 69 6c 65 4e 61 6d 65 3b 20 7d 0d 0a 20 20 20  FileName; }..   
1e130 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74               set
1e140 20 7b 20 63 6f 72 65 46 69 6c 65 4e 61 6d 65 20   { coreFileName 
1e150 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20  = value; }..    
1e160 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
1e170 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
1e180 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e190 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a  ////////////....
1e1c0 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
1e1d0 61 74 65 20 73 74 72 69 6e 67 20 6c 69 6e 71 46  ate string linqF
1e1e0 69 6c 65 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20  ileName;..      
1e1f0 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 72        public str
1e200 69 6e 67 20 4c 69 6e 71 46 69 6c 65 4e 61 6d 65  ing LinqFileName
1e210 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
1e220 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1e230 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 6c 69   get { return li
1e240 6e 71 46 69 6c 65 4e 61 6d 65 3b 20 7d 0d 0a 20  nqFileName; }.. 
1e250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
1e260 65 74 20 7b 20 6c 69 6e 71 46 69 6c 65 4e 61 6d  et { linqFileNam
1e270 65 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20  e = value; }..  
1e280 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
1e290 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
1e2a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e2b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a  //////////////..
1e2e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
1e2f0 69 76 61 74 65 20 73 74 72 69 6e 67 20 64 65 73  ivate string des
1e300 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 3b 0d 0a  ignerFileName;..
1e310 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
1e320 69 63 20 73 74 72 69 6e 67 20 44 65 73 69 67 6e  ic string Design
1e330 65 72 46 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 20  erFileName..    
1e340 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
1e350 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b             get {
1e360 20 72 65 74 75 72 6e 20 64 65 73 69 67 6e 65 72   return designer
1e370 46 69 6c 65 4e 61 6d 65 3b 20 7d 0d 0a 20 20 20  FileName; }..   
1e380 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74               set
1e390 20 7b 20 64 65 73 69 67 6e 65 72 46 69 6c 65 4e   { designerFileN
1e3a0 61 6d 65 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a  ame = value; }..
1e3b0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
1e3c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
1e3d0 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1e420 70 72 69 76 61 74 65 20 73 74 72 69 6e 67 20 72  private string r
1e430 65 67 69 73 74 72 79 56 65 72 73 69 6f 6e 3b 0d  egistryVersion;.
1e440 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
1e450 6c 69 63 20 73 74 72 69 6e 67 20 52 65 67 69 73  lic string Regis
1e460 74 72 79 56 65 72 73 69 6f 6e 0d 0a 20 20 20 20  tryVersion..    
1e470 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
1e480 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b             get {
1e490 20 72 65 74 75 72 6e 20 72 65 67 69 73 74 72 79   return registry
1e4a0 56 65 72 73 69 6f 6e 3b 20 7d 0d 0a 20 20 20 20  Version; }..    
1e4b0 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20              set 
1e4c0 7b 20 72 65 67 69 73 74 72 79 56 65 72 73 69 6f  { registryVersio
1e4d0 6e 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20  n = value; }..  
1e4e0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
1e4f0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
1e500 2f 2f 2f 2f 2f 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 0d 0a  //////////////..
1e540 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
1e550 69 76 61 74 65 20 73 74 72 69 6e 67 20 63 6f 6e  ivate string con
1e560 66 69 67 56 65 72 73 69 6f 6e 3b 0d 0a 20 20 20  figVersion;..   
1e570 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
1e580 73 74 72 69 6e 67 20 43 6f 6e 66 69 67 56 65 72  string ConfigVer
1e590 73 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20 20 20  sion..          
1e5a0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
1e5b0 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72       get { retur
1e5c0 6e 20 63 6f 6e 66 69 67 56 65 72 73 69 6f 6e 3b  n configVersion;
1e5d0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
1e5e0 20 20 20 20 73 65 74 20 7b 20 63 6f 6e 66 69 67      set { config
1e5f0 56 65 72 73 69 6f 6e 20 3d 20 76 61 6c 75 65 3b  Version = value;
1e600 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
1e610 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
1e620 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
1e630 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
1e670 20 20 20 20 70 72 69 76 61 74 65 20 73 74 72 69      private stri
1e680 6e 67 20 64 65 62 75 67 46 6f 72 6d 61 74 3b 0d  ng debugFormat;.
1e690 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
1e6a0 6c 69 63 20 73 74 72 69 6e 67 20 44 65 62 75 67  lic string Debug
1e6b0 46 6f 72 6d 61 74 0d 0a 20 20 20 20 20 20 20 20  Format..        
1e6c0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
1e6d0 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74         get { ret
1e6e0 75 72 6e 20 64 65 62 75 67 46 6f 72 6d 61 74 3b  urn debugFormat;
1e6f0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
1e700 20 20 20 20 73 65 74 20 7b 20 64 65 62 75 67 46      set { debugF
1e710 6f 72 6d 61 74 20 3d 20 76 61 6c 75 65 3b 20 7d  ormat = value; }
1e720 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
1e730 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
1e740 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e750 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e760 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e770 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e780 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
1e790 20 20 70 72 69 76 61 74 65 20 73 74 72 69 6e 67    private string
1e7a0 20 74 72 61 63 65 46 6f 72 6d 61 74 3b 0d 0a 20   traceFormat;.. 
1e7b0 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
1e7c0 63 20 73 74 72 69 6e 67 20 54 72 61 63 65 46 6f  c string TraceFo
1e7d0 72 6d 61 74 0d 0a 20 20 20 20 20 20 20 20 20 20  rmat..          
1e7e0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
1e7f0 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72       get { retur
1e800 6e 20 74 72 61 63 65 46 6f 72 6d 61 74 3b 20 7d  n traceFormat; }
1e810 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1e820 20 20 73 65 74 20 7b 20 74 72 61 63 65 46 6f 72    set { traceFor
1e830 6d 61 74 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a  mat = value; }..
1e840 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
1e850 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
1e860 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e870 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1e8b0 70 72 69 76 61 74 65 20 49 6e 73 74 61 6c 6c 46  private InstallF
1e8c0 6c 61 67 73 20 69 6e 73 74 61 6c 6c 46 6c 61 67  lags installFlag
1e8d0 73 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  s;..            
1e8e0 70 75 62 6c 69 63 20 49 6e 73 74 61 6c 6c 46 6c  public InstallFl
1e8f0 61 67 73 20 49 6e 73 74 61 6c 6c 46 6c 61 67 73  ags InstallFlags
1e900 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
1e910 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1e920 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 69 6e   get { return in
1e930 73 74 61 6c 6c 46 6c 61 67 73 3b 20 7d 0d 0a 20  stallFlags; }.. 
1e940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
1e950 65 74 20 7b 20 69 6e 73 74 61 6c 6c 46 6c 61 67  et { installFlag
1e960 73 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20  s = value; }..  
1e970 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
1e980 20 20 20 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f  ////////////////
1e9c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
1e9d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
1e9e0 69 76 61 74 65 20 54 72 61 63 65 50 72 69 6f 72  ivate TracePrior
1e9f0 69 74 79 20 64 65 62 75 67 50 72 69 6f 72 69 74  ity debugPriorit
1ea00 79 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y;..            
1ea10 70 75 62 6c 69 63 20 54 72 61 63 65 50 72 69 6f  public TracePrio
1ea20 72 69 74 79 20 44 65 62 75 67 50 72 69 6f 72 69  rity DebugPriori
1ea30 74 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ty..            
1ea40 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
1ea50 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20     get { return 
1ea60 64 65 62 75 67 50 72 69 6f 72 69 74 79 3b 20 7d  debugPriority; }
1ea70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1ea80 20 20 73 65 74 20 7b 20 64 65 62 75 67 50 72 69    set { debugPri
1ea90 6f 72 69 74 79 20 3d 20 76 61 6c 75 65 3b 20 7d  ority = value; }
1eaa0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
1eab0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f  ////////////////
1eaf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1eb00 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
1eb10 20 20 70 72 69 76 61 74 65 20 54 72 61 63 65 50    private TraceP
1eb20 72 69 6f 72 69 74 79 20 74 72 61 63 65 50 72 69  riority tracePri
1eb30 6f 72 69 74 79 3b 0d 0a 20 20 20 20 20 20 20 20  ority;..        
1eb40 20 20 20 20 70 75 62 6c 69 63 20 54 72 61 63 65      public Trace
1eb50 50 72 69 6f 72 69 74 79 20 54 72 61 63 65 50 72  Priority TracePr
1eb60 69 6f 72 69 74 79 0d 0a 20 20 20 20 20 20 20 20  iority..        
1eb70 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
1eb80 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74         get { ret
1eb90 75 72 6e 20 74 72 61 63 65 50 72 69 6f 72 69 74  urn tracePriorit
1eba0 79 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  y; }..          
1ebb0 20 20 20 20 20 20 73 65 74 20 7b 20 74 72 61 63        set { trac
1ebc0 65 50 72 69 6f 72 69 74 79 20 3d 20 76 61 6c 75  ePriority = valu
1ebd0 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  e; }..          
1ebe0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
1ebf0 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
1ec00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ec10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ec20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ec30 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
1ec40 20 20 20 20 20 20 70 72 69 76 61 74 65 20 62 6f        private bo
1ec50 6f 6c 20 70 65 72 55 73 65 72 3b 0d 0a 20 20 20  ol perUser;..   
1ec60 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
1ec70 62 6f 6f 6c 20 50 65 72 55 73 65 72 0d 0a 20 20  bool PerUser..  
1ec80 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
1ec90 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74               get
1eca0 20 7b 20 72 65 74 75 72 6e 20 70 65 72 55 73 65   { return perUse
1ecb0 72 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  r; }..          
1ecc0 20 20 20 20 20 20 73 65 74 20 7b 20 70 65 72 55        set { perU
1ecd0 73 65 72 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a  ser = value; }..
1ece0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
1ecf0 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
1ed00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ed10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ed20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ed30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ed40 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1ed50 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 69 6e 73  private bool ins
1ed60 74 61 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20  tall;..         
1ed70 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 49     public bool I
1ed80 6e 73 74 61 6c 6c 0d 0a 20 20 20 20 20 20 20 20  nstall..        
1ed90 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
1eda0 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74         get { ret
1edb0 75 72 6e 20 69 6e 73 74 61 6c 6c 3b 20 7d 0d 0a  urn install; }..
1edc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1edd0 73 65 74 20 7b 20 69 6e 73 74 61 6c 6c 20 3d 20  set { install = 
1ede0 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20  value; }..      
1edf0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
1ee00 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ee30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ee40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
1ee50 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
1ee60 65 20 62 6f 6f 6c 20 77 6f 77 36 34 3b 0d 0a 20  e bool wow64;.. 
1ee70 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
1ee80 63 20 62 6f 6f 6c 20 57 6f 77 36 34 0d 0a 20 20  c bool Wow64..  
1ee90 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
1eea0 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74               get
1eeb0 20 7b 20 72 65 74 75 72 6e 20 77 6f 77 36 34 3b   { return wow64;
1eec0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
1eed0 20 20 20 20 73 65 74 20 7b 20 77 6f 77 36 34 20      set { wow64 
1eee0 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20  = value; }..    
1eef0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
1ef00 20 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ef40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
1ef50 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
1ef60 61 74 65 20 62 6f 6f 6c 20 6e 6f 52 75 6e 74 69  ate bool noRunti
1ef70 6d 65 56 65 72 73 69 6f 6e 3b 0d 0a 20 20 20 20  meVersion;..    
1ef80 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 62          public b
1ef90 6f 6f 6c 20 4e 6f 52 75 6e 74 69 6d 65 56 65 72  ool NoRuntimeVer
1efa0 73 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20 20 20  sion..          
1efb0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
1efc0 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72       get { retur
1efd0 6e 20 6e 6f 52 75 6e 74 69 6d 65 56 65 72 73 69  n noRuntimeVersi
1efe0 6f 6e 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  on; }..         
1eff0 20 20 20 20 20 20 20 73 65 74 20 7b 20 6e 6f 52         set { noR
1f000 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 20 3d 20  untimeVersion = 
1f010 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20  value; }..      
1f020 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
1f030 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
1f040 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f050 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f060 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f070 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
1f080 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
1f090 65 20 62 6f 6f 6c 20 6e 6f 44 65 73 6b 74 6f 70  e bool noDesktop
1f0a0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ;..            p
1f0b0 75 62 6c 69 63 20 62 6f 6f 6c 20 4e 6f 44 65 73  ublic bool NoDes
1f0c0 6b 74 6f 70 0d 0a 20 20 20 20 20 20 20 20 20 20  ktop..          
1f0d0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
1f0e0 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72       get { retur
1f0f0 6e 20 6e 6f 44 65 73 6b 74 6f 70 3b 20 7d 0d 0a  n noDesktop; }..
1f100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f110 73 65 74 20 7b 20 6e 6f 44 65 73 6b 74 6f 70 20  set { noDesktop 
1f120 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20  = value; }..    
1f130 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
1f140 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
1f150 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f160 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f170 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f180 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
1f190 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
1f1a0 61 74 65 20 62 6f 6f 6c 20 6e 6f 43 6f 6d 70 61  ate bool noCompa
1f1b0 63 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ct;..           
1f1c0 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 4e 6f 43   public bool NoC
1f1d0 6f 6d 70 61 63 74 0d 0a 20 20 20 20 20 20 20 20  ompact..        
1f1e0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
1f1f0 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74         get { ret
1f200 75 72 6e 20 6e 6f 43 6f 6d 70 61 63 74 3b 20 7d  urn noCompact; }
1f210 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1f220 20 20 73 65 74 20 7b 20 6e 6f 43 6f 6d 70 61 63    set { noCompac
1f230 74 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20  t = value; }..  
1f240 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
1f250 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
1f260 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f270 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f280 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f290 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
1f2a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
1f2b0 69 76 61 74 65 20 62 6f 6f 6c 20 6e 6f 4e 65 74  ivate bool noNet
1f2c0 46 78 32 30 3b 0d 0a 20 20 20 20 20 20 20 20 20  Fx20;..         
1f2d0 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 4e     public bool N
1f2e0 6f 4e 65 74 46 78 32 30 0d 0a 20 20 20 20 20 20  oNetFx20..      
1f2f0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
1f300 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72           get { r
1f310 65 74 75 72 6e 20 6e 6f 4e 65 74 46 78 32 30 3b  eturn noNetFx20;
1f320 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
1f330 20 20 20 20 73 65 74 20 7b 20 6e 6f 4e 65 74 46      set { noNetF
1f340 78 32 30 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a  x20 = value; }..
1f350 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
1f360 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
1f370 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f380 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f390 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f3a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f3b0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1f3c0 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 6e 6f 4e  private bool noN
1f3d0 65 74 46 78 34 30 3b 0d 0a 20 20 20 20 20 20 20  etFx40;..       
1f3e0 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c       public bool
1f3f0 20 4e 6f 4e 65 74 46 78 34 30 0d 0a 20 20 20 20   NoNetFx40..    
1f400 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
1f410 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b             get {
1f420 20 72 65 74 75 72 6e 20 6e 6f 4e 65 74 46 78 34   return noNetFx4
1f430 30 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  0; }..          
1f440 20 20 20 20 20 20 73 65 74 20 7b 20 6e 6f 4e 65        set { noNe
1f450 74 46 78 34 30 20 3d 20 76 61 6c 75 65 3b 20 7d  tFx40 = value; }
1f460 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
1f470 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
1f480 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f490 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f4a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f4b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f4c0 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
1f4d0 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 6e    private bool n
1f4e0 6f 4e 65 74 46 78 34 35 3b 0d 0a 20 20 20 20 20  oNetFx45;..     
1f4f0 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f         public bo
1f500 6f 6c 20 4e 6f 4e 65 74 46 78 34 35 0d 0a 20 20  ol NoNetFx45..  
1f510 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
1f520 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74               get
1f530 20 7b 20 72 65 74 75 72 6e 20 6e 6f 4e 65 74 46   { return noNetF
1f540 78 34 35 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  x45; }..        
1f550 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 6e 6f          set { no
1f560 4e 65 74 46 78 34 35 20 3d 20 76 61 6c 75 65 3b  NetFx45 = value;
1f570 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
1f580 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
1f590 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
1f5a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f5b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f5c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f5d0 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
1f5e0 20 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c      private bool
1f5f0 20 6e 6f 56 73 32 30 30 35 3b 0d 0a 20 20 20 20   noVs2005;..    
1f600 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 62          public b
1f610 6f 6f 6c 20 4e 6f 56 73 32 30 30 35 0d 0a 20 20  ool NoVs2005..  
1f620 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
1f630 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74               get
1f640 20 7b 20 72 65 74 75 72 6e 20 6e 6f 56 73 32 30   { return noVs20
1f650 30 35 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  05; }..         
1f660 20 20 20 20 20 20 20 73 65 74 20 7b 20 6e 6f 56         set { noV
1f670 73 32 30 30 35 20 3d 20 76 61 6c 75 65 3b 20 7d  s2005 = value; }
1f680 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
1f690 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
1f6a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f6b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f6c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f6d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f6e0 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
1f6f0 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 6e    private bool n
1f700 6f 56 73 32 30 30 38 3b 0d 0a 20 20 20 20 20 20  oVs2008;..      
1f710 20 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f        public boo
1f720 6c 20 4e 6f 56 73 32 30 30 38 0d 0a 20 20 20 20  l NoVs2008..    
1f730 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
1f740 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b             get {
1f750 20 72 65 74 75 72 6e 20 6e 6f 56 73 32 30 30 38   return noVs2008
1f760 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
1f770 20 20 20 20 20 73 65 74 20 7b 20 6e 6f 56 73 32       set { noVs2
1f780 30 30 38 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a  008 = value; }..
1f790 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
1f7a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
1f7b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f7c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f7d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f7e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f7f0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1f800 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 6e 6f 56  private bool noV
1f810 73 32 30 31 30 3b 0d 0a 20 20 20 20 20 20 20 20  s2010;..        
1f820 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20      public bool 
1f830 4e 6f 56 73 32 30 31 30 0d 0a 20 20 20 20 20 20  NoVs2010..      
1f840 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
1f850 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72           get { r
1f860 65 74 75 72 6e 20 6e 6f 56 73 32 30 31 30 3b 20  eturn noVs2010; 
1f870 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
1f880 20 20 20 73 65 74 20 7b 20 6e 6f 56 73 32 30 31     set { noVs201
1f890 30 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20  0 = value; }..  
1f8a0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
1f8b0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
1f8c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f8d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f8e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f8f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
1f900 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
1f910 69 76 61 74 65 20 62 6f 6f 6c 20 6e 6f 56 73 32  ivate bool noVs2
1f920 30 31 32 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  012;..          
1f930 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 4e 6f    public bool No
1f940 56 73 32 30 31 32 0d 0a 20 20 20 20 20 20 20 20  Vs2012..        
1f950 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
1f960 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74         get { ret
1f970 75 72 6e 20 6e 6f 56 73 32 30 31 32 3b 20 7d 0d  urn noVs2012; }.
1f980 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1f990 20 73 65 74 20 7b 20 6e 6f 56 73 32 30 31 32 20   set { noVs2012 
1f9a0 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20  = value; }..    
1f9b0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
1f9c0 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
1f9d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f9e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f9f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fa00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
1fa10 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
1fa20 61 74 65 20 62 6f 6f 6c 20 6e 6f 54 72 61 63 65  ate bool noTrace
1fa30 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ;..            p
1fa40 75 62 6c 69 63 20 62 6f 6f 6c 20 4e 6f 54 72 61  ublic bool NoTra
1fa50 63 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ce..            
1fa60 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
1fa70 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20     get { return 
1fa80 6e 6f 54 72 61 63 65 3b 20 7d 0d 0a 20 20 20 20  noTrace; }..    
1fa90 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20              set 
1faa0 7b 20 6e 6f 54 72 61 63 65 20 3d 20 76 61 6c 75  { noTrace = valu
1fab0 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  e; }..          
1fac0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
1fad0 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
1fae0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1faf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fb00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fb10 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
1fb20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 62 6f        private bo
1fb30 6f 6c 20 6e 6f 43 6f 6e 73 6f 6c 65 3b 0d 0a 20  ol noConsole;.. 
1fb40 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
1fb50 63 20 62 6f 6f 6c 20 4e 6f 43 6f 6e 73 6f 6c 65  c bool NoConsole
1fb60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
1fb70 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1fb80 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 6e 6f   get { return no
1fb90 43 6f 6e 73 6f 6c 65 3b 20 7d 0d 0a 20 20 20 20  Console; }..    
1fba0 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20              set 
1fbb0 7b 20 6e 6f 43 6f 6e 73 6f 6c 65 20 3d 20 76 61  { noConsole = va
1fbc0 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  lue; }..        
1fbd0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
1fbe0 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
1fbf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fc00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fc10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fc20 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
1fc30 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
1fc40 62 6f 6f 6c 20 6e 6f 4c 6f 67 3b 0d 0a 20 20 20  bool noLog;..   
1fc50 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
1fc60 62 6f 6f 6c 20 4e 6f 4c 6f 67 0d 0a 20 20 20 20  bool NoLog..    
1fc70 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
1fc80 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b             get {
1fc90 20 72 65 74 75 72 6e 20 6e 6f 4c 6f 67 3b 20 7d   return noLog; }
1fca0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1fcb0 20 20 73 65 74 20 7b 20 6e 6f 4c 6f 67 20 3d 20    set { noLog = 
1fcc0 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20  value; }..      
1fcd0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
1fce0 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fd20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
1fd30 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
1fd40 65 20 62 6f 6f 6c 20 74 68 72 6f 77 4f 6e 4d 69  e bool throwOnMi
1fd50 73 73 69 6e 67 3b 0d 0a 20 20 20 20 20 20 20 20  ssing;..        
1fd60 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20      public bool 
1fd70 54 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 0d 0a  ThrowOnMissing..
1fd80 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
1fd90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67                 g
1fda0 65 74 20 7b 20 72 65 74 75 72 6e 20 74 68 72 6f  et { return thro
1fdb0 77 4f 6e 4d 69 73 73 69 6e 67 3b 20 7d 0d 0a 20  wOnMissing; }.. 
1fdc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
1fdd0 65 74 20 7b 20 74 68 72 6f 77 4f 6e 4d 69 73 73  et { throwOnMiss
1fde0 69 6e 67 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a  ing = value; }..
1fdf0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
1fe00 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
1fe10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fe20 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1fe60 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 77 68 61  private bool wha
1fe70 74 49 66 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  tIf;..          
1fe80 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 57 68    public bool Wh
1fe90 61 74 49 66 0d 0a 20 20 20 20 20 20 20 20 20 20  atIf..          
1fea0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
1feb0 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72       get { retur
1fec0 6e 20 77 68 61 74 49 66 3b 20 7d 0d 0a 20 20 20  n whatIf; }..   
1fed0 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74               set
1fee0 20 7b 20 77 68 61 74 49 66 20 3d 20 76 61 6c 75   { whatIf = valu
1fef0 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  e; }..          
1ff00 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
1ff10 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
1ff20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ff30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ff40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ff50 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
1ff60 20 20 20 20 20 20 70 72 69 76 61 74 65 20 62 6f        private bo
1ff70 6f 6c 20 64 65 62 75 67 3b 0d 0a 20 20 20 20 20  ol debug;..     
1ff80 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f         public bo
1ff90 6f 6c 20 44 65 62 75 67 0d 0a 20 20 20 20 20 20  ol Debug..      
1ffa0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
1ffb0 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72           get { r
1ffc0 65 74 75 72 6e 20 64 65 62 75 67 3b 20 7d 0d 0a  eturn debug; }..
1ffd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ffe0 73 65 74 20 7b 20 64 65 62 75 67 20 3d 20 76 61  set { debug = va
1fff0 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  lue; }..        
20000 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
20010 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
20020 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20030 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20040 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20050 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
20060 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
20070 62 6f 6f 6c 20 76 65 72 62 6f 73 65 3b 0d 0a 20  bool verbose;.. 
20080 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
20090 63 20 62 6f 6f 6c 20 56 65 72 62 6f 73 65 0d 0a  c bool Verbose..
200a0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
200b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67                 g
200c0 65 74 20 7b 20 72 65 74 75 72 6e 20 76 65 72 62  et { return verb
200d0 6f 73 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  ose; }..        
200e0 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 76 65          set { ve
200f0 72 62 6f 73 65 20 3d 20 76 61 6c 75 65 3b 20 7d  rbose = value; }
20100 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
20110 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
20120 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20130 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20140 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20150 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20160 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
20170 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 63    private bool c
20180 6f 6e 66 69 72 6d 3b 0d 0a 20 20 20 20 20 20 20  onfirm;..       
20190 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c       public bool
201a0 20 43 6f 6e 66 69 72 6d 0d 0a 20 20 20 20 20 20   Confirm..      
201b0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
201c0 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72           get { r
201d0 65 74 75 72 6e 20 63 6f 6e 66 69 72 6d 3b 20 7d  eturn confirm; }
201e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
201f0 20 20 73 65 74 20 7b 20 63 6f 6e 66 69 72 6d 20    set { confirm 
20200 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20  = value; }..    
20210 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
20220 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f         #endregio
20230 6e 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  n..        }..  
20240 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
20250 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
20260 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20270 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20280 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20290 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
202a0 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23  ///....        #
202b0 72 65 67 69 6f 6e 20 46 72 61 6d 65 77 6f 72 6b  region Framework
202c0 4c 69 73 74 20 43 6c 61 73 73 0d 0a 20 20 20 20  List Class..    
202d0 20 20 20 20 70 72 69 76 61 74 65 20 73 65 61 6c      private seal
202e0 65 64 20 63 6c 61 73 73 20 46 72 61 6d 65 77 6f  ed class Framewo
202f0 72 6b 4c 69 73 74 0d 0a 20 20 20 20 20 20 20 20  rkList..        
20300 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  {..            #
20310 72 65 67 69 6f 6e 20 50 75 62 6c 69 63 20 43 6f  region Public Co
20320 6e 73 74 72 75 63 74 6f 72 73 0d 0a 20 20 20 20  nstructors..    
20330 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 46          public F
20340 72 61 6d 65 77 6f 72 6b 4c 69 73 74 28 29 0d 0a  rameworkList()..
20350 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
20360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
20370 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20  / do nothing... 
20380 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
20390 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65            #endre
203a0 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20  gion....        
203b0 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
203c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
203d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
203e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
203f0 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
20400 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50         #region P
20410 75 62 6c 69 63 20 4d 65 74 68 6f 64 73 0d 0a 20  ublic Methods.. 
20420 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
20430 74 65 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b  te MockRegistryK
20440 65 79 20 72 6f 6f 74 4b 65 79 3b 0d 0a 20 20 20  ey rootKey;..   
20450 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
20460 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20  MockRegistryKey 
20470 52 6f 6f 74 4b 65 79 0d 0a 20 20 20 20 20 20 20  RootKey..       
20480 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
20490 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65          get { re
204a0 74 75 72 6e 20 72 6f 6f 74 4b 65 79 3b 20 7d 0d  turn rootKey; }.
204b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
204c0 20 73 65 74 20 7b 20 72 6f 6f 74 4b 65 79 20 3d   set { rootKey =
204d0 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20   value; }..     
204e0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
204f0 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
20500 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20510 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20520 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20530 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
20540 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
20550 74 65 20 53 74 72 69 6e 67 4c 69 73 74 20 6e 61  te StringList na
20560 6d 65 73 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  mes;..          
20570 20 20 70 75 62 6c 69 63 20 53 74 72 69 6e 67 4c    public StringL
20580 69 73 74 20 4e 61 6d 65 73 0d 0a 20 20 20 20 20  ist Names..     
20590 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
205a0 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20            get { 
205b0 72 65 74 75 72 6e 20 6e 61 6d 65 73 3b 20 7d 0d  return names; }.
205c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
205d0 20 73 65 74 20 7b 20 6e 61 6d 65 73 20 3d 20 76   set { names = v
205e0 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20  alue; }..       
205f0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
20600 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
20610 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20620 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20630 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20640 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
20650 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65           private
20660 20 56 65 72 73 69 6f 6e 4d 61 70 20 76 65 72 73   VersionMap vers
20670 69 6f 6e 73 3b 0d 0a 20 20 20 20 20 20 20 20 20  ions;..         
20680 20 20 20 70 75 62 6c 69 63 20 56 65 72 73 69 6f     public Versio
20690 6e 4d 61 70 20 56 65 72 73 69 6f 6e 73 0d 0a 20  nMap Versions.. 
206a0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
206b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65                ge
206c0 74 20 7b 20 72 65 74 75 72 6e 20 76 65 72 73 69  t { return versi
206d0 6f 6e 73 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  ons; }..        
206e0 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 76 65          set { ve
206f0 72 73 69 6f 6e 73 20 3d 20 76 61 6c 75 65 3b 20  rsions = value; 
20700 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
20710 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
20720 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20730 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20740 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20750 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20760 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
20770 20 20 20 70 72 69 76 61 74 65 20 53 74 72 69 6e     private Strin
20780 67 4c 69 73 74 20 70 6c 61 74 66 6f 72 6d 4e 61  gList platformNa
20790 6d 65 73 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  mes;..          
207a0 20 20 70 75 62 6c 69 63 20 53 74 72 69 6e 67 4c    public StringL
207b0 69 73 74 20 50 6c 61 74 66 6f 72 6d 4e 61 6d 65  ist PlatformName
207c0 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  s..            {
207d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
207e0 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 70    get { return p
207f0 6c 61 74 66 6f 72 6d 4e 61 6d 65 73 3b 20 7d 0d  latformNames; }.
20800 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
20810 20 73 65 74 20 7b 20 70 6c 61 74 66 6f 72 6d 4e   set { platformN
20820 61 6d 65 73 20 3d 20 76 61 6c 75 65 3b 20 7d 0d  ames = value; }.
20830 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
20840 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64              #end
20850 72 65 67 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20  region..        
20860 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72  }..        #endr
20870 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20  egion....       
20880 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
20890 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
208a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
208b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
208c0 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
208d0 20 20 20 20 23 72 65 67 69 6f 6e 20 56 73 4c 69      #region VsLi
208e0 73 74 20 43 6c 61 73 73 0d 0a 20 20 20 20 20 20  st Class..      
208f0 20 20 70 72 69 76 61 74 65 20 73 65 61 6c 65 64    private sealed
20900 20 63 6c 61 73 73 20 56 73 4c 69 73 74 0d 0a 20   class VsList.. 
20910 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
20920 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 75        #region Pu
20930 62 6c 69 63 20 43 6f 6e 73 74 72 75 63 74 6f 72  blic Constructor
20940 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  s..            p
20950 75 62 6c 69 63 20 56 73 4c 69 73 74 28 29 0d 0a  ublic VsList()..
20960 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
20970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
20980 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20  / do nothing... 
20990 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
209a0 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65            #endre
209b0 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20  gion....        
209c0 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
209d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
209e0 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20  ///////....     
20a10 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50         #region P
20a20 75 62 6c 69 63 20 50 72 6f 70 65 72 74 69 65 73  ublic Properties
20a30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
20a40 69 76 61 74 65 20 4d 6f 63 6b 52 65 67 69 73 74  ivate MockRegist
20a50 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79 3b 0d 0a  ryKey rootKey;..
20a60 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
20a70 69 63 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b  ic MockRegistryK
20a80 65 79 20 52 6f 6f 74 4b 65 79 0d 0a 20 20 20 20  ey RootKey..    
20a90 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
20aa0 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b             get {
20ab0 20 72 65 74 75 72 6e 20 72 6f 6f 74 4b 65 79 3b   return rootKey;
20ac0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
20ad0 20 20 20 20 73 65 74 20 7b 20 72 6f 6f 74 4b 65      set { rootKe
20ae0 79 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20  y = value; }..  
20af0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
20b00 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
20b10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20b20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20b30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20b40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
20b50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
20b60 69 76 61 74 65 20 56 65 72 73 69 6f 6e 4c 69 73  ivate VersionLis
20b70 74 20 76 65 72 73 69 6f 6e 73 3b 0d 0a 20 20 20  t versions;..   
20b80 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
20b90 56 65 72 73 69 6f 6e 4c 69 73 74 20 56 65 72 73  VersionList Vers
20ba0 69 6f 6e 73 0d 0a 20 20 20 20 20 20 20 20 20 20  ions..          
20bb0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
20bc0 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72       get { retur
20bd0 6e 20 76 65 72 73 69 6f 6e 73 3b 20 7d 0d 0a 20  n versions; }.. 
20be0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
20bf0 65 74 20 7b 20 76 65 72 73 69 6f 6e 73 20 3d 20  et { versions = 
20c00 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20  value; }..      
20c10 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
20c20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d       #endregion.
20c30 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
20c40 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
20c50 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
20c60 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  on....        //
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 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20cb0 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
20cc0 20 23 72 65 67 69 6f 6e 20 50 72 69 76 61 74 65   #region Private
20cd0 20 43 6f 6e 73 74 61 6e 74 20 44 61 74 61 0d 0a   Constant Data..
20ce0 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
20cf0 63 6f 6e 73 74 20 73 74 72 69 6e 67 20 43 6f 72  const string Cor
20d00 65 46 69 6c 65 4e 61 6d 65 20 3d 20 22 53 79 73  eFileName = "Sys
20d10 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e  tem.Data.SQLite.
20d20 64 6c 6c 22 3b 0d 0a 20 20 20 20 20 20 20 20 70  dll";..        p
20d30 72 69 76 61 74 65 20 63 6f 6e 73 74 20 73 74 72  rivate const str
20d40 69 6e 67 20 4c 69 6e 71 46 69 6c 65 4e 61 6d 65  ing LinqFileName
20d50 20 3d 20 22 53 79 73 74 65 6d 2e 44 61 74 61 2e   = "System.Data.
20d60 53 51 4c 69 74 65 2e 4c 69 6e 71 2e 64 6c 6c 22  SQLite.Linq.dll"
20d70 3b 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  ;..        priva
20d80 74 65 20 63 6f 6e 73 74 20 73 74 72 69 6e 67 20  te const string 
20d90 44 65 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65  DesignerFileName
20da0 20 3d 20 22 53 51 4c 69 74 65 2e 44 65 73 69 67   = "SQLite.Desig
20db0 6e 65 72 2e 64 6c 6c 22 3b 0d 0a 20 20 20 20 20  ner.dll";..     
20dc0 20 20 20 70 72 69 76 61 74 65 20 63 6f 6e 73 74     private const
20dd0 20 73 74 72 69 6e 67 20 50 72 6f 76 69 64 65 72   string Provider
20de0 4e 61 6d 65 20 3d 20 22 53 51 4c 69 74 65 20 44  Name = "SQLite D
20df0 61 74 61 20 50 72 6f 76 69 64 65 72 22 3b 0d 0a  ata Provider";..
20e00 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
20e10 63 6f 6e 73 74 20 73 74 72 69 6e 67 20 50 72 6f  const string Pro
20e20 6a 65 63 74 4e 61 6d 65 20 3d 20 22 53 79 73 74  jectName = "Syst
20e30 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 22 3b  em.Data.SQLite";
20e40 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
20e50 65 20 63 6f 6e 73 74 20 73 74 72 69 6e 67 20 4c  e const string L
20e60 65 67 61 63 79 50 72 6f 6a 65 63 74 4e 61 6d 65  egacyProjectName
20e70 20 3d 20 22 53 51 4c 69 74 65 22 3b 0d 0a 20 20   = "SQLite";..  
20e80 20 20 20 20 20 20 70 72 69 76 61 74 65 20 63 6f        private co
20e90 6e 73 74 20 73 74 72 69 6e 67 20 49 6e 76 61 72  nst string Invar
20ea0 69 61 6e 74 4e 61 6d 65 20 3d 20 22 53 79 73 74  iantName = "Syst
20eb0 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 22 3b  em.Data.SQLite";
20ec0 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
20ed0 65 20 63 6f 6e 73 74 20 73 74 72 69 6e 67 20 46  e const string F
20ee0 61 63 74 6f 72 79 54 79 70 65 4e 61 6d 65 20 3d  actoryTypeName =
20ef0 20 22 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51   "System.Data.SQ
20f00 4c 69 74 65 2e 53 51 4c 69 74 65 46 61 63 74 6f  Lite.SQLiteFacto
20f10 72 79 22 3b 0d 0a 20 20 20 20 20 20 20 20 70 72  ry";..        pr
20f20 69 76 61 74 65 20 63 6f 6e 73 74 20 73 74 72 69  ivate const stri
20f30 6e 67 20 44 65 73 63 72 69 70 74 69 6f 6e 20 3d  ng Description =
20f40 20 22 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b   ".NET Framework
20f50 20 44 61 74 61 20 50 72 6f 76 69 64 65 72 20 66   Data Provider f
20f60 6f 72 20 53 51 4c 69 74 65 22 3b 0d 0a 0d 0a 20  or SQLite";.... 
20f70 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
20f80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20f90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20fa0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20fb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
20fc0 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
20fd0 65 20 63 6f 6e 73 74 20 73 74 72 69 6e 67 20 43  e const string C
20fe0 4c 52 76 32 49 6d 61 67 65 52 75 6e 74 69 6d 65  LRv2ImageRuntime
20ff0 56 65 72 73 69 6f 6e 20 3d 20 22 76 32 2e 30 2e  Version = "v2.0.
21000 35 30 37 32 37 22 3b 0d 0a 20 20 20 20 20 20 20  50727";..       
21010 20 70 72 69 76 61 74 65 20 63 6f 6e 73 74 20 73   private const s
21020 74 72 69 6e 67 20 43 4c 52 76 34 49 6d 61 67 65  tring CLRv4Image
21030 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 20 3d  RuntimeVersion =
21040 20 22 76 34 2e 30 2e 33 30 33 31 39 22 3b 0d 0a   "v4.0.30319";..
21050 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
21060 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
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 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69  /....        pri
210b0 76 61 74 65 20 63 6f 6e 73 74 20 73 74 72 69 6e  vate const strin
210c0 67 20 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f  g NameAndValueFo
210d0 72 6d 61 74 20 3d 20 22 7b 30 7d 3a 20 7b 31 7d  rmat = "{0}: {1}
210e0 22 3b 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  ";..        priv
210f0 61 74 65 20 63 6f 6e 73 74 20 73 74 72 69 6e 67  ate const string
21100 20 4c 6f 67 46 69 6c 65 53 75 66 66 69 78 20 3d   LogFileSuffix =
21110 20 22 2e 6c 6f 67 22 3b 0d 0a 0d 0a 20 20 20 20   ".log";....    
21120 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
21130 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21140 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21150 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21160 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
21170 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 63         private c
21180 6f 6e 73 74 20 73 74 72 69 6e 67 20 52 6f 6f 74  onst string Root
21190 4b 65 79 4e 61 6d 65 20 3d 20 22 53 6f 66 74 77  KeyName = "Softw
211a0 61 72 65 22 3b 0d 0a 20 20 20 20 20 20 20 20 70  are";..        p
211b0 72 69 76 61 74 65 20 63 6f 6e 73 74 20 73 74 72  rivate const str
211c0 69 6e 67 20 57 6f 77 36 34 53 75 62 4b 65 79 4e  ing Wow64SubKeyN
211d0 61 6d 65 20 3d 20 22 57 6f 77 36 34 33 32 4e 6f  ame = "Wow6432No
211e0 64 65 22 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  de";....        
211f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21200 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21210 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21220 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21230 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
21240 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 2f     //..        /
21250 2f 20 4e 4f 54 45 3a 20 54 68 65 20 2e 4e 45 54  / NOTE: The .NET
21260 20 46 72 61 6d 65 77 6f 72 6b 20 68 61 73 20 62   Framework has b
21270 6f 74 68 20 33 32 2d 62 69 74 20 61 6e 64 20 36  oth 32-bit and 6
21280 34 2d 62 69 74 20 65 64 69 74 69 6f 6e 73 2e 0d  4-bit editions..
21290 0a 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20  .        //..   
212a0 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61       private sta
212b0 74 69 63 20 72 65 61 64 6f 6e 6c 79 20 62 6f 6f  tic readonly boo
212c0 6c 20 4e 65 74 46 78 49 73 33 32 42 69 74 4f 6e  l NetFxIs32BitOn
212d0 6c 79 20 3d 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20  ly = false;.... 
212e0 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
212f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21300 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21310 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21320 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
21330 0d 0a 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20  ..        //..  
21340 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 46        // NOTE: F
21350 6f 72 20 6e 6f 77 2c 20 56 69 73 75 61 6c 20 53  or now, Visual S
21360 74 75 64 69 6f 20 69 73 20 61 6c 77 61 79 73 20  tudio is always 
21370 61 20 33 32 2d 62 69 74 20 61 70 70 6c 69 63 61  a 32-bit applica
21380 74 69 6f 6e 2e 0d 0a 20 20 20 20 20 20 20 20 2f  tion...        /
21390 2f 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  /..        priva
213a0 74 65 20 73 74 61 74 69 63 20 72 65 61 64 6f 6e  te static readon
213b0 6c 79 20 62 6f 6f 6c 20 56 73 49 73 33 32 42 69  ly bool VsIs32Bi
213c0 74 4f 6e 6c 79 20 3d 20 74 72 75 65 3b 0d 0a 0d  tOnly = true;...
213d0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
213e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
213f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21400 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21410 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21420 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  ....        priv
21430 61 74 65 20 73 74 61 74 69 63 20 72 65 61 64 6f  ate static reado
21440 6e 6c 79 20 73 74 72 69 6e 67 20 56 73 49 64 46  nly string VsIdF
21450 6f 72 6d 61 74 20 3d 20 22 42 22 3b 0d 0a 0d 0a  ormat = "B";....
21460 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
21470 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21480 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21490 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
214a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
214b0 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  ...        priva
214c0 74 65 20 73 74 61 74 69 63 20 72 65 61 64 6f 6e  te static readon
214d0 6c 79 20 73 74 72 69 6e 67 20 58 50 61 74 68 46  ly string XPathF
214e0 6f 72 41 64 64 45 6c 65 6d 65 6e 74 20 3d 0d 0a  orAddElement =..
214f0 20 20 20 20 20 20 20 20 20 20 20 20 22 63 6f 6e              "con
21500 66 69 67 75 72 61 74 69 6f 6e 2f 73 79 73 74 65  figuration/syste
21510 6d 2e 64 61 74 61 2f 44 62 50 72 6f 76 69 64 65  m.data/DbProvide
21520 72 46 61 63 74 6f 72 69 65 73 2f 61 64 64 5b 40  rFactories/add[@
21530 69 6e 76 61 72 69 61 6e 74 3d 5c 22 7b 30 7d 5c  invariant=\"{0}\
21540 22 5d 22 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  "]";....        
21550 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 72  private static r
21560 65 61 64 6f 6e 6c 79 20 73 74 72 69 6e 67 20 58  eadonly string X
21570 50 61 74 68 46 6f 72 52 65 6d 6f 76 65 45 6c 65  PathForRemoveEle
21580 6d 65 6e 74 20 3d 0d 0a 20 20 20 20 20 20 20 20  ment =..        
21590 20 20 20 20 22 63 6f 6e 66 69 67 75 72 61 74 69      "configurati
215a0 6f 6e 2f 73 79 73 74 65 6d 2e 64 61 74 61 2f 44  on/system.data/D
215b0 62 50 72 6f 76 69 64 65 72 46 61 63 74 6f 72 69  bProviderFactori
215c0 65 73 2f 72 65 6d 6f 76 65 5b 40 69 6e 76 61 72  es/remove[@invar
215d0 69 61 6e 74 3d 5c 22 7b 30 7d 5c 22 5d 22 3b 0d  iant=\"{0}\"]";.
215e0 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67  .        #endreg
215f0 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  ion....        /
21600 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21610 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21620 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21630 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21640 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
21650 20 20 23 72 65 67 69 6f 6e 20 50 72 69 76 61 74    #region Privat
21660 65 20 53 74 61 74 69 63 20 44 61 74 61 0d 0a 20  e Static Data.. 
21670 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
21680 74 61 74 69 63 20 41 73 73 65 6d 62 6c 79 20 74  tatic Assembly t
21690 68 69 73 41 73 73 65 6d 62 6c 79 20 3d 20 41 73  hisAssembly = As
216a0 73 65 6d 62 6c 79 2e 47 65 74 45 78 65 63 75 74  sembly.GetExecut
216b0 69 6e 67 41 73 73 65 6d 62 6c 79 28 29 3b 0d 0a  ingAssembly();..
216c0 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
216d0 65 20 73 74 61 74 69 63 20 73 74 72 69 6e 67 20  e static string 
216e0 74 72 61 63 65 43 61 74 65 67 6f 72 79 20 3d 20  traceCategory = 
216f0 50 61 74 68 2e 47 65 74 46 69 6c 65 4e 61 6d 65  Path.GetFileName
21700 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74  (..            t
21710 68 69 73 41 73 73 65 6d 62 6c 79 2e 4c 6f 63 61  hisAssembly.Loca
21720 74 69 6f 6e 29 3b 20 2f 2a 20 4e 4f 54 45 3a 20  tion); /* NOTE: 
21730 53 61 6d 65 20 66 6f 72 20 64 65 62 75 67 20 61  Same for debug a
21740 6e 64 20 74 72 61 63 65 2e 20 2a 2f 0d 0a 0d 0a  nd trace. */....
21750 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
21760 73 74 61 74 69 63 20 54 72 61 63 65 43 61 6c 6c  static TraceCall
21770 62 61 63 6b 20 64 65 62 75 67 43 61 6c 6c 62 61  back debugCallba
21780 63 6b 20 3d 20 41 70 70 44 65 62 75 67 3b 0d 0a  ck = AppDebug;..
21790 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
217a0 73 74 61 74 69 63 20 54 72 61 63 65 43 61 6c 6c  static TraceCall
217b0 62 61 63 6b 20 74 72 61 63 65 43 61 6c 6c 62 61  back traceCallba
217c0 63 6b 20 3d 20 41 70 70 54 72 61 63 65 3b 0d 0a  ck = AppTrace;..
217d0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
217e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
217f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21800 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21810 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21820 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69  /....        pri
21830 76 61 74 65 20 73 74 61 74 69 63 20 73 74 72 69  vate static stri
21840 6e 67 20 73 79 73 74 65 6d 44 69 72 65 63 74 6f  ng systemDirecto
21850 72 79 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a 23 69  ry = null;....#i
21860 66 20 57 49 4e 44 4f 57 53 0d 0a 20 20 20 20 20  f WINDOWS..     
21870 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69     private stati
21880 63 20 73 74 72 69 6e 67 20 73 79 73 74 65 6d 44  c string systemD
21890 69 72 65 63 74 6f 72 79 57 6f 77 36 34 20 3d 20  irectoryWow64 = 
218a0 6e 75 6c 6c 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d  null;..#endif...
218b0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
218c0 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  ....        priv
21910 61 74 65 20 73 74 61 74 69 63 20 69 6e 74 20 66  ate static int f
21920 69 6c 65 73 43 72 65 61 74 65 64 20 3d 20 30 3b  ilesCreated = 0;
21930 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
21940 65 20 73 74 61 74 69 63 20 69 6e 74 20 66 69 6c  e static int fil
21950 65 73 4d 6f 64 69 66 69 65 64 20 3d 20 30 3b 0d  esModified = 0;.
21960 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
21970 20 73 74 61 74 69 63 20 69 6e 74 20 66 69 6c 65   static int file
21980 73 44 65 6c 65 74 65 64 20 3d 20 30 3b 0d 0a 20  sDeleted = 0;.. 
21990 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f         #endregio
219a0 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  n....        ///
219b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
219c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
219d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
219e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
219f0 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
21a00 23 72 65 67 69 6f 6e 20 54 72 61 63 65 20 48 61  #region Trace Ha
21a10 6e 64 6c 69 6e 67 0d 0a 20 20 20 20 20 20 20 20  ndling..        
21a20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 73  private static s
21a30 74 72 69 6e 67 20 47 65 74 4c 6f 67 46 69 6c 65  tring GetLogFile
21a40 4e 61 6d 65 28 0d 0a 20 20 20 20 20 20 20 20 20  Name(..         
21a50 20 20 20 73 74 72 69 6e 67 20 74 79 70 65 4e 61     string typeNa
21a60 6d 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  me..            
21a70 29 20 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a 20  ) /* throw */.. 
21a80 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
21a90 20 20 20 20 20 20 73 74 72 69 6e 67 20 66 69 6c        string fil
21aa0 65 4e 61 6d 65 20 3d 20 50 61 74 68 2e 47 65 74  eName = Path.Get
21ab0 54 65 6d 70 46 69 6c 65 4e 61 6d 65 28 29 3b 0d  TempFileName();.
21ac0 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72  .            str
21ad0 69 6e 67 20 64 69 72 65 63 74 6f 72 79 20 3d 20  ing directory = 
21ae0 50 61 74 68 2e 47 65 74 44 69 72 65 63 74 6f 72  Path.GetDirector
21af0 79 4e 61 6d 65 28 66 69 6c 65 4e 61 6d 65 29 3b  yName(fileName);
21b00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74  ..            st
21b10 72 69 6e 67 20 66 69 6c 65 4e 61 6d 65 4f 6e 6c  ring fileNameOnl
21b20 79 20 3d 20 50 61 74 68 2e 47 65 74 46 69 6c 65  y = Path.GetFile
21b30 4e 61 6d 65 57 69 74 68 6f 75 74 45 78 74 65 6e  NameWithoutExten
21b40 73 69 6f 6e 28 66 69 6c 65 4e 61 6d 65 29 3b 0d  sion(fileName);.
21b50 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  ...            s
21b60 74 72 69 6e 67 20 6e 65 77 46 69 6c 65 4e 61 6d  tring newFileNam
21b70 65 20 3d 20 50 61 74 68 2e 43 6f 6d 62 69 6e 65  e = Path.Combine
21b80 28 64 69 72 65 63 74 6f 72 79 2c 20 53 74 72 69  (directory, Stri
21b90 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ng.Format(..    
21ba0 20 20 20 20 20 20 20 20 20 20 20 20 22 7b 30 7d              "{0}
21bb0 7b 31 7d 7b 32 7d 22 2c 20 74 72 61 63 65 43 61  {1}{2}", traceCa
21bc0 74 65 67 6f 72 79 2c 20 21 53 74 72 69 6e 67 2e  tegory, !String.
21bd0 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 74 79  IsNullOrEmpty(ty
21be0 70 65 4e 61 6d 65 29 20 3f 0d 0a 20 20 20 20 20  peName) ?..     
21bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
21c00 2e 22 20 2b 20 74 79 70 65 4e 61 6d 65 20 3a 20  ." + typeName : 
21c10 53 74 72 69 6e 67 2e 45 6d 70 74 79 2c 20 22 2e  String.Empty, ".
21c20 22 20 2b 20 66 69 6c 65 4e 61 6d 65 4f 6e 6c 79  " + fileNameOnly
21c30 20 2b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   +..            
21c40 20 20 20 20 20 20 20 20 4c 6f 67 46 69 6c 65 53          LogFileS
21c50 75 66 66 69 78 29 29 3b 0d 0a 0d 0a 20 20 20 20  uffix));....    
21c60 20 20 20 20 20 20 20 20 46 69 6c 65 2e 4d 6f 76          File.Mov
21c70 65 28 66 69 6c 65 4e 61 6d 65 2c 20 6e 65 77 46  e(fileName, newF
21c80 69 6c 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20  ileName);....   
21c90 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
21ca0 6e 65 77 46 69 6c 65 4e 61 6d 65 3b 0d 0a 20 20  newFileName;..  
21cb0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
21cc0 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
21cd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21ce0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21cf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21d00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
21d10 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74        private st
21d20 61 74 69 63 20 76 6f 69 64 20 41 70 70 44 65 62  atic void AppDeb
21d30 75 67 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ug(..           
21d40 20 73 74 72 69 6e 67 20 6d 65 73 73 61 67 65 2c   string message,
21d50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74  ..            st
21d60 72 69 6e 67 20 63 61 74 65 67 6f 72 79 0d 0a 20  ring category.. 
21d70 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
21d80 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
21d90 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65       TraceOps.De
21da0 62 75 67 43 6f 72 65 28 53 74 72 69 6e 67 2e 46  bugCore(String.F
21db0 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
21dc0 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73          TraceOps
21dd0 2e 44 65 62 75 67 46 6f 72 6d 61 74 2c 20 54 72  .DebugFormat, Tr
21de0 61 63 65 4f 70 73 2e 4e 65 78 74 44 65 62 75 67  aceOps.NextDebug
21df0 49 64 28 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  Id(),..         
21e00 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e         TraceOps.
21e10 54 69 6d 65 53 74 61 6d 70 28 44 61 74 65 54 69  TimeStamp(DateTi
21e20 6d 65 2e 55 74 63 4e 6f 77 29 2c 20 6d 65 73 73  me.UtcNow), mess
21e30 61 67 65 29 2c 20 63 61 74 65 67 6f 72 79 29 3b  age), category);
21e40 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
21e50 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
21e60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21e70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21e80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21e90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
21ea0 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
21eb0 65 20 73 74 61 74 69 63 20 76 6f 69 64 20 41 70  e static void Ap
21ec0 70 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20  pTrace(..       
21ed0 20 20 20 20 20 73 74 72 69 6e 67 20 6d 65 73 73       string mess
21ee0 61 67 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  age,..          
21ef0 20 20 73 74 72 69 6e 67 20 63 61 74 65 67 6f 72    string categor
21f00 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29  y..            )
21f10 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
21f20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70           TraceOp
21f30 73 2e 54 72 61 63 65 43 6f 72 65 28 53 74 72 69  s.TraceCore(Stri
21f40 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ng.Format(..    
21f50 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
21f60 65 4f 70 73 2e 54 72 61 63 65 46 6f 72 6d 61 74  eOps.TraceFormat
21f70 2c 20 54 72 61 63 65 4f 70 73 2e 4e 65 78 74 54  , TraceOps.NextT
21f80 72 61 63 65 49 64 28 29 2c 0d 0a 20 20 20 20 20  raceId(),..     
21f90 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
21fa0 4f 70 73 2e 54 69 6d 65 53 74 61 6d 70 28 44 61  Ops.TimeStamp(Da
21fb0 74 65 54 69 6d 65 2e 55 74 63 4e 6f 77 29 2c 20  teTime.UtcNow), 
21fc0 6d 65 73 73 61 67 65 29 2c 20 63 61 74 65 67 6f  message), catego
21fd0 72 79 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  ry);..        }.
21fe0 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67  .        #endreg
21ff0 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  ion....        /
22000 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22010 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22020 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22030 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22040 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
22050 20 20 23 72 65 67 69 6f 6e 20 47 65 6e 65 72 69    #region Generi
22060 63 20 50 6c 61 74 66 6f 72 6d 20 48 61 6e 64 6c  c Platform Handl
22070 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 70 72 69  ing..        pri
22080 76 61 74 65 20 73 74 61 74 69 63 20 62 6f 6f 6c  vate static bool
22090 20 49 73 36 34 42 69 74 50 72 6f 63 65 73 73 28   Is64BitProcess(
220a0 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
220b0 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
220c0 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54            // NOT
220d0 45 3a 20 52 65 74 75 72 6e 73 20 74 72 75 65 20  E: Returns true 
220e0 69 66 20 74 68 65 20 63 75 72 72 65 6e 74 20 70  if the current p
220f0 72 6f 63 65 73 73 20 69 73 20 36 34 2d 62 69 74  rocess is 64-bit
22100 2e 20 20 49 66 20 74 68 69 73 0d 0a 20 20 20 20  .  If this..    
22110 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
22120 20 69 73 20 74 72 75 65 2c 20 77 65 20 2a 6b 6e   is true, we *kn
22130 6f 77 2a 20 74 68 61 74 20 77 65 20 6d 75 73 74  ow* that we must
22140 20 62 65 20 72 75 6e 6e 69 6e 67 20 6f 6e 20 61   be running on a
22150 20 36 34 2d 62 69 74 0d 0a 20 20 20 20 20 20 20   64-bit..       
22160 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 6f 70       //       op
22170 65 72 61 74 69 6e 67 20 73 79 73 74 65 6d 20 61  erating system a
22180 73 20 77 65 6c 6c 2e 20 20 48 6f 77 65 76 65 72  s well.  However
22190 2c 20 69 66 20 74 68 69 73 20 69 73 20 66 61 6c  , if this is fal
221a0 73 65 2c 20 77 65 0d 0a 20 20 20 20 20 20 20 20  se, we..        
221b0 20 20 20 20 2f 2f 20 20 20 20 20 20 20 64 6f 20      //       do 
221c0 6e 6f 74 20 6e 65 63 65 73 73 61 72 69 6c 79 20  not necessarily 
221d0 6b 6e 6f 77 20 74 68 61 74 20 77 65 20 61 72 65  know that we are
221e0 20 72 75 6e 6e 69 6e 67 20 6f 6e 20 61 20 33 32   running on a 32
221f0 2d 62 69 74 0d 0a 20 20 20 20 20 20 20 20 20 20  -bit..          
22200 20 20 2f 2f 20 20 20 20 20 20 20 6f 70 65 72 61    //       opera
22210 74 69 6e 67 20 73 79 73 74 65 6d 2c 20 64 75 65  ting system, due
22220 20 74 6f 20 57 6f 57 36 34 20 28 57 69 6e 33 32   to WoW64 (Win32
22230 2d 6f 6e 2d 57 69 6e 36 34 29 2c 20 65 74 63 2e  -on-Win64), etc.
22240 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
22250 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
22260 74 75 72 6e 20 28 49 6e 74 50 74 72 2e 53 69 7a  turn (IntPtr.Siz
22270 65 20 3d 3d 20 73 69 7a 65 6f 66 28 6c 6f 6e 67  e == sizeof(long
22280 29 29 3b 20 2f 2f 20 4e 4f 54 45 3a 20 50 6f 69  )); // NOTE: Poi
22290 6e 74 65 72 20 69 73 20 36 34 2d 62 69 74 73 3f  nter is 64-bits?
222a0 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
222b0 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
222c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
222d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
222e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
222f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
22300 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
22310 65 20 73 74 61 74 69 63 20 62 6f 6f 6c 20 49 73  e static bool Is
22320 53 75 70 70 6f 72 74 65 64 52 6f 6f 74 4b 65 79  SupportedRootKey
22330 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 4d  (..            M
22340 6f 63 6b 52 65 67 69 73 74 72 79 20 72 65 67 69  ockRegistry regi
22350 73 74 72 79 2c 0d 0a 20 20 20 20 20 20 20 20 20  stry,..         
22360 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b     MockRegistryK
22370 65 79 20 72 6f 6f 74 4b 65 79 0d 0a 20 20 20 20  ey rootKey..    
22380 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
22390 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
223a0 20 20 72 65 74 75 72 6e 20 4f 62 6a 65 63 74 2e    return Object.
223b0 52 65 66 65 72 65 6e 63 65 45 71 75 61 6c 73 28  ReferenceEquals(
223c0 72 6f 6f 74 4b 65 79 2c 20 72 65 67 69 73 74 72  rootKey, registr
223d0 79 2e 43 75 72 72 65 6e 74 55 73 65 72 29 20 7c  y.CurrentUser) |
223e0 7c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  |..             
223f0 20 20 20 4f 62 6a 65 63 74 2e 52 65 66 65 72 65     Object.Refere
22400 6e 63 65 45 71 75 61 6c 73 28 72 6f 6f 74 4b 65  nceEquals(rootKe
22410 79 2c 20 72 65 67 69 73 74 72 79 2e 4c 6f 63 61  y, registry.Loca
22420 6c 4d 61 63 68 69 6e 65 29 3b 0d 0a 20 20 20 20  lMachine);..    
22430 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
22440 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
22450 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22460 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22470 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22480 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
22490 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74      private stat
224a0 69 63 20 73 74 72 69 6e 67 20 47 65 74 52 6f 6f  ic string GetRoo
224b0 74 4b 65 79 4e 61 6d 65 28 0d 0a 20 20 20 20 20  tKeyName(..     
224c0 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36         bool wow6
224d0 34 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29  4..            )
224e0 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
224f0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
22500 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 22 7b  String.Format("{
22510 30 7d 7b 31 7d 22 2c 20 52 6f 6f 74 4b 65 79 4e  0}{1}", RootKeyN
22520 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ame,..          
22530 20 20 20 20 20 20 77 6f 77 36 34 20 26 26 20 49        wow64 && I
22540 73 36 34 42 69 74 50 72 6f 63 65 73 73 28 29 20  s64BitProcess() 
22550 3f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ?..             
22560 20 20 20 20 20 20 20 22 5c 5c 22 20 2b 20 57 6f         "\\" + Wo
22570 77 36 34 53 75 62 4b 65 79 4e 61 6d 65 20 3a 20  w64SubKeyName : 
22580 53 74 72 69 6e 67 2e 45 6d 70 74 79 29 3b 0d 0a  String.Empty);..
22590 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
225a0 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
225b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
225c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
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 0d 0a 0d 0a  ////////////....
225f0 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
22600 73 74 61 74 69 63 20 73 74 72 69 6e 67 20 47 65  static string Ge
22610 74 53 79 73 74 65 6d 44 69 72 65 63 74 6f 72 79  tSystemDirectory
22620 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  (..            b
22630 6f 6f 6c 20 77 6f 77 36 34 0d 0a 20 20 20 20 20  ool wow64..     
22640 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
22650 20 20 7b 0d 0a 23 69 66 20 57 49 4e 44 4f 57 53    {..#if WINDOWS
22660 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
22670 20 28 77 6f 77 36 34 29 0d 0a 20 20 20 20 20 20   (wow64)..      
22680 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
22690 20 20 20 20 20 20 20 20 20 69 66 20 28 73 79 73           if (sys
226a0 74 65 6d 44 69 72 65 63 74 6f 72 79 57 6f 77 36  temDirectoryWow6
226b0 34 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  4 == null)..    
226c0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
226d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
226e0 20 20 20 73 79 73 74 65 6d 44 69 72 65 63 74 6f     systemDirecto
226f0 72 79 57 6f 77 36 34 20 3d 0d 0a 20 20 20 20 20  ryWow64 =..     
22700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22710 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d     UnsafeNativeM
22720 65 74 68 6f 64 73 2e 47 65 74 53 79 73 74 65 6d  ethods.GetSystem
22730 44 69 72 65 63 74 6f 72 79 28 29 3b 0d 0a 20 20  Directory();..  
22740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
22750 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
22760 20 20 20 72 65 74 75 72 6e 20 73 79 73 74 65 6d     return system
22770 44 69 72 65 63 74 6f 72 79 57 6f 77 36 34 3b 0d  DirectoryWow64;.
22780 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
22790 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65              else
227a0 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20  ..#endif..      
227b0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
227c0 20 20 20 20 20 20 20 20 20 69 66 20 28 73 79 73           if (sys
227d0 74 65 6d 44 69 72 65 63 74 6f 72 79 20 3d 3d 20  temDirectory == 
227e0 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
227f0 20 20 20 20 20 20 20 20 20 20 20 73 79 73 74 65             syste
22800 6d 44 69 72 65 63 74 6f 72 79 20 3d 20 45 6e 76  mDirectory = Env
22810 69 72 6f 6e 6d 65 6e 74 2e 53 79 73 74 65 6d 44  ironment.SystemD
22820 69 72 65 63 74 6f 72 79 3b 0d 0a 0d 0a 20 20 20  irectory;....   
22830 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
22840 75 72 6e 20 73 79 73 74 65 6d 44 69 72 65 63 74  urn systemDirect
22850 6f 72 79 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ory;..          
22860 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a    }..        }..
22870 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
22880 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  on....        //
22890 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
228a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
228b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
228c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
228d0 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
228e0 20 23 72 65 67 69 6f 6e 20 47 65 6e 65 72 69 63   #region Generic
228f0 20 53 74 72 69 6e 67 20 48 61 6e 64 6c 69 6e 67   String Handling
22900 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
22910 65 20 73 74 61 74 69 63 20 73 74 72 69 6e 67 20  e static string 
22920 46 6f 72 44 69 73 70 6c 61 79 28 0d 0a 20 20 20  ForDisplay(..   
22930 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20           object 
22940 76 61 6c 75 65 0d 0a 20 20 20 20 20 20 20 20 20  value..         
22950 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d     )..        {.
22960 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
22970 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d  (value == null).
22980 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
22990 20 72 65 74 75 72 6e 20 22 3c 6e 75 6c 6c 3e 22   return "<null>"
229a0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
229b0 20 73 74 72 69 6e 67 20 72 65 73 75 6c 74 3b 0d   string result;.
229c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 54 79 70  .            Typ
229d0 65 20 74 79 70 65 20 3d 20 76 61 6c 75 65 2e 47  e type = value.G
229e0 65 74 54 79 70 65 28 29 3b 0d 0a 0d 0a 20 20 20  etType();....   
229f0 20 20 20 20 20 20 20 20 20 69 66 20 28 74 79 70           if (typ
22a00 65 20 3d 3d 20 74 79 70 65 6f 66 28 58 6d 6c 45  e == typeof(XmlE
22a10 6c 65 6d 65 6e 74 29 29 0d 0a 20 20 20 20 20 20  lement))..      
22a20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
22a30 20 20 20 20 20 20 20 20 20 58 6d 6c 45 6c 65 6d           XmlElem
22a40 65 6e 74 20 65 6c 65 6d 65 6e 74 20 3d 20 28 58  ent element = (X
22a50 6d 6c 45 6c 65 6d 65 6e 74 29 76 61 6c 75 65 3b  mlElement)value;
22a60 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
22a70 20 20 20 20 72 65 73 75 6c 74 20 3d 20 65 6c 65      result = ele
22a80 6d 65 6e 74 2e 4f 75 74 65 72 58 6d 6c 3b 0d 0a  ment.OuterXml;..
22a90 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
22aa0 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20             else 
22ab0 69 66 20 28 74 79 70 65 20 3d 3d 20 74 79 70 65  if (type == type
22ac0 6f 66 28 56 65 72 73 69 6f 6e 29 29 0d 0a 20 20  of(Version))..  
22ad0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
22ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 56 65 72               Ver
22af0 73 69 6f 6e 20 76 65 72 73 69 6f 6e 20 3d 20 28  sion version = (
22b00 56 65 72 73 69 6f 6e 29 76 61 6c 75 65 3b 0d 0a  Version)value;..
22b10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
22b20 20 20 72 65 73 75 6c 74 20 3d 20 53 74 72 69 6e    result = Strin
22b30 67 2e 46 6f 72 6d 61 74 28 22 76 7b 30 7d 22 2c  g.Format("v{0}",
22b40 20 76 65 72 73 69 6f 6e 29 3b 0d 0a 20 20 20 20   version);..    
22b50 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
22b60 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20         else..   
22b70 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
22b80 20 20 20 20 20 20 20 20 20 20 20 20 72 65 73 75              resu
22b90 6c 74 20 3d 20 76 61 6c 75 65 2e 54 6f 53 74 72  lt = value.ToStr
22ba0 69 6e 67 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  ing();....      
22bb0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 72 65            if (re
22bc0 73 75 6c 74 2e 4c 65 6e 67 74 68 20 3d 3d 20 30  sult.Length == 0
22bd0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
22be0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 22 3c         return "<
22bf0 65 6d 70 74 79 3e 22 3b 0d 0a 0d 0a 20 20 20 20  empty>";....    
22c00 20 20 20 20 20 20 20 20 20 20 20 20 72 65 73 75              resu
22c10 6c 74 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d  lt = String.Form
22c20 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
22c30 20 20 20 20 20 20 20 20 20 74 79 70 65 2e 49 73           type.Is
22c40 53 75 62 63 6c 61 73 73 4f 66 28 74 79 70 65 6f  SubclassOf(typeo
22c50 66 28 56 61 6c 75 65 54 79 70 65 29 29 20 3f 20  f(ValueType)) ? 
22c60 22 7b 30 7d 22 20 3a 20 22 5c 22 7b 30 7d 5c 22  "{0}" : "\"{0}\"
22c70 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
22c80 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 29 3b          result);
22c90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
22ca0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  ...            r
22cb0 65 74 75 72 6e 20 72 65 73 75 6c 74 3b 0d 0a 20  eturn result;.. 
22cc0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
22cd0 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a    #endregion....
22ce0 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
22cf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22d00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22d10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22d20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
22d30 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69  ...        #regi
22d40 6f 6e 20 41 73 73 65 6d 62 6c 79 20 41 74 74 72  on Assembly Attr
22d50 69 62 75 74 65 20 48 61 6e 64 6c 69 6e 67 0d 0a  ibute Handling..
22d60 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73          public s
22d70 74 61 74 69 63 20 73 74 72 69 6e 67 20 47 65 74  tatic string Get
22d80 41 73 73 65 6d 62 6c 79 43 6f 6e 66 69 67 75 72  AssemblyConfigur
22d90 61 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20  ation(..        
22da0 20 20 20 20 41 73 73 65 6d 62 6c 79 20 61 73 73      Assembly ass
22db0 65 6d 62 6c 79 0d 0a 20 20 20 20 20 20 20 20 20  embly..         
22dc0 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d     )..        {.
22dd0 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
22de0 28 61 73 73 65 6d 62 6c 79 20 21 3d 20 6e 75 6c  (assembly != nul
22df0 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
22e00 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
22e10 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20     try..        
22e20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
22e30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
22e40 66 20 28 61 73 73 65 6d 62 6c 79 2e 49 73 44 65  f (assembly.IsDe
22e50 66 69 6e 65 64 28 0d 0a 20 20 20 20 20 20 20 20  fined(..        
22e60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22e70 20 20 20 20 74 79 70 65 6f 66 28 41 73 73 65 6d      typeof(Assem
22e80 62 6c 79 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e  blyConfiguration
22e90 41 74 74 72 69 62 75 74 65 29 2c 20 66 61 6c 73  Attribute), fals
22ea0 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e))..           
22eb0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
22ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22ed0 20 20 20 20 41 73 73 65 6d 62 6c 79 43 6f 6e 66      AssemblyConf
22ee0 69 67 75 72 61 74 69 6f 6e 41 74 74 72 69 62 75  igurationAttribu
22ef0 74 65 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  te configuration
22f00 20 3d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   =..            
22f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22f20 28 41 73 73 65 6d 62 6c 79 43 6f 6e 66 69 67 75  (AssemblyConfigu
22f30 72 61 74 69 6f 6e 41 74 74 72 69 62 75 74 65 29  rationAttribute)
22f40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
22f50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61 73                as
22f60 73 65 6d 62 6c 79 2e 47 65 74 43 75 73 74 6f 6d  sembly.GetCustom
22f70 41 74 74 72 69 62 75 74 65 73 28 0d 0a 20 20 20  Attributes(..   
22f80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22f90 20 20 20 20 20 20 20 20 20 20 20 20 20 74 79 70               typ
22fa0 65 6f 66 28 41 73 73 65 6d 62 6c 79 43 6f 6e 66  eof(AssemblyConf
22fb0 69 67 75 72 61 74 69 6f 6e 41 74 74 72 69 62 75  igurationAttribu
22fc0 74 65 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  te),..          
22fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22fe0 20 20 20 20 20 20 66 61 6c 73 65 29 5b 30 5d 3b        false)[0];
22ff0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
23000 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
23010 72 6e 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  rn configuration
23020 2e 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 3b 0d  .Configuration;.
23030 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
23040 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
23050 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
23060 20 20 20 20 20 20 20 20 20 20 20 63 61 74 63 68             catch
23070 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
23080 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
23090 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e           // do n
230a0 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20  othing...       
230b0 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
230c0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
230d0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
230e0 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 7d  null;..        }
230f0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
23100 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23110 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23120 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23130 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23140 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70  ///....        p
23150 75 62 6c 69 63 20 73 74 61 74 69 63 20 73 74 72  ublic static str
23160 69 6e 67 20 47 65 74 41 73 73 65 6d 62 6c 79 54  ing GetAssemblyT
23170 69 74 6c 65 28 0d 0a 20 20 20 20 20 20 20 20 20  itle(..         
23180 20 20 20 41 73 73 65 6d 62 6c 79 20 61 73 73 65     Assembly asse
23190 6d 62 6c 79 0d 0a 20 20 20 20 20 20 20 20 20 20  mbly..          
231a0 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a    )..        {..
231b0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
231c0 61 73 73 65 6d 62 6c 79 20 21 3d 20 6e 75 6c 6c  assembly != null
231d0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
231e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
231f0 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20    try..         
23200 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
23210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
23220 20 28 61 73 73 65 6d 62 6c 79 2e 49 73 44 65 66   (assembly.IsDef
23230 69 6e 65 64 28 0d 0a 20 20 20 20 20 20 20 20 20  ined(..         
23240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23250 20 20 20 74 79 70 65 6f 66 28 41 73 73 65 6d 62     typeof(Assemb
23260 6c 79 54 69 74 6c 65 41 74 74 72 69 62 75 74 65  lyTitleAttribute
23270 29 2c 20 66 61 6c 73 65 29 29 0d 0a 20 20 20 20  ), false))..    
23280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23290 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
232a0 20 20 20 20 20 20 20 20 20 20 20 41 73 73 65 6d             Assem
232b0 62 6c 79 54 69 74 6c 65 41 74 74 72 69 62 75 74  blyTitleAttribut
232c0 65 20 74 69 74 6c 65 20 3d 0d 0a 20 20 20 20 20  e title =..     
232d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
232e0 20 20 20 20 20 20 20 28 41 73 73 65 6d 62 6c 79         (Assembly
232f0 54 69 74 6c 65 41 74 74 72 69 62 75 74 65 29 0d  TitleAttribute).
23300 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
23310 20 20 20 20 20 20 20 20 20 20 20 20 20 61 73 73               ass
23320 65 6d 62 6c 79 2e 47 65 74 43 75 73 74 6f 6d 41  embly.GetCustomA
23330 74 74 72 69 62 75 74 65 73 28 0d 0a 20 20 20 20  ttributes(..    
23340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23350 20 20 20 20 20 20 20 20 20 20 20 20 74 79 70 65              type
23360 6f 66 28 41 73 73 65 6d 62 6c 79 54 69 74 6c 65  of(AssemblyTitle
23370 41 74 74 72 69 62 75 74 65 29 2c 20 66 61 6c 73  Attribute), fals
23380 65 29 5b 30 5d 3b 0d 0a 0d 0a 20 20 20 20 20 20  e)[0];....      
23390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
233a0 20 20 72 65 74 75 72 6e 20 74 69 74 6c 65 2e 54    return title.T
233b0 69 74 6c 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  itle;..         
233c0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
233d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
233e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
233f0 20 63 61 74 63 68 0d 0a 20 20 20 20 20 20 20 20   catch..        
23400 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
23410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
23420 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20  / do nothing... 
23430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
23440 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
23450 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  ...            r
23460 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 20 20 20  eturn null;..   
23470 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
23480 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20  #endregion....  
23490 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
234a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
234b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
234c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
234d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
234e0 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e  .        #region
234f0 20 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b 20   .NET Framework 
23500 48 61 6e 64 6c 69 6e 67 0d 0a 20 20 20 20 20 20  Handling..      
23510 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63    private static
23520 20 73 74 72 69 6e 67 20 47 65 74 46 72 61 6d 65   string GetFrame
23530 77 6f 72 6b 52 6f 6f 74 4b 65 79 4e 61 6d 65 28  workRootKeyName(
23540 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
23550 6f 6c 20 77 6f 77 36 34 0d 0a 20 20 20 20 20 20  ol wow64..      
23560 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
23570 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
23580 72 65 74 75 72 6e 20 53 74 72 69 6e 67 2e 46 6f  return String.Fo
23590 72 6d 61 74 28 22 7b 30 7d 5c 5c 4d 69 63 72 6f  rmat("{0}\\Micro
235a0 73 6f 66 74 5c 5c 2e 4e 45 54 46 72 61 6d 65 77  soft\\.NETFramew
235b0 6f 72 6b 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  ork",..         
235c0 20 20 20 20 20 20 20 47 65 74 52 6f 6f 74 4b 65         GetRootKe
235d0 79 4e 61 6d 65 28 77 6f 77 36 34 29 29 3b 0d 0a  yName(wow64));..
235e0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
235f0 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
23600 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23610 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23620 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23630 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
23640 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
23650 73 74 61 74 69 63 20 73 74 72 69 6e 67 20 47 65  static string Ge
23660 74 46 72 61 6d 65 77 6f 72 6b 4b 65 79 4e 61 6d  tFrameworkKeyNam
23670 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
23680 73 74 72 69 6e 67 20 66 72 61 6d 65 77 6f 72 6b  string framework
23690 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  Name,..         
236a0 20 20 20 56 65 72 73 69 6f 6e 20 66 72 61 6d 65     Version frame
236b0 77 6f 72 6b 56 65 72 73 69 6f 6e 2c 0d 0a 20 20  workVersion,..  
236c0 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
236d0 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 2c 0d 0a   platformName,..
236e0 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
236f0 20 77 6f 77 36 34 0d 0a 20 20 20 20 20 20 20 20   wow64..        
23700 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b      )..        {
23710 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74  ..            st
23720 72 69 6e 67 20 66 6f 72 6d 61 74 20 3d 20 21 53  ring format = !S
23730 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d  tring.IsNullOrEm
23740 70 74 79 28 70 6c 61 74 66 6f 72 6d 4e 61 6d 65  pty(platformName
23750 29 20 3f 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ) ?..           
23760 20 20 20 20 20 22 7b 30 7d 5c 5c 4d 69 63 72 6f       "{0}\\Micro
23770 73 6f 66 74 5c 5c 7b 31 7d 5c 5c 76 7b 32 7d 5c  soft\\{1}\\v{2}\
23780 5c 7b 33 7d 22 20 3a 0d 0a 20 20 20 20 20 20 20  \{3}" :..       
23790 20 20 20 20 20 20 20 20 20 22 7b 30 7d 5c 5c 4d           "{0}\\M
237a0 69 63 72 6f 73 6f 66 74 5c 5c 7b 31 7d 5c 5c 76  icrosoft\\{1}\\v
237b0 7b 32 7d 22 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  {2}";....       
237c0 20 20 20 20 20 72 65 74 75 72 6e 20 53 74 72 69       return Stri
237d0 6e 67 2e 46 6f 72 6d 61 74 28 66 6f 72 6d 61 74  ng.Format(format
237e0 2c 20 47 65 74 52 6f 6f 74 4b 65 79 4e 61 6d 65  , GetRootKeyName
237f0 28 77 6f 77 36 34 29 2c 0d 0a 20 20 20 20 20 20  (wow64),..      
23800 20 20 20 20 20 20 20 20 20 20 66 72 61 6d 65 77            framew
23810 6f 72 6b 4e 61 6d 65 2c 20 66 72 61 6d 65 77 6f  orkName, framewo
23820 72 6b 56 65 72 73 69 6f 6e 2c 20 70 6c 61 74 66  rkVersion, platf
23830 6f 72 6d 4e 61 6d 65 29 3b 0d 0a 20 20 20 20 20  ormName);..     
23840 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
23850 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23860 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23870 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23880 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23890 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
238a0 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69     private stati
238b0 63 20 73 74 72 69 6e 67 20 47 65 74 49 6d 61 67  c string GetImag
238c0 65 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 28  eRuntimeVersion(
238d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74  ..            st
238e0 72 69 6e 67 20 66 69 6c 65 4e 61 6d 65 0d 0a 20  ring fileName.. 
238f0 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
23900 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
23910 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20       try..      
23920 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
23930 20 20 20 20 20 20 20 20 20 41 73 73 65 6d 62 6c           Assembl
23940 79 20 61 73 73 65 6d 62 6c 79 20 3d 0d 0a 20 20  y assembly =..  
23950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23960 20 20 41 73 73 65 6d 62 6c 79 2e 52 65 66 6c 65    Assembly.Refle
23970 63 74 69 6f 6e 4f 6e 6c 79 4c 6f 61 64 46 72 6f  ctionOnlyLoadFro
23980 6d 28 66 69 6c 65 4e 61 6d 65 29 3b 20 2f 2a 20  m(fileName); /* 
23990 74 68 72 6f 77 20 2a 2f 0d 0a 0d 0a 20 20 20 20  throw */....    
239a0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
239b0 61 73 73 65 6d 62 6c 79 20 21 3d 20 6e 75 6c 6c  assembly != null
239c0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
239d0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 61 73         return as
239e0 73 65 6d 62 6c 79 2e 49 6d 61 67 65 52 75 6e 74  sembly.ImageRunt
239f0 69 6d 65 56 65 72 73 69 6f 6e 3b 0d 0a 20 20 20  imeVersion;..   
23a00 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
23a10 20 20 20 20 20 20 20 20 63 61 74 63 68 0d 0a 20          catch.. 
23a20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
23a30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
23a40 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20   do nothing...  
23a50 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
23a60 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
23a70 6e 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20  n null;..       
23a80 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f   }....        //
23a90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23aa0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23ab0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23ac0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23ad0 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
23ae0 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
23af0 73 74 72 69 6e 67 20 47 65 74 46 72 61 6d 65 77  string GetFramew
23b00 6f 72 6b 44 69 72 65 63 74 6f 72 79 28 0d 0a 20  orkDirectory(.. 
23b10 20 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52             MockR
23b20 65 67 69 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b  egistryKey rootK
23b30 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ey,..           
23b40 20 56 65 72 73 69 6f 6e 20 66 72 61 6d 65 77 6f   Version framewo
23b50 72 6b 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20  rkVersion,..    
23b60 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 6f 77          bool wow
23b70 36 34 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  64,..           
23b80 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20   bool whatIf,.. 
23b90 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
23ba0 76 65 72 62 6f 73 65 0d 0a 20 20 20 20 20 20 20  verbose..       
23bb0 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
23bc0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 75  {..            u
23bd0 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73 74  sing (MockRegist
23be0 72 79 4b 65 79 20 6b 65 79 20 3d 20 52 65 67 69  ryKey key = Regi
23bf0 73 74 72 79 48 65 6c 70 65 72 2e 4f 70 65 6e 53  stryHelper.OpenS
23c00 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20  ubKey(..        
23c10 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74              root
23c20 4b 65 79 2c 20 47 65 74 46 72 61 6d 65 77 6f 72  Key, GetFramewor
23c30 6b 52 6f 6f 74 4b 65 79 4e 61 6d 65 28 77 6f 77  kRootKeyName(wow
23c40 36 34 29 2c 20 66 61 6c 73 65 2c 0d 0a 20 20 20  64), false,..   
23c50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23c60 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65   whatIf, verbose
23c70 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
23c80 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
23c90 20 20 20 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75     if (key == nu
23ca0 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
23cb0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
23cc0 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  null;....       
23cd0 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20           object 
23ce0 76 61 6c 75 65 20 3d 20 52 65 67 69 73 74 72 79  value = Registry
23cf0 48 65 6c 70 65 72 2e 47 65 74 56 61 6c 75 65 28  Helper.GetValue(
23d00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
23d10 20 20 20 20 20 20 6b 65 79 2c 20 22 49 6e 73 74        key, "Inst
23d20 61 6c 6c 52 6f 6f 74 22 2c 20 6e 75 6c 6c 2c 20  allRoot", null, 
23d30 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29  whatIf, verbose)
23d40 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
23d50 20 20 20 20 20 69 66 20 28 21 28 76 61 6c 75 65       if (!(value
23d60 20 69 73 20 73 74 72 69 6e 67 29 29 0d 0a 20 20   is string))..  
23d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23d80 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a    return null;..
23d90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
23da0 20 20 72 65 74 75 72 6e 20 50 61 74 68 2e 43 6f    return Path.Co
23db0 6d 62 69 6e 65 28 0d 0a 20 20 20 20 20 20 20 20  mbine(..        
23dc0 20 20 20 20 20 20 20 20 20 20 20 20 28 73 74 72              (str
23dd0 69 6e 67 29 76 61 6c 75 65 2c 20 53 74 72 69 6e  ing)value, Strin
23de0 67 2e 46 6f 72 6d 61 74 28 22 76 7b 30 7d 22 2c  g.Format("v{0}",
23df0 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f   frameworkVersio
23e00 6e 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  n));..          
23e10 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a    }..        }..
23e20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
23e30 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  on....        //
23e40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23e50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23e60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23e70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23e80 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
23e90 20 23 72 65 67 69 6f 6e 20 50 65 72 2d 46 72 61   #region Per-Fra
23ea0 6d 65 77 6f 72 6b 2f 50 6c 61 74 66 6f 72 6d 20  mework/Platform 
23eb0 48 61 6e 64 6c 69 6e 67 0d 0a 20 20 20 20 20 20  Handling..      
23ec0 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63    private static
23ed0 20 76 6f 69 64 20 49 6e 69 74 69 61 6c 69 7a 65   void Initialize
23ee0 46 72 61 6d 65 77 6f 72 6b 4c 69 73 74 28 0d 0a  FrameworkList(..
23ef0 20 20 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b              Mock
23f00 52 65 67 69 73 74 72 79 4b 65 79 20 72 6f 6f 74  RegistryKey root
23f10 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  Key,..          
23f20 20 20 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20    Configuration 
23f30 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2c 0d 0a  configuration,..
23f40 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20              ref 
23f50 46 72 61 6d 65 77 6f 72 6b 4c 69 73 74 20 66 72  FrameworkList fr
23f60 61 6d 65 77 6f 72 6b 4c 69 73 74 0d 0a 20 20 20  ameworkList..   
23f70 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
23f80 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
23f90 20 20 20 69 66 20 28 66 72 61 6d 65 77 6f 72 6b     if (framework
23fa0 4c 69 73 74 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  List == null).. 
23fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66                 f
23fc0 72 61 6d 65 77 6f 72 6b 4c 69 73 74 20 3d 20 6e  rameworkList = n
23fd0 65 77 20 46 72 61 6d 65 77 6f 72 6b 4c 69 73 74  ew FrameworkList
23fe0 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ();....         
23ff0 20 20 20 69 66 20 28 66 72 61 6d 65 77 6f 72 6b     if (framework
24000 4c 69 73 74 2e 52 6f 6f 74 4b 65 79 20 3d 3d 20  List.RootKey == 
24010 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
24020 20 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b         framework
24030 4c 69 73 74 2e 52 6f 6f 74 4b 65 79 20 3d 20 72  List.RootKey = r
24040 6f 6f 74 4b 65 79 3b 0d 0a 0d 0a 20 20 20 20 20  ootKey;....     
24050 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
24060 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24070 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24080 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24090 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
240a0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 66 72            if (fr
240b0 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 4e 61 6d 65  ameworkList.Name
240c0 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  s == null)..    
240d0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
240e0 20 20 20 20 20 20 20 20 20 20 20 66 72 61 6d 65             frame
240f0 77 6f 72 6b 4c 69 73 74 2e 4e 61 6d 65 73 20 3d  workList.Names =
24100 20 6e 65 77 20 53 74 72 69 6e 67 4c 69 73 74 28   new StringList(
24110 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
24120 20 20 20 20 20 20 69 66 20 28 28 63 6f 6e 66 69        if ((confi
24130 67 75 72 61 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c  guration == null
24140 29 20 7c 7c 20 21 63 6f 6e 66 69 67 75 72 61 74  ) || !configurat
24150 69 6f 6e 2e 4e 6f 44 65 73 6b 74 6f 70 29 0d 0a  ion.NoDesktop)..
24160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24170 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73      frameworkLis
24180 74 2e 4e 61 6d 65 73 2e 41 64 64 28 22 2e 4e 45  t.Names.Add(".NE
24190 54 46 72 61 6d 65 77 6f 72 6b 22 29 3b 0d 0a 0d  TFramework");...
241a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
241b0 20 69 66 20 28 28 63 6f 6e 66 69 67 75 72 61 74   if ((configurat
241c0 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20  ion == null) || 
241d0 21 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 4e  !configuration.N
241e0 6f 43 6f 6d 70 61 63 74 29 0d 0a 20 20 20 20 20  oCompact)..     
241f0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
24200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24210 20 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e    frameworkList.
24220 4e 61 6d 65 73 2e 41 64 64 28 22 2e 4e 45 54 43  Names.Add(".NETC
24230 6f 6d 70 61 63 74 46 72 61 6d 65 77 6f 72 6b 22  ompactFramework"
24240 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
24250 20 20 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72          framewor
24260 6b 4c 69 73 74 2e 4e 61 6d 65 73 2e 41 64 64 28  kList.Names.Add(
24270 22 2e 4e 45 54 43 6f 6d 70 61 63 74 46 72 61 6d  ".NETCompactFram
24280 65 77 6f 72 6b 22 29 3b 0d 0a 20 20 20 20 20 20  ework");..      
24290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 72                fr
242a0 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 4e 61 6d 65  ameworkList.Name
242b0 73 2e 41 64 64 28 22 2e 4e 45 54 43 6f 6d 70 61  s.Add(".NETCompa
242c0 63 74 46 72 61 6d 65 77 6f 72 6b 22 29 3b 0d 0a  ctFramework");..
242d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
242e0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
242f0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
24300 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24310 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24320 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24330 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24340 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
24350 20 20 20 69 66 20 28 66 72 61 6d 65 77 6f 72 6b     if (framework
24360 4c 69 73 74 2e 56 65 72 73 69 6f 6e 73 20 3d 3d  List.Versions ==
24370 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
24380 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
24390 20 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b         framework
243a0 4c 69 73 74 2e 56 65 72 73 69 6f 6e 73 20 3d 20  List.Versions = 
243b0 6e 65 77 20 56 65 72 73 69 6f 6e 4d 61 70 28 29  new VersionMap()
243c0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
243d0 20 20 20 20 20 69 66 20 28 28 63 6f 6e 66 69 67       if ((config
243e0 75 72 61 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29  uration == null)
243f0 20 7c 7c 20 21 63 6f 6e 66 69 67 75 72 61 74 69   || !configurati
24400 6f 6e 2e 4e 6f 44 65 73 6b 74 6f 70 29 0d 0a 20  on.NoDesktop).. 
24410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
24420 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
24430 20 20 20 20 20 20 56 65 72 73 69 6f 6e 4c 69 73        VersionLis
24440 74 20 64 65 73 6b 74 6f 70 56 65 72 73 69 6f 6e  t desktopVersion
24450 4c 69 73 74 20 3d 20 6e 65 77 20 56 65 72 73 69  List = new Versi
24460 6f 6e 4c 69 73 74 28 29 3b 0d 0a 0d 0a 20 20 20  onList();....   
24470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24480 20 69 66 20 28 28 63 6f 6e 66 69 67 75 72 61 74   if ((configurat
24490 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20  ion == null) || 
244a0 21 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 4e  !configuration.N
244b0 6f 4e 65 74 46 78 32 30 29 0d 0a 20 20 20 20 20  oNetFx20)..     
244c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
244d0 20 20 20 64 65 73 6b 74 6f 70 56 65 72 73 69 6f     desktopVersio
244e0 6e 4c 69 73 74 2e 41 64 64 28 6e 65 77 20 56 65  nList.Add(new Ve
244f0 72 73 69 6f 6e 28 32 2c 20 30 2c 20 35 30 37 32  rsion(2, 0, 5072
24500 37 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  7));....        
24510 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
24520 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 3d  (configuration =
24530 3d 20 6e 75 6c 6c 29 20 7c 7c 20 21 63 6f 6e 66  = null) || !conf
24540 69 67 75 72 61 74 69 6f 6e 2e 4e 6f 4e 65 74 46  iguration.NoNetF
24550 78 34 30 29 0d 0a 20 20 20 20 20 20 20 20 20 20  x40)..          
24560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65                de
24570 73 6b 74 6f 70 56 65 72 73 69 6f 6e 4c 69 73 74  sktopVersionList
24580 2e 41 64 64 28 6e 65 77 20 56 65 72 73 69 6f 6e  .Add(new Version
24590 28 34 2c 20 30 2c 20 33 30 33 31 39 29 29 3b 0d  (4, 0, 30319));.
245a0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
245b0 20 20 20 20 20 20 20 69 66 20 28 28 63 6f 6e 66         if ((conf
245c0 69 67 75 72 61 74 69 6f 6e 20 3d 3d 20 6e 75 6c  iguration == nul
245d0 6c 29 20 7c 7c 20 21 63 6f 6e 66 69 67 75 72 61  l) || !configura
245e0 74 69 6f 6e 2e 4e 6f 4e 65 74 46 78 34 35 29 0d  tion.NoNetFx45).
245f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
24600 20 20 20 20 20 20 20 20 20 64 65 73 6b 74 6f 70           desktop
24610 56 65 72 73 69 6f 6e 4c 69 73 74 2e 41 64 64 28  VersionList.Add(
24620 6e 65 77 20 56 65 72 73 69 6f 6e 28 34 2c 20 35  new Version(4, 5
24630 2c 20 35 30 37 30 39 29 29 3b 0d 0a 0d 0a 20 20  , 50709));....  
24640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24650 20 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e    frameworkList.
24660 56 65 72 73 69 6f 6e 73 2e 41 64 64 28 22 2e 4e  Versions.Add(".N
24670 45 54 46 72 61 6d 65 77 6f 72 6b 22 2c 0d 0a 20  ETFramework",.. 
24680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24690 20 20 20 20 20 20 20 64 65 73 6b 74 6f 70 56 65         desktopVe
246a0 72 73 69 6f 6e 4c 69 73 74 29 3b 0d 0a 20 20 20  rsionList);..   
246b0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
246c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
246d0 20 20 69 66 20 28 28 63 6f 6e 66 69 67 75 72 61    if ((configura
246e0 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c  tion == null) ||
246f0 20 21 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e   !configuration.
24700 4e 6f 43 6f 6d 70 61 63 74 29 0d 0a 20 20 20 20  NoCompact)..    
24710 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
24720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24730 20 20 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74     frameworkList
24740 2e 56 65 72 73 69 6f 6e 73 2e 41 64 64 28 22 2e  .Versions.Add(".
24750 4e 45 54 43 6f 6d 70 61 63 74 46 72 61 6d 65 77  NETCompactFramew
24760 6f 72 6b 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  ork",..         
24770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e                 n
24780 65 77 20 56 65 72 73 69 6f 6e 4c 69 73 74 28 6e  ew VersionList(n
24790 65 77 20 56 65 72 73 69 6f 6e 5b 5d 20 7b 0d 0a  ew Version[] {..
247a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
247b0 20 20 20 20 20 20 20 20 6e 65 77 20 56 65 72 73          new Vers
247c0 69 6f 6e 28 32 2c 20 30 2c 20 30 2c 20 30 29 2c  ion(2, 0, 0, 0),
247d0 20 6e 65 77 20 56 65 72 73 69 6f 6e 28 33 2c 20   new Version(3, 
247e0 35 2c 20 30 2c 20 30 29 0d 0a 20 20 20 20 20 20  5, 0, 0)..      
247f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 29                })
24800 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
24810 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
24820 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
24830 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
24840 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24850 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24860 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24870 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
24880 20 20 20 20 20 20 20 69 66 20 28 66 72 61 6d 65         if (frame
24890 77 6f 72 6b 4c 69 73 74 2e 50 6c 61 74 66 6f 72  workList.Platfor
248a0 6d 4e 61 6d 65 73 20 3d 3d 20 6e 75 6c 6c 29 0d  mNames == null).
248b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
248c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
248d0 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 50 6c  frameworkList.Pl
248e0 61 74 66 6f 72 6d 4e 61 6d 65 73 20 3d 20 6e 65  atformNames = ne
248f0 77 20 53 74 72 69 6e 67 4c 69 73 74 28 29 3b 0d  w StringList();.
24900 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
24910 20 20 20 69 66 20 28 28 63 6f 6e 66 69 67 75 72     if ((configur
24920 61 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 20 7c  ation == null) |
24930 7c 20 21 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  | !configuration
24940 2e 4e 6f 44 65 73 6b 74 6f 70 29 0d 0a 20 20 20  .NoDesktop)..   
24950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24960 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 50   frameworkList.P
24970 6c 61 74 66 6f 72 6d 4e 61 6d 65 73 2e 41 64 64  latformNames.Add
24980 28 6e 75 6c 6c 29 3b 0d 0a 0d 0a 20 20 20 20 20  (null);....     
24990 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 28             if ((
249a0 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 3d 3d  configuration ==
249b0 20 6e 75 6c 6c 29 20 7c 7c 20 21 63 6f 6e 66 69   null) || !confi
249c0 67 75 72 61 74 69 6f 6e 2e 4e 6f 43 6f 6d 70 61  guration.NoCompa
249d0 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ct)..           
249e0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
249f0 20 20 20 20 20 20 20 20 20 20 20 20 66 72 61 6d              fram
24a00 65 77 6f 72 6b 4c 69 73 74 2e 50 6c 61 74 66 6f  eworkList.Platfo
24a10 72 6d 4e 61 6d 65 73 2e 41 64 64 28 22 50 6f 63  rmNames.Add("Poc
24a20 6b 65 74 50 43 22 29 3b 0d 0a 20 20 20 20 20 20  ketPC");..      
24a30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 72                fr
24a40 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 50 6c 61 74  ameworkList.Plat
24a50 66 6f 72 6d 4e 61 6d 65 73 2e 41 64 64 28 22 53  formNames.Add("S
24a60 6d 61 72 74 70 68 6f 6e 65 22 29 3b 0d 0a 20 20  martphone");..  
24a70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24a80 20 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e    frameworkList.
24a90 50 6c 61 74 66 6f 72 6d 4e 61 6d 65 73 2e 41 64  PlatformNames.Ad
24aa0 64 28 22 57 69 6e 64 6f 77 73 43 45 22 29 3b 0d  d("WindowsCE");.
24ab0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
24ac0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
24ad0 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  }..        }....
24ae0 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
24af0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24b00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24b10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24b20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
24b30 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  ...        priva
24b40 74 65 20 73 74 61 74 69 63 20 62 6f 6f 6c 20 48  te static bool H
24b50 61 76 65 46 72 61 6d 65 77 6f 72 6b 44 69 72 65  aveFrameworkDire
24b60 63 74 6f 72 79 28 0d 0a 20 20 20 20 20 20 20 20  ctory(..        
24b70 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79      MockRegistry
24b80 4b 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20  Key rootKey,..  
24b90 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
24ba0 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c 0d   frameworkName,.
24bb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 56 65 72  .            Ver
24bc0 73 69 6f 6e 20 66 72 61 6d 65 77 6f 72 6b 56 65  sion frameworkVe
24bd0 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20  rsion,..        
24be0 20 20 20 20 73 74 72 69 6e 67 20 70 6c 61 74 66      string platf
24bf0 6f 72 6d 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20  ormName,..      
24c00 20 20 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34        bool wow64
24c10 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  ,..            b
24c20 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20  ool whatIf,..   
24c30 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65           bool ve
24c40 72 62 6f 73 65 0d 0a 20 20 20 20 20 20 20 20 20  rbose..         
24c50 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d     )..        {.
24c60 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72  .            str
24c70 69 6e 67 20 6b 65 79 4e 61 6d 65 20 3d 20 47 65  ing keyName = Ge
24c80 74 46 72 61 6d 65 77 6f 72 6b 4b 65 79 4e 61 6d  tFrameworkKeyNam
24c90 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
24ca0 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d      frameworkNam
24cb0 65 2c 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73  e, frameworkVers
24cc0 69 6f 6e 2c 20 70 6c 61 74 66 6f 72 6d 4e 61 6d  ion, platformNam
24cd0 65 2c 20 77 6f 77 36 34 29 3b 0d 0a 0d 0a 20 20  e, wow64);....  
24ce0 20 20 20 20 20 20 20 20 20 20 75 73 69 6e 67 20            using 
24cf0 28 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79  (MockRegistryKey
24d00 20 6b 65 79 20 3d 20 52 65 67 69 73 74 72 79 48   key = RegistryH
24d10 65 6c 70 65 72 2e 4f 70 65 6e 53 75 62 4b 65 79  elper.OpenSubKey
24d20 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
24d30 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20         rootKey, 
24d40 6b 65 79 4e 61 6d 65 2c 20 66 61 6c 73 65 2c 20  keyName, false, 
24d50 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29  whatIf, verbose)
24d60 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
24d70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
24d80 20 20 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75 6c    if (key == nul
24d90 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
24da0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
24db0 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  alse;....       
24dc0 20 20 20 20 20 20 20 20 20 69 66 20 28 70 6c 61           if (pla
24dd0 74 66 6f 72 6d 4e 61 6d 65 20 21 3d 20 6e 75 6c  tformName != nul
24de0 6c 29 20 2f 2f 20 4e 4f 54 45 3a 20 53 6b 69 70  l) // NOTE: Skip
24df0 20 6e 6f 6e 2d 64 65 73 6b 74 6f 70 2e 0d 0a 20   non-desktop... 
24e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24e10 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d     return true;.
24e20 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
24e30 20 20 20 73 74 72 69 6e 67 20 64 69 72 65 63 74     string direct
24e40 6f 72 79 20 3d 20 47 65 74 46 72 61 6d 65 77 6f  ory = GetFramewo
24e50 72 6b 44 69 72 65 63 74 6f 72 79 28 0d 0a 20 20  rkDirectory(..  
24e60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24e70 20 20 72 6f 6f 74 4b 65 79 2c 20 66 72 61 6d 65    rootKey, frame
24e80 77 6f 72 6b 56 65 72 73 69 6f 6e 2c 20 77 6f 77  workVersion, wow
24e90 36 34 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62  64, whatIf, verb
24ea0 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ose);....       
24eb0 20 20 20 20 20 20 20 20 20 69 66 20 28 53 74 72           if (Str
24ec0 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74  ing.IsNullOrEmpt
24ed0 79 28 64 69 72 65 63 74 6f 72 79 29 29 0d 0a 20  y(directory)).. 
24ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24ef0 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
24f00 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
24f10 20 20 20 20 69 66 20 28 21 44 69 72 65 63 74 6f      if (!Directo
24f20 72 79 2e 45 78 69 73 74 73 28 64 69 72 65 63 74  ry.Exists(direct
24f30 6f 72 79 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ory))..         
24f40 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
24f50 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20  n false;....    
24f60 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
24f70 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61  eOps.DebugAndTra
24f80 63 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 79  ce(TracePriority
24f90 2e 4c 6f 77 65 72 2c 0d 0a 20 20 20 20 20 20 20  .Lower,..       
24fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62               deb
24fb0 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63  ugCallback, trac
24fc0 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e  eCallback, Strin
24fd0 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
24fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
24ff0 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b 20 7b  .NET Framework {
25000 30 7d 20 66 6f 75 6e 64 20 76 69 61 20 64 69 72  0} found via dir
25010 65 63 74 6f 72 79 20 7b 31 7d 2e 22 2c 0d 0a 20  ectory {1}.",.. 
25020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25030 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 66 72     ForDisplay(fr
25040 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 29 2c  ameworkVersion),
25050 20 46 6f 72 44 69 73 70 6c 61 79 28 64 69 72 65   ForDisplay(dire
25060 63 74 6f 72 79 29 29 2c 0d 0a 20 20 20 20 20 20  ctory)),..      
25070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
25080 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  aceCategory);...
25090 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
250a0 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20   return true;.. 
250b0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
250c0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
250d0 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
250e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
250f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25100 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25110 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
25120 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74        private st
25130 61 74 69 63 20 62 6f 6f 6c 20 48 61 76 65 46 72  atic bool HaveFr
25140 61 6d 65 77 6f 72 6b 52 65 67 69 73 74 72 79 28  ameworkRegistry(
25150 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 4d 6f  ..            Mo
25160 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 72 6f  ckRegistryKey ro
25170 6f 74 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20  otKey,..        
25180 20 20 20 20 73 74 72 69 6e 67 20 66 72 61 6d 65      string frame
25190 77 6f 72 6b 4e 61 6d 65 2c 0d 0a 20 20 20 20 20  workName,..     
251a0 20 20 20 20 20 20 20 56 65 72 73 69 6f 6e 20 66         Version f
251b0 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 2c  rameworkVersion,
251c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74  ..            st
251d0 72 69 6e 67 20 70 6c 61 74 66 6f 72 6d 4e 61 6d  ring platformNam
251e0 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
251f0 62 6f 6f 6c 20 77 6f 77 36 34 2c 0d 0a 20 20 20  bool wow64,..   
25200 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68           bool wh
25210 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20  atIf,..         
25220 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 0d     bool verbose.
25230 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a  .            )..
25240 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
25250 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6b 65         string ke
25260 79 4e 61 6d 65 20 3d 20 47 65 74 46 72 61 6d 65  yName = GetFrame
25270 77 6f 72 6b 4b 65 79 4e 61 6d 65 28 0d 0a 20 20  workKeyName(..  
25280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 72                fr
25290 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c 20 66 72 61  ameworkName, fra
252a0 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 2c 20 70  meworkVersion, p
252b0 6c 61 74 66 6f 72 6d 4e 61 6d 65 2c 20 77 6f 77  latformName, wow
252c0 36 34 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  64);....        
252d0 20 20 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52      using (MockR
252e0 65 67 69 73 74 72 79 4b 65 79 20 6b 65 79 20 3d  egistryKey key =
252f0 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e   RegistryHelper.
25300 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20  OpenSubKey(..   
25310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25320 20 72 6f 6f 74 4b 65 79 2c 20 6b 65 79 4e 61 6d   rootKey, keyNam
25330 65 2c 20 66 61 6c 73 65 2c 20 77 68 61 74 49 66  e, false, whatIf
25340 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a 20 20 20  , verbose))..   
25350 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
25360 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
25370 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  key == null)..  
25380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25390 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
253a0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
253b0 20 20 20 69 66 20 28 70 6c 61 74 66 6f 72 6d 4e     if (platformN
253c0 61 6d 65 20 21 3d 20 6e 75 6c 6c 29 20 2f 2f 20  ame != null) // 
253d0 4e 4f 54 45 3a 20 53 6b 69 70 20 6e 6f 6e 2d 64  NOTE: Skip non-d
253e0 65 73 6b 74 6f 70 2e 0d 0a 20 20 20 20 20 20 20  esktop...       
253f0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
25400 75 72 6e 20 74 72 75 65 3b 0d 0a 0d 0a 20 20 20  urn true;....   
25410 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61               Tra
25420 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72  ceOps.DebugAndTr
25430 61 63 65 28 54 72 61 63 65 50 72 69 6f 72 69 74  ace(TracePriorit
25440 79 2e 4c 6f 77 65 72 2c 0d 0a 20 20 20 20 20 20  y.Lower,..      
25450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65                de
25460 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61  bugCallback, tra
25470 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69  ceCallback, Stri
25480 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ng.Format(..    
25490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
254a0 22 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b 20  ".NET Framework 
254b0 7b 30 7d 20 66 6f 75 6e 64 20 76 69 61 20 72 65  {0} found via re
254c0 67 69 73 74 72 79 20 7b 31 7d 2e 22 2c 0d 0a 20  gistry {1}.",.. 
254d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
254e0 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 66 72     ForDisplay(fr
254f0 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 29 2c  ameworkVersion),
25500 20 46 6f 72 44 69 73 70 6c 61 79 28 6b 65 79 4e   ForDisplay(keyN
25510 61 6d 65 29 29 2c 0d 0a 20 20 20 20 20 20 20 20  ame)),..        
25520 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
25530 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
25540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
25550 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20  eturn true;..   
25560 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
25570 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
25580 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
25590 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
255a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
255b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
255c0 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
255d0 20 20 20 20 5b 4d 65 74 68 6f 64 49 6d 70 6c 28      [MethodImpl(
255e0 4d 65 74 68 6f 64 49 6d 70 6c 4f 70 74 69 6f 6e  MethodImplOption
255f0 73 2e 4e 6f 49 6e 6c 69 6e 69 6e 67 29 5d 0d 0a  s.NoInlining)]..
25600 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
25610 73 74 61 74 69 63 20 62 6f 6f 6c 20 46 6f 72 45  static bool ForE
25620 61 63 68 46 72 61 6d 65 77 6f 72 6b 43 6f 6e 66  achFrameworkConf
25630 69 67 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ig(..           
25640 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 20 72 65   MockRegistry re
25650 67 69 73 74 72 79 2c 0d 0a 20 20 20 20 20 20 20  gistry,..       
25660 20 20 20 20 20 46 72 61 6d 65 77 6f 72 6b 4c 69       FrameworkLi
25670 73 74 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74  st frameworkList
25680 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 46  ,..            F
25690 72 61 6d 65 77 6f 72 6b 43 6f 6e 66 69 67 43 61  rameworkConfigCa
256a0 6c 6c 62 61 63 6b 20 63 61 6c 6c 62 61 63 6b 2c  llback callback,
256b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74  ..            st
256c0 72 69 6e 67 20 76 65 72 73 69 6f 6e 2c 20 2f 2a  ring version, /*
256d0 20 4e 4f 54 45 3a 20 4f 70 74 69 6f 6e 61 6c 2e   NOTE: Optional.
256e0 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   */..           
256f0 20 73 74 72 69 6e 67 20 69 6e 76 61 72 69 61 6e   string invarian
25700 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t,..            
25710 73 74 72 69 6e 67 20 6e 61 6d 65 2c 0d 0a 20 20  string name,..  
25720 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
25730 20 64 65 73 63 72 69 70 74 69 6f 6e 2c 0d 0a 20   description,.. 
25740 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
25750 67 20 74 79 70 65 4e 61 6d 65 2c 0d 0a 20 20 20  g typeName,..   
25760 20 20 20 20 20 20 20 20 20 41 73 73 65 6d 62 6c           Assembl
25770 79 4e 61 6d 65 20 61 73 73 65 6d 62 6c 79 4e 61  yName assemblyNa
25780 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me,..           
25790 20 6f 62 6a 65 63 74 20 63 6c 69 65 6e 74 44 61   object clientDa
257a0 74 61 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ta,..           
257b0 20 62 6f 6f 6c 20 77 6f 77 36 34 2c 0d 0a 20 20   bool wow64,..  
257c0 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 74            bool t
257d0 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 2c 0d 0a  hrowOnMissing,..
257e0 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
257f0 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20   whatIf,..      
25800 20 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f        bool verbo
25810 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se,..           
25820 20 72 65 66 20 62 6f 6f 6c 20 73 61 76 65 64 2c   ref bool saved,
25830 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
25840 66 20 73 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a  f string error..
25850 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
25860 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
25870 20 20 20 20 20 20 69 66 20 28 72 65 67 69 73 74        if (regist
25880 72 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ry == null)..   
25890 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
258a0 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
258b0 72 20 3d 20 22 69 6e 76 61 6c 69 64 20 72 65 67  r = "invalid reg
258c0 69 73 74 72 79 22 3b 0d 0a 20 20 20 20 20 20 20  istry";..       
258d0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
258e0 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20  false;..        
258f0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
25900 20 20 20 20 20 69 66 20 28 66 72 61 6d 65 77 6f       if (framewo
25910 72 6b 4c 69 73 74 20 3d 3d 20 6e 75 6c 6c 29 0d  rkList == null).
25920 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
25930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25940 65 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64  error = "invalid
25950 20 66 72 61 6d 65 77 6f 72 6b 20 6c 69 73 74 22   framework list"
25960 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
25970 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
25980 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
25990 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 4d  ...            M
259a0 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 72  ockRegistryKey r
259b0 6f 6f 74 4b 65 79 20 3d 20 66 72 61 6d 65 77 6f  ootKey = framewo
259c0 72 6b 4c 69 73 74 2e 52 6f 6f 74 4b 65 79 3b 0d  rkList.RootKey;.
259d0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
259e0 66 20 28 72 6f 6f 74 4b 65 79 20 3d 3d 20 6e 75  f (rootKey == nu
259f0 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
25a00 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
25a10 20 20 20 20 65 72 72 6f 72 20 3d 20 22 69 6e 76      error = "inv
25a20 61 6c 69 64 20 72 6f 6f 74 20 6b 65 79 22 3b 0d  alid root key";.
25a30 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
25a40 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
25a50 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
25a60 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
25a70 28 21 49 73 53 75 70 70 6f 72 74 65 64 52 6f 6f  (!IsSupportedRoo
25a80 74 4b 65 79 28 72 65 67 69 73 74 72 79 2c 20 72  tKey(registry, r
25a90 6f 6f 74 4b 65 79 29 29 0d 0a 20 20 20 20 20 20  ootKey))..      
25aa0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
25ab0 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
25ac0 20 22 72 6f 6f 74 20 6b 65 79 20 6d 75 73 74 20   "root key must 
25ad0 62 65 20 70 65 72 2d 75 73 65 72 20 6f 72 20 70  be per-user or p
25ae0 65 72 2d 6d 61 63 68 69 6e 65 22 3b 0d 0a 20 20  er-machine";..  
25af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
25b00 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20  turn false;..   
25b10 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
25b20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 66 72            if (fr
25b30 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 4e 61 6d 65  ameworkList.Name
25b40 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  s == null)..    
25b50 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
25b60 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72             error
25b70 20 3d 20 22 6e 6f 20 66 72 61 6d 65 77 6f 72 6b   = "no framework
25b80 20 6e 61 6d 65 73 20 66 6f 75 6e 64 22 3b 0d 0a   names found";..
25b90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25ba0 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20  return false;.. 
25bb0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
25bc0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
25bd0 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 56 65  frameworkList.Ve
25be0 72 73 69 6f 6e 73 20 3d 3d 20 6e 75 6c 6c 29 0d  rsions == null).
25bf0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
25c00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25c10 65 72 72 6f 72 20 3d 20 22 6e 6f 20 66 72 61 6d  error = "no fram
25c20 65 77 6f 72 6b 20 76 65 72 73 69 6f 6e 73 20 66  ework versions f
25c30 6f 75 6e 64 22 3b 0d 0a 20 20 20 20 20 20 20 20  ound";..        
25c40 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
25c50 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alse;..         
25c60 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
25c70 20 20 20 20 69 66 20 28 66 72 61 6d 65 77 6f 72      if (framewor
25c80 6b 4c 69 73 74 2e 50 6c 61 74 66 6f 72 6d 4e 61  kList.PlatformNa
25c90 6d 65 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  mes == null)..  
25ca0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
25cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
25cc0 6f 72 20 3d 20 22 6e 6f 20 70 6c 61 74 66 6f 72  or = "no platfor
25cd0 6d 20 6e 61 6d 65 73 20 66 6f 75 6e 64 22 3b 0d  m names found";.
25ce0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
25cf0 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
25d00 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
25d10 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
25d20 28 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 4e  (frameworkList.N
25d30 61 6d 65 73 2e 43 6f 75 6e 74 20 21 3d 20 66 72  ames.Count != fr
25d40 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 50 6c 61 74  ameworkList.Plat
25d50 66 6f 72 6d 4e 61 6d 65 73 2e 43 6f 75 6e 74 29  formNames.Count)
25d60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
25d70 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
25d80 20 65 72 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e   error = String.
25d90 46 6f 72 6d 61 74 28 22 66 72 61 6d 65 77 6f 72  Format("framewor
25da0 6b 20 6e 61 6d 65 20 63 6f 75 6e 74 20 7b 30 7d  k name count {0}
25db0 20 64 6f 65 73 20 6e 6f 74 20 22 20 2b 0d 0a 20   does not " +.. 
25dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25dd0 20 20 20 22 6d 61 74 63 68 20 70 6c 61 74 66 6f     "match platfo
25de0 72 6d 20 6e 61 6d 65 20 63 6f 75 6e 74 20 7b 31  rm name count {1
25df0 7d 22 2c 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73  }", frameworkLis
25e00 74 2e 4e 61 6d 65 73 2e 43 6f 75 6e 74 2c 0d 0a  t.Names.Count,..
25e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25e20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73      frameworkLis
25e30 74 2e 50 6c 61 74 66 6f 72 6d 4e 61 6d 65 73 2e  t.PlatformNames.
25e40 43 6f 75 6e 74 29 3b 0d 0a 0d 0a 20 20 20 20 20  Count);....     
25e50 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
25e60 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  n false;..      
25e70 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
25e80 20 20 20 20 20 20 20 66 6f 72 20 28 69 6e 74 20         for (int 
25e90 69 6e 64 65 78 20 3d 20 30 3b 20 69 6e 64 65 78  index = 0; index
25ea0 20 3c 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74   < frameworkList
25eb0 2e 4e 61 6d 65 73 2e 43 6f 75 6e 74 3b 20 69 6e  .Names.Count; in
25ec0 64 65 78 2b 2b 29 0d 0a 20 20 20 20 20 20 20 20  dex++)..        
25ed0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
25ee0 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
25ef0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f             // NO
25f00 54 45 3a 20 47 72 61 62 20 74 68 65 20 6e 61 6d  TE: Grab the nam
25f10 65 20 6f 66 20 74 68 65 20 66 72 61 6d 65 77 6f  e of the framewo
25f20 72 6b 20 28 65 2e 67 2e 20 22 2e 4e 45 54 46 72  rk (e.g. ".NETFr
25f30 61 6d 65 77 6f 72 6b 22 29 0d 0a 20 20 20 20 20  amework")..     
25f40 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
25f50 20 20 20 20 61 6e 64 20 74 68 65 20 6e 61 6d 65      and the name
25f60 20 6f 66 20 74 68 65 20 70 6c 61 74 66 6f 72 6d   of the platform
25f70 20 28 65 2e 67 2e 20 22 57 69 6e 64 6f 77 73 43   (e.g. "WindowsC
25f80 45 22 29 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  E")...          
25f90 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
25fa0 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
25fb0 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 20 3d   frameworkName =
25fc0 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 4e   frameworkList.N
25fd0 61 6d 65 73 5b 69 6e 64 65 78 5d 3b 0d 0a 20 20  ames[index];..  
25fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
25ff0 72 69 6e 67 20 70 6c 61 74 66 6f 72 6d 4e 61 6d  ring platformNam
26000 65 20 3d 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73  e = frameworkLis
26010 74 2e 50 6c 61 74 66 6f 72 6d 4e 61 6d 65 73 5b  t.PlatformNames[
26020 69 6e 64 65 78 5d 3b 0d 0a 0d 0a 20 20 20 20 20  index];....     
26030 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
26040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
26050 2f 20 4e 4f 54 45 3a 20 53 6b 69 70 20 61 6c 6c  / NOTE: Skip all
26060 20 6e 6f 6e 2d 64 65 73 6b 74 6f 70 20 66 72 61   non-desktop fra
26070 6d 65 77 6f 72 6b 73 20 28 69 2e 65 2e 20 69 66  meworks (i.e. if
26080 20 74 68 65 20 70 6c 61 74 66 6f 72 6d 0d 0a 20   the platform.. 
26090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
260a0 2f 20 20 20 20 20 20 20 6e 61 6d 65 20 69 73 20  /       name is 
260b0 6e 6f 74 20 6e 75 6c 6c 29 2e 0d 0a 20 20 20 20  not null)...    
260c0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
260d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
260e0 69 66 20 28 70 6c 61 74 66 6f 72 6d 4e 61 6d 65  if (platformName
260f0 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   != null)..     
26100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
26110 6f 6e 74 69 6e 75 65 3b 0d 0a 0d 0a 20 20 20 20  ontinue;....    
26120 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
26130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26140 2f 2f 20 4e 4f 54 45 3a 20 47 72 61 62 20 74 68  // NOTE: Grab th
26150 65 20 73 75 70 70 6f 72 74 65 64 20 76 65 72 73  e supported vers
26160 69 6f 6e 73 20 6f 66 20 74 68 69 73 20 70 61 72  ions of this par
26170 74 69 63 75 6c 61 72 0d 0a 20 20 20 20 20 20 20  ticular..       
26180 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
26190 20 20 66 72 61 6d 65 77 6f 72 6b 2e 0d 0a 20 20    framework...  
261a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
261b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
261c0 20 20 56 65 72 73 69 6f 6e 4c 69 73 74 20 66 72    VersionList fr
261d0 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 4c 69  ameworkVersionLi
261e0 73 74 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  st;....         
261f0 20 20 20 20 20 20 20 69 66 20 28 76 65 72 73 69         if (versi
26200 6f 6e 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  on != null)..   
26210 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
26220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26230 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
26240 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e              // N
26250 4f 54 45 3a 20 4d 61 6e 75 61 6c 20 6f 76 65 72  OTE: Manual over
26260 72 69 64 65 20 6f 66 20 74 68 65 20 2a 4f 4e 45  ride of the *ONE
26270 2a 20 66 72 61 6d 65 77 6f 72 6b 20 76 65 72 73  * framework vers
26280 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ion..           
26290 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
262a0 20 20 74 6f 20 70 72 6f 63 65 73 73 2e 0d 0a 20    to process... 
262b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
262c0 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
262d0 20 20 20 20 20 20 20 20 20 20 20 66 72 61 6d 65             frame
262e0 77 6f 72 6b 56 65 72 73 69 6f 6e 4c 69 73 74 20  workVersionList 
262f0 3d 20 6e 65 77 20 56 65 72 73 69 6f 6e 4c 69 73  = new VersionLis
26300 74 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  t();..          
26310 20 20 20 20 20 20 20 20 20 20 66 72 61 6d 65 77            framew
26320 6f 72 6b 56 65 72 73 69 6f 6e 4c 69 73 74 2e 41  orkVersionList.A
26330 64 64 28 6e 65 77 20 56 65 72 73 69 6f 6e 28 76  dd(new Version(v
26340 65 72 73 69 6f 6e 29 29 3b 0d 0a 20 20 20 20 20  ersion));..     
26350 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
26360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c                el
26370 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  se..            
26380 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
26390 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21             if (!
263a0 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 56 65  frameworkList.Ve
263b0 72 73 69 6f 6e 73 2e 54 72 79 47 65 74 56 61 6c  rsions.TryGetVal
263c0 75 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue(..           
263d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
263e0 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c 20   frameworkName, 
263f0 6f 75 74 20 66 72 61 6d 65 77 6f 72 6b 56 65 72  out frameworkVer
26400 73 69 6f 6e 4c 69 73 74 29 20 7c 7c 0d 0a 20 20  sionList) ||..  
26410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26420 20 20 20 20 20 20 28 66 72 61 6d 65 77 6f 72 6b        (framework
26430 56 65 72 73 69 6f 6e 4c 69 73 74 20 3d 3d 20 6e  VersionList == n
26440 75 6c 6c 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ull))..         
26450 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
26460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26470 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d        continue;.
26480 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
26490 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
264a0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
264b0 20 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72               for
264c0 65 61 63 68 20 28 56 65 72 73 69 6f 6e 20 66 72  each (Version fr
264d0 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 20 69  ameworkVersion i
264e0 6e 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69  n frameworkVersi
264f0 6f 6e 4c 69 73 74 29 0d 0a 20 20 20 20 20 20 20  onList)..       
26500 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
26510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26520 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e  TraceOps.DebugAn
26530 64 54 72 61 63 65 28 54 72 61 63 65 50 72 69 6f  dTrace(TracePrio
26540 72 69 74 79 2e 4c 6f 77 65 72 2c 0d 0a 20 20 20  rity.Lower,..   
26550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26560 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61       debugCallba
26570 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63  ck, traceCallbac
26580 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  k, String.Format
26590 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
265a0 20 20 20 20 20 20 20 20 20 20 20 22 66 72 61 6d             "fram
265b0 65 77 6f 72 6b 4e 61 6d 65 20 3d 20 7b 30 7d 2c  eworkName = {0},
265c0 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f   frameworkVersio
265d0 6e 20 3d 20 7b 31 7d 2c 20 22 20 2b 0d 0a 20 20  n = {1}, " +..  
265e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
265f0 20 20 20 20 20 20 22 70 6c 61 74 66 6f 72 6d 4e        "platformN
26600 61 6d 65 20 3d 20 7b 32 7d 22 2c 20 46 6f 72 44  ame = {2}", ForD
26610 69 73 70 6c 61 79 28 66 72 61 6d 65 77 6f 72 6b  isplay(framework
26620 4e 61 6d 65 29 2c 0d 0a 20 20 20 20 20 20 20 20  Name),..        
26630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26640 46 6f 72 44 69 73 70 6c 61 79 28 66 72 61 6d 65  ForDisplay(frame
26650 77 6f 72 6b 56 65 72 73 69 6f 6e 29 2c 0d 0a 20  workVersion),.. 
26660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26670 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61         ForDispla
26680 79 28 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 29 29  y(platformName))
26690 2c 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29  , traceCategory)
266a0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
266b0 20 20 20 20 20 20 20 20 20 69 66 20 28 21 48 61           if (!Ha
266c0 76 65 46 72 61 6d 65 77 6f 72 6b 44 69 72 65 63  veFrameworkDirec
266d0 74 6f 72 79 28 0d 0a 20 20 20 20 20 20 20 20 20  tory(..         
266e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
266f0 20 20 20 72 6f 6f 74 4b 65 79 2c 20 66 72 61 6d     rootKey, fram
26700 65 77 6f 72 6b 4e 61 6d 65 2c 20 66 72 61 6d 65  eworkName, frame
26710 77 6f 72 6b 56 65 72 73 69 6f 6e 2c 0d 0a 20 20  workVersion,..  
26720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26730 20 20 20 20 20 20 20 20 20 20 70 6c 61 74 66 6f            platfo
26740 72 6d 4e 61 6d 65 2c 20 77 6f 77 36 34 2c 20 77  rmName, wow64, w
26750 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 29  hatIf, verbose))
26760 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
26770 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
26780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26790 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41   TraceOps.DebugA
267a0 6e 64 54 72 61 63 65 28 54 72 61 63 65 50 72 69  ndTrace(TracePri
267b0 6f 72 69 74 79 2e 4c 6f 77 2c 0d 0a 20 20 20 20  ority.Low,..    
267c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
267d0 20 20 20 20 20 20 20 20 64 65 62 75 67 43 61 6c          debugCal
267e0 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c  lback, traceCall
267f0 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20  back,..         
26800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26810 20 20 20 22 2e 4e 45 54 20 46 72 61 6d 65 77 6f     ".NET Framewo
26820 72 6b 20 64 69 72 65 63 74 6f 72 79 20 6e 6f 74  rk directory not
26830 20 66 6f 75 6e 64 2c 20 73 6b 69 70 70 69 6e 67   found, skipping
26840 2e 2e 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  ...",..         
26850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26860 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
26870 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
26880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
26890 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20  ntinue;..       
268a0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
268b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
268c0 20 20 20 20 20 20 69 66 20 28 63 61 6c 6c 62 61        if (callba
268d0 63 6b 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ck == null)..   
268e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
268f0 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a       continue;..
26900 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
26910 20 20 20 20 20 20 73 74 72 69 6e 67 20 64 69 72        string dir
26920 65 63 74 6f 72 79 20 3d 20 47 65 74 46 72 61 6d  ectory = GetFram
26930 65 77 6f 72 6b 44 69 72 65 63 74 6f 72 79 28 0d  eworkDirectory(.
26940 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
26950 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79           rootKey
26960 2c 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69  , frameworkVersi
26970 6f 6e 2c 20 77 6f 77 36 34 2c 20 77 68 61 74 49  on, wow64, whatI
26980 66 2c 20 76 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a  f, verbose);....
26990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
269a0 20 20 20 20 69 66 20 28 53 74 72 69 6e 67 2e 49      if (String.I
269b0 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 64 69 72  sNullOrEmpty(dir
269c0 65 63 74 6f 72 79 29 29 0d 0a 20 20 20 20 20 20  ectory))..      
269d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
269e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
269f0 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70           TraceOp
26a00 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28  s.DebugAndTrace(
26a10 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f  TracePriority.Lo
26a20 77 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  w,..            
26a30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26a40 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74  debugCallback, t
26a50 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74  raceCallback, St
26a60 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
26a70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26a80 20 20 20 20 20 20 20 20 20 20 22 2e 4e 45 54 20            ".NET 
26a90 46 72 61 6d 65 77 6f 72 6b 20 7b 30 7d 20 64 69  Framework {0} di
26aa0 72 65 63 74 6f 72 79 20 69 73 20 69 6e 76 61 6c  rectory is inval
26ab0 69 64 2c 20 22 20 2b 0d 0a 20 20 20 20 20 20 20  id, " +..       
26ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26ad0 20 20 20 20 20 22 73 6b 69 70 70 69 6e 67 2e 2e       "skipping..
26ae0 2e 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 66  .", ForDisplay(f
26af0 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 29  rameworkVersion)
26b00 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
26b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26b20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
26b30 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
26b40 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69             conti
26b50 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  nue;..          
26b60 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
26b70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26b80 20 20 20 64 69 72 65 63 74 6f 72 79 20 3d 20 50     directory = P
26b90 61 74 68 2e 43 6f 6d 62 69 6e 65 28 64 69 72 65  ath.Combine(dire
26ba0 63 74 6f 72 79 2c 20 22 43 6f 6e 66 69 67 22 29  ctory, "Config")
26bb0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
26bc0 20 20 20 20 20 20 20 20 20 69 66 20 28 21 44 69           if (!Di
26bd0 72 65 63 74 6f 72 79 2e 45 78 69 73 74 73 28 64  rectory.Exists(d
26be0 69 72 65 63 74 6f 72 79 29 29 0d 0a 20 20 20 20  irectory))..    
26bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26c00 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
26c10 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
26c20 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63  Ops.DebugAndTrac
26c30 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e  e(TracePriority.
26c40 4c 6f 77 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  Low,..          
26c50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26c60 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c    debugCallback,
26c70 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20   traceCallback, 
26c80 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
26c90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26ca0 20 20 20 20 20 20 20 20 20 20 20 20 22 2e 4e 45              ".NE
26cb0 54 20 46 72 61 6d 65 77 6f 72 6b 20 7b 30 7d 20  T Framework {0} 
26cc0 64 69 72 65 63 74 6f 72 79 20 7b 31 7d 20 64 6f  directory {1} do
26cd0 65 73 20 6e 6f 74 20 22 20 2b 0d 0a 20 20 20 20  es not " +..    
26ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26cf0 20 20 20 20 20 20 20 20 22 65 78 69 73 74 2c 20          "exist, 
26d00 73 6b 69 70 70 69 6e 67 2e 2e 2e 22 2c 20 46 6f  skipping...", Fo
26d10 72 44 69 73 70 6c 61 79 28 66 72 61 6d 65 77 6f  rDisplay(framewo
26d20 72 6b 56 65 72 73 69 6f 6e 29 2c 0d 0a 20 20 20  rkVersion),..   
26d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26d40 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70           ForDisp
26d50 6c 61 79 28 64 69 72 65 63 74 6f 72 79 29 29 2c  lay(directory)),
26d60 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
26d70 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
26d80 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74              cont
26d90 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  inue;..         
26da0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
26db0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26dc0 20 20 20 20 73 74 72 69 6e 67 20 66 69 6c 65 4e      string fileN
26dd0 61 6d 65 20 3d 20 50 61 74 68 2e 43 6f 6d 62 69  ame = Path.Combi
26de0 6e 65 28 64 69 72 65 63 74 6f 72 79 2c 20 22 6d  ne(directory, "m
26df0 61 63 68 69 6e 65 2e 63 6f 6e 66 69 67 22 29 3b  achine.config");
26e00 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
26e10 20 20 20 20 20 20 20 20 69 66 20 28 21 46 69 6c          if (!Fil
26e20 65 2e 45 78 69 73 74 73 28 66 69 6c 65 4e 61 6d  e.Exists(fileNam
26e30 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e))..           
26e40 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
26e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26e60 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62      TraceOps.Deb
26e70 75 67 41 6e 64 54 72 61 63 65 28 54 72 61 63 65  ugAndTrace(Trace
26e80 50 72 69 6f 72 69 74 79 2e 4c 6f 77 2c 0d 0a 20  Priority.Low,.. 
26e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26ea0 20 20 20 20 20 20 20 20 20 20 20 64 65 62 75 67             debug
26eb0 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43  Callback, traceC
26ec0 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e  allback, String.
26ed0 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
26ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26ef0 20 20 20 20 20 22 2e 4e 45 54 20 46 72 61 6d 65       ".NET Frame
26f00 77 6f 72 6b 20 7b 30 7d 20 66 69 6c 65 20 7b 31  work {0} file {1
26f10 7d 20 64 6f 65 73 20 6e 6f 74 20 65 78 69 73 74  } does not exist
26f20 2c 20 22 20 2b 0d 0a 20 20 20 20 20 20 20 20 20  , " +..         
26f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26f40 20 20 20 22 73 6b 69 70 70 69 6e 67 2e 2e 2e 22     "skipping..."
26f50 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 66 72 61  , ForDisplay(fra
26f60 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 29 2c 0d  meworkVersion),.
26f70 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
26f80 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72               For
26f90 44 69 73 70 6c 61 79 28 66 69 6c 65 4e 61 6d 65  Display(fileName
26fa0 29 29 2c 20 74 72 61 63 65 43 61 74 65 67 6f 72  )), traceCategor
26fb0 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
26fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
26fd0 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20  ontinue;..      
26fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
26ff0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
27000 20 20 20 20 20 20 20 62 6f 6f 6c 20 6c 6f 63 61         bool loca
27010 6c 53 61 76 65 64 20 3d 20 66 61 6c 73 65 3b 0d  lSaved = false;.
27020 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
27030 20 20 20 20 20 20 20 69 66 20 28 21 63 61 6c 6c         if (!call
27040 62 61 63 6b 28 0d 0a 20 20 20 20 20 20 20 20 20  back(..         
27050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27060 20 20 20 66 69 6c 65 4e 61 6d 65 2c 20 69 6e 76     fileName, inv
27070 61 72 69 61 6e 74 2c 20 6e 61 6d 65 2c 20 64 65  ariant, name, de
27080 73 63 72 69 70 74 69 6f 6e 2c 20 74 79 70 65 4e  scription, typeN
27090 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ame,..          
270a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
270b0 20 20 61 73 73 65 6d 62 6c 79 4e 61 6d 65 2c 20    assemblyName, 
270c0 63 6c 69 65 6e 74 44 61 74 61 2c 20 77 6f 77 36  clientData, wow6
270d0 34 2c 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e  4, throwOnMissin
270e0 67 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  g,..            
270f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27100 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 2c  whatIf, verbose,
27110 20 72 65 66 20 6c 6f 63 61 6c 53 61 76 65 64 2c   ref localSaved,
27120 20 72 65 66 20 65 72 72 6f 72 29 29 0d 0a 20 20   ref error))..  
27130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27140 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
27150 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
27160 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20  urn false;..    
27170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27180 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
27190 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20         else..   
271a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
271b0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
271c0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
271d0 6c 6f 63 61 6c 53 61 76 65 64 20 26 26 20 21 73  localSaved && !s
271e0 61 76 65 64 29 0d 0a 20 20 20 20 20 20 20 20 20  aved)..         
271f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27200 20 20 20 73 61 76 65 64 20 3d 20 74 72 75 65 3b     saved = true;
27210 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
27220 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
27230 76 65 72 62 6f 73 65 29 0d 0a 20 20 20 20 20 20  verbose)..      
27240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27250 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44        TraceOps.D
27260 65 62 75 67 41 6e 64 54 72 61 63 65 28 54 72 61  ebugAndTrace(Tra
27270 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73  cePriority.Lowes
27280 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t,..            
27290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
272a0 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63      debugCallbac
272b0 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b  k, traceCallback
272c0 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  , String.Format(
272d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
272e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
272f0 20 20 22 6c 6f 63 61 6c 53 61 76 65 64 20 3d 20    "localSaved = 
27300 7b 30 7d 2c 20 73 61 76 65 64 20 3d 20 7b 31 7d  {0}, saved = {1}
27310 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
27320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27330 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 6c      ForDisplay(l
27340 6f 63 61 6c 53 61 76 65 64 29 2c 20 46 6f 72 44  ocalSaved), ForD
27350 69 73 70 6c 61 79 28 73 61 76 65 64 29 29 2c 0d  isplay(saved)),.
27360 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
27370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27380 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
27390 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
273a0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
273b0 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
273c0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
273d0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
273e0 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d  true;..        }
273f0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
27400 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27410 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27420 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27430 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27440 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 5b  ///....        [
27450 4d 65 74 68 6f 64 49 6d 70 6c 28 4d 65 74 68 6f  MethodImpl(Metho
27460 64 49 6d 70 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49  dImplOptions.NoI
27470 6e 6c 69 6e 69 6e 67 29 5d 0d 0a 20 20 20 20 20  nlining)]..     
27480 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69     private stati
27490 63 20 62 6f 6f 6c 20 46 6f 72 45 61 63 68 46 72  c bool ForEachFr
274a0 61 6d 65 77 6f 72 6b 52 65 67 69 73 74 72 79 28  ameworkRegistry(
274b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 4d 6f  ..            Mo
274c0 63 6b 52 65 67 69 73 74 72 79 20 72 65 67 69 73  ckRegistry regis
274d0 74 72 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  try,..          
274e0 20 20 46 72 61 6d 65 77 6f 72 6b 4c 69 73 74 20    FrameworkList 
274f0 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2c 0d 0a  frameworkList,..
27500 20 20 20 20 20 20 20 20 20 20 20 20 46 72 61 6d              Fram
27510 65 77 6f 72 6b 52 65 67 69 73 74 72 79 43 61 6c  eworkRegistryCal
27520 6c 62 61 63 6b 20 63 61 6c 6c 62 61 63 6b 2c 0d  lback callback,.
27530 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72  .            str
27540 69 6e 67 20 76 65 72 73 69 6f 6e 2c 20 2f 2a 20  ing version, /* 
27550 4e 4f 54 45 3a 20 4f 70 74 69 6f 6e 61 6c 2e 20  NOTE: Optional. 
27560 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  */..            
27570 6f 62 6a 65 63 74 20 63 6c 69 65 6e 74 44 61 74  object clientDat
27580 61 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  a,..            
27590 62 6f 6f 6c 20 77 6f 77 36 34 2c 0d 0a 20 20 20  bool wow64,..   
275a0 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 74 68           bool th
275b0 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 2c 0d 0a 20  rowOnMissing,.. 
275c0 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
275d0 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20  whatIf,..       
275e0 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73       bool verbos
275f0 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
27600 72 65 66 20 73 74 72 69 6e 67 20 65 72 72 6f 72  ref string error
27610 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d  ..            ).
27620 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
27630 20 20 20 20 20 20 20 20 69 66 20 28 72 65 67 69          if (regi
27640 73 74 72 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  stry == null).. 
27650 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
27660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72                er
27670 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64 20 72  ror = "invalid r
27680 65 67 69 73 74 72 79 22 3b 0d 0a 20 20 20 20 20  egistry";..     
27690 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
276a0 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  n false;..      
276b0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
276c0 20 20 20 20 20 20 20 69 66 20 28 66 72 61 6d 65         if (frame
276d0 77 6f 72 6b 4c 69 73 74 20 3d 3d 20 6e 75 6c 6c  workList == null
276e0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
276f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
27700 20 20 65 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c    error = "inval
27710 69 64 20 66 72 61 6d 65 77 6f 72 6b 20 6c 69 73  id framework lis
27720 74 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  t";..           
27730 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
27740 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
27750 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
27760 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79   MockRegistryKey
27770 20 72 6f 6f 74 4b 65 79 20 3d 20 66 72 61 6d 65   rootKey = frame
27780 77 6f 72 6b 4c 69 73 74 2e 52 6f 6f 74 4b 65 79  workList.RootKey
27790 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
277a0 20 69 66 20 28 72 6f 6f 74 4b 65 79 20 3d 3d 20   if (rootKey == 
277b0 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
277c0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
277d0 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 69        error = "i
277e0 6e 76 61 6c 69 64 20 72 6f 6f 74 20 6b 65 79 22  nvalid root key"
277f0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
27800 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
27810 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
27820 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
27830 66 20 28 21 49 73 53 75 70 70 6f 72 74 65 64 52  f (!IsSupportedR
27840 6f 6f 74 4b 65 79 28 72 65 67 69 73 74 72 79 2c  ootKey(registry,
27850 20 72 6f 6f 74 4b 65 79 29 29 0d 0a 20 20 20 20   rootKey))..    
27860 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
27870 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72             error
27880 20 3d 20 22 72 6f 6f 74 20 6b 65 79 20 6d 75 73   = "root key mus
27890 74 20 62 65 20 70 65 72 2d 75 73 65 72 20 6f 72  t be per-user or
278a0 20 70 65 72 2d 6d 61 63 68 69 6e 65 22 3b 0d 0a   per-machine";..
278b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
278c0 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20  return false;.. 
278d0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
278e0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
278f0 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 4e 61  frameworkList.Na
27900 6d 65 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  mes == null)..  
27910 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
27920 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
27930 6f 72 20 3d 20 22 6e 6f 20 66 72 61 6d 65 77 6f  or = "no framewo
27940 72 6b 20 6e 61 6d 65 73 20 66 6f 75 6e 64 22 3b  rk names found";
27950 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
27960 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
27970 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
27980 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
27990 20 28 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e   (frameworkList.
279a0 56 65 72 73 69 6f 6e 73 20 3d 3d 20 6e 75 6c 6c  Versions == null
279b0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
279c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
279d0 20 20 65 72 72 6f 72 20 3d 20 22 6e 6f 20 66 72    error = "no fr
279e0 61 6d 65 77 6f 72 6b 20 76 65 72 73 69 6f 6e 73  amework versions
279f0 20 66 6f 75 6e 64 22 3b 0d 0a 20 20 20 20 20 20   found";..      
27a00 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
27a10 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20   false;..       
27a20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
27a30 20 20 20 20 20 20 69 66 20 28 66 72 61 6d 65 77        if (framew
27a40 6f 72 6b 4c 69 73 74 2e 50 6c 61 74 66 6f 72 6d  orkList.Platform
27a50 4e 61 6d 65 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  Names == null)..
27a60 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
27a70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
27a80 72 72 6f 72 20 3d 20 22 6e 6f 20 70 6c 61 74 66  rror = "no platf
27a90 6f 72 6d 20 6e 61 6d 65 73 20 66 6f 75 6e 64 22  orm names found"
27aa0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
27ab0 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
27ac0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
27ad0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
27ae0 66 20 28 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74  f (frameworkList
27af0 2e 4e 61 6d 65 73 2e 43 6f 75 6e 74 20 21 3d 20  .Names.Count != 
27b00 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 50 6c  frameworkList.Pl
27b10 61 74 66 6f 72 6d 4e 61 6d 65 73 2e 43 6f 75 6e  atformNames.Coun
27b20 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t)..            
27b30 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
27b40 20 20 20 65 72 72 6f 72 20 3d 20 53 74 72 69 6e     error = Strin
27b50 67 2e 46 6f 72 6d 61 74 28 22 66 72 61 6d 65 77  g.Format("framew
27b60 6f 72 6b 20 6e 61 6d 65 20 63 6f 75 6e 74 20 7b  ork name count {
27b70 30 7d 20 64 6f 65 73 20 6e 6f 74 20 22 20 2b 0d  0} does not " +.
27b80 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
27b90 20 20 20 20 20 22 6d 61 74 63 68 20 70 6c 61 74       "match plat
27ba0 66 6f 72 6d 20 6e 61 6d 65 20 63 6f 75 6e 74 20  form name count 
27bb0 7b 31 7d 22 2c 20 66 72 61 6d 65 77 6f 72 6b 4c  {1}", frameworkL
27bc0 69 73 74 2e 4e 61 6d 65 73 2e 43 6f 75 6e 74 2c  ist.Names.Count,
27bd0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
27be0 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 4c        frameworkL
27bf0 69 73 74 2e 50 6c 61 74 66 6f 72 6d 4e 61 6d 65  ist.PlatformName
27c00 73 2e 43 6f 75 6e 74 29 3b 0d 0a 0d 0a 20 20 20  s.Count);....   
27c10 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
27c20 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20  urn false;..    
27c30 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
27c40 20 20 20 20 20 20 20 20 20 66 6f 72 20 28 69 6e           for (in
27c50 74 20 69 6e 64 65 78 20 3d 20 30 3b 20 69 6e 64  t index = 0; ind
27c60 65 78 20 3c 20 66 72 61 6d 65 77 6f 72 6b 4c 69  ex < frameworkLi
27c70 73 74 2e 4e 61 6d 65 73 2e 43 6f 75 6e 74 3b 20  st.Names.Count; 
27c80 69 6e 64 65 78 2b 2b 29 0d 0a 20 20 20 20 20 20  index++)..      
27c90 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
27ca0 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
27cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
27cc0 4e 4f 54 45 3a 20 47 72 61 62 20 74 68 65 20 6e  NOTE: Grab the n
27cd0 61 6d 65 20 6f 66 20 74 68 65 20 66 72 61 6d 65  ame of the frame
27ce0 77 6f 72 6b 20 28 65 2e 67 2e 20 22 2e 4e 45 54  work (e.g. ".NET
27cf0 46 72 61 6d 65 77 6f 72 6b 22 29 0d 0a 20 20 20  Framework")..   
27d00 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
27d10 20 20 20 20 20 20 61 6e 64 20 74 68 65 20 6e 61        and the na
27d20 6d 65 20 6f 66 20 74 68 65 20 70 6c 61 74 66 6f  me of the platfo
27d30 72 6d 20 28 65 2e 67 2e 20 22 57 69 6e 64 6f 77  rm (e.g. "Window
27d40 73 43 45 22 29 2e 0d 0a 20 20 20 20 20 20 20 20  sCE")...        
27d50 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
27d60 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
27d70 6e 67 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65  ng frameworkName
27d80 20 3d 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74   = frameworkList
27d90 2e 4e 61 6d 65 73 5b 69 6e 64 65 78 5d 3b 0d 0a  .Names[index];..
27da0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27db0 73 74 72 69 6e 67 20 70 6c 61 74 66 6f 72 6d 4e  string platformN
27dc0 61 6d 65 20 3d 20 66 72 61 6d 65 77 6f 72 6b 4c  ame = frameworkL
27dd0 69 73 74 2e 50 6c 61 74 66 6f 72 6d 4e 61 6d 65  ist.PlatformName
27de0 73 5b 69 6e 64 65 78 5d 3b 0d 0a 0d 0a 20 20 20  s[index];....   
27df0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
27e00 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
27e10 20 2f 2f 20 4e 4f 54 45 3a 20 47 72 61 62 20 74   // NOTE: Grab t
27e20 68 65 20 73 75 70 70 6f 72 74 65 64 20 76 65 72  he supported ver
27e30 73 69 6f 6e 73 20 6f 66 20 74 68 69 73 20 70 61  sions of this pa
27e40 72 74 69 63 75 6c 61 72 0d 0a 20 20 20 20 20 20  rticular..      
27e50 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
27e60 20 20 20 66 72 61 6d 65 77 6f 72 6b 2e 0d 0a 20     framework... 
27e70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
27e80 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
27e90 20 20 20 56 65 72 73 69 6f 6e 4c 69 73 74 20 66     VersionList f
27ea0 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 4c  rameworkVersionL
27eb0 69 73 74 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ist;....        
27ec0 20 20 20 20 20 20 20 20 69 66 20 28 76 65 72 73          if (vers
27ed0 69 6f 6e 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20  ion != null)..  
27ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
27ef0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
27f00 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
27f10 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
27f20 4e 4f 54 45 3a 20 4d 61 6e 75 61 6c 20 6f 76 65  NOTE: Manual ove
27f30 72 72 69 64 65 20 6f 66 20 74 68 65 20 2a 4f 4e  rride of the *ON
27f40 45 2a 20 66 72 61 6d 65 77 6f 72 6b 20 76 65 72  E* framework ver
27f50 73 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20 20 20  sion..          
27f60 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
27f70 20 20 20 74 6f 20 70 72 6f 63 65 73 73 2e 0d 0a     to process...
27f80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27f90 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
27fa0 20 20 20 20 20 20 20 20 20 20 20 20 66 72 61 6d              fram
27fb0 65 77 6f 72 6b 56 65 72 73 69 6f 6e 4c 69 73 74  eworkVersionList
27fc0 20 3d 20 6e 65 77 20 56 65 72 73 69 6f 6e 4c 69   = new VersionLi
27fd0 73 74 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  st();..         
27fe0 20 20 20 20 20 20 20 20 20 20 20 66 72 61 6d 65             frame
27ff0 77 6f 72 6b 56 65 72 73 69 6f 6e 4c 69 73 74 2e  workVersionList.
28000 41 64 64 28 6e 65 77 20 56 65 72 73 69 6f 6e 28  Add(new Version(
28010 76 65 72 73 69 6f 6e 29 29 3b 0d 0a 20 20 20 20  version));..    
28020 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
28030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
28040 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  lse..           
28050 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
28060 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
28070 21 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 56  !frameworkList.V
28080 65 72 73 69 6f 6e 73 2e 54 72 79 47 65 74 56 61  ersions.TryGetVa
28090 6c 75 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  lue(..          
280a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
280b0 20 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c    frameworkName,
280c0 20 6f 75 74 20 66 72 61 6d 65 77 6f 72 6b 56 65   out frameworkVe
280d0 72 73 69 6f 6e 4c 69 73 74 29 20 7c 7c 0d 0a 20  rsionList) ||.. 
280e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
280f0 20 20 20 20 20 20 20 28 66 72 61 6d 65 77 6f 72         (framewor
28100 6b 56 65 72 73 69 6f 6e 4c 69 73 74 20 3d 3d 20  kVersionList == 
28110 6e 75 6c 6c 29 29 0d 0a 20 20 20 20 20 20 20 20  null))..        
28120 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
28130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28140 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b         continue;
28150 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
28160 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
28170 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
28180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 6f                fo
28190 72 65 61 63 68 20 28 56 65 72 73 69 6f 6e 20 66  reach (Version f
281a0 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 20  rameworkVersion 
281b0 69 6e 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73  in frameworkVers
281c0 69 6f 6e 4c 69 73 74 29 0d 0a 20 20 20 20 20 20  ionList)..      
281d0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
281e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
281f0 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41   TraceOps.DebugA
28200 6e 64 54 72 61 63 65 28 54 72 61 63 65 50 72 69  ndTrace(TracePri
28210 6f 72 69 74 79 2e 4c 6f 77 65 72 2c 0d 0a 20 20  ority.Lower,..  
28220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28230 20 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62        debugCallb
28240 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61  ack, traceCallba
28250 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ck, String.Forma
28260 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
28270 20 20 20 20 20 20 20 20 20 20 20 20 22 66 72 61              "fra
28280 6d 65 77 6f 72 6b 4e 61 6d 65 20 3d 20 7b 30 7d  meworkName = {0}
28290 2c 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69  , frameworkVersi
282a0 6f 6e 20 3d 20 7b 31 7d 2c 20 22 20 2b 0d 0a 20  on = {1}, " +.. 
282b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
282c0 20 20 20 20 20 20 20 22 70 6c 61 74 66 6f 72 6d         "platform
282d0 4e 61 6d 65 20 3d 20 7b 32 7d 22 2c 20 46 6f 72  Name = {2}", For
282e0 44 69 73 70 6c 61 79 28 66 72 61 6d 65 77 6f 72  Display(framewor
282f0 6b 4e 61 6d 65 29 2c 0d 0a 20 20 20 20 20 20 20  kName),..       
28300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28310 20 46 6f 72 44 69 73 70 6c 61 79 28 66 72 61 6d   ForDisplay(fram
28320 65 77 6f 72 6b 56 65 72 73 69 6f 6e 29 2c 0d 0a  eworkVersion),..
28330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28340 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c          ForDispl
28350 61 79 28 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 29  ay(platformName)
28360 29 2c 20 74 72 61 63 65 43 61 74 65 67 6f 72 79  ), traceCategory
28370 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
28380 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21 48            if (!H
28390 61 76 65 46 72 61 6d 65 77 6f 72 6b 52 65 67 69  aveFrameworkRegi
283a0 73 74 72 79 28 0d 0a 20 20 20 20 20 20 20 20 20  stry(..         
283b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
283c0 20 20 20 72 6f 6f 74 4b 65 79 2c 20 66 72 61 6d     rootKey, fram
283d0 65 77 6f 72 6b 4e 61 6d 65 2c 20 66 72 61 6d 65  eworkName, frame
283e0 77 6f 72 6b 56 65 72 73 69 6f 6e 2c 0d 0a 20 20  workVersion,..  
283f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28400 20 20 20 20 20 20 20 20 20 20 70 6c 61 74 66 6f            platfo
28410 72 6d 4e 61 6d 65 2c 20 77 6f 77 36 34 2c 20 77  rmName, wow64, w
28420 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 29  hatIf, verbose))
28430 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
28440 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
28450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28460 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41   TraceOps.DebugA
28470 6e 64 54 72 61 63 65 28 54 72 61 63 65 50 72 69  ndTrace(TracePri
28480 6f 72 69 74 79 2e 4c 6f 77 2c 0d 0a 20 20 20 20  ority.Low,..    
28490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
284a0 20 20 20 20 20 20 20 20 64 65 62 75 67 43 61 6c          debugCal
284b0 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c  lback, traceCall
284c0 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20  back,..         
284d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
284e0 20 20 20 22 2e 4e 45 54 20 46 72 61 6d 65 77 6f     ".NET Framewo
284f0 72 6b 20 72 65 67 69 73 74 72 79 20 6e 6f 74 20  rk registry not 
28500 66 6f 75 6e 64 2c 20 73 6b 69 70 70 69 6e 67 2e  found, skipping.
28510 2e 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ..",..          
28520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28530 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29    traceCategory)
28540 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
28550 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
28560 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20  tinue;..        
28570 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
28580 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
28590 20 20 20 20 20 69 66 20 28 63 61 6c 6c 62 61 63       if (callbac
285a0 6b 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  k == null)..    
285b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
285c0 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 0d      continue;...
285d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
285e0 20 20 20 20 20 69 66 20 28 21 63 61 6c 6c 62 61       if (!callba
285f0 63 6b 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ck(..           
28600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28610 20 72 6f 6f 74 4b 65 79 2c 20 66 72 61 6d 65 77   rootKey, framew
28620 6f 72 6b 4e 61 6d 65 2c 20 66 72 61 6d 65 77 6f  orkName, framewo
28630 72 6b 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20  rkVersion,..    
28640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28650 20 20 20 20 20 20 20 20 70 6c 61 74 66 6f 72 6d          platform
28660 4e 61 6d 65 2c 20 63 6c 69 65 6e 74 44 61 74 61  Name, clientData
28670 2c 20 77 6f 77 36 34 2c 20 74 68 72 6f 77 4f 6e  , wow64, throwOn
28680 4d 69 73 73 69 6e 67 2c 0d 0a 20 20 20 20 20 20  Missing,..      
28690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
286a0 20 20 20 20 20 20 77 68 61 74 49 66 2c 20 76 65        whatIf, ve
286b0 72 62 6f 73 65 2c 20 72 65 66 20 65 72 72 6f 72  rbose, ref error
286c0 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
286d0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
286e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
286f0 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
28700 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
28710 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
28720 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
28730 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
28740 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
28750 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d  true;..        }
28760 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65  ..        #endre
28770 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20  gion....        
28780 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28790 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
287a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
287b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
287c0 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
287d0 20 20 20 23 72 65 67 69 6f 6e 20 50 65 72 2d 56     #region Per-V
287e0 69 73 75 61 6c 20 53 74 75 64 69 6f 20 56 65 72  isual Studio Ver
287f0 73 69 6f 6e 20 48 61 6e 64 6c 69 6e 67 0d 0a 20  sion Handling.. 
28800 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
28810 74 61 74 69 63 20 76 6f 69 64 20 49 6e 69 74 69  tatic void Initi
28820 61 6c 69 7a 65 56 73 4c 69 73 74 28 0d 0a 20 20  alizeVsList(..  
28830 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65            MockRe
28840 67 69 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65  gistryKey rootKe
28850 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y,..            
28860 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 63 6f  Configuration co
28870 6e 66 69 67 75 72 61 74 69 6f 6e 2c 0d 0a 20 20  nfiguration,..  
28880 20 20 20 20 20 20 20 20 20 20 72 65 66 20 56 73            ref Vs
28890 4c 69 73 74 20 76 73 4c 69 73 74 0d 0a 20 20 20  List vsList..   
288a0 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
288b0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
288c0 20 20 20 69 66 20 28 76 73 4c 69 73 74 20 3d 3d     if (vsList ==
288d0 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
288e0 20 20 20 20 20 20 20 20 76 73 4c 69 73 74 20 3d          vsList =
288f0 20 6e 65 77 20 56 73 4c 69 73 74 28 29 3b 0d 0a   new VsList();..
28900 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
28910 20 28 76 73 4c 69 73 74 2e 52 6f 6f 74 4b 65 79   (vsList.RootKey
28920 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
28930 20 20 20 20 20 20 20 20 20 20 20 76 73 4c 69 73             vsLis
28940 74 2e 52 6f 6f 74 4b 65 79 20 3d 20 72 6f 6f 74  t.RootKey = root
28950 4b 65 79 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  Key;....        
28960 20 20 20 20 69 66 20 28 76 73 4c 69 73 74 2e 56      if (vsList.V
28970 65 72 73 69 6f 6e 73 20 3d 3d 20 6e 75 6c 6c 29  ersions == null)
28980 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
28990 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
289a0 20 76 73 4c 69 73 74 2e 56 65 72 73 69 6f 6e 73   vsList.Versions
289b0 20 3d 20 6e 65 77 20 56 65 72 73 69 6f 6e 4c 69   = new VersionLi
289c0 73 74 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  st();....       
289d0 20 20 20 20 20 20 20 20 20 69 66 20 28 28 63 6f           if ((co
289e0 6e 66 69 67 75 72 61 74 69 6f 6e 20 3d 3d 20 6e  nfiguration == n
289f0 75 6c 6c 29 20 7c 7c 20 21 63 6f 6e 66 69 67 75  ull) || !configu
28a00 72 61 74 69 6f 6e 2e 4e 6f 56 73 32 30 30 35 29  ration.NoVs2005)
28a10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
28a20 20 20 20 20 20 20 76 73 4c 69 73 74 2e 56 65 72        vsList.Ver
28a30 73 69 6f 6e 73 2e 41 64 64 28 6e 65 77 20 56 65  sions.Add(new Ve
28a40 72 73 69 6f 6e 28 38 2c 20 30 29 29 3b 20 2f 2f  rsion(8, 0)); //
28a50 20 32 30 30 35 0d 0a 0d 0a 20 20 20 20 20 20 20   2005....       
28a60 20 20 20 20 20 20 20 20 20 69 66 20 28 28 63 6f           if ((co
28a70 6e 66 69 67 75 72 61 74 69 6f 6e 20 3d 3d 20 6e  nfiguration == n
28a80 75 6c 6c 29 20 7c 7c 20 21 63 6f 6e 66 69 67 75  ull) || !configu
28a90 72 61 74 69 6f 6e 2e 4e 6f 56 73 32 30 30 38 29  ration.NoVs2008)
28aa0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
28ab0 20 20 20 20 20 20 76 73 4c 69 73 74 2e 56 65 72        vsList.Ver
28ac0 73 69 6f 6e 73 2e 41 64 64 28 6e 65 77 20 56 65  sions.Add(new Ve
28ad0 72 73 69 6f 6e 28 39 2c 20 30 29 29 3b 20 2f 2f  rsion(9, 0)); //
28ae0 20 32 30 30 38 0d 0a 0d 0a 20 20 20 20 20 20 20   2008....       
28af0 20 20 20 20 20 20 20 20 20 69 66 20 28 28 63 6f           if ((co
28b00 6e 66 69 67 75 72 61 74 69 6f 6e 20 3d 3d 20 6e  nfiguration == n
28b10 75 6c 6c 29 20 7c 7c 20 21 63 6f 6e 66 69 67 75  ull) || !configu
28b20 72 61 74 69 6f 6e 2e 4e 6f 56 73 32 30 31 30 29  ration.NoVs2010)
28b30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
28b40 20 20 20 20 20 20 76 73 4c 69 73 74 2e 56 65 72        vsList.Ver
28b50 73 69 6f 6e 73 2e 41 64 64 28 6e 65 77 20 56 65  sions.Add(new Ve
28b60 72 73 69 6f 6e 28 31 30 2c 20 30 29 29 3b 2f 2f  rsion(10, 0));//
28b70 20 32 30 31 30 0d 0a 0d 0a 20 20 20 20 20 20 20   2010....       
28b80 20 20 20 20 20 20 20 20 20 69 66 20 28 28 63 6f           if ((co
28b90 6e 66 69 67 75 72 61 74 69 6f 6e 20 3d 3d 20 6e  nfiguration == n
28ba0 75 6c 6c 29 20 7c 7c 20 21 63 6f 6e 66 69 67 75  ull) || !configu
28bb0 72 61 74 69 6f 6e 2e 4e 6f 56 73 32 30 31 32 29  ration.NoVs2012)
28bc0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
28bd0 20 20 20 20 20 20 76 73 4c 69 73 74 2e 56 65 72        vsList.Ver
28be0 73 69 6f 6e 73 2e 41 64 64 28 6e 65 77 20 56 65  sions.Add(new Ve
28bf0 72 73 69 6f 6e 28 31 31 2c 20 30 29 29 3b 2f 2f  rsion(11, 0));//
28c00 20 32 30 31 32 0d 0a 20 20 20 20 20 20 20 20 20   2012..         
28c10 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d     }..        }.
28c20 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
28c30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28c40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28c50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28c60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28c70 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72  //....        pr
28c80 69 76 61 74 65 20 73 74 61 74 69 63 20 62 6f 6f  ivate static boo
28c90 6c 20 48 61 76 65 56 73 56 65 72 73 69 6f 6e 28  l HaveVsVersion(
28ca0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 4d 6f  ..            Mo
28cb0 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 72 6f  ckRegistryKey ro
28cc0 6f 74 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20  otKey,..        
28cd0 20 20 20 20 56 65 72 73 69 6f 6e 20 76 73 56 65      Version vsVe
28ce0 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20  rsion,..        
28cf0 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34 2c 0d      bool wow64,.
28d00 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f  .            boo
28d10 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20  l whatIf,..     
28d20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62         bool verb
28d30 6f 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ose..           
28d40 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20   )..        {.. 
28d50 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76             if (v
28d60 73 56 65 72 73 69 6f 6e 20 3d 3d 20 6e 75 6c 6c  sVersion == null
28d70 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
28d80 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
28d90 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
28da0 73 74 72 69 6e 67 20 6b 65 79 4e 61 6d 65 20 3d  string keyName =
28db0 20 47 65 74 56 73 4b 65 79 4e 61 6d 65 28 76 73   GetVsKeyName(vs
28dc0 56 65 72 73 69 6f 6e 2c 20 77 6f 77 36 34 29 3b  Version, wow64);
28dd0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
28de0 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73  using (MockRegis
28df0 74 72 79 4b 65 79 20 6b 65 79 20 3d 20 52 65 67  tryKey key = Reg
28e00 69 73 74 72 79 48 65 6c 70 65 72 2e 4f 70 65 6e  istryHelper.Open
28e10 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20  SubKey(..       
28e20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f               roo
28e30 74 4b 65 79 2c 20 6b 65 79 4e 61 6d 65 2c 20 66  tKey, keyName, f
28e40 61 6c 73 65 2c 20 77 68 61 74 49 66 2c 20 76 65  alse, whatIf, ve
28e50 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 20  rbose))..       
28e60 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
28e70 20 20 20 20 20 20 20 20 69 66 20 28 6b 65 79 20          if (key 
28e80 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
28e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
28ea0 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20  turn false;.... 
28eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6f                 o
28ec0 62 6a 65 63 74 20 76 61 6c 75 65 20 3d 20 52 65  bject value = Re
28ed0 67 69 73 74 72 79 48 65 6c 70 65 72 2e 47 65 74  gistryHelper.Get
28ee0 56 61 6c 75 65 28 0d 0a 20 20 20 20 20 20 20 20  Value(..        
28ef0 20 20 20 20 20 20 20 20 20 20 20 20 6b 65 79 2c              key,
28f00 20 22 49 6e 73 74 61 6c 6c 44 69 72 22 2c 20 6e   "InstallDir", n
28f10 75 6c 6c 2c 20 77 68 61 74 49 66 2c 20 76 65 72  ull, whatIf, ver
28f20 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  bose);....      
28f30 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21 28            if (!(
28f40 76 61 6c 75 65 20 69 73 20 73 74 72 69 6e 67 29  value is string)
28f50 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
28f60 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
28f70 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  lse;....        
28f80 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 64          string d
28f90 69 72 65 63 74 6f 72 79 20 3d 20 28 73 74 72 69  irectory = (stri
28fa0 6e 67 29 76 61 6c 75 65 3b 0d 0a 0d 0a 20 20 20  ng)value;....   
28fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
28fc0 28 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72  (String.IsNullOr
28fd0 45 6d 70 74 79 28 64 69 72 65 63 74 6f 72 79 29  Empty(directory)
28fe0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
28ff0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
29000 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  lse;....        
29010 20 20 20 20 20 20 20 20 69 66 20 28 21 44 69 72          if (!Dir
29020 65 63 74 6f 72 79 2e 45 78 69 73 74 73 28 64 69  ectory.Exists(di
29030 72 65 63 74 6f 72 79 29 29 0d 0a 20 20 20 20 20  rectory))..     
29040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
29050 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a  eturn false;....
29060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29070 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e  TraceOps.DebugAn
29080 64 54 72 61 63 65 28 54 72 61 63 65 50 72 69 6f  dTrace(TracePrio
29090 72 69 74 79 2e 4c 6f 77 65 72 2c 0d 0a 20 20 20  rity.Lower,..   
290a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
290b0 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20   debugCallback, 
290c0 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53  traceCallback, S
290d0 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
290e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
290f0 20 20 20 22 56 69 73 75 61 6c 20 53 74 75 64 69     "Visual Studi
29100 6f 20 7b 30 7d 20 66 6f 75 6e 64 20 69 6e 20 64  o {0} found in d
29110 69 72 65 63 74 6f 72 79 20 7b 31 7d 2e 22 2c 0d  irectory {1}.",.
29120 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
29130 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28       ForDisplay(
29140 76 73 56 65 72 73 69 6f 6e 29 2c 20 46 6f 72 44  vsVersion), ForD
29150 69 73 70 6c 61 79 28 64 69 72 65 63 74 6f 72 79  isplay(directory
29160 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  )),..           
29170 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
29180 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
29190 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
291a0 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20  rn true;..      
291b0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
291c0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f   }....        //
291d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
291e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
291f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29200 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29210 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
29220 20 5b 4d 65 74 68 6f 64 49 6d 70 6c 28 4d 65 74   [MethodImpl(Met
29230 68 6f 64 49 6d 70 6c 4f 70 74 69 6f 6e 73 2e 4e  hodImplOptions.N
29240 6f 49 6e 6c 69 6e 69 6e 67 29 5d 0d 0a 20 20 20  oInlining)]..   
29250 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61       private sta
29260 74 69 63 20 62 6f 6f 6c 20 46 6f 72 45 61 63 68  tic bool ForEach
29270 56 73 56 65 72 73 69 6f 6e 52 65 67 69 73 74 72  VsVersionRegistr
29280 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y(..            
29290 4d 6f 63 6b 52 65 67 69 73 74 72 79 20 72 65 67  MockRegistry reg
292a0 69 73 74 72 79 2c 0d 0a 20 20 20 20 20 20 20 20  istry,..        
292b0 20 20 20 20 56 73 4c 69 73 74 20 76 73 4c 69 73      VsList vsLis
292c0 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t,..            
292d0 56 69 73 75 61 6c 53 74 75 64 69 6f 52 65 67 69  VisualStudioRegi
292e0 73 74 72 79 43 61 6c 6c 62 61 63 6b 20 63 61 6c  stryCallback cal
292f0 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20  lback,..        
29300 20 20 20 20 50 61 63 6b 61 67 65 20 70 61 63 6b      Package pack
29310 61 67 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  age,..          
29320 20 20 6f 62 6a 65 63 74 20 63 6c 69 65 6e 74 44    object clientD
29330 61 74 61 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ata,..          
29340 20 20 62 6f 6f 6c 20 77 6f 77 36 34 2c 0d 0a 20    bool wow64,.. 
29350 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
29360 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 2c 0d  throwOnMissing,.
29370 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f  .            boo
29380 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20  l whatIf,..     
29390 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62         bool verb
293a0 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ose,..          
293b0 20 20 72 65 66 20 73 74 72 69 6e 67 20 65 72 72    ref string err
293c0 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  or..            
293d0 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
293e0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 72 65            if (re
293f0 67 69 73 74 72 79 20 3d 3d 20 6e 75 6c 6c 29 0d  gistry == null).
29400 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
29410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29420 65 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64  error = "invalid
29430 20 72 65 67 69 73 74 72 79 22 3b 0d 0a 20 20 20   registry";..   
29440 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
29450 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20  urn false;..    
29460 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
29470 20 20 20 20 20 20 20 20 20 69 66 20 28 76 73 4c           if (vsL
29480 69 73 74 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  ist == null)..  
29490 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
294a0 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
294b0 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64 20 56 53  or = "invalid VS
294c0 20 6c 69 73 74 22 3b 0d 0a 20 20 20 20 20 20 20   list";..       
294d0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
294e0 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20  false;..        
294f0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
29500 20 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72       MockRegistr
29510 79 4b 65 79 20 72 6f 6f 74 4b 65 79 20 3d 20 76  yKey rootKey = v
29520 73 4c 69 73 74 2e 52 6f 6f 74 4b 65 79 3b 0d 0a  sList.RootKey;..
29530 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
29540 20 28 72 6f 6f 74 4b 65 79 20 3d 3d 20 6e 75 6c   (rootKey == nul
29550 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
29560 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
29570 20 20 20 65 72 72 6f 72 20 3d 20 22 69 6e 76 61     error = "inva
29580 6c 69 64 20 72 6f 6f 74 20 6b 65 79 22 3b 0d 0a  lid root key";..
29590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
295a0 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20  return false;.. 
295b0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
295c0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
295d0 21 49 73 53 75 70 70 6f 72 74 65 64 52 6f 6f 74  !IsSupportedRoot
295e0 4b 65 79 28 72 65 67 69 73 74 72 79 2c 20 72 6f  Key(registry, ro
295f0 6f 74 4b 65 79 29 29 0d 0a 20 20 20 20 20 20 20  otKey))..       
29600 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
29610 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
29620 22 72 6f 6f 74 20 6b 65 79 20 6d 75 73 74 20 62  "root key must b
29630 65 20 70 65 72 2d 75 73 65 72 20 6f 72 20 70 65  e per-user or pe
29640 72 2d 6d 61 63 68 69 6e 65 22 3b 0d 0a 20 20 20  r-machine";..   
29650 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
29660 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20  urn false;..    
29670 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
29680 20 20 20 20 20 20 20 20 20 69 66 20 28 76 73 4c           if (vsL
29690 69 73 74 2e 56 65 72 73 69 6f 6e 73 20 3d 3d 20  ist.Versions == 
296a0 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
296b0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
296c0 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 6e        error = "n
296d0 6f 20 56 53 20 76 65 72 73 69 6f 6e 73 20 66 6f  o VS versions fo
296e0 75 6e 64 22 3b 0d 0a 20 20 20 20 20 20 20 20 20  und";..         
296f0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
29700 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lse;..          
29710 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
29720 20 20 20 66 6f 72 65 61 63 68 20 28 56 65 72 73     foreach (Vers
29730 69 6f 6e 20 76 73 56 65 72 73 69 6f 6e 20 69 6e  ion vsVersion in
29740 20 76 73 4c 69 73 74 2e 56 65 72 73 69 6f 6e 73   vsList.Versions
29750 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
29760 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
29770 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67    TraceOps.Debug
29780 41 6e 64 54 72 61 63 65 28 54 72 61 63 65 50 72  AndTrace(TracePr
29790 69 6f 72 69 74 79 2e 4c 6f 77 65 72 2c 0d 0a 20  iority.Lower,.. 
297a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
297b0 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b     debugCallback
297c0 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c  , traceCallback,
297d0 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d   String.Format(.
297e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
297f0 20 20 20 20 20 22 76 73 56 65 72 73 69 6f 6e 20       "vsVersion 
29800 3d 20 7b 30 7d 22 2c 20 46 6f 72 44 69 73 70 6c  = {0}", ForDispl
29810 61 79 28 76 73 56 65 72 73 69 6f 6e 29 29 2c 0d  ay(vsVersion)),.
29820 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
29830 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f       traceCatego
29840 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
29850 20 20 20 20 20 20 20 20 69 66 20 28 21 48 61 76          if (!Hav
29860 65 56 73 56 65 72 73 69 6f 6e 28 72 6f 6f 74 4b  eVsVersion(rootK
29870 65 79 2c 20 76 73 56 65 72 73 69 6f 6e 2c 20 77  ey, vsVersion, w
29880 6f 77 36 34 2c 20 77 68 61 74 49 66 2c 20 76 65  ow64, whatIf, ve
29890 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 20  rbose))..       
298a0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
298b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
298c0 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e  TraceOps.DebugAn
298d0 64 54 72 61 63 65 28 54 72 61 63 65 50 72 69 6f  dTrace(TracePrio
298e0 72 69 74 79 2e 4c 6f 77 2c 0d 0a 20 20 20 20 20  rity.Low,..     
298f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29900 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b     debugCallback
29910 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c  , traceCallback,
29920 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
29930 20 20 20 20 20 20 20 20 20 20 22 56 69 73 75 61            "Visua
29940 6c 20 53 74 75 64 69 6f 20 76 65 72 73 69 6f 6e  l Studio version
29950 20 6e 6f 74 20 66 6f 75 6e 64 2c 20 73 6b 69 70   not found, skip
29960 70 69 6e 67 2e 2e 2e 22 2c 0d 0a 20 20 20 20 20  ping...",..     
29970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29980 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
29990 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
299a0 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e            contin
299b0 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
299c0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
299d0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 63 61            if (ca
299e0 6c 6c 62 61 63 6b 20 3d 3d 20 6e 75 6c 6c 29 0d  llback == null).
299f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
29a00 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a       continue;..
29a10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
29a20 20 20 69 66 20 28 21 63 61 6c 6c 62 61 63 6b 28    if (!callback(
29a30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
29a40 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65            rootKe
29a50 79 2c 20 76 73 56 65 72 73 69 6f 6e 2c 20 70 61  y, vsVersion, pa
29a60 63 6b 61 67 65 2c 20 63 6c 69 65 6e 74 44 61 74  ckage, clientDat
29a70 61 2c 20 77 6f 77 36 34 2c 0d 0a 20 20 20 20 20  a, wow64,..     
29a80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29a90 20 20 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e     throwOnMissin
29aa0 67 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f  g, whatIf, verbo
29ab0 73 65 2c 20 72 65 66 20 65 72 72 6f 72 29 29 0d  se, ref error)).
29ac0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
29ad0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
29ae0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
29af0 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alse;..         
29b00 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
29b10 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
29b20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72         return tr
29b30 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  ue;..        }..
29b40 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
29b50 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  on....        //
29b60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29b70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29b80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29b90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29ba0 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
29bb0 20 23 72 65 67 69 6f 6e 20 43 6f 6e 66 69 67 75   #region Configu
29bc0 72 61 74 69 6f 6e 20 46 69 6c 65 20 48 61 6e 64  ration File Hand
29bd0 6c 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 5b 4d  ling..        [M
29be0 65 74 68 6f 64 49 6d 70 6c 28 4d 65 74 68 6f 64  ethodImpl(Method
29bf0 49 6d 70 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e  ImplOptions.NoIn
29c00 6c 69 6e 69 6e 67 29 5d 0d 0a 20 20 20 20 20 20  lining)]..      
29c10 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63    private static
29c20 20 62 6f 6f 6c 20 41 64 64 44 62 50 72 6f 76 69   bool AddDbProvi
29c30 64 65 72 46 61 63 74 6f 72 79 28 0d 0a 20 20 20  derFactory(..   
29c40 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
29c50 66 69 6c 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20  fileName,..     
29c60 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 69 6e         string in
29c70 76 61 72 69 61 6e 74 2c 0d 0a 20 20 20 20 20 20  variant,..      
29c80 20 20 20 20 20 20 73 74 72 69 6e 67 20 6e 61 6d        string nam
29c90 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
29ca0 73 74 72 69 6e 67 20 64 65 73 63 72 69 70 74 69  string descripti
29cb0 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  on,..           
29cc0 20 73 74 72 69 6e 67 20 74 79 70 65 4e 61 6d 65   string typeName
29cd0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 41  ,..            A
29ce0 73 73 65 6d 62 6c 79 4e 61 6d 65 20 61 73 73 65  ssemblyName asse
29cf0 6d 62 6c 79 4e 61 6d 65 2c 0d 0a 20 20 20 20 20  mblyName,..     
29d00 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74         bool what
29d10 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  If,..           
29d20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 0d 0a   bool verbose,..
29d30 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20              ref 
29d40 62 6f 6f 6c 20 73 61 76 65 64 2c 0d 0a 20 20 20  bool saved,..   
29d50 20 20 20 20 20 20 20 20 20 72 65 66 20 73 74 72           ref str
29d60 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20 20 20  ing error..     
29d70 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
29d80 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
29d90 20 62 6f 6f 6c 20 64 69 72 74 79 20 3d 20 66 61   bool dirty = fa
29da0 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lse;..          
29db0 20 20 58 6d 6c 44 6f 63 75 6d 65 6e 74 20 64 6f    XmlDocument do
29dc0 63 75 6d 65 6e 74 20 3d 20 6e 65 77 20 58 6d 6c  cument = new Xml
29dd0 44 6f 63 75 6d 65 6e 74 28 29 3b 0d 0a 0d 0a 20  Document();.... 
29de0 20 20 20 20 20 20 20 20 20 20 20 64 6f 63 75 6d             docum
29df0 65 6e 74 2e 50 72 65 73 65 72 76 65 57 68 69 74  ent.PreserveWhit
29e00 65 73 70 61 63 65 20 3d 20 74 72 75 65 3b 0d 0a  espace = true;..
29e10 20 20 20 20 20 20 20 20 20 20 20 20 64 6f 63 75              docu
29e20 6d 65 6e 74 2e 4c 6f 61 64 28 66 69 6c 65 4e 61  ment.Load(fileNa
29e30 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  me);....        
29e40 20 20 20 20 58 6d 6c 45 6c 65 6d 65 6e 74 20 61      XmlElement a
29e50 64 64 45 6c 65 6d 65 6e 74 20 3d 20 64 6f 63 75  ddElement = docu
29e60 6d 65 6e 74 2e 53 65 6c 65 63 74 53 69 6e 67 6c  ment.SelectSingl
29e70 65 4e 6f 64 65 28 0d 0a 20 20 20 20 20 20 20 20  eNode(..        
29e80 20 20 20 20 20 20 20 20 53 74 72 69 6e 67 2e 46          String.F
29e90 6f 72 6d 61 74 28 58 50 61 74 68 46 6f 72 41 64  ormat(XPathForAd
29ea0 64 45 6c 65 6d 65 6e 74 2c 20 69 6e 76 61 72 69  dElement, invari
29eb0 61 6e 74 29 29 20 61 73 20 58 6d 6c 45 6c 65 6d  ant)) as XmlElem
29ec0 65 6e 74 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ent;....        
29ed0 20 20 20 20 69 66 20 28 61 64 64 45 6c 65 6d 65      if (addEleme
29ee0 6e 74 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  nt == null)..   
29ef0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
29f00 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
29f10 6e 67 5b 5d 20 65 6c 65 6d 65 6e 74 4e 61 6d 65  ng[] elementName
29f20 73 20 3d 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  s = {..         
29f30 20 20 20 20 20 20 20 20 20 20 20 22 73 79 73 74             "syst
29f40 65 6d 2e 64 61 74 61 22 2c 20 22 44 62 50 72 6f  em.data", "DbPro
29f50 76 69 64 65 72 46 61 63 74 6f 72 69 65 73 22 0d  viderFactories".
29f60 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
29f70 20 7d 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20   };....         
29f80 20 20 20 20 20 20 20 58 6d 6c 45 6c 65 6d 65 6e         XmlElemen
29f90 74 20 70 72 65 76 69 6f 75 73 45 6c 65 6d 65 6e  t previousElemen
29fa0 74 20 3d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  t =..           
29fb0 20 20 20 20 20 20 20 20 20 64 6f 63 75 6d 65 6e           documen
29fc0 74 2e 44 6f 63 75 6d 65 6e 74 45 6c 65 6d 65 6e  t.DocumentElemen
29fd0 74 3b 20 2f 2a 20 63 6f 6e 66 69 67 75 72 61 74  t; /* configurat
29fe0 69 6f 6e 20 2a 2f 0d 0a 0d 0a 20 20 20 20 20 20  ion */....      
29ff0 20 20 20 20 20 20 20 20 20 20 66 6f 72 65 61 63            foreac
2a000 68 20 28 73 74 72 69 6e 67 20 65 6c 65 6d 65 6e  h (string elemen
2a010 74 4e 61 6d 65 20 69 6e 20 65 6c 65 6d 65 6e 74  tName in element
2a020 4e 61 6d 65 73 29 0d 0a 20 20 20 20 20 20 20 20  Names)..        
2a030 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
2a040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61                 a
2a050 64 64 45 6c 65 6d 65 6e 74 20 3d 20 70 72 65 76  ddElement = prev
2a060 69 6f 75 73 45 6c 65 6d 65 6e 74 2e 53 65 6c 65  iousElement.Sele
2a070 63 74 53 69 6e 67 6c 65 4e 6f 64 65 28 0d 0a 20  ctSingleNode(.. 
2a080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a090 20 20 20 20 20 20 20 65 6c 65 6d 65 6e 74 4e 61         elementNa
2a0a0 6d 65 29 20 61 73 20 58 6d 6c 45 6c 65 6d 65 6e  me) as XmlElemen
2a0b0 74 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  t;....          
2a0c0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 61 64            if (ad
2a0d0 64 45 6c 65 6d 65 6e 74 20 3d 3d 20 6e 75 6c 6c  dElement == null
2a0e0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
2a0f0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
2a100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a110 20 20 61 64 64 45 6c 65 6d 65 6e 74 20 3d 20 64    addElement = d
2a120 6f 63 75 6d 65 6e 74 2e 43 72 65 61 74 65 45 6c  ocument.CreateEl
2a130 65 6d 65 6e 74 28 0d 0a 20 20 20 20 20 20 20 20  ement(..        
2a140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a150 20 20 20 20 65 6c 65 6d 65 6e 74 4e 61 6d 65 2c      elementName,
2a160 20 53 74 72 69 6e 67 2e 45 6d 70 74 79 29 3b 0d   String.Empty);.
2a170 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
2a180 20 20 20 20 20 20 20 20 20 20 20 70 72 65 76 69             previ
2a190 6f 75 73 45 6c 65 6d 65 6e 74 2e 41 70 70 65 6e  ousElement.Appen
2a1a0 64 43 68 69 6c 64 28 61 64 64 45 6c 65 6d 65 6e  dChild(addElemen
2a1b0 74 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  t);..           
2a1c0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
2a1d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a1e0 20 20 70 72 65 76 69 6f 75 73 45 6c 65 6d 65 6e    previousElemen
2a1f0 74 20 3d 20 61 64 64 45 6c 65 6d 65 6e 74 3b 0d  t = addElement;.
2a200 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2a210 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
2a220 20 20 20 20 20 20 61 64 64 45 6c 65 6d 65 6e 74        addElement
2a230 20 3d 20 64 6f 63 75 6d 65 6e 74 2e 43 72 65 61   = document.Crea
2a240 74 65 45 6c 65 6d 65 6e 74 28 0d 0a 20 20 20 20  teElement(..    
2a250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a260 22 61 64 64 22 2c 20 53 74 72 69 6e 67 2e 45 6d  "add", String.Em
2a270 70 74 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  pty);....       
2a280 20 20 20 20 20 20 20 20 20 70 72 65 76 69 6f 75           previou
2a290 73 45 6c 65 6d 65 6e 74 2e 41 70 70 65 6e 64 43  sElement.AppendC
2a2a0 68 69 6c 64 28 61 64 64 45 6c 65 6d 65 6e 74 29  hild(addElement)
2a2b0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
2a2c0 20 20 20 20 20 64 69 72 74 79 20 3d 20 74 72 75       dirty = tru
2a2d0 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
2a2e0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
2a2f0 20 69 66 20 28 21 53 74 72 69 6e 67 2e 45 71 75   if (!String.Equ
2a300 61 6c 73 28 61 64 64 45 6c 65 6d 65 6e 74 2e 47  als(addElement.G
2a310 65 74 41 74 74 72 69 62 75 74 65 28 22 6e 61 6d  etAttribute("nam
2a320 65 22 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  e"),..          
2a330 20 20 20 20 20 20 20 20 20 20 6e 61 6d 65 2c 20            name, 
2a340 53 74 72 69 6e 67 43 6f 6d 70 61 72 69 73 6f 6e  StringComparison
2a350 2e 4f 72 64 69 6e 61 6c 29 29 0d 0a 20 20 20 20  .Ordinal))..    
2a360 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
2a370 20 20 20 20 20 20 20 20 20 20 20 61 64 64 45 6c             addEl
2a380 65 6d 65 6e 74 2e 53 65 74 41 74 74 72 69 62 75  ement.SetAttribu
2a390 74 65 28 22 6e 61 6d 65 22 2c 20 6e 61 6d 65 29  te("name", name)
2a3a0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
2a3b0 20 20 20 64 69 72 74 79 20 3d 20 74 72 75 65 3b     dirty = true;
2a3c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
2a3d0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
2a3e0 66 20 28 21 53 74 72 69 6e 67 2e 45 71 75 61 6c  f (!String.Equal
2a3f0 73 28 61 64 64 45 6c 65 6d 65 6e 74 2e 47 65 74  s(addElement.Get
2a400 41 74 74 72 69 62 75 74 65 28 22 69 6e 76 61 72  Attribute("invar
2a410 69 61 6e 74 22 29 2c 0d 0a 20 20 20 20 20 20 20  iant"),..       
2a420 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 76               inv
2a430 61 72 69 61 6e 74 2c 20 53 74 72 69 6e 67 43 6f  ariant, StringCo
2a440 6d 70 61 72 69 73 6f 6e 2e 4f 72 64 69 6e 61 6c  mparison.Ordinal
2a450 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
2a460 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
2a470 20 20 20 61 64 64 45 6c 65 6d 65 6e 74 2e 53 65     addElement.Se
2a480 74 41 74 74 72 69 62 75 74 65 28 22 69 6e 76 61  tAttribute("inva
2a490 72 69 61 6e 74 22 2c 20 69 6e 76 61 72 69 61 6e  riant", invarian
2a4a0 74 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  t);..           
2a4b0 20 20 20 20 20 64 69 72 74 79 20 3d 20 74 72 75       dirty = tru
2a4c0 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
2a4d0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
2a4e0 20 69 66 20 28 21 53 74 72 69 6e 67 2e 45 71 75   if (!String.Equ
2a4f0 61 6c 73 28 61 64 64 45 6c 65 6d 65 6e 74 2e 47  als(addElement.G
2a500 65 74 41 74 74 72 69 62 75 74 65 28 22 64 65 73  etAttribute("des
2a510 63 72 69 70 74 69 6f 6e 22 29 2c 0d 0a 20 20 20  cription"),..   
2a520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a530 20 64 65 73 63 72 69 70 74 69 6f 6e 2c 20 53 74   description, St
2a540 72 69 6e 67 43 6f 6d 70 61 72 69 73 6f 6e 2e 4f  ringComparison.O
2a550 72 64 69 6e 61 6c 29 29 0d 0a 20 20 20 20 20 20  rdinal))..      
2a560 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
2a570 20 20 20 20 20 20 20 20 20 61 64 64 45 6c 65 6d           addElem
2a580 65 6e 74 2e 53 65 74 41 74 74 72 69 62 75 74 65  ent.SetAttribute
2a590 28 22 64 65 73 63 72 69 70 74 69 6f 6e 22 2c 20  ("description", 
2a5a0 64 65 73 63 72 69 70 74 69 6f 6e 29 3b 0d 0a 20  description);.. 
2a5b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
2a5c0 69 72 74 79 20 3d 20 74 72 75 65 3b 0d 0a 20 20  irty = true;..  
2a5d0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
2a5e0 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
2a5f0 67 20 66 75 6c 6c 54 79 70 65 4e 61 6d 65 20 3d  g fullTypeName =
2a600 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 22   String.Format("
2a610 7b 30 7d 2c 20 7b 31 7d 22 2c 0d 0a 20 20 20 20  {0}, {1}",..    
2a620 20 20 20 20 20 20 20 20 20 20 20 20 74 79 70 65              type
2a630 4e 61 6d 65 2c 20 61 73 73 65 6d 62 6c 79 4e 61  Name, assemblyNa
2a640 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  me);....        
2a650 20 20 20 20 69 66 20 28 21 53 74 72 69 6e 67 2e      if (!String.
2a660 45 71 75 61 6c 73 28 61 64 64 45 6c 65 6d 65 6e  Equals(addElemen
2a670 74 2e 47 65 74 41 74 74 72 69 62 75 74 65 28 22  t.GetAttribute("
2a680 74 79 70 65 22 29 2c 0d 0a 20 20 20 20 20 20 20  type"),..       
2a690 20 20 20 20 20 20 20 20 20 20 20 20 20 66 75 6c               ful
2a6a0 6c 54 79 70 65 4e 61 6d 65 2c 20 53 74 72 69 6e  lTypeName, Strin
2a6b0 67 43 6f 6d 70 61 72 69 73 6f 6e 2e 4f 72 64 69  gComparison.Ordi
2a6c0 6e 61 6c 29 29 0d 0a 20 20 20 20 20 20 20 20 20  nal))..         
2a6d0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
2a6e0 20 20 20 20 20 20 61 64 64 45 6c 65 6d 65 6e 74        addElement
2a6f0 2e 53 65 74 41 74 74 72 69 62 75 74 65 28 22 74  .SetAttribute("t
2a700 79 70 65 22 2c 20 66 75 6c 6c 54 79 70 65 4e 61  ype", fullTypeNa
2a710 6d 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  me);..          
2a720 20 20 20 20 20 20 64 69 72 74 79 20 3d 20 74 72        dirty = tr
2a730 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
2a740 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
2a750 20 20 69 66 20 28 64 69 72 74 79 20 7c 7c 20 77    if (dirty || w
2a760 68 61 74 49 66 29 0d 0a 20 20 20 20 20 20 20 20  hatIf)..        
2a770 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
2a780 20 20 20 20 20 20 20 69 66 20 28 76 65 72 62 6f         if (verbo
2a790 73 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se)..           
2a7a0 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70           TraceOp
2a7b0 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28  s.DebugAndTrace(
2a7c0 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 48 69  TracePriority.Hi
2a7d0 67 68 65 73 74 2c 0d 0a 20 20 20 20 20 20 20 20  ghest,..        
2a7e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a7f0 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74  debugCallback, t
2a800 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74  raceCallback, St
2a810 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
2a820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a830 20 20 20 20 20 20 22 61 64 64 45 6c 65 6d 65 6e        "addElemen
2a840 74 20 3d 20 7b 30 7d 22 2c 20 46 6f 72 44 69 73  t = {0}", ForDis
2a850 70 6c 61 79 28 61 64 64 45 6c 65 6d 65 6e 74 29  play(addElement)
2a860 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
2a870 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
2a880 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
2a890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
2a8a0 66 20 28 21 77 68 61 74 49 66 29 0d 0a 20 20 20  f (!whatIf)..   
2a8b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a8c0 20 64 6f 63 75 6d 65 6e 74 2e 53 61 76 65 28 66   document.Save(f
2a8d0 69 6c 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20  ileName);....   
2a8e0 20 20 20 20 20 20 20 20 20 20 20 20 20 66 69 6c               fil
2a8f0 65 73 4d 6f 64 69 66 69 65 64 2b 2b 3b 0d 0a 0d  esModified++;...
2a900 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2a910 20 73 61 76 65 64 20 3d 20 74 72 75 65 3b 0d 0a   saved = true;..
2a920 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
2a930 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
2a940 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20 20  urn true;..     
2a950 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
2a960 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a970 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a980 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a990 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a9a0 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
2a9b0 20 20 20 5b 4d 65 74 68 6f 64 49 6d 70 6c 28 4d     [MethodImpl(M
2a9c0 65 74 68 6f 64 49 6d 70 6c 4f 70 74 69 6f 6e 73  ethodImplOptions
2a9d0 2e 4e 6f 49 6e 6c 69 6e 69 6e 67 29 5d 0d 0a 20  .NoInlining)].. 
2a9e0 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
2a9f0 74 61 74 69 63 20 62 6f 6f 6c 20 52 65 6d 6f 76  tatic bool Remov
2aa00 65 44 62 50 72 6f 76 69 64 65 72 46 61 63 74 6f  eDbProviderFacto
2aa10 72 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ry(..           
2aa20 20 73 74 72 69 6e 67 20 66 69 6c 65 4e 61 6d 65   string fileName
2aa30 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  ,..            s
2aa40 74 72 69 6e 67 20 69 6e 76 61 72 69 61 6e 74 2c  tring invariant,
2aa50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
2aa60 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20  ol whatIf,..    
2aa70 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65 72          bool ver
2aa80 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  bose,..         
2aa90 20 20 20 72 65 66 20 62 6f 6f 6c 20 73 61 76 65     ref bool save
2aaa0 64 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  d,..            
2aab0 72 65 66 20 73 74 72 69 6e 67 20 65 72 72 6f 72  ref string error
2aac0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d  ..            ).
2aad0 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
2aae0 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 64 69 72          bool dir
2aaf0 74 79 20 3d 20 66 61 6c 73 65 3b 0d 0a 20 20 20  ty = false;..   
2ab00 20 20 20 20 20 20 20 20 20 58 6d 6c 44 6f 63 75           XmlDocu
2ab10 6d 65 6e 74 20 64 6f 63 75 6d 65 6e 74 20 3d 20  ment document = 
2ab20 6e 65 77 20 58 6d 6c 44 6f 63 75 6d 65 6e 74 28  new XmlDocument(
2ab30 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
2ab40 20 20 64 6f 63 75 6d 65 6e 74 2e 50 72 65 73 65    document.Prese
2ab50 72 76 65 57 68 69 74 65 73 70 61 63 65 20 3d 20  rveWhitespace = 
2ab60 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  true;..         
2ab70 20 20 20 64 6f 63 75 6d 65 6e 74 2e 4c 6f 61 64     document.Load
2ab80 28 66 69 6c 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20  (fileName);.... 
2ab90 20 20 20 20 20 20 20 20 20 20 20 58 6d 6c 45 6c             XmlEl
2aba0 65 6d 65 6e 74 20 61 64 64 45 6c 65 6d 65 6e 74  ement addElement
2abb0 20 3d 20 64 6f 63 75 6d 65 6e 74 2e 53 65 6c 65   = document.Sele
2abc0 63 74 53 69 6e 67 6c 65 4e 6f 64 65 28 0d 0a 20  ctSingleNode(.. 
2abd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53                 S
2abe0 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 58 50 61  tring.Format(XPa
2abf0 74 68 46 6f 72 41 64 64 45 6c 65 6d 65 6e 74 2c  thForAddElement,
2ac00 20 69 6e 76 61 72 69 61 6e 74 29 29 20 61 73 20   invariant)) as 
2ac10 58 6d 6c 45 6c 65 6d 65 6e 74 3b 0d 0a 0d 0a 20  XmlElement;.... 
2ac20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 61             if (a
2ac30 64 64 45 6c 65 6d 65 6e 74 20 21 3d 20 6e 75 6c  ddElement != nul
2ac40 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
2ac50 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
2ac60 20 20 20 61 64 64 45 6c 65 6d 65 6e 74 2e 50 61     addElement.Pa
2ac70 72 65 6e 74 4e 6f 64 65 2e 52 65 6d 6f 76 65 43  rentNode.RemoveC
2ac80 68 69 6c 64 28 61 64 64 45 6c 65 6d 65 6e 74 29  hild(addElement)
2ac90 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
2aca0 20 20 20 64 69 72 74 79 20 3d 20 74 72 75 65 3b     dirty = true;
2acb0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
2acc0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 58  ...            X
2acd0 6d 6c 45 6c 65 6d 65 6e 74 20 72 65 6d 6f 76 65  mlElement remove
2ace0 45 6c 65 6d 65 6e 74 20 3d 20 64 6f 63 75 6d 65  Element = docume
2acf0 6e 74 2e 53 65 6c 65 63 74 53 69 6e 67 6c 65 4e  nt.SelectSingleN
2ad00 6f 64 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ode(..          
2ad10 20 20 20 20 20 20 53 74 72 69 6e 67 2e 46 6f 72        String.For
2ad20 6d 61 74 28 58 50 61 74 68 46 6f 72 52 65 6d 6f  mat(XPathForRemo
2ad30 76 65 45 6c 65 6d 65 6e 74 2c 20 69 6e 76 61 72  veElement, invar
2ad40 69 61 6e 74 29 29 20 61 73 20 58 6d 6c 45 6c 65  iant)) as XmlEle
2ad50 6d 65 6e 74 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ment;....       
2ad60 20 20 20 20 20 69 66 20 28 72 65 6d 6f 76 65 45       if (removeE
2ad70 6c 65 6d 65 6e 74 20 21 3d 20 6e 75 6c 6c 29 0d  lement != null).
2ad80 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
2ad90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ada0 72 65 6d 6f 76 65 45 6c 65 6d 65 6e 74 2e 50 61  removeElement.Pa
2adb0 72 65 6e 74 4e 6f 64 65 2e 52 65 6d 6f 76 65 43  rentNode.RemoveC
2adc0 68 69 6c 64 28 72 65 6d 6f 76 65 45 6c 65 6d 65  hild(removeEleme
2add0 6e 74 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  nt);..          
2ade0 20 20 20 20 20 20 64 69 72 74 79 20 3d 20 74 72        dirty = tr
2adf0 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
2ae00 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
2ae10 20 20 69 66 20 28 64 69 72 74 79 20 7c 7c 20 77    if (dirty || w
2ae20 68 61 74 49 66 29 0d 0a 20 20 20 20 20 20 20 20  hatIf)..        
2ae30 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
2ae40 20 20 20 20 20 20 20 69 66 20 28 76 65 72 62 6f         if (verbo
2ae50 73 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se)..           
2ae60 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70           TraceOp
2ae70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28  s.DebugAndTrace(
2ae80 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 48 69  TracePriority.Hi
2ae90 67 68 65 73 74 2c 0d 0a 20 20 20 20 20 20 20 20  ghest,..        
2aea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2aeb0 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74  debugCallback, t
2aec0 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74  raceCallback, St
2aed0 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
2aee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2aef0 20 20 20 20 20 20 22 61 64 64 45 6c 65 6d 65 6e        "addElemen
2af00 74 20 3d 20 7b 30 7d 2c 20 72 65 6d 6f 76 65 45  t = {0}, removeE
2af10 6c 65 6d 65 6e 74 20 3d 20 7b 31 7d 22 2c 0d 0a  lement = {1}",..
2af20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2af30 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c          ForDispl
2af40 61 79 28 61 64 64 45 6c 65 6d 65 6e 74 29 2c 20  ay(addElement), 
2af50 46 6f 72 44 69 73 70 6c 61 79 28 72 65 6d 6f 76  ForDisplay(remov
2af60 65 45 6c 65 6d 65 6e 74 29 29 2c 0d 0a 20 20 20  eElement)),..   
2af70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2af80 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f       traceCatego
2af90 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
2afa0 20 20 20 20 20 20 20 20 69 66 20 28 21 77 68 61          if (!wha
2afb0 74 49 66 29 0d 0a 20 20 20 20 20 20 20 20 20 20  tIf)..          
2afc0 20 20 20 20 20 20 20 20 20 20 64 6f 63 75 6d 65            docume
2afd0 6e 74 2e 53 61 76 65 28 66 69 6c 65 4e 61 6d 65  nt.Save(fileName
2afe0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
2aff0 20 20 20 20 20 20 66 69 6c 65 73 4d 6f 64 69 66        filesModif
2b000 69 65 64 2b 2b 3b 0d 0a 0d 0a 20 20 20 20 20 20  ied++;....      
2b010 20 20 20 20 20 20 20 20 20 20 73 61 76 65 64 20            saved 
2b020 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20  = true;..       
2b030 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
2b040 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75        return tru
2b050 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d  e;..        }...
2b060 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
2b070 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b080 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b090 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b0a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b0b0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  ....        priv
2b0c0 61 74 65 20 73 74 61 74 69 63 20 62 6f 6f 6c 20  ate static bool 
2b0d0 50 72 6f 63 65 73 73 44 62 50 72 6f 76 69 64 65  ProcessDbProvide
2b0e0 72 46 61 63 74 6f 72 79 28 0d 0a 20 20 20 20 20  rFactory(..     
2b0f0 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 66 69         string fi
2b100 6c 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20  leName,..       
2b110 20 20 20 20 20 73 74 72 69 6e 67 20 69 6e 76 61       string inva
2b120 72 69 61 6e 74 2c 0d 0a 20 20 20 20 20 20 20 20  riant,..        
2b130 20 20 20 20 73 74 72 69 6e 67 20 6e 61 6d 65 2c      string name,
2b140 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74  ..            st
2b150 72 69 6e 67 20 64 65 73 63 72 69 70 74 69 6f 6e  ring description
2b160 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  ,..            s
2b170 74 72 69 6e 67 20 74 79 70 65 4e 61 6d 65 2c 0d  tring typeName,.
2b180 0a 20 20 20 20 20 20 20 20 20 20 20 20 41 73 73  .            Ass
2b190 65 6d 62 6c 79 4e 61 6d 65 20 61 73 73 65 6d 62  emblyName assemb
2b1a0 6c 79 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20  lyName,..       
2b1b0 20 20 20 20 20 6f 62 6a 65 63 74 20 63 6c 69 65       object clie
2b1c0 6e 74 44 61 74 61 2c 0d 0a 20 20 20 20 20 20 20  ntData,..       
2b1d0 20 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34 2c       bool wow64,
2b1e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
2b1f0 6f 6c 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e  ol throwOnMissin
2b200 67 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  g,..            
2b210 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20  bool whatIf,..  
2b220 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76            bool v
2b230 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20  erbose,..       
2b240 20 20 20 20 20 72 65 66 20 62 6f 6f 6c 20 73 61       ref bool sa
2b250 76 65 64 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ved,..          
2b260 20 20 72 65 66 20 73 74 72 69 6e 67 20 65 72 72    ref string err
2b270 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  or..            
2b280 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
2b290 20 20 20 20 20 20 20 20 20 20 41 6e 79 50 61 69            AnyPai
2b2a0 72 3c 73 74 72 69 6e 67 2c 20 62 6f 6f 6c 3e 20  r<string, bool> 
2b2b0 70 61 69 72 20 3d 20 63 6c 69 65 6e 74 44 61 74  pair = clientDat
2b2c0 61 20 61 73 20 41 6e 79 50 61 69 72 3c 73 74 72  a as AnyPair<str
2b2d0 69 6e 67 2c 20 62 6f 6f 6c 3e 3b 0d 0a 0d 0a 20  ing, bool>;.... 
2b2e0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 70             if (p
2b2f0 61 69 72 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  air == null)..  
2b300 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
2b310 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
2b320 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64 20 66 72  or = "invalid fr
2b330 61 6d 65 77 6f 72 6b 20 63 6f 6e 66 69 67 20 63  amework config c
2b340 61 6c 6c 62 61 63 6b 20 64 61 74 61 22 3b 0d 0a  allback data";..
2b350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b360 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20  return false;.. 
2b370 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
2b380 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
2b390 70 61 69 72 2e 59 29 0d 0a 20 20 20 20 20 20 20  pair.Y)..       
2b3a0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
2b3b0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 52          return R
2b3c0 65 6d 6f 76 65 44 62 50 72 6f 76 69 64 65 72 46  emoveDbProviderF
2b3d0 61 63 74 6f 72 79 28 0d 0a 20 20 20 20 20 20 20  actory(..       
2b3e0 20 20 20 20 20 20 20 20 20 20 20 20 20 66 69 6c               fil
2b3f0 65 4e 61 6d 65 2c 20 69 6e 76 61 72 69 61 6e 74  eName, invariant
2b400 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73  , whatIf, verbos
2b410 65 2c 20 72 65 66 20 73 61 76 65 64 2c 0d 0a 20  e, ref saved,.. 
2b420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b430 20 20 20 72 65 66 20 65 72 72 6f 72 29 20 26 26     ref error) &&
2b440 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2b450 20 20 41 64 64 44 62 50 72 6f 76 69 64 65 72 46    AddDbProviderF
2b460 61 63 74 6f 72 79 28 0d 0a 20 20 20 20 20 20 20  actory(..       
2b470 20 20 20 20 20 20 20 20 20 20 20 20 20 66 69 6c               fil
2b480 65 4e 61 6d 65 2c 20 69 6e 76 61 72 69 61 6e 74  eName, invariant
2b490 2c 20 6e 61 6d 65 2c 20 64 65 73 63 72 69 70 74  , name, descript
2b4a0 69 6f 6e 2c 20 74 79 70 65 4e 61 6d 65 2c 0d 0a  ion, typeName,..
2b4b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b4c0 20 20 20 20 61 73 73 65 6d 62 6c 79 4e 61 6d 65      assemblyName
2b4d0 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73  , whatIf, verbos
2b4e0 65 2c 20 72 65 66 20 73 61 76 65 64 2c 20 72 65  e, ref saved, re
2b4f0 66 20 65 72 72 6f 72 29 3b 0d 0a 20 20 20 20 20  f error);..     
2b500 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
2b510 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20        else..    
2b520 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
2b530 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
2b540 6e 20 52 65 6d 6f 76 65 44 62 50 72 6f 76 69 64  n RemoveDbProvid
2b550 65 72 46 61 63 74 6f 72 79 28 0d 0a 20 20 20 20  erFactory(..    
2b560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b570 66 69 6c 65 4e 61 6d 65 2c 20 69 6e 76 61 72 69  fileName, invari
2b580 61 6e 74 2c 20 77 68 61 74 49 66 2c 20 76 65 72  ant, whatIf, ver
2b590 62 6f 73 65 2c 20 72 65 66 20 73 61 76 65 64 2c  bose, ref saved,
2b5a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2b5b0 20 20 20 20 20 20 72 65 66 20 65 72 72 6f 72 29        ref error)
2b5c0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
2b5d0 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..   
2b5e0 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d       #endregion.
2b5f0 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
2b600 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b610 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b620 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b630 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b640 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72  //....        #r
2b650 65 67 69 6f 6e 20 41 73 73 65 6d 62 6c 79 20 46  egion Assembly F
2b660 6f 6c 64 65 72 73 20 48 61 6e 64 6c 69 6e 67 0d  olders Handling.
2b670 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
2b680 20 73 74 61 74 69 63 20 73 74 72 69 6e 67 20 47   static string G
2b690 65 74 41 73 73 65 6d 62 6c 79 46 6f 6c 64 65 72  etAssemblyFolder
2b6a0 73 4b 65 79 4e 61 6d 65 28 0d 0a 20 20 20 20 20  sKeyName(..     
2b6b0 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 66 72         string fr
2b6c0 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c 0d 0a 20 20  ameworkName,..  
2b6d0 20 20 20 20 20 20 20 20 20 20 56 65 72 73 69 6f            Versio
2b6e0 6e 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69  n frameworkVersi
2b6f0 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  on,..           
2b700 20 73 74 72 69 6e 67 20 70 6c 61 74 66 6f 72 6d   string platform
2b710 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  Name,..         
2b720 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34 0d 0a 20     bool wow64.. 
2b730 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
2b740 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
2b750 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
2b760 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 54 68       // NOTE: Th
2b770 69 73 20 72 65 67 69 73 74 72 79 20 6b 65 79 20  is registry key 
2b780 61 70 70 65 61 72 73 20 74 6f 20 61 6c 77 61 79  appears to alway
2b790 73 20 62 65 20 33 32 2d 62 69 74 20 6f 6e 6c 79  s be 32-bit only
2b7a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
2b7b0 20 20 20 20 20 20 20 28 69 2e 65 2e 20 70 72 6f         (i.e. pro
2b7c0 62 61 62 6c 79 20 62 65 63 61 75 73 65 20 69 74  bably because it
2b7d0 20 69 73 20 6f 6e 6c 79 20 75 73 65 64 20 62 79   is only used by
2b7e0 20 56 69 73 75 61 6c 0d 0a 20 20 20 20 20 20 20   Visual..       
2b7f0 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 53 74       //       St
2b800 75 64 69 6f 2c 20 77 68 69 63 68 20 69 73 20 63  udio, which is c
2b810 75 72 72 65 6e 74 6c 79 20 61 6c 77 61 79 73 20  urrently always 
2b820 33 32 2d 62 69 74 20 6f 6e 6c 79 29 2e 0d 0a 20  32-bit only)... 
2b830 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
2b840 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
2b850 67 20 66 6f 72 6d 61 74 20 3d 20 21 53 74 72 69  g format = !Stri
2b860 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79  ng.IsNullOrEmpty
2b870 28 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 29 20 3f  (platformName) ?
2b880 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2b890 20 20 22 7b 30 7d 5c 5c 4d 69 63 72 6f 73 6f 66    "{0}\\Microsof
2b8a0 74 5c 5c 7b 31 7d 5c 5c 76 7b 32 7d 5c 5c 7b 33  t\\{1}\\v{2}\\{3
2b8b0 7d 5c 5c 41 73 73 65 6d 62 6c 79 46 6f 6c 64 65  }\\AssemblyFolde
2b8c0 72 73 45 78 22 20 3a 0d 0a 20 20 20 20 20 20 20  rsEx" :..       
2b8d0 20 20 20 20 20 20 20 20 20 22 7b 30 7d 5c 5c 4d           "{0}\\M
2b8e0 69 63 72 6f 73 6f 66 74 5c 5c 7b 31 7d 5c 5c 76  icrosoft\\{1}\\v
2b8f0 7b 32 7d 5c 5c 41 73 73 65 6d 62 6c 79 46 6f 6c  {2}\\AssemblyFol
2b900 64 65 72 73 45 78 22 3b 0d 0a 0d 0a 20 20 20 20  dersEx";....    
2b910 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 53          return S
2b920 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 66 6f 72  tring.Format(for
2b930 6d 61 74 2c 20 47 65 74 52 6f 6f 74 4b 65 79 4e  mat, GetRootKeyN
2b940 61 6d 65 28 77 6f 77 36 34 29 2c 0d 0a 20 20 20  ame(wow64),..   
2b950 20 20 20 20 20 20 20 20 20 20 20 20 20 66 72 61               fra
2b960 6d 65 77 6f 72 6b 4e 61 6d 65 2c 20 66 72 61 6d  meworkName, fram
2b970 65 77 6f 72 6b 56 65 72 73 69 6f 6e 2c 20 70 6c  eworkVersion, pl
2b980 61 74 66 6f 72 6d 4e 61 6d 65 29 3b 0d 0a 20 20  atformName);..  
2b990 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
2b9a0 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
2b9b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b9c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b9d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b9e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
2b9f0 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74        private st
2ba00 61 74 69 63 20 62 6f 6f 6c 20 41 64 64 54 6f 41  atic bool AddToA
2ba10 73 73 65 6d 62 6c 79 46 6f 6c 64 65 72 73 28 0d  ssemblyFolders(.
2ba20 0a 20 20 20 20 20 20 20 20 20 20 20 20 4d 6f 63  .            Moc
2ba30 6b 52 65 67 69 73 74 72 79 4b 65 79 20 72 6f 6f  kRegistryKey roo
2ba40 74 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20  tKey,..         
2ba50 20 20 20 73 74 72 69 6e 67 20 66 72 61 6d 65 77     string framew
2ba60 6f 72 6b 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20  orkName,..      
2ba70 20 20 20 20 20 20 56 65 72 73 69 6f 6e 20 66 72        Version fr
2ba80 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 2c 0d  ameworkVersion,.
2ba90 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72  .            str
2baa0 69 6e 67 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65  ing platformName
2bab0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  ,..            s
2bac0 74 72 69 6e 67 20 73 75 62 4b 65 79 4e 61 6d 65  tring subKeyName
2bad0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  ,..            s
2bae0 74 72 69 6e 67 20 64 69 72 65 63 74 6f 72 79 2c  tring directory,
2baf0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
2bb00 6f 6c 20 77 6f 77 36 34 2c 0d 0a 20 20 20 20 20  ol wow64,..     
2bb10 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74         bool what
2bb20 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  If,..           
2bb30 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 0d 0a   bool verbose,..
2bb40 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20              ref 
2bb50 73 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20  string error..  
2bb60 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
2bb70 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
2bb80 20 20 20 20 73 74 72 69 6e 67 20 6b 65 79 4e 61      string keyNa
2bb90 6d 65 20 3d 20 47 65 74 41 73 73 65 6d 62 6c 79  me = GetAssembly
2bba0 46 6f 6c 64 65 72 73 4b 65 79 4e 61 6d 65 28 0d  FoldersKeyName(.
2bbb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2bbc0 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c 20   frameworkName, 
2bbd0 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e  frameworkVersion
2bbe0 2c 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 2c 20  , platformName, 
2bbf0 77 6f 77 36 34 29 3b 0d 0a 0d 0a 20 20 20 20 20  wow64);....     
2bc00 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 4d 6f         using (Mo
2bc10 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 6b 65  ckRegistryKey ke
2bc20 79 20 3d 20 52 65 67 69 73 74 72 79 48 65 6c 70  y = RegistryHelp
2bc30 65 72 2e 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a  er.OpenSubKey(..
2bc40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bc50 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 6b 65 79      rootKey, key
2bc60 4e 61 6d 65 2c 20 74 72 75 65 2c 20 77 68 61 74  Name, true, what
2bc70 49 66 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a 20  If, verbose)).. 
2bc80 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
2bc90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
2bca0 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a   (key == null)..
2bcb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bcc0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
2bcd0 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 53         error = S
2bce0 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
2bcf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bd00 20 20 20 20 20 20 20 22 63 6f 75 6c 64 20 6e 6f         "could no
2bd10 74 20 6f 70 65 6e 20 72 65 67 69 73 74 72 79 20  t open registry 
2bd20 6b 65 79 3a 20 7b 30 7d 5c 5c 7b 31 7d 22 2c 0d  key: {0}\\{1}",.
2bd30 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2bd40 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79           rootKey
2bd50 2c 20 6b 65 79 4e 61 6d 65 29 3b 0d 0a 0d 0a 20  , keyName);.... 
2bd60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bd70 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
2bd80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2bd90 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
2bda0 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 4d 6f         using (Mo
2bdb0 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 73 75  ckRegistryKey su
2bdc0 62 4b 65 79 20 3d 20 52 65 67 69 73 74 72 79 48  bKey = RegistryH
2bdd0 65 6c 70 65 72 2e 43 72 65 61 74 65 53 75 62 4b  elper.CreateSubK
2bde0 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ey(..           
2bdf0 20 20 20 20 20 20 20 20 20 20 20 20 20 6b 65 79               key
2be00 2c 20 73 75 62 4b 65 79 4e 61 6d 65 2c 20 77 68  , subKeyName, wh
2be10 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 29 0d  atIf, verbose)).
2be20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2be30 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
2be40 20 20 20 20 20 20 20 20 69 66 20 28 73 75 62 4b          if (subK
2be50 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ey == null)..   
2be60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2be70 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
2be80 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
2be90 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  r = String.Forma
2bea0 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
2beb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bec0 22 63 6f 75 6c 64 20 6e 6f 74 20 63 72 65 61 74  "could not creat
2bed0 65 20 72 65 67 69 73 74 72 79 20 6b 65 79 3a 20  e registry key: 
2bee0 7b 30 7d 5c 5c 7b 31 7d 22 2c 0d 0a 20 20 20 20  {0}\\{1}",..    
2bef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bf00 20 20 20 20 20 20 20 20 6b 65 79 2c 20 73 75 62          key, sub
2bf10 4b 65 79 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20  KeyName);....   
2bf20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bf30 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
2bf40 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
2bf50 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
2bf60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bf70 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e   RegistryHelper.
2bf80 53 65 74 56 61 6c 75 65 28 0d 0a 20 20 20 20 20  SetValue(..     
2bf90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bfa0 20 20 20 73 75 62 4b 65 79 2c 20 6e 75 6c 6c 2c     subKey, null,
2bfb0 20 64 69 72 65 63 74 6f 72 79 2c 20 77 68 61 74   directory, what
2bfc0 49 66 2c 20 76 65 72 62 6f 73 65 29 3b 0d 0a 20  If, verbose);.. 
2bfd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
2bfe0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
2bff0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  ...            r
2c000 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20  eturn true;..   
2c010 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
2c020 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
2c030 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c040 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c050 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c060 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
2c070 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61       private sta
2c080 74 69 63 20 62 6f 6f 6c 20 52 65 6d 6f 76 65 46  tic bool RemoveF
2c090 72 6f 6d 41 73 73 65 6d 62 6c 79 46 6f 6c 64 65  romAssemblyFolde
2c0a0 72 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  rs(..           
2c0b0 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79   MockRegistryKey
2c0c0 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20 20 20   rootKey,..     
2c0d0 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 66 72         string fr
2c0e0 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c 0d 0a 20 20  ameworkName,..  
2c0f0 20 20 20 20 20 20 20 20 20 20 56 65 72 73 69 6f            Versio
2c100 6e 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69  n frameworkVersi
2c110 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  on,..           
2c120 20 73 74 72 69 6e 67 20 70 6c 61 74 66 6f 72 6d   string platform
2c130 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  Name,..         
2c140 20 20 20 73 74 72 69 6e 67 20 73 75 62 4b 65 79     string subKey
2c150 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  Name,..         
2c160 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34 2c 0d 0a     bool wow64,..
2c170 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
2c180 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 2c   throwOnMissing,
2c190 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
2c1a0 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20  ol whatIf,..    
2c1b0 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65 72          bool ver
2c1c0 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  bose,..         
2c1d0 20 20 20 72 65 66 20 73 74 72 69 6e 67 20 65 72     ref string er
2c1e0 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ror..           
2c1f0 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20   )..        {.. 
2c200 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
2c210 67 20 6b 65 79 4e 61 6d 65 20 3d 20 47 65 74 41  g keyName = GetA
2c220 73 73 65 6d 62 6c 79 46 6f 6c 64 65 72 73 4b 65  ssemblyFoldersKe
2c230 79 4e 61 6d 65 28 0d 0a 20 20 20 20 20 20 20 20  yName(..        
2c240 20 20 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72          framewor
2c250 6b 4e 61 6d 65 2c 20 66 72 61 6d 65 77 6f 72 6b  kName, framework
2c260 56 65 72 73 69 6f 6e 2c 20 70 6c 61 74 66 6f 72  Version, platfor
2c270 6d 4e 61 6d 65 2c 20 77 6f 77 36 34 29 3b 0d 0a  mName, wow64);..
2c280 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 75 73  ..            us
2c290 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73 74 72  ing (MockRegistr
2c2a0 79 4b 65 79 20 6b 65 79 20 3d 20 52 65 67 69 73  yKey key = Regis
2c2b0 74 72 79 48 65 6c 70 65 72 2e 4f 70 65 6e 53 75  tryHelper.OpenSu
2c2c0 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20  bKey(..         
2c2d0 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b             rootK
2c2e0 65 79 2c 20 6b 65 79 4e 61 6d 65 2c 20 74 72 75  ey, keyName, tru
2c2f0 65 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f  e, whatIf, verbo
2c300 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  se))..          
2c310 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
2c320 20 20 20 20 20 69 66 20 28 6b 65 79 20 3d 3d 20       if (key == 
2c330 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
2c340 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
2c350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72                er
2c360 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72  ror = String.For
2c370 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
2c380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 63                "c
2c390 6f 75 6c 64 20 6e 6f 74 20 6f 70 65 6e 20 72 65  ould not open re
2c3a0 67 69 73 74 72 79 20 6b 65 79 3a 20 7b 30 7d 5c  gistry key: {0}\
2c3b0 5c 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20  \{1}",..        
2c3c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c3d0 72 6f 6f 74 4b 65 79 2c 20 6b 65 79 4e 61 6d 65  rootKey, keyName
2c3e0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
2c3f0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
2c400 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20   false;..       
2c410 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
2c420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65                Re
2c430 67 69 73 74 72 79 48 65 6c 70 65 72 2e 44 65 6c  gistryHelper.Del
2c440 65 74 65 53 75 62 4b 65 79 28 0d 0a 20 20 20 20  eteSubKey(..    
2c450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c460 6b 65 79 2c 20 73 75 62 4b 65 79 4e 61 6d 65 2c  key, subKeyName,
2c470 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 2c   throwOnMissing,
2c480 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65   whatIf, verbose
2c490 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
2c4a0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
2c4b0 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20   return true;.. 
2c4c0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
2c4d0 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c510 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
2c520 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
2c530 74 61 74 69 63 20 62 6f 6f 6c 20 50 72 6f 63 65  tatic bool Proce
2c540 73 73 41 73 73 65 6d 62 6c 79 46 6f 6c 64 65 72  ssAssemblyFolder
2c550 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  s(..            
2c560 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20  MockRegistryKey 
2c570 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20 20 20 20  rootKey,..      
2c580 20 20 20 20 20 20 73 74 72 69 6e 67 20 66 72 61        string fra
2c590 6d 65 77 6f 72 6b 4e 61 6d 65 2c 0d 0a 20 20 20  meworkName,..   
2c5a0 20 20 20 20 20 20 20 20 20 56 65 72 73 69 6f 6e           Version
2c5b0 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f   frameworkVersio
2c5c0 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n,..            
2c5d0 73 74 72 69 6e 67 20 70 6c 61 74 66 6f 72 6d 4e  string platformN
2c5e0 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ame,..          
2c5f0 20 20 6f 62 6a 65 63 74 20 63 6c 69 65 6e 74 44    object clientD
2c600 61 74 61 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ata,..          
2c610 20 20 62 6f 6f 6c 20 77 6f 77 36 34 2c 0d 0a 20    bool wow64,.. 
2c620 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
2c630 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 2c 0d  throwOnMissing,.
2c640 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f  .            boo
2c650 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20  l whatIf,..     
2c660 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62         bool verb
2c670 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ose,..          
2c680 20 20 72 65 66 20 73 74 72 69 6e 67 20 65 72 72    ref string err
2c690 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  or..            
2c6a0 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
2c6b0 20 20 20 20 20 20 20 20 20 20 41 6e 79 50 61 69            AnyPai
2c6c0 72 3c 73 74 72 69 6e 67 2c 20 62 6f 6f 6c 3e 20  r<string, bool> 
2c6d0 70 61 69 72 20 3d 20 63 6c 69 65 6e 74 44 61 74  pair = clientDat
2c6e0 61 20 61 73 20 41 6e 79 50 61 69 72 3c 73 74 72  a as AnyPair<str
2c6f0 69 6e 67 2c 20 62 6f 6f 6c 3e 3b 0d 0a 0d 0a 20  ing, bool>;.... 
2c700 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 70             if (p
2c710 61 69 72 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  air == null)..  
2c720 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
2c730 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
2c740 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64 20 66 72  or = "invalid fr
2c750 61 6d 65 77 6f 72 6b 20 63 61 6c 6c 62 61 63 6b  amework callback
2c760 20 64 61 74 61 22 3b 0d 0a 20 20 20 20 20 20 20   data";..       
2c770 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
2c780 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20  false;..        
2c790 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
2c7a0 20 20 20 20 20 69 66 20 28 70 61 69 72 2e 59 29       if (pair.Y)
2c7b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
2c7c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2c7d0 20 72 65 74 75 72 6e 20 52 65 6d 6f 76 65 46 72   return RemoveFr
2c7e0 6f 6d 41 73 73 65 6d 62 6c 79 46 6f 6c 64 65 72  omAssemblyFolder
2c7f0 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  s(..            
2c800 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c          rootKey,
2c810 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c 20   frameworkName, 
2c820 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e  frameworkVersion
2c830 2c 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 2c 0d  , platformName,.
2c840 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2c850 20 20 20 20 20 4c 65 67 61 63 79 50 72 6f 6a 65       LegacyProje
2c860 63 74 4e 61 6d 65 2c 20 77 6f 77 36 34 2c 20 66  ctName, wow64, f
2c870 61 6c 73 65 2c 20 77 68 61 74 49 66 2c 20 76 65  alse, whatIf, ve
2c880 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20 20  rbose,..        
2c890 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20              ref 
2c8a0 65 72 72 6f 72 29 20 26 26 0d 0a 20 20 20 20 20  error) &&..     
2c8b0 20 20 20 20 20 20 20 20 20 20 20 41 64 64 54 6f             AddTo
2c8c0 41 73 73 65 6d 62 6c 79 46 6f 6c 64 65 72 73 28  AssemblyFolders(
2c8d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2c8e0 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 66        rootKey, f
2c8f0 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c 20 66 72  rameworkName, fr
2c900 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 2c 20  ameworkVersion, 
2c910 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 2c 0d 0a 20  platformName,.. 
2c920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c930 20 20 20 50 72 6f 6a 65 63 74 4e 61 6d 65 2c 20     ProjectName, 
2c940 70 61 69 72 2e 58 2c 20 77 6f 77 36 34 2c 20 77  pair.X, wow64, w
2c950 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 2c 20  hatIf, verbose, 
2c960 72 65 66 20 65 72 72 6f 72 29 3b 0d 0a 20 20 20  ref error);..   
2c970 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
2c980 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20          else..  
2c990 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
2c9a0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
2c9b0 75 72 6e 20 52 65 6d 6f 76 65 46 72 6f 6d 41 73  urn RemoveFromAs
2c9c0 73 65 6d 62 6c 79 46 6f 6c 64 65 72 73 28 0d 0a  semblyFolders(..
2c9d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c9e0 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 66 72 61      rootKey, fra
2c9f0 6d 65 77 6f 72 6b 4e 61 6d 65 2c 20 66 72 61 6d  meworkName, fram
2ca00 65 77 6f 72 6b 56 65 72 73 69 6f 6e 2c 20 70 6c  eworkVersion, pl
2ca10 61 74 66 6f 72 6d 4e 61 6d 65 2c 0d 0a 20 20 20  atformName,..   
2ca20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ca30 20 50 72 6f 6a 65 63 74 4e 61 6d 65 2c 20 77 6f   ProjectName, wo
2ca40 77 36 34 2c 20 74 68 72 6f 77 4f 6e 4d 69 73 73  w64, throwOnMiss
2ca50 69 6e 67 2c 20 77 68 61 74 49 66 2c 20 76 65 72  ing, whatIf, ver
2ca60 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  bose,..         
2ca70 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20 65             ref e
2ca80 72 72 6f 72 29 3b 0d 0a 20 20 20 20 20 20 20 20  rror);..        
2ca90 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d      }..        }
2caa0 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65  ..        #endre
2cab0 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20  gion....        
2cac0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2cad0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2cae0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2caf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2cb00 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
2cb10 20 20 20 23 72 65 67 69 6f 6e 20 56 69 73 75 61     #region Visua
2cb20 6c 20 53 74 75 64 69 6f 20 48 61 6e 64 6c 69 6e  l Studio Handlin
2cb30 67 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  g..        priva
2cb40 74 65 20 73 74 61 74 69 63 20 73 74 72 69 6e 67  te static string
2cb50 20 47 65 74 56 73 52 6f 6f 74 4b 65 79 4e 61 6d   GetVsRootKeyNam
2cb60 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
2cb70 62 6f 6f 6c 20 77 6f 77 36 34 0d 0a 20 20 20 20  bool wow64..    
2cb80 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
2cb90 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
2cba0 20 20 72 65 74 75 72 6e 20 53 74 72 69 6e 67 2e    return String.
2cbb0 46 6f 72 6d 61 74 28 22 7b 30 7d 5c 5c 4d 69 63  Format("{0}\\Mic
2cbc0 72 6f 73 6f 66 74 5c 5c 56 69 73 75 61 6c 53 74  rosoft\\VisualSt
2cbd0 75 64 69 6f 22 2c 0d 0a 20 20 20 20 20 20 20 20  udio",..        
2cbe0 20 20 20 20 20 20 20 20 47 65 74 52 6f 6f 74 4b          GetRootK
2cbf0 65 79 4e 61 6d 65 28 77 6f 77 36 34 29 29 3b 0d  eyName(wow64));.
2cc00 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....  
2cc10 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
2cc20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2cc30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2cc40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2cc50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
2cc60 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
2cc70 20 73 74 61 74 69 63 20 73 74 72 69 6e 67 20 47   static string G
2cc80 65 74 56 73 4b 65 79 4e 61 6d 65 28 0d 0a 20 20  etVsKeyName(..  
2cc90 20 20 20 20 20 20 20 20 20 20 56 65 72 73 69 6f            Versio
2cca0 6e 20 76 73 56 65 72 73 69 6f 6e 2c 0d 0a 20 20  n vsVersion,..  
2ccb0 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77            bool w
2ccc0 6f 77 36 34 0d 0a 20 20 20 20 20 20 20 20 20 20  ow64..          
2ccd0 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a    )..        {..
2cce0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
2ccf0 76 73 56 65 72 73 69 6f 6e 20 3d 3d 20 6e 75 6c  vsVersion == nul
2cd00 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
2cd10 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b      return null;
2cd20 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2cd30 72 65 74 75 72 6e 20 53 74 72 69 6e 67 2e 46 6f  return String.Fo
2cd40 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
2cd50 20 20 20 20 20 20 20 22 7b 30 7d 5c 5c 7b 31 7d         "{0}\\{1}
2cd60 22 2c 20 47 65 74 56 73 52 6f 6f 74 4b 65 79 4e  ", GetVsRootKeyN
2cd70 61 6d 65 28 77 6f 77 36 34 29 2c 20 76 73 56 65  ame(wow64), vsVe
2cd80 72 73 69 6f 6e 29 3b 0d 0a 20 20 20 20 20 20 20  rsion);..       
2cd90 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f   }....        //
2cda0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2cdb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2cdc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2cdd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2cde0 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
2cdf0 20 23 72 65 67 69 6f 6e 20 56 69 73 75 61 6c 20   #region Visual 
2ce00 53 74 75 64 69 6f 20 44 61 74 61 20 53 6f 75 72  Studio Data Sour
2ce10 63 65 20 48 61 6e 64 6c 69 6e 67 0d 0a 20 20 20  ce Handling..   
2ce20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61       private sta
2ce30 74 69 63 20 62 6f 6f 6c 20 41 64 64 56 73 44 61  tic bool AddVsDa
2ce40 74 61 53 6f 75 72 63 65 28 0d 0a 20 20 20 20 20  taSource(..     
2ce50 20 20 20 20 20 20 20 4d 6f 63 6b 52 65 67 69 73         MockRegis
2ce60 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79 2c 0d  tryKey rootKey,.
2ce70 0a 20 20 20 20 20 20 20 20 20 20 20 20 56 65 72  .            Ver
2ce80 73 69 6f 6e 20 76 73 56 65 72 73 69 6f 6e 2c 0d  sion vsVersion,.
2ce90 0a 20 20 20 20 20 20 20 20 20 20 20 20 50 61 63  .            Pac
2cea0 6b 61 67 65 20 70 61 63 6b 61 67 65 2c 0d 0a 20  kage package,.. 
2ceb0 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
2cec0 77 6f 77 36 34 2c 0d 0a 20 20 20 20 20 20 20 20  wow64,..        
2ced0 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c      bool whatIf,
2cee0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
2cef0 6f 6c 20 76 65 72 62 6f 73 65 2c 0d 0a 20 20 20  ol verbose,..   
2cf00 20 20 20 20 20 20 20 20 20 72 65 66 20 73 74 72           ref str
2cf10 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20 20 20  ing error..     
2cf20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
2cf30 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
2cf40 20 69 66 20 28 76 73 56 65 72 73 69 6f 6e 20 3d   if (vsVersion =
2cf50 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
2cf60 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
2cf70 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
2cf80 22 69 6e 76 61 6c 69 64 20 56 53 20 76 65 72 73  "invalid VS vers
2cf90 69 6f 6e 22 3b 0d 0a 20 20 20 20 20 20 20 20 20  ion";..         
2cfa0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
2cfb0 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lse;..          
2cfc0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
2cfd0 20 20 20 69 66 20 28 70 61 63 6b 61 67 65 20 3d     if (package =
2cfe0 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
2cff0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
2d000 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
2d010 22 69 6e 76 61 6c 69 64 20 56 53 20 70 61 63 6b  "invalid VS pack
2d020 61 67 65 22 3b 0d 0a 20 20 20 20 20 20 20 20 20  age";..         
2d030 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
2d040 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lse;..          
2d050 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
2d060 20 20 20 73 74 72 69 6e 67 20 6b 65 79 4e 61 6d     string keyNam
2d070 65 20 3d 20 47 65 74 56 73 4b 65 79 4e 61 6d 65  e = GetVsKeyName
2d080 28 76 73 56 65 72 73 69 6f 6e 2c 20 77 6f 77 36  (vsVersion, wow6
2d090 34 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  4);....         
2d0a0 20 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65     using (MockRe
2d0b0 67 69 73 74 72 79 4b 65 79 20 6b 65 79 20 3d 20  gistryKey key = 
2d0c0 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 4f  RegistryHelper.O
2d0d0 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20 20  penSubKey(..    
2d0e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d0f0 72 6f 6f 74 4b 65 79 2c 20 6b 65 79 4e 61 6d 65  rootKey, keyName
2d100 2c 20 66 61 6c 73 65 2c 20 77 68 61 74 49 66 2c  , false, whatIf,
2d110 20 76 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 20   verbose))..    
2d120 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
2d130 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6b             if (k
2d140 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ey == null)..   
2d150 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
2d160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d170 20 20 20 20 65 72 72 6f 72 20 3d 20 53 74 72 69      error = Stri
2d180 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ng.Format(..    
2d190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d1a0 20 20 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20 6f      "could not o
2d1b0 70 65 6e 20 72 65 67 69 73 74 72 79 20 6b 65 79  pen registry key
2d1c0 3a 20 7b 30 7d 5c 5c 7b 31 7d 22 2c 0d 0a 20 20  : {0}\\{1}",..  
2d1d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d1e0 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 6b        rootKey, k
2d1f0 65 79 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20  eyName);....    
2d200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d210 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20  return false;.. 
2d220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
2d230 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2d240 20 20 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52      using (MockR
2d250 65 67 69 73 74 72 79 4b 65 79 20 73 75 62 4b 65  egistryKey subKe
2d260 79 20 3d 20 52 65 67 69 73 74 72 79 48 65 6c 70  y = RegistryHelp
2d270 65 72 2e 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a  er.OpenSubKey(..
2d280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d290 20 20 20 20 20 20 20 20 6b 65 79 2c 20 22 44 61          key, "Da
2d2a0 74 61 53 6f 75 72 63 65 73 22 2c 20 74 72 75 65  taSources", true
2d2b0 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73  , whatIf, verbos
2d2c0 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e))..           
2d2d0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
2d2e0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
2d2f0 73 75 62 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d  subKey == null).
2d300 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2d310 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
2d320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d330 65 72 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46  error = String.F
2d340 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
2d350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d360 20 20 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20 6f      "could not o
2d370 70 65 6e 20 72 65 67 69 73 74 72 79 20 6b 65 79  pen registry key
2d380 3a 20 7b 30 7d 5c 5c 44 61 74 61 53 6f 75 72 63  : {0}\\DataSourc
2d390 65 73 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  es",..          
2d3a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d3b0 20 20 6b 65 79 29 3b 0d 0a 0d 0a 20 20 20 20 20    key);....     
2d3c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d3d0 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
2d3e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2d3f0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
2d400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 75                 u
2d410 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73 74  sing (MockRegist
2d420 72 79 4b 65 79 20 64 61 74 61 53 6f 75 72 63 65  ryKey dataSource
2d430 4b 65 79 20 3d 0d 0a 20 20 20 20 20 20 20 20 20  Key =..         
2d440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d450 20 20 20 52 65 67 69 73 74 72 79 48 65 6c 70 65     RegistryHelpe
2d460 72 2e 43 72 65 61 74 65 53 75 62 4b 65 79 28 73  r.CreateSubKey(s
2d470 75 62 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20  ubKey,..        
2d480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d490 20 20 20 20 70 61 63 6b 61 67 65 2e 44 61 74 61      package.Data
2d4a0 53 6f 75 72 63 65 49 64 2e 54 6f 53 74 72 69 6e  SourceId.ToStrin
2d4b0 67 28 56 73 49 64 46 6f 72 6d 61 74 29 2c 0d 0a  g(VsIdFormat),..
2d4c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d4d0 20 20 20 20 20 20 20 20 20 20 20 20 77 68 61 74              what
2d4e0 49 66 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a 20  If, verbose)).. 
2d4f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d500 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
2d510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
2d520 20 28 64 61 74 61 53 6f 75 72 63 65 4b 65 79 20   (dataSourceKey 
2d530 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
2d540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d550 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
2d560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d570 20 65 72 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e   error = String.
2d580 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
2d590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d5a0 20 20 20 20 20 20 20 20 20 22 63 6f 75 6c 64 20           "could 
2d5b0 6e 6f 74 20 63 72 65 61 74 65 20 72 65 67 69 73  not create regis
2d5c0 74 72 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c 7b 31  try key: {0}\\{1
2d5d0 7d 22 2c 20 6b 65 79 2c 0d 0a 20 20 20 20 20 20  }", key,..      
2d5e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d5f0 20 20 20 20 20 20 20 20 20 20 70 61 63 6b 61 67            packag
2d600 65 2e 44 61 74 61 53 6f 75 72 63 65 49 64 2e 54  e.DataSourceId.T
2d610 6f 53 74 72 69 6e 67 28 56 73 49 64 46 6f 72 6d  oString(VsIdForm
2d620 61 74 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  at));....       
2d630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d640 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
2d650 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
2d660 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
2d670 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2d680 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72           Registr
2d690 79 48 65 6c 70 65 72 2e 53 65 74 56 61 6c 75 65  yHelper.SetValue
2d6a0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
2d6b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
2d6c0 61 74 61 53 6f 75 72 63 65 4b 65 79 2c 20 6e 75  ataSourceKey, nu
2d6d0 6c 6c 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ll, String.Forma
2d6e0 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
2d6f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d700 22 7b 30 7d 20 44 61 74 61 62 61 73 65 20 46 69  "{0} Database Fi
2d710 6c 65 22 2c 20 50 72 6f 6a 65 63 74 4e 61 6d 65  le", ProjectName
2d720 29 2c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20  ), whatIf,..    
2d730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d740 20 20 20 20 20 20 20 20 76 65 72 62 6f 73 65 29          verbose)
2d750 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
2d760 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
2d770 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2d780 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45           // NOTE
2d790 3a 20 54 68 69 73 20 76 61 6c 75 65 20 69 73 20  : This value is 
2d7a0 6e 65 77 20 61 73 20 6f 66 20 31 2e 30 2e 38 33  new as of 1.0.83
2d7b0 2e 30 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  .0...           
2d7c0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
2d7d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2d7e0 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72           Registr
2d7f0 79 48 65 6c 70 65 72 2e 53 65 74 56 61 6c 75 65  yHelper.SetValue
2d800 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
2d810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
2d820 61 74 61 53 6f 75 72 63 65 4b 65 79 2c 20 22 44  ataSourceKey, "D
2d830 65 66 61 75 6c 74 50 72 6f 76 69 64 65 72 22 2c  efaultProvider",
2d840 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2d850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 61                pa
2d860 63 6b 61 67 65 2e 44 61 74 61 50 72 6f 76 69 64  ckage.DataProvid
2d870 65 72 49 64 2e 54 6f 53 74 72 69 6e 67 28 56 73  erId.ToString(Vs
2d880 49 64 46 6f 72 6d 61 74 29 2c 0d 0a 20 20 20 20  IdFormat),..    
2d890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d8a0 20 20 20 20 20 20 20 20 77 68 61 74 49 66 2c 20          whatIf, 
2d8b0 76 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20  verbose);....   
2d8c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d8d0 20 20 20 20 20 52 65 67 69 73 74 72 79 48 65 6c       RegistryHel
2d8e0 70 65 72 2e 43 72 65 61 74 65 53 75 62 4b 65 79  per.CreateSubKey
2d8f0 28 64 61 74 61 53 6f 75 72 63 65 4b 65 79 2c 0d  (dataSourceKey,.
2d900 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2d910 20 20 20 20 20 20 20 20 20 20 20 20 20 53 74 72               Str
2d920 69 6e 67 2e 46 6f 72 6d 61 74 28 22 53 75 70 70  ing.Format("Supp
2d930 6f 72 74 69 6e 67 50 72 6f 76 69 64 65 72 73 5c  ortingProviders\
2d940 5c 7b 30 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20  \{0}",..        
2d950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d960 20 20 20 20 70 61 63 6b 61 67 65 2e 44 61 74 61      package.Data
2d970 50 72 6f 76 69 64 65 72 49 64 2e 54 6f 53 74 72  ProviderId.ToStr
2d980 69 6e 67 28 56 73 49 64 46 6f 72 6d 61 74 29 29  ing(VsIdFormat))
2d990 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
2d9a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 77                 w
2d9b0 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 3b  hatIf, verbose);
2d9c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2d9d0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
2d9e0 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
2d9f0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
2da00 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
2da10 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d  true;..        }
2da20 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
2da30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2da40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2da50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2da60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2da70 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70  ///....        p
2da80 72 69 76 61 74 65 20 73 74 61 74 69 63 20 62 6f  rivate static bo
2da90 6f 6c 20 52 65 6d 6f 76 65 56 73 44 61 74 61 53  ol RemoveVsDataS
2daa0 6f 75 72 63 65 28 0d 0a 20 20 20 20 20 20 20 20  ource(..        
2dab0 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79      MockRegistry
2dac0 4b 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20  Key rootKey,..  
2dad0 20 20 20 20 20 20 20 20 20 20 56 65 72 73 69 6f            Versio
2dae0 6e 20 76 73 56 65 72 73 69 6f 6e 2c 0d 0a 20 20  n vsVersion,..  
2daf0 20 20 20 20 20 20 20 20 20 20 50 61 63 6b 61 67            Packag
2db00 65 20 70 61 63 6b 61 67 65 2c 0d 0a 20 20 20 20  e package,..    
2db10 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 6f 77          bool wow
2db20 36 34 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  64,..           
2db30 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20   bool whatIf,.. 
2db40 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
2db50 76 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20  verbose,..      
2db60 20 20 20 20 20 20 72 65 66 20 73 74 72 69 6e 67        ref string
2db70 20 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20   error..        
2db80 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b      )..        {
2db90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
2dba0 20 28 76 73 56 65 72 73 69 6f 6e 20 3d 3d 20 6e   (vsVersion == n
2dbb0 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
2dbc0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
2dbd0 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 69 6e       error = "in
2dbe0 76 61 6c 69 64 20 56 53 20 76 65 72 73 69 6f 6e  valid VS version
2dbf0 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ";..            
2dc00 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
2dc10 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
2dc20 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2dc30 69 66 20 28 70 61 63 6b 61 67 65 20 3d 3d 20 6e  if (package == n
2dc40 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
2dc50 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
2dc60 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 69 6e       error = "in
2dc70 76 61 6c 69 64 20 56 53 20 70 61 63 6b 61 67 65  valid VS package
2dc80 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ";..            
2dc90 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
2dca0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
2dcb0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2dcc0 73 74 72 69 6e 67 20 6b 65 79 4e 61 6d 65 20 3d  string keyName =
2dcd0 20 47 65 74 56 73 4b 65 79 4e 61 6d 65 28 76 73   GetVsKeyName(vs
2dce0 56 65 72 73 69 6f 6e 2c 20 77 6f 77 36 34 29 3b  Version, wow64);
2dcf0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2dd00 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73  using (MockRegis
2dd10 74 72 79 4b 65 79 20 6b 65 79 20 3d 20 52 65 67  tryKey key = Reg
2dd20 69 73 74 72 79 48 65 6c 70 65 72 2e 4f 70 65 6e  istryHelper.Open
2dd30 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20  SubKey(..       
2dd40 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f               roo
2dd50 74 4b 65 79 2c 20 6b 65 79 4e 61 6d 65 2c 20 66  tKey, keyName, f
2dd60 61 6c 73 65 2c 20 77 68 61 74 49 66 2c 20 76 65  alse, whatIf, ve
2dd70 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 20  rbose))..       
2dd80 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
2dd90 20 20 20 20 20 20 20 20 69 66 20 28 6b 65 79 20          if (key 
2dda0 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
2ddb0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
2ddc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ddd0 20 65 72 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e   error = String.
2dde0 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
2ddf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2de00 20 22 63 6f 75 6c 64 20 6e 6f 74 20 6f 70 65 6e   "could not open
2de10 20 72 65 67 69 73 74 72 79 20 6b 65 79 3a 20 7b   registry key: {
2de20 30 7d 5c 5c 7b 31 7d 22 2c 0d 0a 20 20 20 20 20  0}\\{1}",..     
2de30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2de40 20 20 20 72 6f 6f 74 4b 65 79 2c 20 6b 65 79 4e     rootKey, keyN
2de50 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ame);....       
2de60 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
2de70 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20  urn false;..    
2de80 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
2de90 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2dea0 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69   using (MockRegi
2deb0 73 74 72 79 4b 65 79 20 73 75 62 4b 65 79 20 3d  stryKey subKey =
2dec0 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e   RegistryHelper.
2ded0 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20  OpenSubKey(..   
2dee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2def0 20 20 20 20 20 6b 65 79 2c 20 22 44 61 74 61 53       key, "DataS
2df00 6f 75 72 63 65 73 22 2c 20 74 72 75 65 2c 20 77  ources", true, w
2df10 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 29  hatIf, verbose))
2df20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2df30 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
2df40 20 20 20 20 20 20 20 20 20 69 66 20 28 73 75 62           if (sub
2df50 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  Key == null)..  
2df60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2df70 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
2df80 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
2df90 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d  or = String.Form
2dfa0 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
2dfb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2dfc0 20 22 63 6f 75 6c 64 20 6e 6f 74 20 6f 70 65 6e   "could not open
2dfd0 20 72 65 67 69 73 74 72 79 20 6b 65 79 3a 20 7b   registry key: {
2dfe0 30 7d 5c 5c 44 61 74 61 53 6f 75 72 63 65 73 22  0}\\DataSources"
2dff0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
2e000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6b                 k
2e010 65 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ey);....        
2e020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e030 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20  return false;.. 
2e040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e050 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
2e060 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69              Regi
2e070 73 74 72 79 48 65 6c 70 65 72 2e 44 65 6c 65 74  stryHelper.Delet
2e080 65 53 75 62 4b 65 79 54 72 65 65 28 0d 0a 20 20  eSubKeyTree(..  
2e090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e0a0 20 20 20 20 20 20 73 75 62 4b 65 79 2c 20 70 61        subKey, pa
2e0b0 63 6b 61 67 65 2e 44 61 74 61 53 6f 75 72 63 65  ckage.DataSource
2e0c0 49 64 2e 54 6f 53 74 72 69 6e 67 28 56 73 49 64  Id.ToString(VsId
2e0d0 46 6f 72 6d 61 74 29 2c 0d 0a 20 20 20 20 20 20  Format),..      
2e0e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e0f0 20 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73    whatIf, verbos
2e100 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e);..           
2e110 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
2e120 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
2e130 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65       return true
2e140 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  ;..        }....
2e150 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
2e160 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e170 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e180 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e190 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
2e1a0 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  ...        priva
2e1b0 74 65 20 73 74 61 74 69 63 20 62 6f 6f 6c 20 50  te static bool P
2e1c0 72 6f 63 65 73 73 56 73 44 61 74 61 53 6f 75 72  rocessVsDataSour
2e1d0 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ce(..           
2e1e0 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79   MockRegistryKey
2e1f0 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20 20 20   rootKey,..     
2e200 20 20 20 20 20 20 20 56 65 72 73 69 6f 6e 20 76         Version v
2e210 73 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20  sVersion,..     
2e220 20 20 20 20 20 20 20 50 61 63 6b 61 67 65 20 70         Package p
2e230 61 63 6b 61 67 65 2c 0d 0a 20 20 20 20 20 20 20  ackage,..       
2e240 20 20 20 20 20 6f 62 6a 65 63 74 20 63 6c 69 65       object clie
2e250 6e 74 44 61 74 61 2c 0d 0a 20 20 20 20 20 20 20  ntData,..       
2e260 20 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34 2c       bool wow64,
2e270 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
2e280 6f 6c 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e  ol throwOnMissin
2e290 67 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  g,..            
2e2a0 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20  bool whatIf,..  
2e2b0 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76            bool v
2e2c0 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20  erbose,..       
2e2d0 20 20 20 20 20 72 65 66 20 73 74 72 69 6e 67 20       ref string 
2e2e0 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 20  error..         
2e2f0 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d     )..        {.
2e300 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
2e310 28 70 61 63 6b 61 67 65 20 3d 3d 20 6e 75 6c 6c  (package == null
2e320 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
2e330 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2e340 20 20 65 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c    error = "inval
2e350 69 64 20 56 53 20 70 61 63 6b 61 67 65 22 3b 0d  id VS package";.
2e360 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2e370 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
2e380 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
2e390 0a 20 20 20 20 20 20 20 20 20 20 20 20 41 6e 79  .            Any
2e3a0 50 61 69 72 3c 73 74 72 69 6e 67 2c 20 62 6f 6f  Pair<string, boo
2e3b0 6c 3e 20 70 61 69 72 20 3d 20 63 6c 69 65 6e 74  l> pair = client
2e3c0 44 61 74 61 20 61 73 20 41 6e 79 50 61 69 72 3c  Data as AnyPair<
2e3d0 73 74 72 69 6e 67 2c 20 62 6f 6f 6c 3e 3b 0d 0a  string, bool>;..
2e3e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
2e3f0 20 28 70 61 69 72 20 3d 3d 20 6e 75 6c 6c 29 0d   (pair == null).
2e400 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
2e410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e420 65 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64  error = "invalid
2e430 20 56 53 20 63 61 6c 6c 62 61 63 6b 20 64 61 74   VS callback dat
2e440 61 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  a";..           
2e450 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
2e460 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
2e470 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
2e480 20 69 66 20 28 70 61 69 72 2e 59 29 0d 0a 20 20   if (pair.Y)..  
2e490 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
2e4a0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
2e4b0 75 72 6e 20 41 64 64 56 73 44 61 74 61 53 6f 75  urn AddVsDataSou
2e4c0 72 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  rce(..          
2e4d0 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65            rootKe
2e4e0 79 2c 20 76 73 56 65 72 73 69 6f 6e 2c 20 70 61  y, vsVersion, pa
2e4f0 63 6b 61 67 65 2c 20 77 6f 77 36 34 2c 20 77 68  ckage, wow64, wh
2e500 61 74 49 66 2c 20 76 65 72 62 6f 73 65 2c 0d 0a  atIf, verbose,..
2e510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e520 20 20 20 20 72 65 66 20 65 72 72 6f 72 29 3b 0d      ref error);.
2e530 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
2e540 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65              else
2e550 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
2e560 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2e570 20 72 65 74 75 72 6e 20 52 65 6d 6f 76 65 56 73   return RemoveVs
2e580 44 61 74 61 53 6f 75 72 63 65 28 0d 0a 20 20 20  DataSource(..   
2e590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e5a0 20 72 6f 6f 74 4b 65 79 2c 20 76 73 56 65 72 73   rootKey, vsVers
2e5b0 69 6f 6e 2c 20 70 61 63 6b 61 67 65 2c 20 77 6f  ion, package, wo
2e5c0 77 36 34 2c 20 77 68 61 74 49 66 2c 20 76 65 72  w64, whatIf, ver
2e5d0 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  bose,..         
2e5e0 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20 65             ref e
2e5f0 72 72 6f 72 29 3b 0d 0a 20 20 20 20 20 20 20 20  rror);..        
2e600 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d      }..        }
2e610 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65  ..        #endre
2e620 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20  gion....        
2e630 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e640 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e650 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e660 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e670 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
2e680 20 20 20 23 72 65 67 69 6f 6e 20 56 69 73 75 61     #region Visua
2e690 6c 20 53 74 75 64 69 6f 20 44 61 74 61 20 50 72  l Studio Data Pr
2e6a0 6f 76 69 64 65 72 20 48 61 6e 64 6c 69 6e 67 0d  ovider Handling.
2e6b0 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
2e6c0 20 73 74 61 74 69 63 20 62 6f 6f 6c 20 41 64 64   static bool Add
2e6d0 56 73 44 61 74 61 50 72 6f 76 69 64 65 72 28 0d  VsDataProvider(.
2e6e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 4d 6f 63  .            Moc
2e6f0 6b 52 65 67 69 73 74 72 79 4b 65 79 20 72 6f 6f  kRegistryKey roo
2e700 74 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20  tKey,..         
2e710 20 20 20 56 65 72 73 69 6f 6e 20 76 73 56 65 72     Version vsVer
2e720 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20  sion,..         
2e730 20 20 20 50 61 63 6b 61 67 65 20 70 61 63 6b 61     Package packa
2e740 67 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ge,..           
2e750 20 73 74 72 69 6e 67 20 66 69 6c 65 4e 61 6d 65   string fileName
2e760 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  ,..            b
2e770 6f 6f 6c 20 77 6f 77 36 34 2c 0d 0a 20 20 20 20  ool wow64,..    
2e780 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61          bool wha
2e790 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  tIf,..          
2e7a0 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 0d    bool verbose,.
2e7b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66  .            ref
2e7c0 20 73 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20   string error.. 
2e7d0 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
2e7e0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
2e7f0 20 20 20 20 20 69 66 20 28 76 73 56 65 72 73 69       if (vsVersi
2e800 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  on == null)..   
2e810 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
2e820 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
2e830 72 20 3d 20 22 69 6e 76 61 6c 69 64 20 56 53 20  r = "invalid VS 
2e840 76 65 72 73 69 6f 6e 22 3b 0d 0a 20 20 20 20 20  version";..     
2e850 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
2e860 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  n false;..      
2e870 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
2e880 20 20 20 20 20 20 20 69 66 20 28 70 61 63 6b 61         if (packa
2e890 67 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ge == null)..   
2e8a0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
2e8b0 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
2e8c0 72 20 3d 20 22 69 6e 76 61 6c 69 64 20 56 53 20  r = "invalid VS 
2e8d0 70 61 63 6b 61 67 65 22 3b 0d 0a 20 20 20 20 20  package";..     
2e8e0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
2e8f0 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  n false;..      
2e900 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
2e910 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6b 65         string ke
2e920 79 4e 61 6d 65 20 3d 20 47 65 74 56 73 4b 65 79  yName = GetVsKey
2e930 4e 61 6d 65 28 76 73 56 65 72 73 69 6f 6e 2c 20  Name(vsVersion, 
2e940 77 6f 77 36 34 29 3b 0d 0a 0d 0a 20 20 20 20 20  wow64);....     
2e950 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 4d 6f         using (Mo
2e960 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 6b 65  ckRegistryKey ke
2e970 79 20 3d 20 52 65 67 69 73 74 72 79 48 65 6c 70  y = RegistryHelp
2e980 65 72 2e 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a  er.OpenSubKey(..
2e990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e9a0 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 6b 65 79      rootKey, key
2e9b0 4e 61 6d 65 2c 20 66 61 6c 73 65 2c 20 77 68 61  Name, false, wha
2e9c0 74 49 66 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a  tIf, verbose))..
2e9d0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
2e9e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
2e9f0 66 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d  f (key == null).
2ea00 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2ea10 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
2ea20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
2ea30 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
2ea40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ea50 20 20 20 20 20 20 20 20 22 63 6f 75 6c 64 20 6e          "could n
2ea60 6f 74 20 6f 70 65 6e 20 72 65 67 69 73 74 72 79  ot open registry
2ea70 20 6b 65 79 3a 20 7b 30 7d 5c 5c 7b 31 7d 22 2c   key: {0}\\{1}",
2ea80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2ea90 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65            rootKe
2eaa0 79 2c 20 6b 65 79 4e 61 6d 65 29 3b 0d 0a 0d 0a  y, keyName);....
2eab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2eac0 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
2ead0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
2eae0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
2eaf0 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 4d          using (M
2eb00 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 73  ockRegistryKey s
2eb10 75 62 4b 65 79 20 3d 20 52 65 67 69 73 74 72 79  ubKey = Registry
2eb20 48 65 6c 70 65 72 2e 4f 70 65 6e 53 75 62 4b 65  Helper.OpenSubKe
2eb30 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y(..            
2eb40 20 20 20 20 20 20 20 20 20 20 20 20 6b 65 79 2c              key,
2eb50 20 22 44 61 74 61 50 72 6f 76 69 64 65 72 73 22   "DataProviders"
2eb60 2c 20 74 72 75 65 2c 20 77 68 61 74 49 66 2c 20  , true, whatIf, 
2eb70 76 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20  verbose))..     
2eb80 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
2eb90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2eba0 20 20 69 66 20 28 73 75 62 4b 65 79 20 3d 3d 20    if (subKey == 
2ebb0 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
2ebc0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
2ebd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ebe0 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 53 74        error = St
2ebf0 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
2ec00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ec10 20 20 20 20 20 20 20 20 20 20 22 63 6f 75 6c 64            "could
2ec20 20 6e 6f 74 20 6f 70 65 6e 20 72 65 67 69 73 74   not open regist
2ec30 72 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c 44 61 74  ry key: {0}\\Dat
2ec40 61 50 72 6f 76 69 64 65 72 73 22 2c 0d 0a 20 20  aProviders",..  
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 20 6b 65 79 29 3b 0d            key);.
2ec70 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
2ec80 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
2ec90 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  n false;..      
2eca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
2ecb0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
2ecc0 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 4d 6f         using (Mo
2ecd0 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 64 61  ckRegistryKey da
2ece0 74 61 50 72 6f 76 69 64 65 72 4b 65 79 20 3d 0d  taProviderKey =.
2ecf0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2ed00 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67               Reg
2ed10 69 73 74 72 79 48 65 6c 70 65 72 2e 43 72 65 61  istryHelper.Crea
2ed20 74 65 53 75 62 4b 65 79 28 73 75 62 4b 65 79 2c  teSubKey(subKey,
2ed30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2ed40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 61                pa
2ed50 63 6b 61 67 65 2e 44 61 74 61 50 72 6f 76 69 64  ckage.DataProvid
2ed60 65 72 49 64 2e 54 6f 53 74 72 69 6e 67 28 56 73  erId.ToString(Vs
2ed70 49 64 46 6f 72 6d 61 74 29 2c 0d 0a 20 20 20 20  IdFormat),..    
2ed80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ed90 20 20 20 20 20 20 20 20 77 68 61 74 49 66 2c 20          whatIf, 
2eda0 76 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20  verbose))..     
2edb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
2edc0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2edd0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 64 61            if (da
2ede0 74 61 50 72 6f 76 69 64 65 72 4b 65 79 20 3d 3d  taProviderKey ==
2edf0 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
2ee00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ee10 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
2ee20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
2ee30 72 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f  rror = String.Fo
2ee40 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
2ee50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ee60 20 20 20 20 20 20 20 22 63 6f 75 6c 64 20 6e 6f         "could no
2ee70 74 20 63 72 65 61 74 65 20 72 65 67 69 73 74 72  t create registr
2ee80 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c 7b 31 7d 22  y key: {0}\\{1}"
2ee90 2c 20 6b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20  , key,..        
2eea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2eeb0 20 20 20 20 20 20 20 20 70 61 63 6b 61 67 65 2e          package.
2eec0 44 61 74 61 50 72 6f 76 69 64 65 72 49 64 2e 54  DataProviderId.T
2eed0 6f 53 74 72 69 6e 67 28 56 73 49 64 46 6f 72 6d  oString(VsIdForm
2eee0 61 74 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  at));....       
2eef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ef00 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
2ef10 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
2ef20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
2ef30 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2ef40 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72           Registr
2ef50 79 48 65 6c 70 65 72 2e 53 65 74 56 61 6c 75 65  yHelper.SetValue
2ef60 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
2ef70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
2ef80 61 74 61 50 72 6f 76 69 64 65 72 4b 65 79 2c 20  ataProviderKey, 
2ef90 6e 75 6c 6c 2c 20 44 65 73 63 72 69 70 74 69 6f  null, Descriptio
2efa0 6e 2c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20  n, whatIf,..    
2efb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2efc0 20 20 20 20 20 20 20 20 76 65 72 62 6f 73 65 29          verbose)
2efd0 3b 0d 0a 0d 0a 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 2f 2f 0d               //.
2eff0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2f000 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45           // NOTE
2f010 3a 20 54 68 69 73 20 76 61 6c 75 65 20 69 73 20  : This value is 
2f020 6e 65 77 20 61 73 20 6f 66 20 31 2e 30 2e 38 33  new as of 1.0.83
2f030 2e 30 2e 20 20 48 6f 77 65 76 65 72 2c 0d 0a 20  .0.  However,.. 
2f040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f050 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
2f060 69 74 20 73 68 6f 75 6c 64 20 6f 6e 6c 79 20 62  it should only b
2f070 65 20 73 65 74 20 69 66 20 74 68 65 20 70 61 63  e set if the pac
2f080 6b 61 67 65 20 61 73 73 65 6d 62 6c 79 0d 0a 20  kage assembly.. 
2f090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f0a0 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
2f0b0 61 6e 64 20 61 6c 6c 20 74 68 65 20 61 73 73 65  and all the asse
2f0c0 6d 62 6c 69 65 73 20 69 74 20 72 65 66 65 72 73  mblies it refers
2f0d0 20 74 6f 20 61 72 65 20 62 65 69 6e 67 0d 0a 20   to are being.. 
2f0e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f0f0 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
2f100 70 6c 61 63 65 64 20 69 6e 74 6f 20 74 68 65 20  placed into the 
2f110 67 6c 6f 62 61 6c 20 61 73 73 65 6d 62 6c 79 20  global assembly 
2f120 63 61 63 68 65 2e 0d 0a 20 20 20 20 20 20 20 20  cache...        
2f130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f140 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
2f150 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
2f160 70 61 63 6b 61 67 65 2e 47 6c 6f 62 61 6c 41 73  package.GlobalAs
2f170 73 65 6d 62 6c 79 43 61 63 68 65 29 0d 0a 20 20  semblyCache)..  
2f180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f190 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
2f1a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f1b0 20 20 20 20 20 52 65 67 69 73 74 72 79 48 65 6c       RegistryHel
2f1c0 70 65 72 2e 53 65 74 56 61 6c 75 65 28 0d 0a 20  per.SetValue(.. 
2f1d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f1e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
2f1f0 61 74 61 50 72 6f 76 69 64 65 72 4b 65 79 2c 20  ataProviderKey, 
2f200 22 41 73 73 65 6d 62 6c 79 22 2c 0d 0a 20 20 20  "Assembly",..   
2f210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f220 20 20 20 20 20 20 20 20 20 20 20 20 20 70 61 63               pac
2f230 6b 61 67 65 2e 41 73 73 65 6d 62 6c 79 4e 61 6d  kage.AssemblyNam
2f240 65 2e 54 6f 53 74 72 69 6e 67 28 29 2c 0d 0a 20  e.ToString(),.. 
2f250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 77                 w
2f270 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 3b  hatIf, verbose);
2f280 0d 0a 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 7d 0d 0a 0d 0a 20            }.... 
2f2a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f2b0 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
2f2c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f2d0 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 54 68 69 73     // NOTE: This
2f2e0 20 76 61 6c 75 65 20 69 73 20 6e 65 77 20 61 73   value is new as
2f2f0 20 6f 66 20 31 2e 30 2e 38 33 2e 30 2e 0d 0a 20   of 1.0.83.0... 
2f300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f310 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
2f320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f330 20 20 20 52 65 67 69 73 74 72 79 48 65 6c 70 65     RegistryHelpe
2f340 72 2e 53 65 74 56 61 6c 75 65 28 0d 0a 20 20 20  r.SetValue(..   
2f350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f360 20 20 20 20 20 20 20 20 20 64 61 74 61 50 72 6f           dataPro
2f370 76 69 64 65 72 4b 65 79 2c 20 22 41 73 73 6f 63  viderKey, "Assoc
2f380 69 61 74 65 64 53 6f 75 72 63 65 22 2c 0d 0a 20  iatedSource",.. 
2f390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f3a0 20 20 20 20 20 20 20 20 20 20 20 70 61 63 6b 61             packa
2f3b0 67 65 2e 44 61 74 61 53 6f 75 72 63 65 49 64 2e  ge.DataSourceId.
2f3c0 54 6f 53 74 72 69 6e 67 28 56 73 49 64 46 6f 72  ToString(VsIdFor
2f3d0 6d 61 74 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  mat),..         
2f3e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f3f0 20 20 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f     whatIf, verbo
2f400 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  se);....        
2f410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f420 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 53  RegistryHelper.S
2f430 65 74 56 61 6c 75 65 28 0d 0a 20 20 20 20 20 20  etValue(..      
2f440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f450 20 20 20 20 20 20 64 61 74 61 50 72 6f 76 69 64        dataProvid
2f460 65 72 4b 65 79 2c 20 22 49 6e 76 61 72 69 61 6e  erKey, "Invarian
2f470 74 4e 61 6d 65 22 2c 20 49 6e 76 61 72 69 61 6e  tName", Invarian
2f480 74 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20  tName,..        
2f490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f4a0 20 20 20 20 77 68 61 74 49 66 2c 20 76 65 72 62      whatIf, verb
2f4b0 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ose);....       
2f4c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f4d0 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e   RegistryHelper.
2f4e0 53 65 74 56 61 6c 75 65 28 0d 0a 20 20 20 20 20  SetValue(..     
2f4f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f500 20 20 20 20 20 20 20 64 61 74 61 50 72 6f 76 69         dataProvi
2f510 64 65 72 4b 65 79 2c 20 22 54 65 63 68 6e 6f 6c  derKey, "Technol
2f520 6f 67 79 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  ogy",..         
2f530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f540 20 20 20 70 61 63 6b 61 67 65 2e 41 64 6f 4e 65     package.AdoNe
2f550 74 54 65 63 68 6e 6f 6c 6f 67 79 49 64 2e 54 6f  tTechnologyId.To
2f560 53 74 72 69 6e 67 28 56 73 49 64 46 6f 72 6d 61  String(VsIdForma
2f570 74 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  t),..           
2f580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f590 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65   whatIf, verbose
2f5a0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
2f5b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65                Re
2f5c0 67 69 73 74 72 79 48 65 6c 70 65 72 2e 53 65 74  gistryHelper.Set
2f5d0 56 61 6c 75 65 28 0d 0a 20 20 20 20 20 20 20 20  Value(..        
2f5e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f5f0 20 20 20 20 64 61 74 61 50 72 6f 76 69 64 65 72      dataProvider
2f600 4b 65 79 2c 20 22 43 6f 64 65 42 61 73 65 22 2c  Key, "CodeBase",
2f610 20 66 69 6c 65 4e 61 6d 65 2c 20 77 68 61 74 49   fileName, whatI
2f620 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  f,..            
2f630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f640 76 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20  verbose);....   
2f650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f660 20 20 20 20 20 52 65 67 69 73 74 72 79 48 65 6c       RegistryHel
2f670 70 65 72 2e 53 65 74 56 61 6c 75 65 28 0d 0a 20  per.SetValue(.. 
2f680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f690 20 20 20 20 20 20 20 20 20 20 20 64 61 74 61 50             dataP
2f6a0 72 6f 76 69 64 65 72 4b 65 79 2c 20 22 46 61 63  roviderKey, "Fac
2f6b0 74 6f 72 79 53 65 72 76 69 63 65 22 2c 0d 0a 20  toryService",.. 
2f6c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f6d0 20 20 20 20 20 20 20 20 20 20 20 70 61 63 6b 61             packa
2f6e0 67 65 2e 53 65 72 76 69 63 65 49 64 2e 54 6f 53  ge.ServiceId.ToS
2f6f0 74 72 69 6e 67 28 56 73 49 64 46 6f 72 6d 61 74  tring(VsIdFormat
2f700 29 2c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20  ), whatIf,..    
2f710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f720 20 20 20 20 20 20 20 20 76 65 72 62 6f 73 65 29          verbose)
2f730 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
2f740 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67               Reg
2f750 69 73 74 72 79 48 65 6c 70 65 72 2e 43 72 65 61  istryHelper.Crea
2f760 74 65 53 75 62 4b 65 79 28 64 61 74 61 50 72 6f  teSubKey(dataPro
2f770 76 69 64 65 72 4b 65 79 2c 0d 0a 20 20 20 20 20  viderKey,..     
2f780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f790 20 20 20 20 20 20 20 22 53 75 70 70 6f 72 74 65         "Supporte
2f7a0 64 4f 62 6a 65 63 74 73 5c 5c 44 61 74 61 43 6f  dObjects\\DataCo
2f7b0 6e 6e 65 63 74 69 6f 6e 55 49 43 6f 6e 74 72 6f  nnectionUIContro
2f7c0 6c 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  l",..           
2f7d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f7e0 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65   whatIf, verbose
2f7f0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
2f800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65                Re
2f810 67 69 73 74 72 79 48 65 6c 70 65 72 2e 43 72 65  gistryHelper.Cre
2f820 61 74 65 53 75 62 4b 65 79 28 64 61 74 61 50 72  ateSubKey(dataPr
2f830 6f 76 69 64 65 72 4b 65 79 2c 0d 0a 20 20 20 20  oviderKey,..    
2f840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f850 20 20 20 20 20 20 20 20 22 53 75 70 70 6f 72 74          "Support
2f860 65 64 4f 62 6a 65 63 74 73 5c 5c 44 61 74 61 43  edObjects\\DataC
2f870 6f 6e 6e 65 63 74 69 6f 6e 50 72 6f 70 65 72 74  onnectionPropert
2f880 69 65 73 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  ies",..         
2f890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f8a0 20 20 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f     whatIf, verbo
2f8b0 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  se);....        
2f8c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f8d0 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 43  RegistryHelper.C
2f8e0 72 65 61 74 65 53 75 62 4b 65 79 28 64 61 74 61  reateSubKey(data
2f8f0 50 72 6f 76 69 64 65 72 4b 65 79 2c 0d 0a 20 20  ProviderKey,..  
2f900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f910 20 20 20 20 20 20 20 20 20 20 22 53 75 70 70 6f            "Suppo
2f920 72 74 65 64 4f 62 6a 65 63 74 73 5c 5c 44 61 74  rtedObjects\\Dat
2f930 61 43 6f 6e 6e 65 63 74 69 6f 6e 53 75 70 70 6f  aConnectionSuppo
2f940 72 74 22 2c 20 77 68 61 74 49 66 2c 0d 0a 20 20  rt", whatIf,..  
2f950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f960 20 20 20 20 20 20 20 20 20 20 76 65 72 62 6f 73            verbos
2f970 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e);....         
2f980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52                 R
2f990 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 43 72  egistryHelper.Cr
2f9a0 65 61 74 65 53 75 62 4b 65 79 28 64 61 74 61 50  eateSubKey(dataP
2f9b0 72 6f 76 69 64 65 72 4b 65 79 2c 0d 0a 20 20 20  roviderKey,..   
2f9c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f9d0 20 20 20 20 20 20 20 20 20 22 53 75 70 70 6f 72           "Suppor
2f9e0 74 65 64 4f 62 6a 65 63 74 73 5c 5c 44 61 74 61  tedObjects\\Data
2f9f0 4f 62 6a 65 63 74 53 75 70 70 6f 72 74 22 2c 20  ObjectSupport", 
2fa00 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20  whatIf,..       
2fa10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fa20 20 20 20 20 20 76 65 72 62 6f 73 65 29 3b 0d 0a       verbose);..
2fa30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2fa40 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74            Regist
2fa50 72 79 48 65 6c 70 65 72 2e 43 72 65 61 74 65 53  ryHelper.CreateS
2fa60 75 62 4b 65 79 28 64 61 74 61 50 72 6f 76 69 64  ubKey(dataProvid
2fa70 65 72 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20  erKey,..        
2fa80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fa90 20 20 20 20 22 53 75 70 70 6f 72 74 65 64 4f 62      "SupportedOb
2faa0 6a 65 63 74 73 5c 5c 44 61 74 61 56 69 65 77 53  jects\\DataViewS
2fab0 75 70 70 6f 72 74 22 2c 20 77 68 61 74 49 66 2c  upport", whatIf,
2fac0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2fad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 76 65                ve
2fae0 72 62 6f 73 65 29 3b 0d 0a 20 20 20 20 20 20 20  rbose);..       
2faf0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
2fb00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fb10 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
2fb20 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2fb30 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20  return true;..  
2fb40 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
2fb50 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
2fb60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2fb70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2fb80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2fb90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
2fba0 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74        private st
2fbb0 61 74 69 63 20 62 6f 6f 6c 20 52 65 6d 6f 76 65  atic bool Remove
2fbc0 56 73 44 61 74 61 50 72 6f 76 69 64 65 72 28 0d  VsDataProvider(.
2fbd0 0a 20 20 20 20 20 20 20 20 20 20 20 20 4d 6f 63  .            Moc
2fbe0 6b 52 65 67 69 73 74 72 79 4b 65 79 20 72 6f 6f  kRegistryKey roo
2fbf0 74 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20  tKey,..         
2fc00 20 20 20 56 65 72 73 69 6f 6e 20 76 73 56 65 72     Version vsVer
2fc10 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20  sion,..         
2fc20 20 20 20 50 61 63 6b 61 67 65 20 70 61 63 6b 61     Package packa
2fc30 67 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ge,..           
2fc40 20 62 6f 6f 6c 20 77 6f 77 36 34 2c 0d 0a 20 20   bool wow64,..  
2fc50 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77            bool w
2fc60 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20  hatIf,..        
2fc70 20 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65      bool verbose
2fc80 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  ,..            r
2fc90 65 66 20 73 74 72 69 6e 67 20 65 72 72 6f 72 0d  ef string error.
2fca0 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a  .            )..
2fcb0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
2fcc0 20 20 20 20 20 20 20 69 66 20 28 76 73 56 65 72         if (vsVer
2fcd0 73 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  sion == null).. 
2fce0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
2fcf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72                er
2fd00 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64 20 56  ror = "invalid V
2fd10 53 20 76 65 72 73 69 6f 6e 22 3b 0d 0a 20 20 20  S version";..   
2fd20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
2fd30 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20  urn false;..    
2fd40 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
2fd50 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
2fd60 6b 65 79 4e 61 6d 65 20 3d 20 47 65 74 56 73 4b  keyName = GetVsK
2fd70 65 79 4e 61 6d 65 28 76 73 56 65 72 73 69 6f 6e  eyName(vsVersion
2fd80 2c 20 77 6f 77 36 34 29 3b 0d 0a 0d 0a 20 20 20  , wow64);....   
2fd90 20 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28           using (
2fda0 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20  MockRegistryKey 
2fdb0 6b 65 79 20 3d 20 52 65 67 69 73 74 72 79 48 65  key = RegistryHe
2fdc0 6c 70 65 72 2e 4f 70 65 6e 53 75 62 4b 65 79 28  lper.OpenSubKey(
2fdd0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2fde0 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 6b        rootKey, k
2fdf0 65 79 4e 61 6d 65 2c 20 66 61 6c 73 65 2c 20 77  eyName, false, w
2fe00 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 29  hatIf, verbose))
2fe10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
2fe20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2fe30 20 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c   if (key == null
2fe40 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
2fe50 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
2fe60 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20            error 
2fe70 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  = String.Format(
2fe80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2fe90 20 20 20 20 20 20 20 20 20 20 22 63 6f 75 6c 64            "could
2fea0 20 6e 6f 74 20 6f 70 65 6e 20 72 65 67 69 73 74   not open regist
2feb0 72 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c 7b 31 7d  ry key: {0}\\{1}
2fec0 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
2fed0 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74              root
2fee0 4b 65 79 2c 20 6b 65 79 4e 61 6d 65 29 3b 0d 0a  Key, keyName);..
2fef0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2ff00 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
2ff10 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se;..           
2ff20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
2ff30 20 20 20 20 20 20 20 20 20 20 75 73 69 6e 67 20            using 
2ff40 28 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79  (MockRegistryKey
2ff50 20 73 75 62 4b 65 79 20 3d 20 52 65 67 69 73 74   subKey = Regist
2ff60 72 79 48 65 6c 70 65 72 2e 4f 70 65 6e 53 75 62  ryHelper.OpenSub
2ff70 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20  Key(..          
2ff80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6b 65                ke
2ff90 79 2c 20 22 44 61 74 61 50 72 6f 76 69 64 65 72  y, "DataProvider
2ffa0 73 22 2c 20 74 72 75 65 2c 20 77 68 61 74 49 66  s", true, whatIf
2ffb0 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a 20 20 20  , verbose))..   
2ffc0 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
2ffd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ffe0 20 20 20 20 69 66 20 28 73 75 62 4b 65 79 20 3d      if (subKey =
2fff0 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
30000 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
30010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30020 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
30030 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
30040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30050 20 20 20 20 20 20 20 20 20 20 20 20 22 63 6f 75              "cou
30060 6c 64 20 6e 6f 74 20 6f 70 65 6e 20 72 65 67 69  ld not open regi
30070 73 74 72 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c 44  stry key: {0}\\D
30080 61 74 61 50 72 6f 76 69 64 65 72 73 22 2c 0d 0a  ataProviders",..
30090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
300a0 20 20 20 20 20 20 20 20 20 20 20 20 6b 65 79 29              key)
300b0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
300c0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
300d0 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20  urn false;..    
300e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
300f0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
30100 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72           Registr
30110 79 48 65 6c 70 65 72 2e 44 65 6c 65 74 65 53 75  yHelper.DeleteSu
30120 62 4b 65 79 54 72 65 65 28 0d 0a 20 20 20 20 20  bKeyTree(..     
30130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30140 20 20 20 73 75 62 4b 65 79 2c 20 70 61 63 6b 61     subKey, packa
30150 67 65 2e 44 61 74 61 50 72 6f 76 69 64 65 72 49  ge.DataProviderI
30160 64 2e 54 6f 53 74 72 69 6e 67 28 56 73 49 64 46  d.ToString(VsIdF
30170 6f 72 6d 61 74 29 2c 0d 0a 20 20 20 20 20 20 20  ormat),..       
30180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30190 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65   whatIf, verbose
301a0 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
301b0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
301c0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
301d0 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b      return true;
301e0 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
301f0 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
30200 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30210 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30220 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30230 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
30240 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
30250 65 20 73 74 61 74 69 63 20 62 6f 6f 6c 20 50 72  e static bool Pr
30260 6f 63 65 73 73 56 73 44 61 74 61 50 72 6f 76 69  ocessVsDataProvi
30270 64 65 72 28 0d 0a 20 20 20 20 20 20 20 20 20 20  der(..          
30280 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65    MockRegistryKe
30290 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20 20  y rootKey,..    
302a0 20 20 20 20 20 20 20 20 56 65 72 73 69 6f 6e 20          Version 
302b0 76 73 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20  vsVersion,..    
302c0 20 20 20 20 20 20 20 20 50 61 63 6b 61 67 65 20          Package 
302d0 70 61 63 6b 61 67 65 2c 0d 0a 20 20 20 20 20 20  package,..      
302e0 20 20 20 20 20 20 6f 62 6a 65 63 74 20 63 6c 69        object cli
302f0 65 6e 74 44 61 74 61 2c 0d 0a 20 20 20 20 20 20  entData,..      
30300 20 20 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34        bool wow64
30310 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  ,..            b
30320 6f 6f 6c 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69  ool throwOnMissi
30330 6e 67 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ng,..           
30340 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20   bool whatIf,.. 
30350 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
30360 76 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20  verbose,..      
30370 20 20 20 20 20 20 72 65 66 20 73 74 72 69 6e 67        ref string
30380 20 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20   error..        
30390 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b      )..        {
303a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 41 6e  ..            An
303b0 79 50 61 69 72 3c 73 74 72 69 6e 67 2c 20 62 6f  yPair<string, bo
303c0 6f 6c 3e 20 70 61 69 72 20 3d 20 63 6c 69 65 6e  ol> pair = clien
303d0 74 44 61 74 61 20 61 73 20 41 6e 79 50 61 69 72  tData as AnyPair
303e0 3c 73 74 72 69 6e 67 2c 20 62 6f 6f 6c 3e 3b 0d  <string, bool>;.
303f0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
30400 66 20 28 70 61 69 72 20 3d 3d 20 6e 75 6c 6c 29  f (pair == null)
30410 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
30420 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
30430 20 65 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69   error = "invali
30440 64 20 56 53 20 63 61 6c 6c 62 61 63 6b 20 64 61  d VS callback da
30450 74 61 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ta";..          
30460 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
30470 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se;..           
30480 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
30490 20 20 69 66 20 28 70 61 69 72 2e 59 29 0d 0a 20    if (pair.Y).. 
304a0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
304b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
304c0 74 75 72 6e 20 41 64 64 56 73 44 61 74 61 50 72  turn AddVsDataPr
304d0 6f 76 69 64 65 72 28 0d 0a 20 20 20 20 20 20 20  ovider(..       
304e0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f               roo
304f0 74 4b 65 79 2c 20 76 73 56 65 72 73 69 6f 6e 2c  tKey, vsVersion,
30500 20 70 61 63 6b 61 67 65 2c 20 70 61 69 72 2e 58   package, pair.X
30510 2c 20 77 6f 77 36 34 2c 20 77 68 61 74 49 66 2c  , wow64, whatIf,
30520 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
30530 20 20 20 20 20 20 76 65 72 62 6f 73 65 2c 20 72        verbose, r
30540 65 66 20 65 72 72 6f 72 29 3b 0d 0a 20 20 20 20  ef error);..    
30550 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
30560 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20         else..   
30570 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
30580 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
30590 72 6e 20 52 65 6d 6f 76 65 56 73 44 61 74 61 50  rn RemoveVsDataP
305a0 72 6f 76 69 64 65 72 28 0d 0a 20 20 20 20 20 20  rovider(..      
305b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f                ro
305c0 6f 74 4b 65 79 2c 20 76 73 56 65 72 73 69 6f 6e  otKey, vsVersion
305d0 2c 20 70 61 63 6b 61 67 65 2c 20 77 6f 77 36 34  , package, wow64
305e0 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73  , whatIf, verbos
305f0 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
30600 20 20 20 20 20 20 20 20 72 65 66 20 65 72 72 6f          ref erro
30610 72 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  r);..           
30620 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20   }..        }.. 
30630 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f         #endregio
30640 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  n....        ///
30650 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30660 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30670 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30680 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30690 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
306a0 23 72 65 67 69 6f 6e 20 56 69 73 75 61 6c 20 53  #region Visual S
306b0 74 75 64 69 6f 20 50 61 63 6b 61 67 65 20 48 61  tudio Package Ha
306c0 6e 64 6c 69 6e 67 0d 0a 20 20 20 20 20 20 20 20  ndling..        
306d0 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 76  private static v
306e0 6f 69 64 20 49 6e 69 74 69 61 6c 69 7a 65 56 73  oid InitializeVs
306f0 50 61 63 6b 61 67 65 28 0d 0a 20 20 20 20 20 20  Package(..      
30700 20 20 20 20 20 20 41 73 73 65 6d 62 6c 79 4e 61        AssemblyNa
30710 6d 65 20 61 73 73 65 6d 62 6c 79 4e 61 6d 65 2c  me assemblyName,
30720 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
30730 6f 6c 20 67 6c 6f 62 61 6c 41 73 73 65 6d 62 6c  ol globalAssembl
30740 79 43 61 63 68 65 2c 0d 0a 20 20 20 20 20 20 20  yCache,..       
30750 20 20 20 20 20 72 65 66 20 50 61 63 6b 61 67 65       ref Package
30760 20 70 61 63 6b 61 67 65 0d 0a 20 20 20 20 20 20   package..      
30770 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
30780 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
30790 69 66 20 28 70 61 63 6b 61 67 65 20 3d 3d 20 6e  if (package == n
307a0 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
307b0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
307c0 20 20 20 20 20 70 61 63 6b 61 67 65 20 3d 20 6e       package = n
307d0 65 77 20 50 61 63 6b 61 67 65 28 29 3b 0d 0a 0d  ew Package();...
307e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
307f0 20 70 61 63 6b 61 67 65 2e 41 73 73 65 6d 62 6c   package.Assembl
30800 79 4e 61 6d 65 20 3d 20 61 73 73 65 6d 62 6c 79  yName = assembly
30810 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  Name;..         
30820 20 20 20 20 20 20 20 70 61 63 6b 61 67 65 2e 47         package.G
30830 6c 6f 62 61 6c 41 73 73 65 6d 62 6c 79 43 61 63  lobalAssemblyCac
30840 68 65 20 3d 20 67 6c 6f 62 61 6c 41 73 73 65 6d  he = globalAssem
30850 62 6c 79 43 61 63 68 65 3b 0d 0a 0d 0a 20 20 20  blyCache;....   
30860 20 20 20 20 20 20 20 20 20 20 20 20 20 70 61 63               pac
30870 6b 61 67 65 2e 41 64 6f 4e 65 74 54 65 63 68 6e  kage.AdoNetTechn
30880 6f 6c 6f 67 79 49 64 20 3d 20 6e 65 77 20 47 75  ologyId = new Gu
30890 69 64 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  id(..           
308a0 20 20 20 20 20 20 20 20 20 22 37 37 41 42 39 41           "77AB9A
308b0 39 44 2d 37 38 42 39 2d 34 42 41 37 2d 39 31 41  9D-78B9-4BA7-91A
308c0 43 2d 38 37 33 46 35 33 33 38 46 31 44 32 22 29  C-873F5338F1D2")
308d0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
308e0 20 20 20 20 20 70 61 63 6b 61 67 65 2e 50 61 63       package.Pac
308f0 6b 61 67 65 49 64 20 3d 20 6e 65 77 20 47 75 69  kageId = new Gui
30900 64 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  d(..            
30910 20 20 20 20 20 20 20 20 22 44 43 42 45 36 43 38          "DCBE6C8
30920 44 2d 30 45 35 37 2d 34 30 39 39 2d 41 31 38 33  D-0E57-4099-A183
30930 2d 39 38 46 46 37 34 43 36 34 44 39 43 22 29 3b  -98FF74C64D9C");
30940 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
30950 20 20 20 20 70 61 63 6b 61 67 65 2e 53 65 72 76      package.Serv
30960 69 63 65 49 64 20 3d 20 6e 65 77 20 47 75 69 64  iceId = new Guid
30970 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
30980 20 20 20 20 20 20 20 22 44 43 42 45 36 43 38 44         "DCBE6C8D
30990 2d 30 45 35 37 2d 34 30 39 39 2d 41 31 38 33 2d  -0E57-4099-A183-
309a0 39 38 46 46 37 34 43 36 34 44 39 44 22 29 3b 0d  98FF74C64D9D");.
309b0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
309c0 20 20 20 70 61 63 6b 61 67 65 2e 44 61 74 61 53     package.DataS
309d0 6f 75 72 63 65 49 64 20 3d 20 6e 65 77 20 47 75  ourceId = new Gu
309e0 69 64 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  id(..           
309f0 20 20 20 20 20 20 20 20 20 22 30 45 42 41 41 42           "0EBAAB
30a00 36 45 2d 43 41 38 30 2d 34 42 34 41 2d 38 44 44  6E-CA80-4B4A-8DD
30a10 46 2d 43 42 45 36 42 46 30 35 38 43 37 31 22 29  F-CBE6BF058C71")
30a20 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
30a30 20 20 20 20 20 70 61 63 6b 61 67 65 2e 44 61 74       package.Dat
30a40 61 50 72 6f 76 69 64 65 72 49 64 20 3d 20 6e 65  aProviderId = ne
30a50 77 20 47 75 69 64 28 0d 0a 20 20 20 20 20 20 20  w Guid(..       
30a60 20 20 20 20 20 20 20 20 20 20 20 20 20 22 30 45               "0E
30a70 42 41 41 42 36 45 2d 43 41 38 30 2d 34 42 34 41  BAAB6E-CA80-4B4A
30a80 2d 38 44 44 46 2d 43 42 45 36 42 46 30 35 38 43  -8DDF-CBE6BF058C
30a90 37 30 22 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  70");..         
30aa0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d     }..        }.
30ab0 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
30ac0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30ad0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30ae0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30af0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30b00 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72  //....        pr
30b10 69 76 61 74 65 20 73 74 61 74 69 63 20 62 6f 6f  ivate static boo
30b20 6c 20 41 64 64 56 73 50 61 63 6b 61 67 65 28 0d  l AddVsPackage(.
30b30 0a 20 20 20 20 20 20 20 20 20 20 20 20 4d 6f 63  .            Moc
30b40 6b 52 65 67 69 73 74 72 79 4b 65 79 20 72 6f 6f  kRegistryKey roo
30b50 74 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20  tKey,..         
30b60 20 20 20 56 65 72 73 69 6f 6e 20 76 73 56 65 72     Version vsVer
30b70 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20  sion,..         
30b80 20 20 20 50 61 63 6b 61 67 65 20 70 61 63 6b 61     Package packa
30b90 67 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ge,..           
30ba0 20 73 74 72 69 6e 67 20 66 69 6c 65 4e 61 6d 65   string fileName
30bb0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  ,..            b
30bc0 6f 6f 6c 20 77 6f 77 36 34 2c 0d 0a 20 20 20 20  ool wow64,..    
30bd0 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61          bool wha
30be0 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  tIf,..          
30bf0 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 0d    bool verbose,.
30c00 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66  .            ref
30c10 20 73 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20   string error.. 
30c20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
30c30 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
30c40 20 20 20 20 20 69 66 20 28 76 73 56 65 72 73 69       if (vsVersi
30c50 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  on == null)..   
30c60 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
30c70 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
30c80 72 20 3d 20 22 69 6e 76 61 6c 69 64 20 56 53 20  r = "invalid VS 
30c90 76 65 72 73 69 6f 6e 22 3b 0d 0a 20 20 20 20 20  version";..     
30ca0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
30cb0 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  n false;..      
30cc0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
30cd0 20 20 20 20 20 20 20 69 66 20 28 70 61 63 6b 61         if (packa
30ce0 67 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ge == null)..   
30cf0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
30d00 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
30d10 72 20 3d 20 22 69 6e 76 61 6c 69 64 20 56 53 20  r = "invalid VS 
30d20 70 61 63 6b 61 67 65 22 3b 0d 0a 20 20 20 20 20  package";..     
30d30 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
30d40 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  n false;..      
30d50 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
30d60 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6b 65         string ke
30d70 79 4e 61 6d 65 20 3d 20 47 65 74 56 73 4b 65 79  yName = GetVsKey
30d80 4e 61 6d 65 28 76 73 56 65 72 73 69 6f 6e 2c 20  Name(vsVersion, 
30d90 77 6f 77 36 34 29 3b 0d 0a 0d 0a 20 20 20 20 20  wow64);....     
30da0 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 4d 6f         using (Mo
30db0 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 6b 65  ckRegistryKey ke
30dc0 79 20 3d 20 52 65 67 69 73 74 72 79 48 65 6c 70  y = RegistryHelp
30dd0 65 72 2e 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a  er.OpenSubKey(..
30de0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30df0 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 6b 65 79      rootKey, key
30e00 4e 61 6d 65 2c 20 66 61 6c 73 65 2c 20 77 68 61  Name, false, wha
30e10 74 49 66 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a  tIf, verbose))..
30e20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
30e30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
30e40 66 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d  f (key == null).
30e50 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
30e60 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
30e70 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
30e80 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
30e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30ea0 20 20 20 20 20 20 20 20 22 63 6f 75 6c 64 20 6e          "could n
30eb0 6f 74 20 6f 70 65 6e 20 72 65 67 69 73 74 72 79  ot open registry
30ec0 20 6b 65 79 3a 20 7b 30 7d 5c 5c 7b 31 7d 22 2c   key: {0}\\{1}",
30ed0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
30ee0 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65            rootKe
30ef0 79 2c 20 6b 65 79 4e 61 6d 65 29 3b 0d 0a 0d 0a  y, keyName);....
30f00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30f10 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
30f20 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
30f30 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
30f40 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 4d          using (M
30f50 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 73  ockRegistryKey s
30f60 75 62 4b 65 79 20 3d 20 52 65 67 69 73 74 72 79  ubKey = Registry
30f70 48 65 6c 70 65 72 2e 4f 70 65 6e 53 75 62 4b 65  Helper.OpenSubKe
30f80 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y(..            
30f90 20 20 20 20 20 20 20 20 20 20 20 20 6b 65 79 2c              key,
30fa0 20 22 50 61 63 6b 61 67 65 73 22 2c 20 74 72 75   "Packages", tru
30fb0 65 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f  e, whatIf, verbo
30fc0 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  se))..          
30fd0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
30fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
30ff0 28 73 75 62 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29  (subKey == null)
31000 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
31010 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
31020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31030 20 65 72 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e   error = String.
31040 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
31050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31060 20 20 20 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20       "could not 
31070 6f 70 65 6e 20 72 65 67 69 73 74 72 79 20 6b 65  open registry ke
31080 79 3a 20 7b 30 7d 5c 5c 50 61 63 6b 61 67 65 73  y: {0}\\Packages
31090 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
310a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
310b0 6b 65 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  key);....       
310c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
310d0 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
310e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
310f0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
31100 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
31110 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
31120 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 2a 57       // NOTE: *W
31130 41 52 4e 49 4e 47 2a 20 43 68 61 6e 67 69 6e 67  ARNING* Changing
31140 20 61 6e 79 20 6f 66 20 74 68 65 73 65 20 76 61   any of these va
31150 6c 75 65 73 20 77 69 6c 6c 20 6c 69 6b 65 6c 79  lues will likely
31160 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
31170 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 72        //       r
31180 65 71 75 69 72 65 20 61 20 6e 65 77 20 22 70 61  equire a new "pa
31190 63 6b 61 67 65 20 6c 6f 61 64 20 6b 65 79 22 20  ckage load key" 
311a0 28 50 4c 4b 29 20 74 6f 20 62 65 0d 0a 20 20 20  (PLK) to be..   
311b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
311c0 20 2f 2f 20 20 20 20 20 20 20 67 65 6e 65 72 61   //       genera
311d0 74 65 64 20 69 6e 20 6f 72 64 65 72 20 74 6f 20  ted in order to 
311e0 70 72 6f 70 65 72 6c 79 20 73 75 70 70 6f 72 74  properly support
311f0 20 6c 6f 61 64 69 6e 67 20 74 68 65 0d 0a 20 20   loading the..  
31200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31210 20 20 2f 2f 20 20 20 20 20 20 20 70 61 63 6b 61    //       packa
31220 67 65 20 69 6e 74 6f 20 56 69 73 75 61 6c 20 53  ge into Visual S
31230 74 75 64 69 6f 20 32 30 30 38 20 61 6e 64 20 65  tudio 2008 and e
31240 61 72 6c 69 65 72 20 77 69 74 68 6f 75 74 0d 0a  arlier without..
31250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31260 20 20 20 20 2f 2f 20 20 20 20 20 20 20 74 68 65      //       the
31270 20 6d 61 74 63 68 69 6e 67 20 56 69 73 75 61 6c   matching Visual
31280 20 53 74 75 64 69 6f 20 53 44 4b 20 62 65 69 6e   Studio SDK bein
31290 67 20 69 6e 73 74 61 6c 6c 65 64 2e 0d 0a 20 20  g installed...  
312a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
312b0 20 20 2f 2f 20 20 20 20 20 20 20 50 6c 65 61 73    //       Pleas
312c0 65 20 72 65 66 65 72 20 74 6f 20 74 68 65 20 22  e refer to the "
312d0 53 51 4c 69 74 65 2e 44 65 73 69 67 6e 65 72 5c  SQLite.Designer\
312e0 70 6c 6b 2e 74 78 74 22 20 66 69 6c 65 0d 0a 20  plk.txt" file.. 
312f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31300 20 20 20 2f 2f 20 20 20 20 20 20 20 66 6f 72 20     //       for 
31310 74 68 65 20 65 78 69 73 74 69 6e 67 20 6f 66 66  the existing off
31320 69 63 69 61 6c 20 76 61 6c 75 65 73 20 61 6e 64  icial values and
31330 20 75 70 64 61 74 65 20 74 68 65 6d 20 69 66 0d   update them if.
31340 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
31350 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 6e 65       //       ne
31360 63 65 73 73 61 72 79 2e 20 20 41 6c 73 6f 2c 20  cessary.  Also, 
31370 74 68 65 20 6e 65 77 6c 79 20 67 65 6e 65 72 61  the newly genera
31380 74 65 64 20 70 61 63 6b 61 67 65 20 6c 6f 61 64  ted package load
31390 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
313a0 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 6b        //       k
313b0 65 79 20 69 74 73 65 6c 66 2c 20 77 68 69 63 68  ey itself, which
313c0 20 69 73 20 61 20 31 32 38 20 63 68 61 72 61 63   is a 128 charac
313d0 74 65 72 20 61 6c 70 68 61 6e 75 6d 65 72 69 63  ter alphanumeric
313e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
313f0 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 73        //       s
31400 74 72 69 6e 67 2c 20 6d 75 73 74 20 62 65 20 70  tring, must be p
31410 6c 61 63 65 64 20 69 6e 20 74 68 65 20 72 65 73  laced in the res
31420 6f 75 72 63 65 20 73 74 72 69 6e 67 20 6e 61 6d  ource string nam
31430 65 64 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ed..            
31440 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
31450 20 22 34 30 30 22 20 69 6e 20 74 68 65 20 22 53   "400" in the "S
31460 51 4c 69 74 65 2e 44 65 73 69 67 6e 65 72 5c 56  QLite.Designer\V
31470 53 50 61 63 6b 61 67 65 2e 72 65 73 78 22 20 66  SPackage.resx" f
31480 69 6c 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ile..           
31490 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
314a0 20 20 61 6e 64 20 74 68 65 6e 20 74 68 65 20 64    and then the d
314b0 65 73 69 67 6e 65 72 20 61 73 73 65 6d 62 6c 79  esigner assembly
314c0 20 69 74 73 65 6c 66 20 6d 75 73 74 20 62 65 0d   itself must be.
314d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
314e0 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 72 65       //       re
314f0 63 6f 6d 70 69 6c 65 64 2e 20 20 41 73 20 6f 66  compiled.  As of
31500 20 74 68 69 73 20 77 72 69 74 69 6e 67 20 28 69   this writing (i
31510 6e 20 46 65 62 72 75 61 72 79 20 32 30 31 32 29  n February 2012)
31520 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
31530 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
31540 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 55 52  the following UR
31550 4c 20 69 73 20 74 68 65 20 70 72 6f 70 65 72 20  L is the proper 
31560 70 6c 61 63 65 20 74 6f 20 67 65 6e 65 72 61 74  place to generat
31570 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..             
31580 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
31590 70 61 63 6b 61 67 65 20 6c 6f 61 64 20 6b 65 79  package load key
315a0 73 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  s:..            
315b0 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
315c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
315d0 2f 2f 20 20 20 20 20 20 20 68 74 74 70 3a 2f 2f  //       http://
315e0 6d 73 64 6e 2e 6d 69 63 72 6f 73 6f 66 74 2e 63  msdn.microsoft.c
315f0 6f 6d 2f 65 6e 2d 75 73 2f 76 73 74 75 64 69 6f  om/en-us/vstudio
31600 2f 63 63 36 35 35 37 39 35 0d 0a 20 20 20 20 20  /cc655795..     
31610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
31620 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
31630 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 4d 6f         using (Mo
31640 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 70 61  ckRegistryKey pa
31650 63 6b 61 67 65 4b 65 79 20 3d 0d 0a 20 20 20 20  ckageKey =..    
31660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31670 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79          Registry
31680 48 65 6c 70 65 72 2e 43 72 65 61 74 65 53 75 62  Helper.CreateSub
31690 4b 65 79 28 73 75 62 4b 65 79 2c 0d 0a 20 20 20  Key(subKey,..   
316a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
316b0 20 20 20 20 20 20 20 20 20 70 61 63 6b 61 67 65           package
316c0 2e 50 61 63 6b 61 67 65 49 64 2e 54 6f 53 74 72  .PackageId.ToStr
316d0 69 6e 67 28 56 73 49 64 46 6f 72 6d 61 74 29 2c  ing(VsIdFormat),
316e0 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20   whatIf,..      
316f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31700 20 20 20 20 20 20 76 65 72 62 6f 73 65 29 29 0d        verbose)).
31710 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
31720 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
31730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31740 69 66 20 28 70 61 63 6b 61 67 65 4b 65 79 20 3d  if (packageKey =
31750 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
31760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31770 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
31780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31790 65 72 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46  error = String.F
317a0 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
317b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
317c0 20 20 20 20 20 20 20 20 22 63 6f 75 6c 64 20 6e          "could n
317d0 6f 74 20 63 72 65 61 74 65 20 72 65 67 69 73 74  ot create regist
317e0 72 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c 7b 31 7d  ry key: {0}\\{1}
317f0 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
31800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31810 20 20 20 20 6b 65 79 2c 20 70 61 63 6b 61 67 65      key, package
31820 2e 50 61 63 6b 61 67 65 49 64 2e 54 6f 53 74 72  .PackageId.ToStr
31830 69 6e 67 28 56 73 49 64 46 6f 72 6d 61 74 29 29  ing(VsIdFormat))
31840 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
31850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31860 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
31870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31880 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
31890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
318a0 20 20 20 20 20 52 65 67 69 73 74 72 79 48 65 6c       RegistryHel
318b0 70 65 72 2e 53 65 74 56 61 6c 75 65 28 70 61 63  per.SetValue(pac
318c0 6b 61 67 65 4b 65 79 2c 20 6e 75 6c 6c 2c 0d 0a  kageKey, null,..
318d0 20 20 20 20 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 53 74 72 69              Stri
318f0 6e 67 2e 46 6f 72 6d 61 74 28 22 7b 30 7d 20 44  ng.Format("{0} D
31900 65 73 69 67 6e 65 72 20 50 61 63 6b 61 67 65 22  esigner Package"
31910 2c 20 50 72 6f 6a 65 63 74 4e 61 6d 65 29 2c 0d  , ProjectName),.
31920 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
31930 20 20 20 20 20 20 20 20 20 20 20 20 20 77 68 61               wha
31940 74 49 66 2c 20 76 65 72 62 6f 73 65 29 3b 0d 0a  tIf, verbose);..
31950 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
31960 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74            Regist
31970 72 79 48 65 6c 70 65 72 2e 53 65 74 56 61 6c 75  ryHelper.SetValu
31980 65 28 70 61 63 6b 61 67 65 4b 65 79 2c 20 22 43  e(packageKey, "C
31990 6c 61 73 73 22 2c 0d 0a 20 20 20 20 20 20 20 20  lass",..        
319a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
319b0 20 20 20 20 22 53 51 4c 69 74 65 2e 44 65 73 69      "SQLite.Desi
319c0 67 6e 65 72 2e 53 51 4c 69 74 65 50 61 63 6b 61  gner.SQLitePacka
319d0 67 65 22 2c 20 77 68 61 74 49 66 2c 20 76 65 72  ge", whatIf, ver
319e0 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  bose);....      
319f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31a00 20 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72    RegistryHelper
31a10 2e 53 65 74 56 61 6c 75 65 28 70 61 63 6b 61 67  .SetValue(packag
31a20 65 4b 65 79 2c 20 22 43 6f 64 65 42 61 73 65 22  eKey, "CodeBase"
31a30 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
31a40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66                 f
31a50 69 6c 65 4e 61 6d 65 2c 20 77 68 61 74 49 66 2c  ileName, whatIf,
31a60 20 76 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20   verbose);....  
31a70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31a80 20 20 20 20 20 20 52 65 67 69 73 74 72 79 48 65        RegistryHe
31a90 6c 70 65 72 2e 53 65 74 56 61 6c 75 65 28 70 61  lper.SetValue(pa
31aa0 63 6b 61 67 65 4b 65 79 2c 20 22 49 44 22 2c 20  ckageKey, "ID", 
31ab0 34 30 30 2c 20 77 68 61 74 49 66 2c 0d 0a 20 20  400, whatIf,..  
31ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31ad0 20 20 20 20 20 20 20 20 20 20 76 65 72 62 6f 73            verbos
31ae0 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e);....         
31af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
31b00 74 72 69 6e 67 20 64 69 72 65 63 74 6f 72 79 20  tring directory 
31b10 3d 20 47 65 74 53 79 73 74 65 6d 44 69 72 65 63  = GetSystemDirec
31b20 74 6f 72 79 28 77 6f 77 36 34 29 3b 0d 0a 0d 0a  tory(wow64);....
31b30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31b40 20 20 20 20 20 20 20 20 69 66 20 28 64 69 72 65          if (dire
31b50 63 74 6f 72 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  ctory == null)..
31b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31b70 20 20 20 20 20 20 20 20 20 20 20 20 64 69 72 65              dire
31b80 63 74 6f 72 79 20 3d 20 53 74 72 69 6e 67 2e 45  ctory = String.E
31b90 6d 70 74 79 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  mpty;....       
31ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31bb0 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e   RegistryHelper.
31bc0 53 65 74 56 61 6c 75 65 28 70 61 63 6b 61 67 65  SetValue(package
31bd0 4b 65 79 2c 20 22 49 6e 70 72 6f 63 53 65 72 76  Key, "InprocServ
31be0 65 72 33 32 22 2c 0d 0a 20 20 20 20 20 20 20 20  er32",..        
31bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31c00 20 20 20 20 50 61 74 68 2e 43 6f 6d 62 69 6e 65      Path.Combine
31c10 28 64 69 72 65 63 74 6f 72 79 2c 20 22 6d 73 63  (directory, "msc
31c20 6f 72 65 65 2e 64 6c 6c 22 29 2c 0d 0a 20 20 20  oree.dll"),..   
31c30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31c40 20 20 20 20 20 20 20 20 20 77 68 61 74 49 66 2c           whatIf,
31c50 20 76 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20   verbose);....  
31c60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31c70 20 20 20 20 20 20 52 65 67 69 73 74 72 79 48 65        RegistryHe
31c80 6c 70 65 72 2e 53 65 74 56 61 6c 75 65 28 70 61  lper.SetValue(pa
31c90 63 6b 61 67 65 4b 65 79 2c 20 22 43 6f 6d 70 61  ckageKey, "Compa
31ca0 6e 79 4e 61 6d 65 22 2c 0d 0a 20 20 20 20 20 20  nyName",..      
31cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31cc0 20 20 20 20 20 20 22 68 74 74 70 3a 2f 2f 73 79        "http://sy
31cd0 73 74 65 6d 2e 64 61 74 61 2e 73 71 6c 69 74 65  stem.data.sqlite
31ce0 2e 6f 72 67 2f 22 2c 20 77 68 61 74 49 66 2c 20  .org/", whatIf, 
31cf0 76 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20  verbose);....   
31d00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31d10 20 20 20 20 20 52 65 67 69 73 74 72 79 48 65 6c       RegistryHel
31d20 70 65 72 2e 53 65 74 56 61 6c 75 65 28 70 61 63  per.SetValue(pac
31d30 6b 61 67 65 4b 65 79 2c 20 22 4d 69 6e 45 64 69  kageKey, "MinEdi
31d40 74 69 6f 6e 22 2c 0d 0a 20 20 20 20 20 20 20 20  tion",..        
31d50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31d60 20 20 20 20 22 73 74 61 6e 64 61 72 64 22 2c 20      "standard", 
31d70 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29  whatIf, verbose)
31d80 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
31d90 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67               Reg
31da0 69 73 74 72 79 48 65 6c 70 65 72 2e 53 65 74 56  istryHelper.SetV
31db0 61 6c 75 65 28 70 61 63 6b 61 67 65 4b 65 79 2c  alue(packageKey,
31dc0 20 22 50 72 6f 64 75 63 74 4e 61 6d 65 22 2c 0d   "ProductName",.
31dd0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
31de0 20 20 20 20 20 20 20 20 20 20 20 20 20 53 74 72               Str
31df0 69 6e 67 2e 46 6f 72 6d 61 74 28 22 7b 30 7d 20  ing.Format("{0} 
31e00 44 65 73 69 67 6e 65 72 20 50 61 63 6b 61 67 65  Designer Package
31e10 22 2c 20 50 72 6f 6a 65 63 74 4e 61 6d 65 29 2c  ", ProjectName),
31e20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
31e30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 77 68                wh
31e40 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 3b 0d  atIf, verbose);.
31e50 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
31e60 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73             Regis
31e70 74 72 79 48 65 6c 70 65 72 2e 53 65 74 56 61 6c  tryHelper.SetVal
31e80 75 65 28 70 61 63 6b 61 67 65 4b 65 79 2c 20 22  ue(packageKey, "
31e90 50 72 6f 64 75 63 74 56 65 72 73 69 6f 6e 22 2c  ProductVersion",
31ea0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
31eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 31                "1
31ec0 2e 30 22 2c 20 77 68 61 74 49 66 2c 20 76 65 72  .0", whatIf, ver
31ed0 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  bose);....      
31ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31ef0 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67    using (MockReg
31f00 69 73 74 72 79 4b 65 79 20 74 6f 6f 6c 62 6f 78  istryKey toolbox
31f10 4b 65 79 20 3d 0d 0a 20 20 20 20 20 20 20 20 20  Key =..         
31f20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31f30 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79 48         RegistryH
31f40 65 6c 70 65 72 2e 43 72 65 61 74 65 53 75 62 4b  elper.CreateSubK
31f50 65 79 28 70 61 63 6b 61 67 65 4b 65 79 2c 0d 0a  ey(packageKey,..
31f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31f80 22 54 6f 6f 6c 62 6f 78 22 2c 20 77 68 61 74 49  "Toolbox", whatI
31f90 66 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a 20 20  f, verbose))..  
31fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31fb0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
31fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31fd0 20 20 20 20 20 69 66 20 28 74 6f 6f 6c 62 6f 78       if (toolbox
31fe0 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  Key == null)..  
31ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32000 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
32010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32020 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
32030 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d  or = String.Form
32040 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
32050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32060 20 20 20 20 20 20 20 20 20 22 63 6f 75 6c 64 20           "could 
32070 6e 6f 74 20 63 72 65 61 74 65 20 72 65 67 69 73  not create regis
32080 74 72 79 20 6b 65 79 3a 20 22 20 2b 0d 0a 20 20  try key: " +..  
32090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
320a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
320b0 20 20 22 7b 30 7d 5c 5c 54 6f 6f 6c 62 6f 78 22    "{0}\\Toolbox"
320c0 2c 20 70 61 63 6b 61 67 65 4b 65 79 29 3b 0d 0a  , packageKey);..
320d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
320e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
320f0 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
32100 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
32110 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
32120 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
32130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65                Re
32140 67 69 73 74 72 79 48 65 6c 70 65 72 2e 53 65 74  gistryHelper.Set
32150 56 61 6c 75 65 28 0d 0a 20 20 20 20 20 20 20 20  Value(..        
32160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32170 20 20 20 20 20 20 20 20 74 6f 6f 6c 62 6f 78 4b          toolboxK
32180 65 79 2c 20 22 44 65 66 61 75 6c 74 20 49 74 65  ey, "Default Ite
32190 6d 73 22 2c 20 33 2c 20 77 68 61 74 49 66 2c 0d  ms", 3, whatIf,.
321a0 0a 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 20 20 20 20 20 20                  
321c0 20 76 65 72 62 6f 73 65 29 3b 0d 0a 20 20 20 20   verbose);..    
321d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
321e0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
321f0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
32200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
32210 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
32220 20 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65     using (MockRe
32230 67 69 73 74 72 79 4b 65 79 20 73 75 62 4b 65 79  gistryKey subKey
32240 20 3d 20 52 65 67 69 73 74 72 79 48 65 6c 70 65   = RegistryHelpe
32250 72 2e 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20  r.OpenSubKey(.. 
32260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32270 20 20 20 20 20 20 20 6b 65 79 2c 20 22 4d 65 6e         key, "Men
32280 75 73 22 2c 20 74 72 75 65 2c 20 77 68 61 74 49  us", true, whatI
32290 66 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a 20 20  f, verbose))..  
322a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
322b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
322c0 20 20 20 20 20 69 66 20 28 73 75 62 4b 65 79 20       if (subKey 
322d0 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
322e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
322f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
32300 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
32310 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d   String.Format(.
32320 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
32330 20 20 20 20 20 20 20 20 20 20 20 20 20 22 63 6f               "co
32340 75 6c 64 20 6e 6f 74 20 6f 70 65 6e 20 72 65 67  uld not open reg
32350 69 73 74 72 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c  istry key: {0}\\
32360 4d 65 6e 75 73 22 2c 0d 0a 20 20 20 20 20 20 20  Menus",..       
32370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32380 20 20 20 20 20 6b 65 79 29 3b 0d 0a 0d 0a 20 20       key);....  
32390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
323a0 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
323b0 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se;..           
323c0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
323d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
323e0 20 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72    RegistryHelper
323f0 2e 53 65 74 56 61 6c 75 65 28 0d 0a 20 20 20 20  .SetValue(..    
32400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32410 20 20 20 20 73 75 62 4b 65 79 2c 20 70 61 63 6b      subKey, pack
32420 61 67 65 2e 50 61 63 6b 61 67 65 49 64 2e 54 6f  age.PackageId.To
32430 53 74 72 69 6e 67 28 56 73 49 64 46 6f 72 6d 61  String(VsIdForma
32440 74 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  t),..           
32450 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2c 20               ", 
32460 31 30 30 30 2c 20 33 22 2c 20 77 68 61 74 49 66  1000, 3", whatIf
32470 2c 20 76 65 72 62 6f 73 65 29 3b 0d 0a 20 20 20  , verbose);..   
32480 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
32490 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
324a0 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67    using (MockReg
324b0 69 73 74 72 79 4b 65 79 20 73 75 62 4b 65 79 20  istryKey subKey 
324c0 3d 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72  = RegistryHelper
324d0 2e 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20  .OpenSubKey(..  
324e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
324f0 20 20 20 20 20 20 6b 65 79 2c 20 22 53 65 72 76        key, "Serv
32500 69 63 65 73 22 2c 20 74 72 75 65 2c 20 77 68 61  ices", true, wha
32510 74 49 66 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a  tIf, verbose))..
32520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32530 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
32540 20 20 20 20 20 20 20 69 66 20 28 73 75 62 4b 65         if (subKe
32550 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  y == null)..    
32560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32570 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
32580 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72             error
32590 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74   = String.Format
325a0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
325b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
325c0 63 6f 75 6c 64 20 6e 6f 74 20 6f 70 65 6e 20 72  could not open r
325d0 65 67 69 73 74 72 79 20 6b 65 79 3a 20 7b 30 7d  egistry key: {0}
325e0 5c 5c 53 65 72 76 69 63 65 73 22 2c 0d 0a 20 20  \\Services",..  
325f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32600 20 20 20 20 20 20 20 20 20 20 6b 65 79 29 3b 0d            key);.
32610 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
32620 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
32630 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  n false;..      
32640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
32650 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
32660 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 4d 6f         using (Mo
32670 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 73 65  ckRegistryKey se
32680 72 76 69 63 65 4b 65 79 20 3d 0d 0a 20 20 20 20  rviceKey =..    
32690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
326a0 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79          Registry
326b0 48 65 6c 70 65 72 2e 43 72 65 61 74 65 53 75 62  Helper.CreateSub
326c0 4b 65 79 28 73 75 62 4b 65 79 2c 0d 0a 20 20 20  Key(subKey,..   
326d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
326e0 20 20 20 20 20 20 20 20 20 70 61 63 6b 61 67 65           package
326f0 2e 53 65 72 76 69 63 65 49 64 2e 54 6f 53 74 72  .ServiceId.ToStr
32700 69 6e 67 28 56 73 49 64 46 6f 72 6d 61 74 29 2c  ing(VsIdFormat),
32710 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20   whatIf,..      
32720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32730 20 20 20 20 20 20 76 65 72 62 6f 73 65 29 29 0d        verbose)).
32740 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
32750 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
32760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32770 69 66 20 28 73 65 72 76 69 63 65 4b 65 79 20 3d  if (serviceKey =
32780 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
32790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
327a0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
327b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
327c0 65 72 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46  error = String.F
327d0 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
327e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
327f0 20 20 20 20 20 20 20 20 22 63 6f 75 6c 64 20 6e          "could n
32800 6f 74 20 63 72 65 61 74 65 20 72 65 67 69 73 74  ot create regist
32810 72 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c 7b 31 7d  ry key: {0}\\{1}
32820 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
32830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32840 20 20 20 20 6b 65 79 2c 20 70 61 63 6b 61 67 65      key, package
32850 2e 53 65 72 76 69 63 65 49 64 2e 54 6f 53 74 72  .ServiceId.ToStr
32860 69 6e 67 28 56 73 49 64 46 6f 72 6d 61 74 29 29  ing(VsIdFormat))
32870 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
32880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32890 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
328a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
328b0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
328c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
328d0 20 20 20 20 20 52 65 67 69 73 74 72 79 48 65 6c       RegistryHel
328e0 70 65 72 2e 53 65 74 56 61 6c 75 65 28 73 65 72  per.SetValue(ser
328f0 76 69 63 65 4b 65 79 2c 20 6e 75 6c 6c 2c 0d 0a  viceKey, null,..
32900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32910 20 20 20 20 20 20 20 20 20 20 20 20 70 61 63 6b              pack
32920 61 67 65 2e 50 61 63 6b 61 67 65 49 64 2e 54 6f  age.PackageId.To
32930 53 74 72 69 6e 67 28 56 73 49 64 46 6f 72 6d 61  String(VsIdForma
32940 74 29 2c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20  t), whatIf,..   
32950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32960 20 20 20 20 20 20 20 20 20 76 65 72 62 6f 73 65           verbose
32970 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
32980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65                Re
32990 67 69 73 74 72 79 48 65 6c 70 65 72 2e 53 65 74  gistryHelper.Set
329a0 56 61 6c 75 65 28 73 65 72 76 69 63 65 4b 65 79  Value(serviceKey
329b0 2c 20 22 4e 61 6d 65 22 2c 0d 0a 20 20 20 20 20  , "Name",..     
329c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
329d0 20 20 20 20 20 20 20 53 74 72 69 6e 67 2e 46 6f         String.Fo
329e0 72 6d 61 74 28 22 7b 30 7d 20 44 65 73 69 67 6e  rmat("{0} Design
329f0 65 72 20 53 65 72 76 69 63 65 22 2c 20 50 72 6f  er Service", Pro
32a00 6a 65 63 74 4e 61 6d 65 29 2c 0d 0a 20 20 20 20  jectName),..    
32a10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32a20 20 20 20 20 20 20 20 20 77 68 61 74 49 66 2c 20          whatIf, 
32a30 76 65 72 62 6f 73 65 29 3b 0d 0a 20 20 20 20 20  verbose);..     
32a40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
32a50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
32a60 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
32a70 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
32a80 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a    return true;..
32a90 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
32aa0 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
32ab0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32ac0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32ad0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32ae0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
32af0 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
32b00 73 74 61 74 69 63 20 62 6f 6f 6c 20 52 65 6d 6f  static bool Remo
32b10 76 65 56 73 50 61 63 6b 61 67 65 28 0d 0a 20 20  veVsPackage(..  
32b20 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65            MockRe
32b30 67 69 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65  gistryKey rootKe
32b40 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y,..            
32b50 56 65 72 73 69 6f 6e 20 76 73 56 65 72 73 69 6f  Version vsVersio
32b60 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n,..            
32b70 50 61 63 6b 61 67 65 20 70 61 63 6b 61 67 65 2c  Package package,
32b80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
32b90 6f 6c 20 77 6f 77 36 34 2c 0d 0a 20 20 20 20 20  ol wow64,..     
32ba0 20 20 20 20 20 20 20 62 6f 6f 6c 20 74 68 72 6f         bool thro
32bb0 77 4f 6e 4d 69 73 73 69 6e 67 2c 0d 0a 20 20 20  wOnMissing,..   
32bc0 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68           bool wh
32bd0 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20  atIf,..         
32be0 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c     bool verbose,
32bf0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
32c00 66 20 73 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a  f string error..
32c10 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
32c20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
32c30 20 20 20 20 20 20 69 66 20 28 76 73 56 65 72 73        if (vsVers
32c40 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  ion == null)..  
32c50 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
32c60 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
32c70 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64 20 56 53  or = "invalid VS
32c80 20 76 65 72 73 69 6f 6e 22 3b 0d 0a 20 20 20 20   version";..    
32c90 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
32ca0 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20  rn false;..     
32cb0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
32cc0 20 20 20 20 20 20 20 20 69 66 20 28 70 61 63 6b          if (pack
32cd0 61 67 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  age == null)..  
32ce0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
32cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
32d00 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64 20 56 53  or = "invalid VS
32d10 20 70 61 63 6b 61 67 65 22 3b 0d 0a 20 20 20 20   package";..    
32d20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
32d30 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20  rn false;..     
32d40 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
32d50 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6b          string k
32d60 65 79 4e 61 6d 65 20 3d 20 47 65 74 56 73 4b 65  eyName = GetVsKe
32d70 79 4e 61 6d 65 28 76 73 56 65 72 73 69 6f 6e 2c  yName(vsVersion,
32d80 20 77 6f 77 36 34 29 3b 0d 0a 0d 0a 20 20 20 20   wow64);....    
32d90 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 4d          using (M
32da0 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 6b  ockRegistryKey k
32db0 65 79 20 3d 20 52 65 67 69 73 74 72 79 48 65 6c  ey = RegistryHel
32dc0 70 65 72 2e 4f 70 65 6e 53 75 62 4b 65 79 28 0d  per.OpenSubKey(.
32dd0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
32de0 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 6b 65       rootKey, ke
32df0 79 4e 61 6d 65 2c 20 66 61 6c 73 65 2c 20 77 68  yName, false, wh
32e00 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 29 0d  atIf, verbose)).
32e10 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
32e20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32e30 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29  if (key == null)
32e40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
32e50 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
32e60 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
32e70 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d   String.Format(.
32e80 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
32e90 20 20 20 20 20 20 20 20 20 22 63 6f 75 6c 64 20           "could 
32ea0 6e 6f 74 20 6f 70 65 6e 20 72 65 67 69 73 74 72  not open registr
32eb0 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c 7b 31 7d 22  y key: {0}\\{1}"
32ec0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
32ed0 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b             rootK
32ee0 65 79 2c 20 6b 65 79 4e 61 6d 65 29 3b 0d 0a 0d  ey, keyName);...
32ef0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
32f00 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
32f10 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
32f20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
32f30 20 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28           using (
32f40 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20  MockRegistryKey 
32f50 73 75 62 4b 65 79 20 3d 20 52 65 67 69 73 74 72  subKey = Registr
32f60 79 48 65 6c 70 65 72 2e 4f 70 65 6e 53 75 62 4b  yHelper.OpenSubK
32f70 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ey(..           
32f80 20 20 20 20 20 20 20 20 20 20 20 20 20 6b 65 79               key
32f90 2c 20 22 50 61 63 6b 61 67 65 73 22 2c 20 74 72  , "Packages", tr
32fa0 75 65 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62  ue, whatIf, verb
32fb0 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ose))..         
32fc0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
32fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
32fe0 20 28 73 75 62 4b 65 79 20 3d 3d 20 6e 75 6c 6c   (subKey == null
32ff0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
33000 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
33010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33020 20 20 65 72 72 6f 72 20 3d 20 53 74 72 69 6e 67    error = String
33030 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  .Format(..      
33040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33050 20 20 20 20 20 20 22 63 6f 75 6c 64 20 6e 6f 74        "could not
33060 20 6f 70 65 6e 20 72 65 67 69 73 74 72 79 20 6b   open registry k
33070 65 79 3a 20 7b 30 7d 5c 5c 50 61 63 6b 61 67 65  ey: {0}\\Package
33080 73 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s",..           
33090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
330a0 20 6b 65 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20   key);....      
330b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
330c0 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
330d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
330e0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
330f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65                Re
33100 67 69 73 74 72 79 48 65 6c 70 65 72 2e 44 65 6c  gistryHelper.Del
33110 65 74 65 53 75 62 4b 65 79 54 72 65 65 28 0d 0a  eteSubKeyTree(..
33120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33130 20 20 20 20 20 20 20 20 73 75 62 4b 65 79 2c 20          subKey, 
33140 70 61 63 6b 61 67 65 2e 50 61 63 6b 61 67 65 49  package.PackageI
33150 64 2e 54 6f 53 74 72 69 6e 67 28 56 73 49 64 46  d.ToString(VsIdF
33160 6f 72 6d 61 74 29 2c 0d 0a 20 20 20 20 20 20 20  ormat),..       
33170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33180 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65   whatIf, verbose
33190 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
331a0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
331b0 20 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28           using (
331c0 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20  MockRegistryKey 
331d0 73 75 62 4b 65 79 20 3d 20 52 65 67 69 73 74 72  subKey = Registr
331e0 79 48 65 6c 70 65 72 2e 4f 70 65 6e 53 75 62 4b  yHelper.OpenSubK
331f0 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ey(..           
33200 20 20 20 20 20 20 20 20 20 20 20 20 20 6b 65 79               key
33210 2c 20 22 4d 65 6e 75 73 22 2c 20 74 72 75 65 2c  , "Menus", true,
33220 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65   whatIf, verbose
33230 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
33240 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
33250 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 73             if (s
33260 75 62 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  ubKey == null)..
33270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33280 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
33290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
332a0 72 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f  rror = String.Fo
332b0 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
332c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
332d0 20 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20 6f 70     "could not op
332e0 65 6e 20 72 65 67 69 73 74 72 79 20 6b 65 79 3a  en registry key:
332f0 20 7b 30 7d 5c 5c 4d 65 6e 75 73 22 2c 0d 0a 20   {0}\\Menus",.. 
33300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33310 20 20 20 20 20 20 20 20 20 20 20 6b 65 79 29 3b             key);
33320 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
33330 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
33340 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20  rn false;..     
33350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
33360 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
33370 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79          Registry
33380 48 65 6c 70 65 72 2e 44 65 6c 65 74 65 56 61 6c  Helper.DeleteVal
33390 75 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue(..           
333a0 20 20 20 20 20 20 20 20 20 20 20 20 20 73 75 62               sub
333b0 4b 65 79 2c 20 70 61 63 6b 61 67 65 2e 50 61 63  Key, package.Pac
333c0 6b 61 67 65 49 64 2e 54 6f 53 74 72 69 6e 67 28  kageId.ToString(
333d0 56 73 49 64 46 6f 72 6d 61 74 29 2c 0d 0a 20 20  VsIdFormat),..  
333e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
333f0 20 20 20 20 20 20 74 68 72 6f 77 4f 6e 4d 69 73        throwOnMis
33400 73 69 6e 67 2c 20 77 68 61 74 49 66 2c 20 76 65  sing, whatIf, ve
33410 72 62 6f 73 65 29 3b 0d 0a 20 20 20 20 20 20 20  rbose);..       
33420 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
33430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 75 73                us
33440 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73 74 72  ing (MockRegistr
33450 79 4b 65 79 20 73 75 62 4b 65 79 20 3d 20 52 65  yKey subKey = Re
33460 67 69 73 74 72 79 48 65 6c 70 65 72 2e 4f 70 65  gistryHelper.Ope
33470 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20  nSubKey(..      
33480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33490 20 20 6b 65 79 2c 20 22 53 65 72 76 69 63 65 73    key, "Services
334a0 22 2c 20 74 72 75 65 2c 20 77 68 61 74 49 66 2c  ", true, whatIf,
334b0 20 76 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 20   verbose))..    
334c0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
334d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
334e0 20 20 20 69 66 20 28 73 75 62 4b 65 79 20 3d 3d     if (subKey ==
334f0 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
33500 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
33510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33520 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 53         error = S
33530 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
33540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33550 20 20 20 20 20 20 20 20 20 20 20 22 63 6f 75 6c             "coul
33560 64 20 6e 6f 74 20 6f 70 65 6e 20 72 65 67 69 73  d not open regis
33570 74 72 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c 53 65  try key: {0}\\Se
33580 72 76 69 63 65 73 22 2c 0d 0a 20 20 20 20 20 20  rvices",..      
33590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
335a0 20 20 20 20 20 20 6b 65 79 29 3b 0d 0a 0d 0a 20        key);.... 
335b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
335c0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
335d0 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lse;..          
335e0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
335f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33600 20 20 20 52 65 67 69 73 74 72 79 48 65 6c 70 65     RegistryHelpe
33610 72 2e 44 65 6c 65 74 65 53 75 62 4b 65 79 54 72  r.DeleteSubKeyTr
33620 65 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ee(..           
33630 20 20 20 20 20 20 20 20 20 20 20 20 20 73 75 62               sub
33640 4b 65 79 2c 20 70 61 63 6b 61 67 65 2e 53 65 72  Key, package.Ser
33650 76 69 63 65 49 64 2e 54 6f 53 74 72 69 6e 67 28  viceId.ToString(
33660 56 73 49 64 46 6f 72 6d 61 74 29 2c 0d 0a 20 20  VsIdFormat),..  
33670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33680 20 20 20 20 20 20 77 68 61 74 49 66 2c 20 76 65        whatIf, ve
33690 72 62 6f 73 65 29 3b 0d 0a 20 20 20 20 20 20 20  rbose);..       
336a0 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
336b0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
336c0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
336d0 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d  true;..        }
336e0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f  ////////////////
33720 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33730 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70  ///....        p
33740 72 69 76 61 74 65 20 73 74 61 74 69 63 20 62 6f  rivate static bo
33750 6f 6c 20 50 72 6f 63 65 73 73 56 73 50 61 63 6b  ol ProcessVsPack
33760 61 67 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  age(..          
33770 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65    MockRegistryKe
33780 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20 20  y rootKey,..    
33790 20 20 20 20 20 20 20 20 56 65 72 73 69 6f 6e 20          Version 
337a0 76 73 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20  vsVersion,..    
337b0 20 20 20 20 20 20 20 20 50 61 63 6b 61 67 65 20          Package 
337c0 70 61 63 6b 61 67 65 2c 0d 0a 20 20 20 20 20 20  package,..      
337d0 20 20 20 20 20 20 6f 62 6a 65 63 74 20 63 6c 69        object cli
337e0 65 6e 74 44 61 74 61 2c 0d 0a 20 20 20 20 20 20  entData,..      
337f0 20 20 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34        bool wow64
33800 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  ,..            b
33810 6f 6f 6c 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69  ool throwOnMissi
33820 6e 67 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ng,..           
33830 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20   bool whatIf,.. 
33840 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
33850 76 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20  verbose,..      
33860 20 20 20 20 20 20 72 65 66 20 73 74 72 69 6e 67        ref string
33870 20 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20   error..        
33880 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b      )..        {
33890 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 41 6e  ..            An
338a0 79 50 61 69 72 3c 73 74 72 69 6e 67 2c 20 62 6f  yPair<string, bo
338b0 6f 6c 3e 20 70 61 69 72 20 3d 20 63 6c 69 65 6e  ol> pair = clien
338c0 74 44 61 74 61 20 61 73 20 41 6e 79 50 61 69 72  tData as AnyPair
338d0 3c 73 74 72 69 6e 67 2c 20 62 6f 6f 6c 3e 3b 0d  <string, bool>;.
338e0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
338f0 66 20 28 70 61 69 72 20 3d 3d 20 6e 75 6c 6c 29  f (pair == null)
33900 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
33910 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
33920 20 65 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69   error = "invali
33930 64 20 56 53 20 63 61 6c 6c 62 61 63 6b 20 64 61  d VS callback da
33940 74 61 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ta";..          
33950 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
33960 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se;..           
33970 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
33980 20 20 69 66 20 28 70 61 69 72 2e 59 29 0d 0a 20    if (pair.Y).. 
33990 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
339a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
339b0 74 75 72 6e 20 41 64 64 56 73 50 61 63 6b 61 67  turn AddVsPackag
339c0 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
339d0 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c          rootKey,
339e0 20 76 73 56 65 72 73 69 6f 6e 2c 20 70 61 63 6b   vsVersion, pack
339f0 61 67 65 2c 20 70 61 69 72 2e 58 2c 20 77 6f 77  age, pair.X, wow
33a00 36 34 2c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20  64, whatIf,..   
33a10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33a20 20 76 65 72 62 6f 73 65 2c 20 72 65 66 20 65 72   verbose, ref er
33a30 72 6f 72 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ror);..         
33a40 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
33a50 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20    else..        
33a60 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
33a70 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 52 65         return Re
33a80 6d 6f 76 65 56 73 50 61 63 6b 61 67 65 28 0d 0a  moveVsPackage(..
33a90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33aa0 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 76 73 56      rootKey, vsV
33ab0 65 72 73 69 6f 6e 2c 20 70 61 63 6b 61 67 65 2c  ersion, package,
33ac0 20 77 6f 77 36 34 2c 20 74 68 72 6f 77 4f 6e 4d   wow64, throwOnM
33ad0 69 73 73 69 6e 67 2c 0d 0a 20 20 20 20 20 20 20  issing,..       
33ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 77 68 61               wha
33af0 74 49 66 2c 20 76 65 72 62 6f 73 65 2c 20 72 65  tIf, verbose, re
33b00 66 20 65 72 72 6f 72 29 3b 0d 0a 20 20 20 20 20  f error);..     
33b10 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
33b20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e    }..        #en
33b30 64 72 65 67 69 6f 6e 0d 0a 20 20 20 20 20 20 20  dregion..       
33b40 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20   #endregion.... 
33b50 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
33b60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33b70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33b80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33b90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
33ba0 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f  ..        #regio
33bb0 6e 20 41 70 70 6c 69 63 61 74 69 6f 6e 20 45 6e  n Application En
33bc0 74 72 79 20 50 6f 69 6e 74 0d 0a 20 20 20 20 20  try Point..     
33bd0 20 20 20 5b 4d 65 74 68 6f 64 49 6d 70 6c 28 4d     [MethodImpl(M
33be0 65 74 68 6f 64 49 6d 70 6c 4f 70 74 69 6f 6e 73  ethodImplOptions
33bf0 2e 4e 6f 49 6e 6c 69 6e 69 6e 67 29 5d 0d 0a 20  .NoInlining)].. 
33c00 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
33c10 74 61 74 69 63 20 69 6e 74 20 4d 61 69 6e 28 0d  tatic int Main(.
33c20 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72  .            str
33c30 69 6e 67 5b 5d 20 61 72 67 73 0d 0a 20 20 20 20  ing[] args..    
33c40 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
33c50 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
33c60 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20    try..         
33c70 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
33c80 20 20 20 20 20 20 43 6f 6e 66 69 67 75 72 61 74        Configurat
33c90 69 6f 6e 20 63 6f 6e 66 69 67 75 72 61 74 69 6f  ion configuratio
33ca0 6e 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20  n = null;..     
33cb0 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
33cc0 67 20 65 72 72 6f 72 20 3d 20 6e 75 6c 6c 3b 0d  g error = null;.
33cd0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
33ce0 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
33cf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33d00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33d10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33d20 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
33d30 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 44 65        #region De
33d40 62 75 67 67 65 72 20 48 6f 6f 6b 0d 0a 20 20 20  bugger Hook..   
33d50 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
33d60 28 45 6e 76 69 72 6f 6e 6d 65 6e 74 2e 47 65 74  (Environment.Get
33d70 45 6e 76 69 72 6f 6e 6d 65 6e 74 56 61 72 69 61  EnvironmentVaria
33d80 62 6c 65 28 22 42 72 65 61 6b 22 29 20 21 3d 20  ble("Break") != 
33d90 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
33da0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
33db0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43 6f                Co
33dc0 6e 73 6f 6c 65 2e 57 72 69 74 65 4c 69 6e 65 28  nsole.WriteLine(
33dd0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
33de0 20 20 20 20 20 20 20 20 20 20 22 41 74 74 61 63            "Attac
33df0 68 20 61 20 64 65 62 75 67 67 65 72 20 74 6f 20  h a debugger to 
33e00 70 72 6f 63 65 73 73 20 7b 30 7d 20 61 6e 64 20  process {0} and 
33e10 22 20 2b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  " +..           
33e20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 70 72               "pr
33e30 65 73 73 20 61 6e 79 20 6b 65 79 20 74 6f 20 63  ess any key to c
33e40 6f 6e 74 69 6e 75 65 2e 22 2c 0d 0a 20 20 20 20  ontinue.",..    
33e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33e60 20 20 20 20 50 72 6f 63 65 73 73 2e 47 65 74 43      Process.GetC
33e70 75 72 72 65 6e 74 50 72 6f 63 65 73 73 28 29 2e  urrentProcess().
33e80 49 64 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  Id);....        
33e90 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79 0d              try.
33ea0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
33eb0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
33ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33ed0 43 6f 6e 73 6f 6c 65 2e 52 65 61 64 4b 65 79 28  Console.ReadKey(
33ee0 74 72 75 65 29 3b 20 2f 2a 20 74 68 72 6f 77 20  true); /* throw 
33ef0 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  */..            
33f00 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
33f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
33f20 61 74 63 68 20 28 49 6e 76 61 6c 69 64 4f 70 65  atch (InvalidOpe
33f30 72 61 74 69 6f 6e 45 78 63 65 70 74 69 6f 6e 29  rationException)
33f40 20 2f 2f 20 43 6f 6e 73 6f 6c 65 2e 52 65 61 64   // Console.Read
33f50 4b 65 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20  Key..           
33f60 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
33f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33f80 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e      // do nothin
33f90 67 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  g...            
33fa0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
33fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33fc0 20 44 65 62 75 67 67 65 72 2e 42 72 65 61 6b 28   Debugger.Break(
33fd0 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
33fe0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
33ff0 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f         #endregio
34000 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n....           
34010 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
34020 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34030 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34040 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34050 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
34060 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20          #region 
34070 43 6f 6d 6d 61 6e 64 20 4c 69 6e 65 20 50 72 6f  Command Line Pro
34080 63 65 73 73 69 6e 67 0d 0a 20 20 20 20 20 20 20  cessing..       
34090 20 20 20 20 20 20 20 20 20 69 66 20 28 21 43 6f           if (!Co
340a0 6e 66 69 67 75 72 61 74 69 6f 6e 2e 46 72 6f 6d  nfiguration.From
340b0 41 72 67 73 28 0d 0a 20 20 20 20 20 20 20 20 20  Args(..         
340c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61                 a
340d0 72 67 73 2c 20 74 72 75 65 2c 20 72 65 66 20 63  rgs, true, ref c
340e0 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2c 20 72 65  onfiguration, re
340f0 66 20 65 72 72 6f 72 29 20 7c 7c 0d 0a 20 20 20  f error) ||..   
34100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34110 20 21 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e   !Configuration.
34120 50 72 6f 63 65 73 73 28 0d 0a 20 20 20 20 20 20  Process(..      
34130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34140 20 20 61 72 67 73 2c 20 63 6f 6e 66 69 67 75 72    args, configur
34150 61 74 69 6f 6e 2c 20 74 72 75 65 2c 20 72 65 66  ation, true, ref
34160 20 65 72 72 6f 72 29 20 7c 7c 0d 0a 20 20 20 20   error) ||..    
34170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34180 21 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 43  !Configuration.C
34190 68 65 63 6b 52 75 6e 74 69 6d 65 56 65 72 73 69  heckRuntimeVersi
341a0 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  on(..           
341b0 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
341c0 66 69 67 75 72 61 74 69 6f 6e 2c 20 74 72 75 65  figuration, true
341d0 2c 20 72 65 66 20 65 72 72 6f 72 29 29 0d 0a 20  , ref error)).. 
341e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
341f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
34200 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 53        TraceOps.S
34210 68 6f 77 4d 65 73 73 61 67 65 28 54 72 61 63 65  howMessage(Trace
34220 50 72 69 6f 72 69 74 79 2e 48 69 67 68 65 73 74  Priority.Highest
34230 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
34240 20 20 20 20 20 20 20 20 20 20 20 64 65 62 75 67             debug
34250 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43  Callback, traceC
34260 61 6c 6c 62 61 63 6b 2c 20 74 68 69 73 41 73 73  allback, thisAss
34270 65 6d 62 6c 79 2c 0d 0a 20 20 20 20 20 20 20 20  embly,..        
34280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34290 65 72 72 6f 72 2c 20 74 72 61 63 65 43 61 74 65  error, traceCate
342a0 67 6f 72 79 2c 20 4d 65 73 73 61 67 65 42 6f 78  gory, MessageBox
342b0 42 75 74 74 6f 6e 73 2e 4f 4b 2c 0d 0a 20 20 20  Buttons.OK,..   
342c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
342d0 20 20 20 20 20 4d 65 73 73 61 67 65 42 6f 78 49       MessageBoxI
342e0 63 6f 6e 2e 45 72 72 6f 72 29 3b 0d 0a 0d 0a 20  con.Error);.... 
342f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34300 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75     TraceOps.Debu
34310 67 41 6e 64 54 72 61 63 65 28 54 72 61 63 65 50  gAndTrace(TraceP
34320 72 69 6f 72 69 74 79 2e 4d 65 64 69 75 6d 48 69  riority.MediumHi
34330 67 68 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  gh,..           
34340 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62               deb
34350 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63  ugCallback, trac
34360 65 43 61 6c 6c 62 61 63 6b 2c 20 22 46 61 69 6c  eCallback, "Fail
34370 75 72 65 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20  ure.",..        
34380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34390 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
343a0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
343b0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 31 3b         return 1;
343c0 20 2f 2a 20 46 41 49 4c 55 52 45 20 2a 2f 0d 0a   /* FAILURE */..
343d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
343e0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
343f0 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
34400 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
34410 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
34420 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34430 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34440 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34450 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
34460 20 20 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52      using (MockR
34470 65 67 69 73 74 72 79 20 72 65 67 69 73 74 72 79  egistry registry
34480 20 3d 20 6e 65 77 20 4d 6f 63 6b 52 65 67 69 73   = new MockRegis
34490 74 72 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20  try(..          
344a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
344b0 6e 66 69 67 75 72 61 74 69 6f 6e 2e 57 68 61 74  nfiguration.What
344c0 49 66 2c 20 66 61 6c 73 65 2c 20 66 61 6c 73 65  If, false, false
344d0 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
344e0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
344f0 20 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69             #regi
34500 6f 6e 20 43 6f 72 65 20 41 73 73 65 6d 62 6c 79  on Core Assembly
34510 20 4e 61 6d 65 20 43 68 65 63 6b 0d 0a 20 20 20   Name Check..   
34520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34530 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
34540 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45           // NOTE
34550 3a 20 44 6f 20 74 68 69 73 20 66 69 72 73 74 2c  : Do this first,
34560 20 62 65 66 6f 72 65 20 6d 61 6b 69 6e 67 20 61   before making a
34570 6e 79 20 63 68 61 6e 67 65 73 20 74 6f 20 74 68  ny changes to th
34580 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..             
34590 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
345a0 73 79 73 74 65 6d 2c 20 62 65 63 61 75 73 65 20  system, because 
345b0 69 74 20 77 69 6c 6c 20 74 68 72 6f 77 20 61 6e  it will throw an
345c0 20 65 78 63 65 70 74 69 6f 6e 20 69 66 20 74 68   exception if th
345d0 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..             
345e0 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
345f0 66 69 6c 65 20 6e 61 6d 65 20 64 6f 65 73 20 6e  file name does n
34600 6f 74 20 72 65 70 72 65 73 65 6e 74 20 61 20 76  ot represent a v
34610 61 6c 69 64 20 6d 61 6e 61 67 65 64 0d 0a 20 20  alid managed..  
34620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34630 20 20 2f 2f 20 20 20 20 20 20 20 61 73 73 65 6d    //       assem
34640 62 6c 79 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  bly...          
34650 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
34660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34670 20 20 41 73 73 65 6d 62 6c 79 4e 61 6d 65 20 63    AssemblyName c
34680 6f 72 65 41 73 73 65 6d 62 6c 79 4e 61 6d 65 20  oreAssemblyName 
34690 3d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  =..             
346a0 20 20 20 20 20 20 20 20 20 20 20 41 73 73 65 6d             Assem
346b0 62 6c 79 4e 61 6d 65 2e 47 65 74 41 73 73 65 6d  blyName.GetAssem
346c0 62 6c 79 4e 61 6d 65 28 0d 0a 20 20 20 20 20 20  blyName(..      
346d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
346e0 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74        configurat
346f0 69 6f 6e 2e 43 6f 72 65 46 69 6c 65 4e 61 6d 65  ion.CoreFileName
34700 29 3b 20 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a  ); /* throw */..
34710 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
34720 20 20 20 20 20 20 41 73 73 65 6d 62 6c 79 4e 61        AssemblyNa
34730 6d 65 20 64 65 73 69 67 6e 65 72 41 73 73 65 6d  me designerAssem
34740 62 6c 79 4e 61 6d 65 20 3d 0d 0a 20 20 20 20 20  blyName =..     
34750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34760 20 20 20 41 73 73 65 6d 62 6c 79 4e 61 6d 65 2e     AssemblyName.
34770 47 65 74 41 73 73 65 6d 62 6c 79 4e 61 6d 65 28  GetAssemblyName(
34780 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
34790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
347a0 6e 66 69 67 75 72 61 74 69 6f 6e 2e 44 65 73 69  nfiguration.Desi
347b0 67 6e 65 72 46 69 6c 65 4e 61 6d 65 29 3b 20 2f  gnerFileName); /
347c0 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a 20 20 20 20  * throw */..    
347d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
347e0 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20  #endregion....  
347f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34800 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
34810 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34820 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34830 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
34840 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
34850 20 20 20 20 20 23 72 65 67 69 6f 6e 20 53 79 73       #region Sys
34860 74 65 6d 20 44 69 72 65 63 74 6f 72 79 20 43 68  tem Directory Ch
34870 65 63 6b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  eck..           
34880 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
34890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
348a0 20 2f 2f 20 4e 4f 54 45 3a 20 47 65 74 74 69 6e   // NOTE: Gettin
348b0 67 20 74 68 65 20 73 79 73 74 65 6d 20 64 69 72  g the system dir
348c0 65 63 74 6f 72 79 20 76 61 6c 75 65 20 68 65 72  ectory value her
348d0 65 20 73 65 72 76 65 73 0d 0a 20 20 20 20 20 20  e serves..      
348e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
348f0 20 20 20 20 20 20 20 74 77 6f 20 70 75 72 70 6f         two purpo
34900 73 65 73 3a 0d 0a 20 20 20 20 20 20 20 20 20 20  ses:..          
34910 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
34920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34930 20 20 2f 2f 20 20 20 20 20 20 20 31 2e 20 49 74    //       1. It
34940 20 65 6e 61 62 6c 65 73 20 75 73 20 74 6f 20 6c   enables us to l
34950 6f 67 20 74 68 65 20 73 79 73 74 65 6d 20 64 69  og the system di
34960 72 65 63 74 6f 72 79 0d 0a 20 20 20 20 20 20 20  rectory..       
34970 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
34980 20 20 20 20 20 20 20 20 20 76 61 6c 75 65 20 76           value v
34990 65 72 79 20 65 61 72 6c 79 20 69 6e 20 74 68 65  ery early in the
349a0 20 69 6e 73 74 61 6c 6c 61 74 69 6f 6e 20 70 72   installation pr
349b0 6f 63 65 73 73 0d 0a 20 20 20 20 20 20 20 20 20  ocess..         
349c0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
349d0 20 20 20 20 20 20 20 28 69 2e 65 2e 20 65 76 65         (i.e. eve
349e0 6e 20 74 68 6f 75 67 68 20 74 68 65 20 76 61 6c  n though the val
349f0 75 65 20 69 74 73 65 6c 66 20 69 73 20 6e 6f 74  ue itself is not
34a00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
34a10 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 20        //        
34a20 20 20 6e 65 65 64 65 64 20 75 6e 74 69 6c 20 6d    needed until m
34a30 75 63 68 20 6c 61 74 65 72 29 2e 0d 0a 20 20 20  uch later)...   
34a40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34a50 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
34a60 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
34a70 20 20 32 2e 20 53 69 6e 63 65 20 74 68 65 20 76    2. Since the v
34a80 61 6c 75 65 20 69 73 20 63 61 63 68 65 64 2c 20  alue is cached, 
34a90 69 74 20 70 72 65 76 65 6e 74 73 20 61 6e 0d 0a  it prevents an..
34aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34ab0 20 20 20 20 2f 2f 20 20 20 20 20 20 20 20 20 20      //          
34ac0 65 78 63 65 70 74 69 6f 6e 20 66 72 6f 6d 20 62  exception from b
34ad0 65 69 6e 67 20 74 68 72 6f 77 6e 20 6d 75 63 68  eing thrown much
34ae0 20 6c 61 74 65 72 20 64 75 72 69 6e 67 0d 0a 20   later during.. 
34af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34b00 20 20 20 2f 2f 20 20 20 20 20 20 20 20 20 20 74     //          t
34b10 68 65 20 69 6e 73 74 61 6c 6c 20 77 68 65 6e 20  he install when 
34b20 74 68 65 20 76 61 6c 75 65 20 69 73 20 71 75 65  the value is que
34b30 72 69 65 64 20 61 67 61 69 6e 0d 0a 20 20 20 20  ried again..    
34b40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34b50 2f 2f 20 20 20 20 20 20 20 20 20 20 28 69 2e 65  //          (i.e
34b60 2e 20 77 69 74 68 20 74 68 65 20 73 61 6d 65 20  . with the same 
34b70 76 61 6c 75 65 20 66 6f 72 20 74 68 65 20 22 77  value for the "w
34b80 6f 77 36 34 22 0d 0a 20 20 20 20 20 20 20 20 20  ow64"..         
34b90 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
34ba0 20 20 20 20 20 20 20 70 61 72 61 6d 65 74 65 72         parameter
34bb0 29 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  )...            
34bc0 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
34bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34be0 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e  TraceOps.DebugAn
34bf0 64 54 72 61 63 65 28 54 72 61 63 65 50 72 69 6f  dTrace(TracePrio
34c00 72 69 74 79 2e 4d 65 64 69 75 6d 4c 6f 77 2c 0d  rity.MediumLow,.
34c10 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
34c20 20 20 20 20 20 20 20 20 20 64 65 62 75 67 43 61           debugCa
34c30 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c  llback, traceCal
34c40 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f  lback, String.Fo
34c50 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
34c60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
34c70 53 79 73 74 65 6d 20 64 69 72 65 63 74 6f 72 79  System directory
34c80 20 69 73 20 7b 30 7d 2e 22 2c 20 46 6f 72 44 69   is {0}.", ForDi
34c90 73 70 6c 61 79 28 0d 0a 20 20 20 20 20 20 20 20  splay(..        
34ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34cb0 47 65 74 53 79 73 74 65 6d 44 69 72 65 63 74 6f  GetSystemDirecto
34cc0 72 79 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  ry(configuration
34cd0 2e 57 6f 77 36 34 29 29 29 2c 0d 0a 20 20 20 20  .Wow64))),..    
34ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34cf0 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72      traceCategor
34d00 79 29 3b 20 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d  y); /* throw */.
34d10 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
34d20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d       #endregion.
34d30 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
34d40 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
34d50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
34d90 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f            #regio
34da0 6e 20 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b  n .NET Framework
34db0 20 2f 20 56 69 73 75 61 6c 20 53 74 75 64 69 6f   / Visual Studio
34dc0 20 44 61 74 61 0d 0a 20 20 20 20 20 20 20 20 20   Data..         
34dd0 20 20 20 20 20 20 20 20 20 20 20 50 61 63 6b 61             Packa
34de0 67 65 20 70 61 63 6b 61 67 65 20 3d 20 6e 75 6c  ge package = nul
34df0 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l;..            
34e00 20 20 20 20 20 20 20 20 46 72 61 6d 65 77 6f 72          Framewor
34e10 6b 4c 69 73 74 20 66 72 61 6d 65 77 6f 72 6b 4c  kList frameworkL
34e20 69 73 74 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20  ist = null;..   
34e30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34e40 20 56 73 4c 69 73 74 20 76 73 4c 69 73 74 20 3d   VsList vsList =
34e50 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20   null;....      
34e60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
34e70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34e80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34e90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34ea0 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
34eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34ec0 20 49 6e 69 74 69 61 6c 69 7a 65 56 73 50 61 63   InitializeVsPac
34ed0 6b 61 67 65 28 64 65 73 69 67 6e 65 72 41 73 73  kage(designerAss
34ee0 65 6d 62 6c 79 4e 61 6d 65 2c 0d 0a 20 20 20 20  emblyName,..    
34ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34f00 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f      configuratio
34f10 6e 2e 48 61 73 46 6c 61 67 73 28 0d 0a 20 20 20  n.HasFlags(..   
34f20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34f30 20 20 20 20 20 20 20 20 20 49 6e 73 74 61 6c 6c           Install
34f40 46 6c 61 67 73 2e 47 6c 6f 62 61 6c 41 73 73 65  Flags.GlobalAsse
34f50 6d 62 6c 79 43 61 63 68 65 2c 20 74 72 75 65 29  mblyCache, true)
34f60 20 26 26 0d 0a 20 20 20 20 20 20 20 20 20 20 20   &&..           
34f70 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
34f80 66 69 67 75 72 61 74 69 6f 6e 2e 48 61 73 46 6c  figuration.HasFl
34f90 61 67 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ags(..          
34fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34fb0 20 20 49 6e 73 74 61 6c 6c 46 6c 61 67 73 2e 56    InstallFlags.V
34fc0 73 50 61 63 6b 61 67 65 47 6c 6f 62 61 6c 41 73  sPackageGlobalAs
34fd0 73 65 6d 62 6c 79 43 61 63 68 65 2c 20 74 72 75  semblyCache, tru
34fe0 65 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e),..           
34ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66               ref
35000 20 70 61 63 6b 61 67 65 29 3b 0d 0a 0d 0a 20 20   package);....  
35010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35020 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
35030 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35040 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35050 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
35060 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
35070 20 20 20 20 20 49 6e 69 74 69 61 6c 69 7a 65 46       InitializeF
35080 72 61 6d 65 77 6f 72 6b 4c 69 73 74 28 63 6f 6e  rameworkList(con
35090 66 69 67 75 72 61 74 69 6f 6e 2e 50 65 72 55 73  figuration.PerUs
350a0 65 72 20 3f 0d 0a 20 20 20 20 20 20 20 20 20 20  er ?..          
350b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
350c0 67 69 73 74 72 79 2e 43 75 72 72 65 6e 74 55 73  gistry.CurrentUs
350d0 65 72 20 3a 20 72 65 67 69 73 74 72 79 2e 4c 6f  er : registry.Lo
350e0 63 61 6c 4d 61 63 68 69 6e 65 2c 0d 0a 20 20 20  calMachine,..   
350f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35100 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69       configurati
35110 6f 6e 2c 20 72 65 66 20 66 72 61 6d 65 77 6f 72  on, ref framewor
35120 6b 4c 69 73 74 29 3b 0d 0a 0d 0a 20 20 20 20 20  kList);....     
35130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 49                 I
35140 6e 69 74 69 61 6c 69 7a 65 56 73 4c 69 73 74 28  nitializeVsList(
35150 72 65 67 69 73 74 72 79 2e 4c 6f 63 61 6c 4d 61  registry.LocalMa
35160 63 68 69 6e 65 2c 20 63 6f 6e 66 69 67 75 72 61  chine, configura
35170 74 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20  tion,..         
35180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
35190 65 66 20 76 73 4c 69 73 74 29 3b 0d 0a 20 20 20  ef vsList);..   
351a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
351b0 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20   #endregion.... 
351c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
351d0 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
351e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
351f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35200 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
35210 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
35220 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 53 68        #region Sh
35230 61 72 65 64 20 43 6c 69 65 6e 74 20 44 61 74 61  ared Client Data
35240 20 43 72 65 61 74 69 6f 6e 0d 0a 20 20 20 20 20   Creation..     
35250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6f                 o
35260 62 6a 65 63 74 20 64 69 72 65 63 74 6f 72 79 44  bject directoryD
35270 61 74 61 20 3d 20 6e 65 77 20 41 6e 79 50 61 69  ata = new AnyPai
35280 72 3c 73 74 72 69 6e 67 2c 20 62 6f 6f 6c 3e 28  r<string, bool>(
35290 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
352a0 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67            config
352b0 75 72 61 74 69 6f 6e 2e 44 69 72 65 63 74 6f 72  uration.Director
352c0 79 2c 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  y, configuration
352d0 2e 49 6e 73 74 61 6c 6c 29 3b 0d 0a 0d 0a 20 20  .Install);....  
352e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
352f0 20 20 6f 62 6a 65 63 74 20 66 69 6c 65 4e 61 6d    object fileNam
35300 65 44 61 74 61 20 3d 20 6e 65 77 20 41 6e 79 50  eData = new AnyP
35310 61 69 72 3c 73 74 72 69 6e 67 2c 20 62 6f 6f 6c  air<string, bool
35320 3e 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  >(..            
35330 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66              conf
35340 69 67 75 72 61 74 69 6f 6e 2e 44 65 73 69 67 6e  iguration.Design
35350 65 72 46 69 6c 65 4e 61 6d 65 2c 20 63 6f 6e 66  erFileName, conf
35360 69 67 75 72 61 74 69 6f 6e 2e 49 6e 73 74 61 6c  iguration.Instal
35370 6c 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  l);..           
35380 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67           #endreg
35390 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ion....         
353a0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
353b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
353c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
353d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
353e0 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
353f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 72                #r
35400 65 67 69 6f 6e 20 2e 4e 45 54 20 47 41 43 20 49  egion .NET GAC I
35410 6e 73 74 61 6c 6c 2f 52 65 6d 6f 76 65 0d 0a 20  nstall/Remove.. 
35420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35430 20 20 20 69 66 20 28 63 6f 6e 66 69 67 75 72 61     if (configura
35440 74 69 6f 6e 2e 48 61 73 46 6c 61 67 73 28 0d 0a  tion.HasFlags(..
35450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35460 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 73 74              Inst
35470 61 6c 6c 46 6c 61 67 73 2e 47 6c 6f 62 61 6c 41  allFlags.GlobalA
35480 73 73 65 6d 62 6c 79 43 61 63 68 65 2c 20 74 72  ssemblyCache, tr
35490 75 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ue))..          
354a0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
354b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
354c0 20 20 20 20 20 50 75 62 6c 69 73 68 20 70 75 62       Publish pub
354d0 6c 69 73 68 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a  lish = null;....
354e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
354f0 20 20 20 20 20 20 20 20 69 66 20 28 21 63 6f 6e          if (!con
35500 66 69 67 75 72 61 74 69 6f 6e 2e 57 68 61 74 49  figuration.WhatI
35510 66 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  f)..            
35520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35530 70 75 62 6c 69 73 68 20 3d 20 6e 65 77 20 50 75  publish = new Pu
35540 62 6c 69 73 68 28 29 3b 0d 0a 0d 0a 20 20 20 20  blish();....    
35550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35560 20 20 20 20 69 66 20 28 63 6f 6e 66 69 67 75 72      if (configur
35570 61 74 69 6f 6e 2e 49 6e 73 74 61 6c 6c 29 0d 0a  ation.Install)..
35580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35590 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
355a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
355b0 20 20 20 20 20 20 20 69 66 20 28 21 63 6f 6e 66         if (!conf
355c0 69 67 75 72 61 74 69 6f 6e 2e 57 68 61 74 49 66  iguration.WhatIf
355d0 29 0d 0a 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 20 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a     /* throw */..
35600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35620 70 75 62 6c 69 73 68 2e 47 61 63 49 6e 73 74 61  publish.GacInsta
35630 6c 6c 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  ll(configuration
35640 2e 43 6f 72 65 46 69 6c 65 4e 61 6d 65 29 3b 0d  .CoreFileName);.
35650 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
35660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
35670 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64  raceOps.DebugAnd
35680 54 72 61 63 65 28 54 72 61 63 65 50 72 69 6f 72  Trace(TracePrior
35690 69 74 79 2e 48 69 67 68 65 73 74 2c 0d 0a 20 20  ity.Highest,..  
356a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
356b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65                de
356c0 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61  bugCallback, tra
356d0 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69  ceCallback, Stri
356e0 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ng.Format(..    
356f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35700 20 20 20 20 20 20 20 20 20 20 20 20 22 47 61 63              "Gac
35710 49 6e 73 74 61 6c 6c 3a 20 61 73 73 65 6d 62 6c  Install: assembl
35720 79 50 61 74 68 20 3d 20 7b 30 7d 22 2c 0d 0a 20  yPath = {0}",.. 
35730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46                 F
35750 6f 72 44 69 73 70 6c 61 79 28 63 6f 6e 66 69 67  orDisplay(config
35760 75 72 61 74 69 6f 6e 2e 43 6f 72 65 46 69 6c 65  uration.CoreFile
35770 4e 61 6d 65 29 29 2c 0d 0a 20 20 20 20 20 20 20  Name)),..       
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 20 20 74 72 61 63 65 43 61           traceCa
357a0 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
357b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
357c0 20 20 20 20 20 20 20 20 69 66 20 28 21 63 6f 6e          if (!con
357d0 66 69 67 75 72 61 74 69 6f 6e 2e 57 68 61 74 49  figuration.WhatI
357e0 66 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  f)..            
357f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35800 20 20 20 20 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d      /* throw */.
35810 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
35820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35830 20 70 75 62 6c 69 73 68 2e 47 61 63 49 6e 73 74   publish.GacInst
35840 61 6c 6c 28 63 6f 6e 66 69 67 75 72 61 74 69 6f  all(configuratio
35850 6e 2e 4c 69 6e 71 46 69 6c 65 4e 61 6d 65 29 3b  n.LinqFileName);
35860 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
35870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35880 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e  TraceOps.DebugAn
35890 64 54 72 61 63 65 28 54 72 61 63 65 50 72 69 6f  dTrace(TracePrio
358a0 72 69 74 79 2e 48 69 67 68 65 73 74 2c 0d 0a 20  rity.Highest,.. 
358b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
358c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
358d0 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72  ebugCallback, tr
358e0 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72  aceCallback, Str
358f0 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
35900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35910 20 20 20 20 20 20 20 20 20 20 20 20 20 22 47 61               "Ga
35920 63 49 6e 73 74 61 6c 6c 3a 20 61 73 73 65 6d 62  cInstall: assemb
35930 6c 79 50 61 74 68 20 3d 20 7b 30 7d 22 2c 0d 0a  lyPath = {0}",..
35940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35960 46 6f 72 44 69 73 70 6c 61 79 28 63 6f 6e 66 69  ForDisplay(confi
35970 67 75 72 61 74 69 6f 6e 2e 4c 69 6e 71 46 69 6c  guration.LinqFil
35980 65 4e 61 6d 65 29 29 2c 0d 0a 20 20 20 20 20 20  eName)),..      
35990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
359a0 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
359b0 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20  ategory);....   
359c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
359d0 20 20 20 20 20 20 20 20 20 69 66 20 28 63 6f 6e           if (con
359e0 66 69 67 75 72 61 74 69 6f 6e 2e 48 61 73 46 6c  figuration.HasFl
359f0 61 67 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ags(..          
35a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35a10 20 20 20 20 20 20 20 20 20 20 49 6e 73 74 61 6c            Instal
35a20 6c 46 6c 61 67 73 2e 56 73 50 61 63 6b 61 67 65  lFlags.VsPackage
35a30 47 6c 6f 62 61 6c 41 73 73 65 6d 62 6c 79 43 61  GlobalAssemblyCa
35a40 63 68 65 2c 20 74 72 75 65 29 29 0d 0a 20 20 20  che, true))..   
35a50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35a60 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
35a70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35a80 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
35a90 21 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 57  !configuration.W
35aa0 68 61 74 49 66 29 0d 0a 20 20 20 20 20 20 20 20  hatIf)..        
35ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35ac0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 74              /* t
35ad0 68 72 6f 77 20 2a 2f 0d 0a 20 20 20 20 20 20 20  hrow */..       
35ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35af0 20 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62               pub
35b00 6c 69 73 68 2e 47 61 63 49 6e 73 74 61 6c 6c 28  lish.GacInstall(
35b10 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 44 65  configuration.De
35b20 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 29 3b  signerFileName);
35b30 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
35b40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35b50 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62      TraceOps.Deb
35b60 75 67 41 6e 64 54 72 61 63 65 28 54 72 61 63 65  ugAndTrace(Trace
35b70 50 72 69 6f 72 69 74 79 2e 48 69 67 68 65 73 74  Priority.Highest
35b80 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
35b90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35ba0 20 20 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c         debugCall
35bb0 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62  back, traceCallb
35bc0 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d  ack, String.Form
35bd0 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
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 20 22 47 61 63 49 6e 73           "GacIns
35c00 74 61 6c 6c 3a 20 61 73 73 65 6d 62 6c 79 50 61  tall: assemblyPa
35c10 74 68 20 3d 20 7b 30 7d 22 2c 0d 0a 20 20 20 20  th = {0}",..    
35c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35c30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35c40 46 6f 72 44 69 73 70 6c 61 79 28 63 6f 6e 66 69  ForDisplay(confi
35c50 67 75 72 61 74 69 6f 6e 2e 44 65 73 69 67 6e 65  guration.Designe
35c60 72 46 69 6c 65 4e 61 6d 65 29 29 2c 0d 0a 20 20  rFileName)),..  
35c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35c90 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29    traceCategory)
35ca0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
35cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
35cc0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
35cd0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
35ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35cf0 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20       else..     
35d00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35d10 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
35d20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35d30 20 20 69 66 20 28 63 6f 6e 66 69 67 75 72 61 74    if (configurat
35d40 69 6f 6e 2e 48 61 73 46 6c 61 67 73 28 0d 0a 20  ion.HasFlags(.. 
35d50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35d60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35d70 20 20 20 49 6e 73 74 61 6c 6c 46 6c 61 67 73 2e     InstallFlags.
35d80 56 73 50 61 63 6b 61 67 65 47 6c 6f 62 61 6c 41  VsPackageGlobalA
35d90 73 73 65 6d 62 6c 79 43 61 63 68 65 2c 20 74 72  ssemblyCache, tr
35da0 75 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ue))..          
35db0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35dc0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
35dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35de0 20 20 20 20 20 69 66 20 28 21 63 6f 6e 66 69 67       if (!config
35df0 75 72 61 74 69 6f 6e 2e 57 68 61 74 49 66 29 0d  uration.WhatIf).
35e00 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
35e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35e20 20 20 20 20 20 2f 2a 20 74 68 72 6f 77 20 2a 2f       /* throw */
35e30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
35e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35e50 20 20 20 20 20 20 70 75 62 6c 69 73 68 2e 47 61        publish.Ga
35e60 63 52 65 6d 6f 76 65 28 63 6f 6e 66 69 67 75 72  cRemove(configur
35e70 61 74 69 6f 6e 2e 44 65 73 69 67 6e 65 72 46 69  ation.DesignerFi
35e80 6c 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20  leName);....    
35e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35ea0 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
35eb0 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61  eOps.DebugAndTra
35ec0 63 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 79  ce(TracePriority
35ed0 2e 48 69 67 68 65 73 74 2c 0d 0a 20 20 20 20 20  .Highest,..     
35ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
35f00 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72  ebugCallback, tr
35f10 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72  aceCallback, Str
35f20 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
35f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35f40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35f50 20 22 47 61 63 52 65 6d 6f 76 65 3a 20 61 73 73   "GacRemove: ass
35f60 65 6d 62 6c 79 50 61 74 68 20 3d 20 7b 30 7d 22  emblyPath = {0}"
35f70 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
35f80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35f90 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61         ForDispla
35fa0 79 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e  y(configuration.
35fb0 44 65 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65  DesignerFileName
35fc0 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  )),..           
35fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35fe0 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
35ff0 74 65 67 6f 72 79 29 3b 0d 0a 20 20 20 20 20 20  tegory);..      
36000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36010 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
36020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36030 20 20 20 20 20 20 20 69 66 20 28 21 63 6f 6e 66         if (!conf
36040 69 67 75 72 61 74 69 6f 6e 2e 57 68 61 74 49 66  iguration.WhatIf
36050 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
36060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36070 20 20 20 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a     /* throw */..
36080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
360a0 70 75 62 6c 69 73 68 2e 47 61 63 52 65 6d 6f 76  publish.GacRemov
360b0 65 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e  e(configuration.
360c0 4c 69 6e 71 46 69 6c 65 4e 61 6d 65 29 3b 0d 0a  LinqFileName);..
360d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
360e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
360f0 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54  aceOps.DebugAndT
36100 72 61 63 65 28 54 72 61 63 65 50 72 69 6f 72 69  race(TracePriori
36110 74 79 2e 48 69 67 68 65 73 74 2c 0d 0a 20 20 20  ty.Highest,..   
36120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36130 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62               deb
36140 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63  ugCallback, trac
36150 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e  eCallback, Strin
36160 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
36170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36180 20 20 20 20 20 20 20 20 20 20 20 22 47 61 63 52             "GacR
36190 65 6d 6f 76 65 3a 20 61 73 73 65 6d 62 6c 79 50  emove: assemblyP
361a0 61 74 68 20 3d 20 7b 30 7d 22 2c 0d 0a 20 20 20  ath = {0}",..   
361b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
361c0 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72               For
361d0 44 69 73 70 6c 61 79 28 63 6f 6e 66 69 67 75 72  Display(configur
361e0 61 74 69 6f 6e 2e 4c 69 6e 71 46 69 6c 65 4e 61  ation.LinqFileNa
361f0 6d 65 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  me)),..         
36200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36210 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65         traceCate
36220 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
36230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36240 20 20 20 20 20 20 69 66 20 28 21 63 6f 6e 66 69        if (!confi
36250 67 75 72 61 74 69 6f 6e 2e 57 68 61 74 49 66 29  guration.WhatIf)
36260 0d 0a 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 20 20 20 20                  
36280 20 20 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a 20    /* throw */.. 
36290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
362a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70                 p
362b0 75 62 6c 69 73 68 2e 47 61 63 52 65 6d 6f 76 65  ublish.GacRemove
362c0 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 43  (configuration.C
362d0 6f 72 65 46 69 6c 65 4e 61 6d 65 29 3b 0d 0a 0d  oreFileName);...
362e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
362f0 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61               Tra
36300 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72  ceOps.DebugAndTr
36310 61 63 65 28 54 72 61 63 65 50 72 69 6f 72 69 74  ace(TracePriorit
36320 79 2e 48 69 67 68 65 73 74 2c 0d 0a 20 20 20 20  y.Highest,..    
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 20 20 20 20 64 65 62 75              debu
36350 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65  gCallback, trace
36360 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67  Callback, String
36370 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  .Format(..      
36380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36390 20 20 20 20 20 20 20 20 20 20 22 47 61 63 52 65            "GacRe
363a0 6d 6f 76 65 3a 20 61 73 73 65 6d 62 6c 79 50 61  move: assemblyPa
363b0 74 68 20 3d 20 7b 30 7d 22 2c 0d 0a 20 20 20 20  th = {0}",..    
363c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
363d0 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44              ForD
363e0 69 73 70 6c 61 79 28 63 6f 6e 66 69 67 75 72 61  isplay(configura
363f0 74 69 6f 6e 2e 43 6f 72 65 46 69 6c 65 4e 61 6d  tion.CoreFileNam
36400 65 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  e)),..          
36410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36420 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67        traceCateg
36430 6f 72 79 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ory);..         
36440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
36450 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
36460 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
36470 20 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e               #en
36480 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
36490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
364a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
364b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
364c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
364d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
364e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
364f0 20 20 23 72 65 67 69 6f 6e 20 2e 4e 45 54 20 41    #region .NET A
36500 73 73 65 6d 62 6c 79 46 6f 6c 64 65 72 73 0d 0a  ssemblyFolders..
36510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36520 20 20 20 20 69 66 20 28 63 6f 6e 66 69 67 75 72      if (configur
36530 61 74 69 6f 6e 2e 48 61 73 46 6c 61 67 73 28 0d  ation.HasFlags(.
36540 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
36550 20 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 73               Ins
36560 74 61 6c 6c 46 6c 61 67 73 2e 41 73 73 65 6d 62  tallFlags.Assemb
36570 6c 79 46 6f 6c 64 65 72 73 2c 20 74 72 75 65 29  lyFolders, true)
36580 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
36590 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
365a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
365b0 20 20 69 66 20 28 21 46 6f 72 45 61 63 68 46 72    if (!ForEachFr
365c0 61 6d 65 77 6f 72 6b 52 65 67 69 73 74 72 79 28  ameworkRegistry(
365d0 72 65 67 69 73 74 72 79 2c 0d 0a 20 20 20 20 20  registry,..     
365e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
365f0 20 20 20 20 20 20 20 20 20 20 20 66 72 61 6d 65             frame
36600 77 6f 72 6b 4c 69 73 74 2c 20 50 72 6f 63 65 73  workList, Proces
36610 73 41 73 73 65 6d 62 6c 79 46 6f 6c 64 65 72 73  sAssemblyFolders
36620 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
36630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36640 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e     configuration
36650 2e 52 65 67 69 73 74 72 79 56 65 72 73 69 6f 6e  .RegistryVersion
36660 2c 20 64 69 72 65 63 74 6f 72 79 44 61 74 61 2c  , directoryData,
36670 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
36680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36690 20 20 4e 65 74 46 78 49 73 33 32 42 69 74 4f 6e    NetFxIs32BitOn
366a0 6c 79 20 7c 7c 20 63 6f 6e 66 69 67 75 72 61 74  ly || configurat
366b0 69 6f 6e 2e 57 6f 77 36 34 2c 0d 0a 20 20 20 20  ion.Wow64,..    
366c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
366d0 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66              conf
366e0 69 67 75 72 61 74 69 6f 6e 2e 54 68 72 6f 77 4f  iguration.ThrowO
366f0 6e 4d 69 73 73 69 6e 67 2c 0d 0a 20 20 20 20 20  nMissing,..     
36700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36710 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69             confi
36720 67 75 72 61 74 69 6f 6e 2e 57 68 61 74 49 66 2c  guration.WhatIf,
36730 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 56   configuration.V
36740 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20  erbose,..       
36750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36760 20 20 20 20 20 20 20 20 20 72 65 66 20 65 72 72           ref err
36770 6f 72 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  or))..          
36780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
36790 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
367a0 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61               Tra
367b0 63 65 4f 70 73 2e 53 68 6f 77 4d 65 73 73 61 67  ceOps.ShowMessag
367c0 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e  e(TracePriority.
367d0 48 69 67 68 65 73 74 2c 0d 0a 20 20 20 20 20 20  Highest,..      
367e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
367f0 20 20 20 20 20 20 20 20 20 20 64 65 62 75 67 43            debugC
36800 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61  allback, traceCa
36810 6c 6c 62 61 63 6b 2c 20 74 68 69 73 41 73 73 65  llback, thisAsse
36820 6d 62 6c 79 2c 0d 0a 20 20 20 20 20 20 20 20 20  mbly,..         
36830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36840 20 20 20 20 20 20 20 65 72 72 6f 72 2c 20 74 72         error, tr
36850 61 63 65 43 61 74 65 67 6f 72 79 2c 20 4d 65 73  aceCategory, Mes
36860 73 61 67 65 42 6f 78 42 75 74 74 6f 6e 73 2e 4f  sageBoxButtons.O
36870 4b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  K,..            
36880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36890 20 20 20 20 4d 65 73 73 61 67 65 42 6f 78 49 63      MessageBoxIc
368a0 6f 6e 2e 45 72 72 6f 72 29 3b 0d 0a 0d 0a 20 20  on.Error);....  
368b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
368c0 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f            TraceO
368d0 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65  ps.DebugAndTrace
368e0 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4d  (TracePriority.M
368f0 65 64 69 75 6d 48 69 67 68 2c 0d 0a 20 20 20 20  ediumHigh,..    
36900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36910 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62 75              debu
36920 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65  gCallback, trace
36930 43 61 6c 6c 62 61 63 6b 2c 20 22 46 61 69 6c 75  Callback, "Failu
36940 72 65 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  re.",..         
36950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36960 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65         traceCate
36970 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
36980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36990 20 20 20 20 20 20 72 65 74 75 72 6e 20 31 3b 20        return 1; 
369a0 2f 2a 20 46 41 49 4c 55 52 45 20 2a 2f 0d 0a 20  /* FAILURE */.. 
369b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
369c0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
369d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
369e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
369f0 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d       #endregion.
36a00 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
36a10 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36a50 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
36a60 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f            #regio
36a70 6e 20 2e 4e 45 54 20 44 62 50 72 6f 76 69 64 65  n .NET DbProvide
36a80 72 46 61 63 74 6f 72 79 0d 0a 20 20 20 20 20 20  rFactory..      
36a90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
36aa0 20 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e   (configuration.
36ab0 48 61 73 46 6c 61 67 73 28 0d 0a 20 20 20 20 20  HasFlags(..     
36ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36ad0 20 20 20 20 20 20 20 49 6e 73 74 61 6c 6c 46 6c         InstallFl
36ae0 61 67 73 2e 44 62 50 72 6f 76 69 64 65 72 46 61  ags.DbProviderFa
36af0 63 74 6f 72 79 2c 20 74 72 75 65 29 29 0d 0a 20  ctory, true)).. 
36b00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36b10 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
36b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f                bo
36b30 6f 6c 20 73 61 76 65 64 20 3d 20 66 61 6c 73 65  ol saved = false
36b40 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
36b50 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
36b60 28 21 46 6f 72 45 61 63 68 46 72 61 6d 65 77 6f  (!ForEachFramewo
36b70 72 6b 43 6f 6e 66 69 67 28 72 65 67 69 73 74 72  rkConfig(registr
36b80 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y,..            
36b90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36ba0 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73      frameworkLis
36bb0 74 2c 20 50 72 6f 63 65 73 73 44 62 50 72 6f 76  t, ProcessDbProv
36bc0 69 64 65 72 46 61 63 74 6f 72 79 2c 0d 0a 20 20  iderFactory,..  
36bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36be0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
36bf0 6e 66 69 67 75 72 61 74 69 6f 6e 2e 43 6f 6e 66  nfiguration.Conf
36c00 69 67 56 65 72 73 69 6f 6e 2c 20 49 6e 76 61 72  igVersion, Invar
36c10 69 61 6e 74 4e 61 6d 65 2c 0d 0a 20 20 20 20 20  iantName,..     
36c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36c30 20 20 20 20 20 20 20 20 20 20 20 50 72 6f 76 69             Provi
36c40 64 65 72 4e 61 6d 65 2c 20 44 65 73 63 72 69 70  derName, Descrip
36c50 74 69 6f 6e 2c 20 46 61 63 74 6f 72 79 54 79 70  tion, FactoryTyp
36c60 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20  eName,..        
36c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36c80 20 20 20 20 20 20 20 20 63 6f 72 65 41 73 73 65          coreAsse
36c90 6d 62 6c 79 4e 61 6d 65 2c 20 64 69 72 65 63 74  mblyName, direct
36ca0 6f 72 79 44 61 74 61 2c 0d 0a 20 20 20 20 20 20  oryData,..      
36cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36cc0 20 20 20 20 20 20 20 20 20 20 4e 65 74 46 78 49            NetFxI
36cd0 73 33 32 42 69 74 4f 6e 6c 79 20 7c 7c 20 63 6f  s32BitOnly || co
36ce0 6e 66 69 67 75 72 61 74 69 6f 6e 2e 57 6f 77 36  nfiguration.Wow6
36cf0 34 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  4,..            
36d00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36d10 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f      configuratio
36d20 6e 2e 54 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67  n.ThrowOnMissing
36d30 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
36d40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36d50 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e     configuration
36d60 2e 57 68 61 74 49 66 2c 20 63 6f 6e 66 69 67 75  .WhatIf, configu
36d70 72 61 74 69 6f 6e 2e 56 65 72 62 6f 73 65 2c 0d  ration.Verbose,.
36d80 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
36d90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36da0 20 72 65 66 20 73 61 76 65 64 2c 20 72 65 66 20   ref saved, ref 
36db0 65 72 72 6f 72 29 29 0d 0a 20 20 20 20 20 20 20  error))..       
36dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36dd0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
36de0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36df0 54 72 61 63 65 4f 70 73 2e 53 68 6f 77 4d 65 73  TraceOps.ShowMes
36e00 73 61 67 65 28 54 72 61 63 65 50 72 69 6f 72 69  sage(TracePriori
36e10 74 79 2e 48 69 67 68 65 73 74 2c 0d 0a 20 20 20  ty.Highest,..   
36e20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36e30 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62               deb
36e40 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63  ugCallback, trac
36e50 65 43 61 6c 6c 62 61 63 6b 2c 20 74 68 69 73 41  eCallback, thisA
36e60 73 73 65 6d 62 6c 79 2c 0d 0a 20 20 20 20 20 20  ssembly,..      
36e70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36e80 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 2c            error,
36e90 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 2c 20   traceCategory, 
36ea0 4d 65 73 73 61 67 65 42 6f 78 42 75 74 74 6f 6e  MessageBoxButton
36eb0 73 2e 4f 4b 2c 0d 0a 20 20 20 20 20 20 20 20 20  s.OK,..         
36ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36ed0 20 20 20 20 20 20 20 4d 65 73 73 61 67 65 42 6f         MessageBo
36ee0 78 49 63 6f 6e 2e 45 72 72 6f 72 29 3b 0d 0a 0d  xIcon.Error);...
36ef0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
36f00 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61               Tra
36f10 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72  ceOps.DebugAndTr
36f20 61 63 65 28 54 72 61 63 65 50 72 69 6f 72 69 74  ace(TracePriorit
36f30 79 2e 4d 65 64 69 75 6d 48 69 67 68 2c 0d 0a 20  y.MediumHigh,.. 
36f40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36f50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
36f60 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72  ebugCallback, tr
36f70 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 22 46 61  aceCallback, "Fa
36f80 69 6c 75 72 65 2e 22 2c 0d 0a 20 20 20 20 20 20  ilure.",..      
36f90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36fa0 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
36fb0 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20  ategory);....   
36fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36fd0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
36fe0 31 3b 20 2f 2a 20 46 41 49 4c 55 52 45 20 2a 2f  1; /* FAILURE */
36ff0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
37000 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
37010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37020 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
37030 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
37040 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  on....          
37050 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
37060 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37070 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37080 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37090 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
370a0 20 20 20 20 20 20 20 20 20 20 20 20 20 23 72 65               #re
370b0 67 69 6f 6e 20 56 53 20 50 61 63 6b 61 67 65 0d  gion VS Package.
370c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
370d0 20 20 20 20 20 69 66 20 28 63 6f 6e 66 69 67 75       if (configu
370e0 72 61 74 69 6f 6e 2e 48 61 73 46 6c 61 67 73 28  ration.HasFlags(
370f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
37100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 49 6e                In
37110 73 74 61 6c 6c 46 6c 61 67 73 2e 56 73 50 61 63  stallFlags.VsPac
37120 6b 61 67 65 2c 20 74 72 75 65 29 29 0d 0a 20 20  kage, true))..  
37130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37140 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
37150 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
37160 28 21 46 6f 72 45 61 63 68 56 73 56 65 72 73 69  (!ForEachVsVersi
37170 6f 6e 52 65 67 69 73 74 72 79 28 72 65 67 69 73  onRegistry(regis
37180 74 72 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  try,..          
37190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
371a0 20 20 20 20 20 20 76 73 4c 69 73 74 2c 20 50 72        vsList, Pr
371b0 6f 63 65 73 73 56 73 50 61 63 6b 61 67 65 2c 20  ocessVsPackage, 
371c0 70 61 63 6b 61 67 65 2c 0d 0a 20 20 20 20 20 20  package,..      
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 20 66 69 6c 65 4e 61            fileNa
371f0 6d 65 44 61 74 61 2c 0d 0a 20 20 20 20 20 20 20  meData,..       
37200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37210 20 20 20 20 20 20 20 20 20 56 73 49 73 33 32 42           VsIs32B
37220 69 74 4f 6e 6c 79 20 7c 7c 20 63 6f 6e 66 69 67  itOnly || config
37230 75 72 61 74 69 6f 6e 2e 57 6f 77 36 34 2c 0d 0a  uration.Wow64,..
37240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37260 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 54 68  configuration.Th
37270 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 2c 0d 0a 20  rowOnMissing,.. 
37280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
372a0 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 57 68 61  onfiguration.Wha
372b0 74 49 66 2c 20 63 6f 6e 66 69 67 75 72 61 74 69  tIf, configurati
372c0 6f 6e 2e 56 65 72 62 6f 73 65 2c 0d 0a 20 20 20  on.Verbose,..   
372d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
372e0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66               ref
372f0 20 65 72 72 6f 72 29 29 0d 0a 20 20 20 20 20 20   error))..      
37300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37310 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
37320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37330 20 54 72 61 63 65 4f 70 73 2e 53 68 6f 77 4d 65   TraceOps.ShowMe
37340 73 73 61 67 65 28 54 72 61 63 65 50 72 69 6f 72  ssage(TracePrior
37350 69 74 79 2e 48 69 67 68 65 73 74 2c 0d 0a 20 20  ity.Highest,..  
37360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65                de
37380 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61  bugCallback, tra
37390 63 65 43 61 6c 6c 62 61 63 6b 2c 20 74 68 69 73  ceCallback, this
373a0 41 73 73 65 6d 62 6c 79 2c 0d 0a 20 20 20 20 20  Assembly,..     
373b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
373c0 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72             error
373d0 2c 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 2c  , traceCategory,
373e0 20 4d 65 73 73 61 67 65 42 6f 78 42 75 74 74 6f   MessageBoxButto
373f0 6e 73 2e 4f 4b 2c 0d 0a 20 20 20 20 20 20 20 20  ns.OK,..        
37400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37410 20 20 20 20 20 20 20 20 4d 65 73 73 61 67 65 42          MessageB
37420 6f 78 49 63 6f 6e 2e 45 72 72 6f 72 29 3b 0d 0a  oxIcon.Error);..
37430 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
37440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
37450 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54  aceOps.DebugAndT
37460 72 61 63 65 28 54 72 61 63 65 50 72 69 6f 72 69  race(TracePriori
37470 74 79 2e 4d 65 64 69 75 6d 48 69 67 68 2c 0d 0a  ty.MediumHigh,..
37480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
374a0 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74  debugCallback, t
374b0 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 22 46  raceCallback, "F
374c0 61 69 6c 75 72 65 2e 22 2c 0d 0a 20 20 20 20 20  ailure.",..     
374d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
374e0 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
374f0 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
37500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37510 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
37520 20 31 3b 20 2f 2a 20 46 41 49 4c 55 52 45 20 2a   1; /* FAILURE *
37530 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
37540 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
37550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37560 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
37570 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67           #endreg
37580 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ion....         
37590 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
375a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
375b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
375c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
375d0 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
375e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 72                #r
375f0 65 67 69 6f 6e 20 56 53 20 44 61 74 61 53 6f 75  egion VS DataSou
37600 72 63 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  rce..           
37610 20 20 20 20 20 20 20 20 20 69 66 20 28 63 6f 6e           if (con
37620 66 69 67 75 72 61 74 69 6f 6e 2e 48 61 73 46 6c  figuration.HasFl
37630 61 67 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ags(..          
37640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37650 20 20 49 6e 73 74 61 6c 6c 46 6c 61 67 73 2e 56    InstallFlags.V
37660 73 44 61 74 61 53 6f 75 72 63 65 2c 20 74 72 75  sDataSource, tru
37670 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e))..           
37680 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
37690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
376a0 20 20 20 20 69 66 20 28 21 46 6f 72 45 61 63 68      if (!ForEach
376b0 56 73 56 65 72 73 69 6f 6e 52 65 67 69 73 74 72  VsVersionRegistr
376c0 79 28 72 65 67 69 73 74 72 79 2c 0d 0a 20 20 20  y(registry,..   
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 20 20 76 73 4c               vsL
376f0 69 73 74 2c 20 50 72 6f 63 65 73 73 56 73 44 61  ist, ProcessVsDa
37700 74 61 53 6f 75 72 63 65 2c 20 70 61 63 6b 61 67  taSource, packag
37710 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
37720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37730 20 20 20 20 66 69 6c 65 4e 61 6d 65 44 61 74 61      fileNameData
37740 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
37750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37760 20 20 20 56 73 49 73 33 32 42 69 74 4f 6e 6c 79     VsIs32BitOnly
37770 20 7c 7c 20 63 6f 6e 66 69 67 75 72 61 74 69 6f   || configuratio
37780 6e 2e 57 6f 77 36 34 2c 0d 0a 20 20 20 20 20 20  n.Wow64,..      
37790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
377a0 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67            config
377b0 75 72 61 74 69 6f 6e 2e 54 68 72 6f 77 4f 6e 4d  uration.ThrowOnM
377c0 69 73 73 69 6e 67 2c 0d 0a 20 20 20 20 20 20 20  issing,..       
377d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
377e0 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75           configu
377f0 72 61 74 69 6f 6e 2e 57 68 61 74 49 66 2c 20 63  ration.WhatIf, c
37800 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 56 65 72  onfiguration.Ver
37810 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  bose,..         
37820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37830 20 20 20 20 20 20 20 72 65 66 20 65 72 72 6f 72         ref error
37840 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
37850 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
37860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37870 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
37880 4f 70 73 2e 53 68 6f 77 4d 65 73 73 61 67 65 28  Ops.ShowMessage(
37890 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 48 69  TracePriority.Hi
378a0 67 68 65 73 74 2c 0d 0a 20 20 20 20 20 20 20 20  ghest,..        
378b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
378c0 20 20 20 20 20 20 20 20 64 65 62 75 67 43 61 6c          debugCal
378d0 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c  lback, traceCall
378e0 62 61 63 6b 2c 20 74 68 69 73 41 73 73 65 6d 62  back, thisAssemb
378f0 6c 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ly,..           
37900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37910 20 20 20 20 20 65 72 72 6f 72 2c 20 74 72 61 63       error, trac
37920 65 43 61 74 65 67 6f 72 79 2c 20 4d 65 73 73 61  eCategory, Messa
37930 67 65 42 6f 78 42 75 74 74 6f 6e 73 2e 4f 4b 2c  geBoxButtons.OK,
37940 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
37950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37960 20 20 4d 65 73 73 61 67 65 42 6f 78 49 63 6f 6e    MessageBoxIcon
37970 2e 45 72 72 6f 72 29 3b 0d 0a 0d 0a 20 20 20 20  .Error);....    
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 20 54 72 61 63 65 4f 70 73          TraceOps
379a0 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 54  .DebugAndTrace(T
379b0 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4d 65 64  racePriority.Med
379c0 69 75 6d 48 69 67 68 2c 0d 0a 20 20 20 20 20 20  iumHigh,..      
379d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
379e0 20 20 20 20 20 20 20 20 20 20 64 65 62 75 67 43            debugC
379f0 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61  allback, traceCa
37a00 6c 6c 62 61 63 6b 2c 20 22 46 61 69 6c 75 72 65  llback, "Failure
37a10 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  .",..           
37a20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37a30 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f       traceCatego
37a40 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
37a50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37a60 20 20 20 20 72 65 74 75 72 6e 20 31 3b 20 2f 2a      return 1; /*
37a70 20 46 41 49 4c 55 52 45 20 2a 2f 0d 0a 20 20 20   FAILURE */..   
37a80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37a90 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
37aa0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
37ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37ac0 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
37ad0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
37ae0 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
37af0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37b00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37b10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37b20 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
37b30 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20          #region 
37b40 56 53 20 44 61 74 61 50 72 6f 76 69 64 65 72 0d  VS DataProvider.
37b50 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
37b60 20 20 20 20 20 69 66 20 28 63 6f 6e 66 69 67 75       if (configu
37b70 72 61 74 69 6f 6e 2e 48 61 73 46 6c 61 67 73 28  ration.HasFlags(
37b80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
37b90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 49 6e                In
37ba0 73 74 61 6c 6c 46 6c 61 67 73 2e 56 73 44 61 74  stallFlags.VsDat
37bb0 61 50 72 6f 76 69 64 65 72 2c 20 74 72 75 65 29  aProvider, true)
37bc0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
37bd0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
37be0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37bf0 20 20 69 66 20 28 21 46 6f 72 45 61 63 68 56 73    if (!ForEachVs
37c00 56 65 72 73 69 6f 6e 52 65 67 69 73 74 72 79 28  VersionRegistry(
37c10 72 65 67 69 73 74 72 79 2c 0d 0a 20 20 20 20 20  registry,..     
37c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37c30 20 20 20 20 20 20 20 20 20 20 20 76 73 4c 69 73             vsLis
37c40 74 2c 20 50 72 6f 63 65 73 73 56 73 44 61 74 61  t, ProcessVsData
37c50 50 72 6f 76 69 64 65 72 2c 20 70 61 63 6b 61 67  Provider, packag
37c60 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
37c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37c80 20 20 20 20 66 69 6c 65 4e 61 6d 65 44 61 74 61      fileNameData
37c90 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
37ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37cb0 20 20 20 56 73 49 73 33 32 42 69 74 4f 6e 6c 79     VsIs32BitOnly
37cc0 20 7c 7c 20 63 6f 6e 66 69 67 75 72 61 74 69 6f   || configuratio
37cd0 6e 2e 57 6f 77 36 34 2c 0d 0a 20 20 20 20 20 20  n.Wow64,..      
37ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37cf0 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67            config
37d00 75 72 61 74 69 6f 6e 2e 54 68 72 6f 77 4f 6e 4d  uration.ThrowOnM
37d10 69 73 73 69 6e 67 2c 0d 0a 20 20 20 20 20 20 20  issing,..       
37d20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37d30 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75           configu
37d40 72 61 74 69 6f 6e 2e 57 68 61 74 49 66 2c 20 63  ration.WhatIf, c
37d50 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 56 65 72  onfiguration.Ver
37d60 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  bose,..         
37d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37d80 20 20 20 20 20 20 20 72 65 66 20 65 72 72 6f 72         ref error
37d90 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
37da0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
37db0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37dc0 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
37dd0 4f 70 73 2e 53 68 6f 77 4d 65 73 73 61 67 65 28  Ops.ShowMessage(
37de0 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 48 69  TracePriority.Hi
37df0 67 68 65 73 74 2c 0d 0a 20 20 20 20 20 20 20 20  ghest,..        
37e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37e10 20 20 20 20 20 20 20 20 64 65 62 75 67 43 61 6c          debugCal
37e20 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c  lback, traceCall
37e30 62 61 63 6b 2c 20 74 68 69 73 41 73 73 65 6d 62  back, thisAssemb
37e40 6c 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ly,..           
37e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37e60 20 20 20 20 20 65 72 72 6f 72 2c 20 74 72 61 63       error, trac
37e70 65 43 61 74 65 67 6f 72 79 2c 20 4d 65 73 73 61  eCategory, Messa
37e80 67 65 42 6f 78 42 75 74 74 6f 6e 73 2e 4f 4b 2c  geBoxButtons.OK,
37e90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
37ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37eb0 20 20 4d 65 73 73 61 67 65 42 6f 78 49 63 6f 6e    MessageBoxIcon
37ec0 2e 45 72 72 6f 72 29 3b 0d 0a 0d 0a 20 20 20 20  .Error);....    
37ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37ee0 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73          TraceOps
37ef0 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 54  .DebugAndTrace(T
37f00 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4d 65 64  racePriority.Med
37f10 69 75 6d 48 69 67 68 2c 0d 0a 20 20 20 20 20 20  iumHigh,..      
37f20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37f30 20 20 20 20 20 20 20 20 20 20 64 65 62 75 67 43            debugC
37f40 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61  allback, traceCa
37f50 6c 6c 62 61 63 6b 2c 20 22 46 61 69 6c 75 72 65  llback, "Failure
37f60 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  .",..           
37f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37f80 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f       traceCatego
37f90 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
37fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37fb0 20 20 20 20 72 65 74 75 72 6e 20 31 3b 20 2f 2a      return 1; /*
37fc0 20 46 41 49 4c 55 52 45 20 2a 2f 0d 0a 20 20 20   FAILURE */..   
37fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37fe0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
37ff0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
38000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38010 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
38020 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
38030 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
38040 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
38050 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
38060 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
38070 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
38080 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20          #region 
38090 4c 6f 67 20 53 75 6d 6d 61 72 79 0d 0a 20 20 20  Log Summary..   
380a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
380b0 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41   TraceOps.DebugA
380c0 6e 64 54 72 61 63 65 28 54 72 61 63 65 50 72 69  ndTrace(TracePri
380d0 6f 72 69 74 79 2e 4d 65 64 69 75 6d 48 69 67 68  ority.MediumHigh
380e0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
380f0 20 20 20 20 20 20 20 20 20 20 20 64 65 62 75 67             debug
38100 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43  Callback, traceC
38110 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e  allback, String.
38120 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
38130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38140 20 22 73 75 62 4b 65 79 73 43 72 65 61 74 65 64   "subKeysCreated
38150 20 3d 20 7b 30 7d 2c 20 73 75 62 4b 65 79 73 44   = {0}, subKeysD
38160 65 6c 65 74 65 64 20 3d 20 7b 31 7d 2c 20 22 20  eleted = {1}, " 
38170 2b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  +..             
38180 20 20 20 20 20 20 20 20 20 20 20 22 6b 65 79 56             "keyV
38190 61 6c 75 65 73 53 65 74 20 3d 20 7b 32 7d 2c 20  aluesSet = {2}, 
381a0 6b 65 79 56 61 6c 75 65 73 44 65 6c 65 74 65 64  keyValuesDeleted
381b0 20 3d 20 7b 33 7d 22 2c 0d 0a 20 20 20 20 20 20   = {3}",..      
381c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
381d0 20 20 46 6f 72 44 69 73 70 6c 61 79 28 52 65 67    ForDisplay(Reg
381e0 69 73 74 72 79 48 65 6c 70 65 72 2e 53 75 62 4b  istryHelper.SubK
381f0 65 79 73 43 72 65 61 74 65 64 29 2c 0d 0a 20 20  eysCreated),..  
38200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38210 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79        ForDisplay
38220 28 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e  (RegistryHelper.
38230 53 75 62 4b 65 79 73 44 65 6c 65 74 65 64 29 2c  SubKeysDeleted),
38240 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
38250 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73            ForDis
38260 70 6c 61 79 28 52 65 67 69 73 74 72 79 48 65 6c  play(RegistryHel
38270 70 65 72 2e 4b 65 79 56 61 6c 75 65 73 53 65 74  per.KeyValuesSet
38280 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
38290 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44              ForD
382a0 69 73 70 6c 61 79 28 52 65 67 69 73 74 72 79 48  isplay(RegistryH
382b0 65 6c 70 65 72 2e 4b 65 79 56 61 6c 75 65 73 44  elper.KeyValuesD
382c0 65 6c 65 74 65 64 29 29 2c 0d 0a 20 20 20 20 20  eleted)),..     
382d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
382e0 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
382f0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
38300 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f            TraceO
38310 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65  ps.DebugAndTrace
38320 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4d  (TracePriority.M
38330 65 64 69 75 6d 48 69 67 68 2c 0d 0a 20 20 20 20  ediumHigh,..    
38340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38350 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63      debugCallbac
38360 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b  k, traceCallback
38370 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  , String.Format(
38380 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
38390 20 20 20 20 20 20 20 20 20 20 22 66 69 6c 65 73            "files
383a0 43 72 65 61 74 65 64 20 3d 20 7b 30 7d 2c 20 66  Created = {0}, f
383b0 69 6c 65 73 4d 6f 64 69 66 69 65 64 20 3d 20 7b  ilesModified = {
383c0 31 7d 2c 20 22 20 2b 0d 0a 20 20 20 20 20 20 20  1}, " +..       
383d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
383e0 20 22 66 69 6c 65 73 44 65 6c 65 74 65 64 20 3d   "filesDeleted =
383f0 20 7b 32 7d 22 2c 20 46 6f 72 44 69 73 70 6c 61   {2}", ForDispla
38400 79 28 66 69 6c 65 73 43 72 65 61 74 65 64 29 2c  y(filesCreated),
38410 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
38420 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73            ForDis
38430 70 6c 61 79 28 66 69 6c 65 73 4d 6f 64 69 66 69  play(filesModifi
38440 65 64 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28  ed), ForDisplay(
38450 66 69 6c 65 73 44 65 6c 65 74 65 64 29 29 2c 0d  filesDeleted)),.
38460 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
38470 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
38480 74 65 67 6f 72 79 29 3b 0d 0a 20 20 20 20 20 20  tegory);..      
38490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 65                #e
384a0 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20  ndregion....    
384b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
384c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
384d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
384e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
384f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
38500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38510 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75     TraceOps.Debu
38520 67 41 6e 64 54 72 61 63 65 28 54 72 61 63 65 50  gAndTrace(TraceP
38530 72 69 6f 72 69 74 79 2e 4d 65 64 69 75 6d 48 69  riority.MediumHi
38540 67 68 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  gh,..           
38550 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62               deb
38560 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63  ugCallback, trac
38570 65 43 61 6c 6c 62 61 63 6b 2c 20 22 53 75 63 63  eCallback, "Succ
38580 65 73 73 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20  ess.",..        
38590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
385a0 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
385b0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
385c0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 30 3b         return 0;
385d0 20 2f 2a 20 53 55 43 43 45 53 53 20 2a 2f 0d 0a   /* SUCCESS */..
385e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
385f0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
38600 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 61  ..            ca
38610 74 63 68 20 28 45 78 63 65 70 74 69 6f 6e 20 65  tch (Exception e
38620 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
38630 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
38640 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67    TraceOps.Debug
38650 41 6e 64 54 72 61 63 65 28 54 72 61 63 65 50 72  AndTrace(TracePr
38660 69 6f 72 69 74 79 2e 48 69 67 68 65 73 74 2c 0d  iority.Highest,.
38670 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
38680 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61       debugCallba
38690 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63  ck, traceCallbac
386a0 6b 2c 20 65 2c 20 74 72 61 63 65 43 61 74 65 67  k, e, traceCateg
386b0 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
386c0 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 3b 0d           throw;.
386d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
386e0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
386f0 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 20     #endregion.. 
38700 20 20 20 7d 0d 0a 20 20 20 20 23 65 6e 64 72 65     }..    #endre
38710 67 69 6f 6e 0d 0a 7d 0d 0a                       gion..}..