System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact f255050294487a69e0b69a4c71da2dc08bd94144:


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 4e 6f 6e 65 20 3d  ..        None =
08e0: 20 30 78 30 2c 0d 0a 20 20 20 20 20 20 20 20 47   0x0,..        G
08f0: 41 43 20 3d 20 30 78 31 2c 0d 0a 20 20 20 20 20  AC = 0x1,..     
0900: 20 20 20 41 73 73 65 6d 62 6c 79 46 6f 6c 64 65     AssemblyFolde
0910: 72 73 20 3d 20 30 78 32 2c 0d 0a 20 20 20 20 20  rs = 0x2,..     
0920: 20 20 20 44 62 50 72 6f 76 69 64 65 72 46 61 63     DbProviderFac
0930: 74 6f 72 79 20 3d 20 30 78 34 2c 0d 0a 20 20 20  tory = 0x4,..   
0940: 20 20 20 20 20 56 73 50 61 63 6b 61 67 65 20 3d       VsPackage =
0950: 20 30 78 38 2c 0d 0a 20 20 20 20 20 20 20 20 56   0x8,..        V
0960: 73 44 61 74 61 53 6f 75 72 63 65 20 3d 20 30 78  sDataSource = 0x
0970: 31 30 2c 0d 0a 20 20 20 20 20 20 20 20 56 73 44  10,..        VsD
0980: 61 74 61 50 72 6f 76 69 64 65 72 20 3d 20 30 78  ataProvider = 0x
0990: 32 30 2c 0d 0a 20 20 20 20 20 20 20 20 46 72 61  20,..        Fra
09a0: 6d 65 77 6f 72 6b 20 3d 20 47 41 43 20 7c 20 41  mework = GAC | A
09b0: 73 73 65 6d 62 6c 79 46 6f 6c 64 65 72 73 20 7c  ssemblyFolders |
09c0: 20 44 62 50 72 6f 76 69 64 65 72 46 61 63 74 6f   DbProviderFacto
09d0: 72 79 2c 0d 0a 20 20 20 20 20 20 20 20 56 73 20  ry,..        Vs 
09e0: 3d 20 56 73 50 61 63 6b 61 67 65 20 7c 20 56 73  = VsPackage | Vs
09f0: 44 61 74 61 53 6f 75 72 63 65 20 7c 20 56 73 44  DataSource | VsD
0a00: 61 74 61 50 72 6f 76 69 64 65 72 2c 0d 0a 20 20  ataProvider,..  
0a10: 20 20 20 20 20 20 41 6c 6c 20 3d 20 46 72 61 6d        All = Fram
0a20: 65 77 6f 72 6b 20 7c 20 56 73 2c 0d 0a 20 20 20  ework | Vs,..   
0a30: 20 20 20 20 20 41 6c 6c 45 78 63 65 70 74 47 41       AllExceptGA
0a40: 43 20 3d 20 41 6c 6c 20 26 20 7e 47 41 43 2c 0d  C = All & ~GAC,.
0a50: 0a 20 20 20 20 20 20 20 20 44 65 66 61 75 6c 74  .        Default
0a60: 20 3d 20 41 6c 6c 0d 0a 20 20 20 20 7d 0d 0a 0d   = All..    }...
0a70: 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  .    ///////////
0a80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0a90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0aa0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0ab0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0ac0: 0d 0a 0d 0a 20 20 20 20 5b 46 6c 61 67 73 28 29  ....    [Flags()
0ad0: 5d 0d 0a 20 20 20 20 70 75 62 6c 69 63 20 65 6e  ]..    public en
0ae0: 75 6d 20 54 72 61 63 65 50 72 69 6f 72 69 74 79  um TracePriority
0af0: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20  ..    {..       
0b00: 20 4e 6f 6e 65 20 3d 20 30 78 30 2c 0d 0a 20 20   None = 0x0,..  
0b10: 20 20 20 20 20 20 4c 6f 77 65 73 74 20 3d 20 30        Lowest = 0
0b20: 78 31 2c 0d 0a 20 20 20 20 20 20 20 20 4c 6f 77  x1,..        Low
0b30: 65 72 20 3d 20 30 78 32 2c 0d 0a 20 20 20 20 20  er = 0x2,..     
0b40: 20 20 20 4c 6f 77 20 3d 20 30 78 34 2c 0d 0a 20     Low = 0x4,.. 
0b50: 20 20 20 20 20 20 20 4d 65 64 69 75 6d 4c 6f 77         MediumLow
0b60: 20 3d 20 30 78 38 2c 0d 0a 20 20 20 20 20 20 20   = 0x8,..       
0b70: 20 4d 65 64 69 75 6d 20 3d 20 30 78 31 30 2c 0d   Medium = 0x10,.
0b80: 0a 20 20 20 20 20 20 20 20 4d 65 64 69 75 6d 48  .        MediumH
0b90: 69 67 68 20 3d 20 30 78 32 30 2c 0d 0a 20 20 20  igh = 0x20,..   
0ba0: 20 20 20 20 20 48 69 67 68 20 3d 20 30 78 34 30       High = 0x40
0bb0: 2c 0d 0a 20 20 20 20 20 20 20 20 48 69 67 68 65  ,..        Highe
0bc0: 72 20 3d 20 30 78 38 30 2c 0d 0a 20 20 20 20 20  r = 0x80,..     
0bd0: 20 20 20 48 69 67 68 65 73 74 20 3d 20 30 78 31     Highest = 0x1
0be0: 30 30 2c 0d 0a 20 20 20 20 20 20 20 20 44 65 66  00,..        Def
0bf0: 61 75 6c 74 20 3d 20 4d 65 64 69 75 6d 0d 0a 20  ault = Medium.. 
0c00: 20 20 20 7d 0d 0a 20 20 20 20 23 65 6e 64 72 65     }..    #endre
0c10: 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f  gion....    ////
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: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 23  ///////....    #
0c70: 72 65 67 69 6f 6e 20 49 6e 73 74 61 6c 6c 65 72  region Installer
0c80: 20 43 6c 61 73 73 0d 0a 23 69 66 20 21 4e 45 54   Class..#if !NET
0c90: 5f 32 30 0d 0a 20 20 20 20 5b 53 65 63 75 72 69  _20..    [Securi
0ca0: 74 79 43 72 69 74 69 63 61 6c 28 29 5d 0d 0a 23  tyCritical()]..#
0cb0: 65 6c 73 65 0d 0a 20 20 20 20 5b 53 65 63 75 72  else..    [Secur
0cc0: 69 74 79 50 65 72 6d 69 73 73 69 6f 6e 28 53 65  ityPermission(Se
0cd0: 63 75 72 69 74 79 41 63 74 69 6f 6e 2e 4c 69 6e  curityAction.Lin
0ce0: 6b 44 65 6d 61 6e 64 2c 20 55 6e 6d 61 6e 61 67  kDemand, Unmanag
0cf0: 65 64 43 6f 64 65 20 3d 20 74 72 75 65 29 5d 0d  edCode = true)].
0d00: 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 69 6e 74  .#endif..    int
0d10: 65 72 6e 61 6c 20 73 74 61 74 69 63 20 63 6c 61  ernal static cla
0d20: 73 73 20 49 6e 73 74 61 6c 6c 65 72 0d 0a 20 20  ss Installer..  
0d30: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 72 65    {..        #re
0d40: 67 69 6f 6e 20 55 6e 73 61 66 65 20 4e 61 74 69  gion Unsafe Nati
0d50: 76 65 20 4d 65 74 68 6f 64 73 20 43 6c 61 73 73  ve Methods Class
0d60: 0d 0a 20 20 20 20 20 20 20 20 5b 53 75 70 70 72  ..        [Suppr
0d70: 65 73 73 55 6e 6d 61 6e 61 67 65 64 43 6f 64 65  essUnmanagedCode
0d80: 53 65 63 75 72 69 74 79 28 29 5d 0d 0a 20 20 20  Security()]..   
0d90: 20 20 20 20 20 70 72 69 76 61 74 65 20 73 65 61       private sea
0da0: 6c 65 64 20 63 6c 61 73 73 20 55 6e 73 61 66 65  led class Unsafe
0db0: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 0d 0a 20  NativeMethods.. 
0dc0: 20 20 20 20 20 20 20 7b 0d 0a 23 69 66 20 57 49         {..#if WI
0dd0: 4e 44 4f 57 53 0d 0a 20 20 20 20 20 20 20 20 20  NDOWS..         
0de0: 20 20 20 23 72 65 67 69 6f 6e 20 4e 61 74 69 76     #region Nativ
0df0: 65 20 57 69 6e 33 32 20 43 6f 6e 73 74 61 6e 74  e Win32 Constant
0e00: 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  s..            p
0e10: 72 69 76 61 74 65 20 63 6f 6e 73 74 20 69 6e 74  rivate const int
0e20: 20 4d 41 58 5f 50 41 54 48 20 3d 20 32 36 30 3b   MAX_PATH = 260;
0e30: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
0e40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0e50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0e60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0e70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0e80: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
0e90: 20 20 20 70 72 69 76 61 74 65 20 63 6f 6e 73 74     private const
0ea0: 20 69 6e 74 20 43 53 49 44 4c 5f 53 59 53 54 45   int CSIDL_SYSTE
0eb0: 4d 58 38 36 20 3d 20 30 78 30 30 32 39 3b 0d 0a  MX86 = 0x0029;..
0ec0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
0ed0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0ee0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0ef0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0f00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0f10: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
0f20: 20 70 72 69 76 61 74 65 20 63 6f 6e 73 74 20 69   private const i
0f30: 6e 74 20 53 48 47 46 50 5f 54 59 50 45 5f 43 55  nt SHGFP_TYPE_CU
0f40: 52 52 45 4e 54 20 3d 20 30 3b 0d 0a 0d 0a 20 20  RRENT = 0;....  
0f50: 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
0f60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0f70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0f80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0f90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
0fa0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69  .            pri
0fb0: 76 61 74 65 20 63 6f 6e 73 74 20 69 6e 74 20 53  vate const int S
0fc0: 5f 4f 4b 20 3d 20 30 3b 20 2f 2a 20 48 52 45 53  _OK = 0; /* HRES
0fd0: 55 4c 54 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20  ULT */..        
0fe0: 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
0ff0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
1000: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1010: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1020: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1030: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1040: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
1050: 20 23 72 65 67 69 6f 6e 20 4e 61 74 69 76 65 20   #region Native 
1060: 57 69 6e 64 6f 77 73 20 4d 65 74 68 6f 64 73 0d  Windows Methods.
1070: 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 44 6c  .            [Dl
1080: 6c 49 6d 70 6f 72 74 28 22 73 68 66 6f 6c 64 65  lImport("shfolde
1090: 72 2e 64 6c 6c 22 2c 0d 0a 20 20 20 20 20 20 20  r.dll",..       
10a0: 20 20 20 20 20 20 20 20 20 43 61 6c 6c 69 6e 67           Calling
10b0: 43 6f 6e 76 65 6e 74 69 6f 6e 20 3d 20 43 61 6c  Convention = Cal
10c0: 6c 69 6e 67 43 6f 6e 76 65 6e 74 69 6f 6e 2e 57  lingConvention.W
10d0: 69 6e 61 70 69 2c 0d 0a 20 20 20 20 20 20 20 20  inapi,..        
10e0: 20 20 20 20 20 20 20 20 43 68 61 72 53 65 74 20          CharSet 
10f0: 3d 20 43 68 61 72 53 65 74 2e 41 75 74 6f 2c 20  = CharSet.Auto, 
1100: 42 65 73 74 46 69 74 4d 61 70 70 69 6e 67 20 3d  BestFitMapping =
1110: 20 66 61 6c 73 65 2c 0d 0a 20 20 20 20 20 20 20   false,..       
1120: 20 20 20 20 20 20 20 20 20 54 68 72 6f 77 4f 6e           ThrowOn
1130: 55 6e 6d 61 70 70 61 62 6c 65 43 68 61 72 20 3d  UnmappableChar =
1140: 20 74 72 75 65 2c 20 53 65 74 4c 61 73 74 45 72   true, SetLastEr
1150: 72 6f 72 20 3d 20 74 72 75 65 29 5d 0d 0a 20 20  ror = true)]..  
1160: 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
1170: 65 20 73 74 61 74 69 63 20 65 78 74 65 72 6e 20  e static extern 
1180: 69 6e 74 20 53 48 47 65 74 46 6f 6c 64 65 72 50  int SHGetFolderP
1190: 61 74 68 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ath(..          
11a0: 20 20 20 20 20 20 49 6e 74 50 74 72 20 68 57 6e        IntPtr hWn
11b0: 64 4f 77 6e 65 72 2c 20 69 6e 74 20 6e 46 6f 6c  dOwner, int nFol
11c0: 64 65 72 2c 20 49 6e 74 50 74 72 20 68 54 6f 6b  der, IntPtr hTok
11d0: 65 6e 2c 20 75 69 6e 74 20 66 6c 61 67 73 2c 0d  en, uint flags,.
11e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
11f0: 20 49 6e 74 50 74 72 20 62 75 66 66 65 72 20 2f   IntPtr buffer /
1200: 2a 20 3e 3d 20 4d 41 58 5f 50 41 54 48 20 2a 2f  * >= MAX_PATH */
1210: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
1220: 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20  #endregion....  
1230: 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
1240: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1250: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1260: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1270: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
1280: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 72 65  .            #re
1290: 67 69 6f 6e 20 50 75 62 6c 69 63 20 57 72 61 70  gion Public Wrap
12a0: 70 65 72 20 4d 65 74 68 6f 64 73 0d 0a 20 20 20  per Methods..   
12b0: 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
12c0: 73 74 61 74 69 63 20 73 74 72 69 6e 67 20 47 65  static string Ge
12d0: 74 53 79 73 74 65 6d 44 69 72 65 63 74 6f 72 79  tSystemDirectory
12e0: 28 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ()..            
12f0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
1300: 20 20 20 49 6e 74 50 74 72 20 62 75 66 66 65 72     IntPtr buffer
1310: 20 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d   = IntPtr.Zero;.
1320: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
1330: 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20     try..        
1340: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
1350: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62                 b
1360: 75 66 66 65 72 20 3d 20 4d 61 72 73 68 61 6c 2e  uffer = Marshal.
1370: 41 6c 6c 6f 63 43 6f 54 61 73 6b 4d 65 6d 28 0d  AllocCoTaskMem(.
1380: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1390: 20 20 20 20 20 20 20 20 20 73 69 7a 65 6f 66 28           sizeof(
13a0: 63 68 61 72 29 20 2a 20 28 4d 41 58 5f 50 41 54  char) * (MAX_PAT
13b0: 48 20 2b 20 31 29 29 3b 0d 0a 0d 0a 20 20 20 20  H + 1));....    
13c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13d0: 69 66 20 28 62 75 66 66 65 72 20 21 3d 20 49 6e  if (buffer != In
13e0: 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20 20 20 20  tPtr.Zero)..    
13f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1400: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
1410: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 53             if (S
1420: 48 47 65 74 46 6f 6c 64 65 72 50 61 74 68 28 49  HGetFolderPath(I
1430: 6e 74 50 74 72 2e 5a 65 72 6f 2c 0d 0a 20 20 20  ntPtr.Zero,..   
1440: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1450: 20 20 20 20 20 20 20 20 20 20 20 20 20 43 53 49               CSI
1460: 44 4c 5f 53 59 53 54 45 4d 58 38 36 2c 20 49 6e  DL_SYSTEMX86, In
1470: 74 50 74 72 2e 5a 65 72 6f 2c 0d 0a 20 20 20 20  tPtr.Zero,..    
1480: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1490: 20 20 20 20 20 20 20 20 20 20 20 20 53 48 47 46              SHGF
14a0: 50 5f 54 59 50 45 5f 43 55 52 52 45 4e 54 2c 20  P_TYPE_CURRENT, 
14b0: 62 75 66 66 65 72 29 20 3d 3d 20 53 5f 4f 4b 29  buffer) == S_OK)
14c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
14d0: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
14e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14f0: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
1500: 4d 61 72 73 68 61 6c 2e 50 74 72 54 6f 53 74 72  Marshal.PtrToStr
1510: 69 6e 67 41 75 74 6f 28 62 75 66 66 65 72 29 3b  ingAuto(buffer);
1520: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1530: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
1540: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1550: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
1560: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
1570: 20 20 20 20 20 20 20 63 61 74 63 68 20 28 45 78         catch (Ex
1580: 63 65 70 74 69 6f 6e 20 65 29 0d 0a 20 20 20 20  ception e)..    
1590: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
15a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15b0: 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
15c0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 54 4f             // TO
15d0: 44 4f 3a 20 49 73 20 74 68 69 73 20 74 68 65 20  DO: Is this the 
15e0: 72 69 67 68 74 20 65 72 72 6f 72 20 68 61 6e 64  right error hand
15f0: 6c 69 6e 67 20 73 6f 6c 75 74 69 6f 6e 0d 0a 20  ling solution.. 
1600: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1610: 20 20 20 2f 2f 20 20 20 20 20 20 20 74 6f 20 75     //       to u
1620: 73 65 20 61 74 20 74 68 69 73 20 70 6f 69 6e 74  se at this point
1630: 3f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ?..             
1640: 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
1650: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
1660: 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64  raceOps.DebugAnd
1670: 54 72 61 63 65 28 54 72 61 63 65 50 72 69 6f 72  Trace(TracePrior
1680: 69 74 79 2e 4d 65 64 69 75 6d 48 69 67 68 2c 0d  ity.MediumHigh,.
1690: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
16a0: 20 20 20 20 20 20 20 20 20 64 65 62 75 67 43 61           debugCa
16b0: 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c  llback, traceCal
16c0: 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f  lback, String.Fo
16d0: 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
16e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
16f0: 43 6f 75 6c 64 20 6e 6f 74 20 67 65 74 20 73 79  Could not get sy
1700: 73 74 65 6d 20 64 69 72 65 63 74 6f 72 79 3a 20  stem directory: 
1710: 7b 30 7d 22 2c 20 65 29 2c 0d 0a 20 20 20 20 20  {0}", e),..     
1720: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1730: 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
1740: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
1750: 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 3b            throw;
1760: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1770: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
1780: 20 20 20 20 20 66 69 6e 61 6c 6c 79 0d 0a 20 20       finally..  
1790: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
17a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
17b0: 20 20 20 20 20 69 66 20 28 62 75 66 66 65 72 20       if (buffer 
17c0: 21 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 0d  != IntPtr.Zero).
17d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
17e0: 20 20 20 20 20 7b 0d 0a 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: 4d 61 72 73 68 61 6c 2e 46 72 65 65 43 6f 54 61  Marshal.FreeCoTa
1810: 73 6b 4d 65 6d 28 62 75 66 66 65 72 29 3b 0d 0a  skMem(buffer);..
1820: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1830: 20 20 20 20 20 20 20 20 62 75 66 66 65 72 20 3d          buffer =
1840: 20 49 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a 20   IntPtr.Zero;.. 
1850: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1860: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
1870: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
1880: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
1890: 6e 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20  n null;..       
18a0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
18b0: 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
18c0: 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20  #endif..        
18d0: 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72  }..        #endr
18e0: 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20  egion....       
18f0: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
1900: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1910: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1920: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1930: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
1940: 20 20 20 20 23 72 65 67 69 6f 6e 20 50 72 69 76      #region Priv
1950: 61 74 65 20 48 65 6c 70 65 72 20 43 6c 61 73 73  ate Helper Class
1960: 65 73 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67  es..        #reg
1970: 69 6f 6e 20 41 6e 79 50 61 69 72 20 43 6c 61 73  ion AnyPair Clas
1980: 73 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  s..        priva
1990: 74 65 20 73 65 61 6c 65 64 20 63 6c 61 73 73 20  te sealed class 
19a0: 41 6e 79 50 61 69 72 3c 54 31 2c 20 54 32 3e 0d  AnyPair<T1, T2>.
19b0: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
19c0: 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20          #region 
19d0: 50 75 62 6c 69 63 20 43 6f 6e 73 74 72 75 63 74  Public Construct
19e0: 6f 72 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ors..           
19f0: 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
1a00: 20 2f 2f 20 57 41 52 4e 49 4e 47 3a 20 54 68 69   // WARNING: Thi
1a10: 73 20 63 6f 6e 73 74 72 75 63 74 6f 72 20 70 72  s constructor pr
1a20: 6f 64 75 63 65 73 20 61 6e 20 69 6d 6d 75 74 61  oduces an immuta
1a30: 62 6c 65 20 22 65 6d 70 74 79 22 20 70 61 69 72  ble "empty" pair
1a40: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
1a50: 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74            object
1a60: 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
1a70: 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  /..            p
1a80: 75 62 6c 69 63 20 41 6e 79 50 61 69 72 28 29 0d  ublic AnyPair().
1a90: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1aa0: 20 3a 20 62 61 73 65 28 29 0d 0a 20 20 20 20 20   : base()..     
1ab0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
1ac0: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20            // do 
1ad0: 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20  nothing...      
1ae0: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
1af0: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
1b00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
1b40: 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
1b50: 20 41 6e 79 50 61 69 72 28 54 31 20 78 29 0d 0a   AnyPair(T1 x)..
1b60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b70: 3a 20 74 68 69 73 28 29 0d 0a 20 20 20 20 20 20  : this()..      
1b80: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
1b90: 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 78 20           this.x 
1ba0: 3d 20 78 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  = x;..          
1bb0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
1bc0: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
1bd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1be0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1bf0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c00: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
1c10: 20 20 20 20 20 20 70 75 62 6c 69 63 20 41 6e 79        public Any
1c20: 50 61 69 72 28 54 31 20 78 2c 20 54 32 20 79 29  Pair(T1 x, T2 y)
1c30: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1c40: 20 20 3a 20 74 68 69 73 28 78 29 0d 0a 20 20 20    : this(x)..   
1c50: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
1c60: 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73              this
1c70: 2e 79 20 3d 20 79 3b 0d 0a 20 20 20 20 20 20 20  .y = y;..       
1c80: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
1c90: 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
1ca0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
1cb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1cc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1cd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ce0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1cf0: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
1d00: 20 23 72 65 67 69 6f 6e 20 50 75 62 6c 69 63 20   #region Public 
1d10: 50 72 6f 70 65 72 74 69 65 73 0d 0a 20 20 20 20  Properties..    
1d20: 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
1d30: 54 31 20 78 3b 0d 0a 20 20 20 20 20 20 20 20 20  T1 x;..         
1d40: 20 20 20 70 75 62 6c 69 63 20 54 31 20 58 0d 0a     public T1 X..
1d50: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
1d60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67                 g
1d70: 65 74 20 7b 20 72 65 74 75 72 6e 20 78 3b 20 7d  et { return x; }
1d80: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
1d90: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
1da0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1db0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1dc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1dd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1de0: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
1df0: 20 20 70 72 69 76 61 74 65 20 54 32 20 79 3b 0d    private T2 y;.
1e00: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
1e10: 6c 69 63 20 54 32 20 59 0d 0a 20 20 20 20 20 20  lic T2 Y..      
1e20: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
1e30: 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72           get { r
1e40: 65 74 75 72 6e 20 79 3b 20 7d 0d 0a 20 20 20 20  eturn y; }..    
1e50: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
1e60: 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f         #endregio
1e70: 6e 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  n..        }..  
1e80: 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
1e90: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
1ea0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1eb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ec0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23  ///....        #
1ef0: 72 65 67 69 6f 6e 20 54 72 61 63 65 4f 70 73 20  region TraceOps 
1f00: 43 6c 61 73 73 0d 0a 20 20 20 20 20 20 20 20 70  Class..        p
1f10: 72 69 76 61 74 65 20 73 74 61 74 69 63 20 63 6c  rivate static cl
1f20: 61 73 73 20 54 72 61 63 65 4f 70 73 0d 0a 20 20  ass TraceOps..  
1f30: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
1f40: 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 72 69       #region Pri
1f50: 76 61 74 65 20 43 6f 6e 73 74 61 6e 74 73 0d 0a  vate Constants..
1f60: 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
1f70: 61 74 65 20 63 6f 6e 73 74 20 73 74 72 69 6e 67  ate const string
1f80: 20 44 65 66 61 75 6c 74 44 65 62 75 67 46 6f 72   DefaultDebugFor
1f90: 6d 61 74 20 3d 20 22 23 7b 30 7d 20 40 20 7b 31  mat = "#{0} @ {1
1fa0: 7d 3a 20 7b 32 7d 22 3b 0d 0a 20 20 20 20 20 20  }: {2}";..      
1fb0: 20 20 20 20 20 20 70 72 69 76 61 74 65 20 63 6f        private co
1fc0: 6e 73 74 20 73 74 72 69 6e 67 20 44 65 66 61 75  nst string Defau
1fd0: 6c 74 54 72 61 63 65 46 6f 72 6d 61 74 20 3d 20  ltTraceFormat = 
1fe0: 22 23 7b 30 7d 20 40 20 7b 31 7d 3a 20 7b 32 7d  "#{0} @ {1}: {2}
1ff0: 22 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  ";....          
2000: 20 20 70 72 69 76 61 74 65 20 63 6f 6e 73 74 20    private const 
2010: 73 74 72 69 6e 67 20 49 73 6f 38 36 30 31 44 61  string Iso8601Da
2020: 74 65 54 69 6d 65 4f 75 74 70 75 74 46 6f 72 6d  teTimeOutputForm
2030: 61 74 20 3d 0d 0a 20 20 20 20 20 20 20 20 20 20  at =..          
2040: 20 20 20 20 20 20 22 79 79 79 79 2e 4d 4d 2e 64        "yyyy.MM.d
2050: 64 54 48 48 3a 6d 6d 3a 73 73 2e 66 66 66 66 66  dTHH:mm:ss.fffff
2060: 66 66 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ff";..          
2070: 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a    #endregion....
2080: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
2090: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20a0: 2f 2f 2f 2f 2f 2f 2f 2f 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 0d  ///////////////.
20d0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  ...            #
20e0: 72 65 67 69 6f 6e 20 50 72 69 76 61 74 65 20 53  region Private S
20f0: 74 61 74 69 63 20 44 61 74 61 0d 0a 20 20 20 20  tatic Data..    
2100: 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
2110: 73 74 61 74 69 63 20 6f 62 6a 65 63 74 20 73 79  static object sy
2120: 6e 63 52 6f 6f 74 20 3d 20 6e 65 77 20 6f 62 6a  ncRoot = new obj
2130: 65 63 74 28 29 3b 0d 0a 20 20 20 20 20 20 20 20  ect();..        
2140: 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74      private stat
2150: 69 63 20 6c 6f 6e 67 20 6e 65 78 74 44 65 62 75  ic long nextDebu
2160: 67 49 64 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  gId;..          
2170: 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63    private static
2180: 20 6c 6f 6e 67 20 6e 65 78 74 54 72 61 63 65 49   long nextTraceI
2190: 64 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  d;..            
21a0: 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 49  private static I
21b0: 4c 69 73 74 3c 54 72 61 63 65 4c 69 73 74 65 6e  List<TraceListen
21c0: 65 72 3e 20 64 65 62 75 67 4c 69 73 74 65 6e 65  er> debugListene
21d0: 72 73 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  rs;..           
21e0: 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
21f0: 54 72 61 63 65 50 72 69 6f 72 69 74 79 20 64 65  TracePriority de
2200: 62 75 67 50 72 69 6f 72 69 74 79 20 3d 20 54 72  bugPriority = Tr
2210: 61 63 65 50 72 69 6f 72 69 74 79 2e 44 65 66 61  acePriority.Defa
2220: 75 6c 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ult;..          
2230: 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63    private static
2240: 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 20 74   TracePriority t
2250: 72 61 63 65 50 72 69 6f 72 69 74 79 20 3d 20 54  racePriority = T
2260: 72 61 63 65 50 72 69 6f 72 69 74 79 2e 44 65 66  racePriority.Def
2270: 61 75 6c 74 3b 0d 0a 20 20 20 20 20 20 20 20 20  ault;..         
2280: 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69     private stati
2290: 63 20 73 74 72 69 6e 67 20 64 65 62 75 67 46 6f  c string debugFo
22a0: 72 6d 61 74 20 3d 20 44 65 66 61 75 6c 74 44 65  rmat = DefaultDe
22b0: 62 75 67 46 6f 72 6d 61 74 3b 0d 0a 20 20 20 20  bugFormat;..    
22c0: 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
22d0: 73 74 61 74 69 63 20 73 74 72 69 6e 67 20 74 72  static string tr
22e0: 61 63 65 46 6f 72 6d 61 74 20 3d 20 44 65 66 61  aceFormat = Defa
22f0: 75 6c 74 54 72 61 63 65 46 6f 72 6d 61 74 3b 0d  ultTraceFormat;.
2300: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e  .            #en
2310: 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
2320: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
2330: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2340: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2350: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2360: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
2370: 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f            #regio
2380: 6e 20 50 75 62 6c 69 63 20 53 74 61 74 69 63 20  n Public Static 
2390: 50 72 6f 70 65 72 74 69 65 73 0d 0a 20 20 20 20  Properties..    
23a0: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73          public s
23b0: 74 61 74 69 63 20 54 72 61 63 65 50 72 69 6f 72  tatic TracePrior
23c0: 69 74 79 20 44 65 62 75 67 50 72 69 6f 72 69 74  ity DebugPriorit
23d0: 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  y..            {
23e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
23f0: 20 20 67 65 74 20 7b 20 6c 6f 63 6b 20 28 73 79    get { lock (sy
2400: 6e 63 52 6f 6f 74 29 20 7b 20 72 65 74 75 72 6e  ncRoot) { return
2410: 20 64 65 62 75 67 50 72 69 6f 72 69 74 79 3b 20   debugPriority; 
2420: 7d 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  } }..           
2430: 20 20 20 20 20 73 65 74 20 7b 20 6c 6f 63 6b 20       set { lock 
2440: 28 73 79 6e 63 52 6f 6f 74 29 20 7b 20 64 65 62  (syncRoot) { deb
2450: 75 67 50 72 69 6f 72 69 74 79 20 3d 20 76 61 6c  ugPriority = val
2460: 75 65 3b 20 7d 20 7d 0d 0a 20 20 20 20 20 20 20  ue; } }..       
2470: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
2480: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
2490: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
24d0: 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
24e0: 73 74 61 74 69 63 20 54 72 61 63 65 50 72 69 6f  static TracePrio
24f0: 72 69 74 79 20 54 72 61 63 65 50 72 69 6f 72 69  rity TracePriori
2500: 74 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ty..            
2510: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
2520: 20 20 20 67 65 74 20 7b 20 6c 6f 63 6b 20 28 73     get { lock (s
2530: 79 6e 63 52 6f 6f 74 29 20 7b 20 72 65 74 75 72  yncRoot) { retur
2540: 6e 20 74 72 61 63 65 50 72 69 6f 72 69 74 79 3b  n tracePriority;
2550: 20 7d 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20   } }..          
2560: 20 20 20 20 20 20 73 65 74 20 7b 20 6c 6f 63 6b        set { lock
2570: 20 28 73 79 6e 63 52 6f 6f 74 29 20 7b 20 74 72   (syncRoot) { tr
2580: 61 63 65 50 72 69 6f 72 69 74 79 20 3d 20 76 61  acePriority = va
2590: 6c 75 65 3b 20 7d 20 7d 0d 0a 20 20 20 20 20 20  lue; } }..      
25a0: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
25b0: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
25c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
2600: 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
2610: 20 73 74 61 74 69 63 20 73 74 72 69 6e 67 20 44   static string D
2620: 65 62 75 67 46 6f 72 6d 61 74 0d 0a 20 20 20 20  ebugFormat..    
2630: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
2640: 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b             get {
2650: 20 6c 6f 63 6b 20 28 73 79 6e 63 52 6f 6f 74 29   lock (syncRoot)
2660: 20 7b 20 72 65 74 75 72 6e 20 64 65 62 75 67 46   { return debugF
2670: 6f 72 6d 61 74 3b 20 7d 20 7d 0d 0a 20 20 20 20  ormat; } }..    
2680: 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20              set 
2690: 7b 20 6c 6f 63 6b 20 28 73 79 6e 63 52 6f 6f 74  { lock (syncRoot
26a0: 29 20 7b 20 64 65 62 75 67 46 6f 72 6d 61 74 20  ) { debugFormat 
26b0: 3d 20 76 61 6c 75 65 3b 20 7d 20 7d 0d 0a 20 20  = value; } }..  
26c0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
26d0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
26e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2700: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2710: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
2720: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
2730: 62 6c 69 63 20 73 74 61 74 69 63 20 73 74 72 69  blic static stri
2740: 6e 67 20 54 72 61 63 65 46 6f 72 6d 61 74 0d 0a  ng TraceFormat..
2750: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
2760: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67                 g
2770: 65 74 20 7b 20 6c 6f 63 6b 20 28 73 79 6e 63 52  et { lock (syncR
2780: 6f 6f 74 29 20 7b 20 72 65 74 75 72 6e 20 74 72  oot) { return tr
2790: 61 63 65 46 6f 72 6d 61 74 3b 20 7d 20 7d 0d 0a  aceFormat; } }..
27a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27b0: 73 65 74 20 7b 20 6c 6f 63 6b 20 28 73 79 6e 63  set { lock (sync
27c0: 52 6f 6f 74 29 20 7b 20 74 72 61 63 65 46 6f 72  Root) { traceFor
27d0: 6d 61 74 20 3d 20 76 61 6c 75 65 3b 20 7d 20 7d  mat = value; } }
27e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
27f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e  .            #en
2800: 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
2810: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
2820: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2830: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2840: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2850: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
2860: 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f            #regio
2870: 6e 20 49 6e 74 65 72 61 63 74 69 76 65 20 53 75  n Interactive Su
2880: 70 70 6f 72 74 20 4d 65 74 68 6f 64 73 0d 0a 20  pport Methods.. 
2890: 20 20 20 20 20 20 20 20 20 20 20 5b 4d 65 74 68             [Meth
28a0: 6f 64 49 6d 70 6c 28 4d 65 74 68 6f 64 49 6d 70  odImpl(MethodImp
28b0: 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e  lOptions.NoInlin
28c0: 69 6e 67 29 5d 0d 0a 20 20 20 20 20 20 20 20 20  ing)]..         
28d0: 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63     public static
28e0: 20 44 69 61 6c 6f 67 52 65 73 75 6c 74 20 53 68   DialogResult Sh
28f0: 6f 77 4d 65 73 73 61 67 65 28 0d 0a 20 20 20 20  owMessage(..    
2900: 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
2910: 65 50 72 69 6f 72 69 74 79 20 74 72 61 63 65 50  ePriority traceP
2920: 72 69 6f 72 69 74 79 2c 0d 0a 20 20 20 20 20 20  riority,..      
2930: 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 43            TraceC
2940: 61 6c 6c 62 61 63 6b 20 64 65 62 75 67 43 61 6c  allback debugCal
2950: 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20  lback,..        
2960: 20 20 20 20 20 20 20 20 54 72 61 63 65 43 61 6c          TraceCal
2970: 6c 62 61 63 6b 20 74 72 61 63 65 43 61 6c 6c 62  lback traceCallb
2980: 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ack,..          
2990: 20 20 20 20 20 20 41 73 73 65 6d 62 6c 79 20 61        Assembly a
29a0: 73 73 65 6d 62 6c 79 2c 0d 0a 20 20 20 20 20 20  ssembly,..      
29b0: 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
29c0: 20 6d 65 73 73 61 67 65 2c 0d 0a 20 20 20 20 20   message,..     
29d0: 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
29e0: 67 20 63 61 74 65 67 6f 72 79 2c 0d 0a 20 20 20  g category,..   
29f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 4d 65 73               Mes
2a00: 73 61 67 65 42 6f 78 42 75 74 74 6f 6e 73 20 62  sageBoxButtons b
2a10: 75 74 74 6f 6e 73 2c 0d 0a 20 20 20 20 20 20 20  uttons,..       
2a20: 20 20 20 20 20 20 20 20 20 4d 65 73 73 61 67 65           Message
2a30: 42 6f 78 49 63 6f 6e 20 69 63 6f 6e 0d 0a 20 20  BoxIcon icon..  
2a40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d                ).
2a50: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
2a60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a70: 44 69 61 6c 6f 67 52 65 73 75 6c 74 20 72 65 73  DialogResult res
2a80: 75 6c 74 20 3d 20 44 69 61 6c 6f 67 52 65 73 75  ult = DialogResu
2a90: 6c 74 2e 4f 4b 3b 0d 0a 0d 0a 20 20 20 20 20 20  lt.OK;....      
2aa0: 20 20 20 20 20 20 20 20 20 20 44 65 62 75 67 41            DebugA
2ab0: 6e 64 54 72 61 63 65 28 74 72 61 63 65 50 72 69  ndTrace(tracePri
2ac0: 6f 72 69 74 79 2c 0d 0a 20 20 20 20 20 20 20 20  ority,..        
2ad0: 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62 75              debu
2ae0: 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65  gCallback, trace
2af0: 43 61 6c 6c 62 61 63 6b 2c 20 6d 65 73 73 61 67  Callback, messag
2b00: 65 2c 20 63 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  e, category);...
2b10: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2b20: 20 69 66 20 28 53 79 73 74 65 6d 49 6e 66 6f 72   if (SystemInfor
2b30: 6d 61 74 69 6f 6e 2e 55 73 65 72 49 6e 74 65 72  mation.UserInter
2b40: 61 63 74 69 76 65 29 0d 0a 20 20 20 20 20 20 20  active)..       
2b50: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
2b60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b70: 73 74 72 69 6e 67 20 74 69 74 6c 65 20 3d 20 47  string title = G
2b80: 65 74 41 73 73 65 6d 62 6c 79 54 69 74 6c 65 28  etAssemblyTitle(
2b90: 61 73 73 65 6d 62 6c 79 29 3b 0d 0a 0d 0a 20 20  assembly);....  
2ba0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bb0: 20 20 69 66 20 28 74 69 74 6c 65 20 3d 3d 20 6e    if (title == n
2bc0: 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
2bd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 69                ti
2be0: 74 6c 65 20 3d 20 41 70 70 6c 69 63 61 74 69 6f  tle = Applicatio
2bf0: 6e 2e 50 72 6f 64 75 63 74 4e 61 6d 65 3b 0d 0a  n.ProductName;..
2c00: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2c10: 20 20 20 20 20 20 72 65 73 75 6c 74 20 3d 20 4d        result = M
2c20: 65 73 73 61 67 65 42 6f 78 2e 53 68 6f 77 28 6d  essageBox.Show(m
2c30: 65 73 73 61 67 65 2c 20 74 69 74 6c 65 2c 20 62  essage, title, b
2c40: 75 74 74 6f 6e 73 2c 20 69 63 6f 6e 29 3b 0d 0a  uttons, icon);..
2c50: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2c60: 20 20 20 20 20 20 44 65 62 75 67 41 6e 64 54 72        DebugAndTr
2c70: 61 63 65 28 74 72 61 63 65 50 72 69 6f 72 69 74  ace(tracePriorit
2c80: 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y,..            
2c90: 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62 75              debu
2ca0: 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65  gCallback, trace
2cb0: 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67  Callback, String
2cc0: 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  .Format(..      
2cd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ce0: 20 20 22 55 73 65 72 20 63 68 6f 69 63 65 20 6f    "User choice o
2cf0: 66 20 7b 30 7d 2e 22 2c 20 46 6f 72 44 69 73 70  f {0}.", ForDisp
2d00: 6c 61 79 28 72 65 73 75 6c 74 29 29 2c 0d 0a 20  lay(result)),.. 
2d10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d20: 20 20 20 20 20 20 20 63 61 74 65 67 6f 72 79 29         category)
2d30: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
2d40: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
2d50: 72 65 73 75 6c 74 3b 0d 0a 20 20 20 20 20 20 20  result;..       
2d60: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
2d70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 44 65                De
2d80: 62 75 67 41 6e 64 54 72 61 63 65 28 74 72 61 63  bugAndTrace(trac
2d90: 65 50 72 69 6f 72 69 74 79 2c 0d 0a 20 20 20 20  ePriority,..    
2da0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2db0: 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74  debugCallback, t
2dc0: 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74  raceCallback, St
2dd0: 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
2de0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2df0: 20 20 22 44 65 66 61 75 6c 74 20 63 68 6f 69 63    "Default choic
2e00: 65 20 6f 66 20 7b 30 7d 2e 22 2c 20 46 6f 72 44  e of {0}.", ForD
2e10: 69 73 70 6c 61 79 28 72 65 73 75 6c 74 29 29 2c  isplay(result)),
2e20: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2e30: 20 20 20 20 20 20 63 61 74 65 67 6f 72 79 29 3b        category);
2e40: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2e50: 20 20 20 20 72 65 74 75 72 6e 20 72 65 73 75 6c      return resul
2e60: 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t;..            
2e70: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  }..            #
2e80: 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20  endregion....   
2e90: 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
2ea0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2eb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ec0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ed0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
2ee0: 20 20 20 20 20 20 20 20 20 20 20 20 23 72 65 67              #reg
2ef0: 69 6f 6e 20 54 72 61 63 69 6e 67 20 53 75 70 70  ion Tracing Supp
2f00: 6f 72 74 20 4d 65 74 68 6f 64 73 0d 0a 20 20 20  ort Methods..   
2f10: 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
2f20: 73 74 61 74 69 63 20 76 6f 69 64 20 53 65 74 75  static void Setu
2f30: 70 44 65 62 75 67 4c 69 73 74 65 6e 65 72 73 28  pDebugListeners(
2f40: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
2f50: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2f60: 20 20 69 66 20 28 64 65 62 75 67 4c 69 73 74 65    if (debugListe
2f70: 6e 65 72 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  ners == null).. 
2f80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f90: 20 20 20 64 65 62 75 67 4c 69 73 74 65 6e 65 72     debugListener
2fa0: 73 20 3d 20 6e 65 77 20 4c 69 73 74 3c 54 72 61  s = new List<Tra
2fb0: 63 65 4c 69 73 74 65 6e 65 72 3e 28 29 3b 0d 0a  ceListener>();..
2fc0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2fd0: 20 20 64 65 62 75 67 4c 69 73 74 65 6e 65 72 73    debugListeners
2fe0: 2e 41 64 64 28 6e 65 77 20 43 6f 6e 73 6f 6c 65  .Add(new Console
2ff0: 54 72 61 63 65 4c 69 73 74 65 6e 65 72 28 29 29  TraceListener())
3000: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
3010: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
3020: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3030: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3040: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3050: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3060: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
3070: 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63     public static
3080: 20 6c 6f 6e 67 20 4e 65 78 74 44 65 62 75 67 49   long NextDebugI
3090: 64 28 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  d()..           
30a0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
30b0: 20 20 20 20 72 65 74 75 72 6e 20 49 6e 74 65 72      return Inter
30c0: 6c 6f 63 6b 65 64 2e 49 6e 63 72 65 6d 65 6e 74  locked.Increment
30d0: 28 72 65 66 20 6e 65 78 74 44 65 62 75 67 49 64  (ref nextDebugId
30e0: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
30f0: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
3100: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
3110: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3120: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3130: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3140: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
3150: 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69      public stati
3160: 63 20 6c 6f 6e 67 20 4e 65 78 74 54 72 61 63 65  c long NextTrace
3170: 49 64 28 29 0d 0a 20 20 20 20 20 20 20 20 20 20  Id()..          
3180: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
3190: 20 20 20 20 20 72 65 74 75 72 6e 20 49 6e 74 65       return Inte
31a0: 72 6c 6f 63 6b 65 64 2e 49 6e 63 72 65 6d 65 6e  rlocked.Incremen
31b0: 74 28 72 65 66 20 6e 65 78 74 54 72 61 63 65 49  t(ref nextTraceI
31c0: 64 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  d);..           
31d0: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
31e0: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
31f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3200: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3210: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3220: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
3230: 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74       public stat
3240: 69 63 20 73 74 72 69 6e 67 20 54 69 6d 65 53 74  ic string TimeSt
3250: 61 6d 70 28 44 61 74 65 54 69 6d 65 20 64 61 74  amp(DateTime dat
3260: 65 54 69 6d 65 29 0d 0a 20 20 20 20 20 20 20 20  eTime)..        
3270: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
3280: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 64 61         return da
3290: 74 65 54 69 6d 65 2e 54 6f 53 74 72 69 6e 67 28  teTime.ToString(
32a0: 49 73 6f 38 36 30 31 44 61 74 65 54 69 6d 65 4f  Iso8601DateTimeO
32b0: 75 74 70 75 74 46 6f 72 6d 61 74 29 3b 0d 0a 20  utputFormat);.. 
32c0: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
32d0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
32e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3300: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3310: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
3320: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b  ...            [
3330: 4d 65 74 68 6f 64 49 6d 70 6c 28 4d 65 74 68 6f  MethodImpl(Metho
3340: 64 49 6d 70 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49  dImplOptions.NoI
3350: 6e 6c 69 6e 69 6e 67 29 5d 0d 0a 20 20 20 20 20  nlining)]..     
3360: 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
3370: 74 61 74 69 63 20 73 74 72 69 6e 67 20 47 65 74  tatic string Get
3380: 4d 65 74 68 6f 64 4e 61 6d 65 28 0d 0a 20 20 20  MethodName(..   
3390: 20 20 20 20 20 20 20 20 20 20 20 20 20 53 74 61               Sta
33a0: 63 6b 54 72 61 63 65 20 73 74 61 63 6b 54 72 61  ckTrace stackTra
33b0: 63 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ce,..           
33c0: 20 20 20 20 20 69 6e 74 20 6c 65 76 65 6c 0d 0a       int level..
33d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33e0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
33f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
3400: 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20    try..         
3410: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
3420: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
3430: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
3440: 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 49        // NOTE: I
3450: 66 20 61 20 76 61 6c 69 64 20 73 74 61 63 6b 20  f a valid stack 
3460: 74 72 61 63 65 20 77 61 73 20 6e 6f 74 20 73 75  trace was not su
3470: 70 70 6c 69 65 64 20 62 79 20 74 68 65 0d 0a 20  pplied by the.. 
3480: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3490: 20 20 20 2f 2f 20 20 20 20 20 20 20 63 61 6c 6c     //       call
34a0: 65 72 2c 20 63 72 65 61 74 65 20 6f 6e 65 20 6e  er, create one n
34b0: 6f 77 20 62 61 73 65 64 20 6f 6e 20 74 68 65 20  ow based on the 
34c0: 63 75 72 72 65 6e 74 0d 0a 20 20 20 20 20 20 20  current..       
34d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
34e0: 20 20 20 20 20 20 65 78 65 63 75 74 69 6f 6e 20        execution 
34f0: 73 74 61 63 6b 2e 0d 0a 20 20 20 20 20 20 20 20  stack...        
3500: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
3510: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3520: 20 20 20 20 69 66 20 28 73 74 61 63 6b 54 72 61      if (stackTra
3530: 63 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ce == null)..   
3540: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3550: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
3560: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
3570: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3580: 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a          // NOTE:
3590: 20 47 72 61 62 20 74 68 65 20 63 75 72 72 65 6e   Grab the curren
35a0: 74 20 65 78 65 63 75 74 69 6f 6e 20 73 74 61 63  t execution stac
35b0: 6b 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  k...            
35c0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
35d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35e0: 20 20 20 20 20 20 20 20 73 74 61 63 6b 54 72 61          stackTra
35f0: 63 65 20 3d 20 6e 65 77 20 53 74 61 63 6b 54 72  ce = new StackTr
3600: 61 63 65 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  ace();....      
3610: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3620: 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
3630: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
3640: 20 4e 4f 54 45 3a 20 41 6c 77 61 79 73 20 73 6b   NOTE: Always sk
3650: 69 70 20 74 68 69 73 20 63 61 6c 6c 20 66 72 61  ip this call fra
3660: 6d 65 20 77 68 65 6e 20 77 65 20 63 61 70 74 75  me when we captu
3670: 72 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  re..            
3680: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
3690: 20 20 20 20 20 74 68 65 20 73 74 61 63 6b 20 74       the stack t
36a0: 72 61 63 65 2e 0d 0a 20 20 20 20 20 20 20 20 20  race...         
36b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
36c0: 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
36d0: 20 20 20 20 20 20 20 20 20 20 20 6c 65 76 65 6c             level
36e0: 2b 2b 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ++;..           
36f0: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
3700: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3710: 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
3720: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54            // NOT
3730: 45 3a 20 47 65 74 20 74 68 65 20 73 70 65 63 69  E: Get the speci
3740: 66 69 65 64 20 73 74 61 63 6b 20 66 72 61 6d 65  fied stack frame
3750: 20 28 61 6c 77 61 79 73 20 61 64 64 20 6f 6e 65   (always add one
3760: 20 74 6f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   to..           
3770: 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
3780: 20 20 73 6b 69 70 20 74 68 69 73 20 6d 65 74 68    skip this meth
3790: 6f 64 29 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  od)...          
37a0: 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
37b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37c0: 20 20 53 74 61 63 6b 46 72 61 6d 65 20 73 74 61    StackFrame sta
37d0: 63 6b 46 72 61 6d 65 20 3d 20 73 74 61 63 6b 54  ckFrame = stackT
37e0: 72 61 63 65 2e 47 65 74 46 72 61 6d 65 28 6c 65  race.GetFrame(le
37f0: 76 65 6c 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  vel);....       
3800: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
3810: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
3820: 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 47 65       // NOTE: Ge
3830: 74 20 74 68 65 20 6d 65 74 68 6f 64 20 66 6f 72  t the method for
3840: 20 74 68 65 20 73 74 61 63 6b 20 66 72 61 6d 65   the stack frame
3850: 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
3860: 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
3870: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4d                 M
3880: 65 74 68 6f 64 42 61 73 65 20 6d 65 74 68 6f 64  ethodBase method
3890: 42 61 73 65 20 3d 20 73 74 61 63 6b 46 72 61 6d  Base = stackFram
38a0: 65 2e 47 65 74 4d 65 74 68 6f 64 28 29 3b 0d 0a  e.GetMethod();..
38b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
38c0: 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
38d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
38e0: 20 4e 4f 54 45 3a 20 47 65 74 20 74 68 65 20 74   NOTE: Get the t
38f0: 79 70 65 20 66 6f 72 20 74 68 65 20 6d 65 74 68  ype for the meth
3900: 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  od...           
3910: 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
3920: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3930: 20 54 79 70 65 20 74 79 70 65 20 3d 20 6d 65 74   Type type = met
3940: 68 6f 64 42 61 73 65 2e 44 65 63 6c 61 72 69 6e  hodBase.Declarin
3950: 67 54 79 70 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  gType;....      
3960: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
3970: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
3980: 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 47        // NOTE: G
3990: 65 74 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74  et the name of t
39a0: 68 65 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20  he method...    
39b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
39c0: 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
39d0: 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6e          string n
39e0: 61 6d 65 20 3d 20 6d 65 74 68 6f 64 42 61 73 65  ame = methodBase
39f0: 2e 4e 61 6d 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  .Name;....      
3a00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
3a10: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
3a20: 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 52        // NOTE: R
3a30: 65 74 75 72 6e 20 74 68 65 20 70 72 6f 70 65 72  eturn the proper
3a40: 6c 79 20 66 6f 72 6d 61 74 74 65 64 20 72 65 73  ly formatted res
3a50: 75 6c 74 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  ult...          
3a60: 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
3a70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3a80: 20 20 72 65 74 75 72 6e 20 53 74 72 69 6e 67 2e    return String.
3a90: 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
3aa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3ab0: 20 22 7b 30 7d 7b 31 7d 7b 32 7d 22 2c 20 74 79   "{0}{1}{2}", ty
3ac0: 70 65 2e 4e 61 6d 65 2c 20 54 79 70 65 2e 44 65  pe.Name, Type.De
3ad0: 6c 69 6d 69 74 65 72 2c 20 6e 61 6d 65 29 3b 0d  limiter, name);.
3ae0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
3af0: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
3b00: 20 20 20 20 63 61 74 63 68 0d 0a 20 20 20 20 20      catch..     
3b10: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
3b20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3b30: 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e    // do nothing.
3b40: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
3b50: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
3b60: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 75         return nu
3b70: 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll;..           
3b80: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
3b90: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
3ba0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3bb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3bc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3bd0: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
3be0: 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74       public stat
3bf0: 69 63 20 76 6f 69 64 20 44 65 62 75 67 43 6f 72  ic void DebugCor
3c00: 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
3c10: 20 20 20 20 73 74 72 69 6e 67 20 6d 65 73 73 61      string messa
3c20: 67 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ge,..           
3c30: 20 20 20 20 20 73 74 72 69 6e 67 20 63 61 74 65       string cate
3c40: 67 6f 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20  gory..          
3c50: 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
3c60: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
3c70: 20 20 20 20 20 20 20 20 6c 6f 63 6b 20 28 73 79          lock (sy
3c80: 6e 63 52 6f 6f 74 29 0d 0a 20 20 20 20 20 20 20  ncRoot)..       
3c90: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
3ca0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3cb0: 69 66 20 28 64 65 62 75 67 4c 69 73 74 65 6e 65  if (debugListene
3cc0: 72 73 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  rs != null)..   
3cd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3ce0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
3cf0: 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 65              fore
3d00: 61 63 68 20 28 54 72 61 63 65 4c 69 73 74 65 6e  ach (TraceListen
3d10: 65 72 20 6c 69 73 74 65 6e 65 72 20 69 6e 20 64  er listener in d
3d20: 65 62 75 67 4c 69 73 74 65 6e 65 72 73 29 0d 0a  ebugListeners)..
3d30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3d40: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
3d50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3d60: 20 20 20 20 20 20 20 6c 69 73 74 65 6e 65 72 2e         listener.
3d70: 57 72 69 74 65 4c 69 6e 65 28 6d 65 73 73 61 67  WriteLine(messag
3d80: 65 2c 20 63 61 74 65 67 6f 72 79 29 3b 0d 0a 20  e, category);.. 
3d90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3da0: 20 20 20 20 20 20 20 20 20 20 20 6c 69 73 74 65             liste
3db0: 6e 65 72 2e 46 6c 75 73 68 28 29 3b 0d 0a 20 20  ner.Flush();..  
3dc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3dd0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
3de0: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
3df0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3e00: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
3e10: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
3e20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3e30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3e40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3e50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3e60: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
3e70: 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63     public static
3e80: 20 76 6f 69 64 20 54 72 61 63 65 43 6f 72 65 28   void TraceCore(
3e90: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
3ea0: 20 20 73 74 72 69 6e 67 20 6d 65 73 73 61 67 65    string message
3eb0: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
3ec0: 20 20 20 73 74 72 69 6e 67 20 63 61 74 65 67 6f     string catego
3ed0: 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ry..            
3ee0: 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20      )..         
3ef0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
3f00: 20 20 20 20 20 20 6c 6f 63 6b 20 28 73 79 6e 63        lock (sync
3f10: 52 6f 6f 74 29 0d 0a 20 20 20 20 20 20 20 20 20  Root)..         
3f20: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
3f30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
3f40: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
3f50: 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 57        // NOTE: W
3f60: 72 69 74 65 20 74 68 65 20 6d 65 73 73 61 67 65  rite the message
3f70: 20 74 6f 20 61 6c 6c 20 74 68 65 20 61 63 74 69   to all the acti
3f80: 76 65 20 74 72 61 63 65 0d 0a 20 20 20 20 20 20  ve trace..      
3f90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
3fa0: 20 20 20 20 20 20 20 6c 69 73 74 65 6e 65 72 73         listeners
3fb0: 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
3fc0: 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
3fd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
3fe0: 72 61 63 65 2e 57 72 69 74 65 4c 69 6e 65 28 6d  race.WriteLine(m
3ff0: 65 73 73 61 67 65 2c 20 63 61 74 65 67 6f 72 79  essage, category
4000: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
4010: 20 20 20 20 20 20 20 20 54 72 61 63 65 2e 46 6c          Trace.Fl
4020: 75 73 68 28 29 3b 0d 0a 20 20 20 20 20 20 20 20  ush();..        
4030: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
4040: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
4050: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
4060: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4070: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4080: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4090: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
40a0: 20 20 20 20 20 20 20 20 20 20 20 5b 4d 65 74 68             [Meth
40b0: 6f 64 49 6d 70 6c 28 4d 65 74 68 6f 64 49 6d 70  odImpl(MethodImp
40c0: 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e  lOptions.NoInlin
40d0: 69 6e 67 29 5d 0d 0a 20 20 20 20 20 20 20 20 20  ing)]..         
40e0: 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63     public static
40f0: 20 73 74 72 69 6e 67 20 44 65 62 75 67 41 6e 64   string DebugAnd
4100: 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20  Trace(..        
4110: 20 20 20 20 20 20 20 20 54 72 61 63 65 50 72 69          TracePri
4120: 6f 72 69 74 79 20 74 72 61 63 65 50 72 69 6f 72  ority tracePrior
4130: 69 74 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ity,..          
4140: 20 20 20 20 20 20 54 72 61 63 65 43 61 6c 6c 62        TraceCallb
4150: 61 63 6b 20 64 65 62 75 67 43 61 6c 6c 62 61 63  ack debugCallbac
4160: 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  k,..            
4170: 20 20 20 20 54 72 61 63 65 43 61 6c 6c 62 61 63      TraceCallbac
4180: 6b 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c  k traceCallback,
4190: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
41a0: 20 20 45 78 63 65 70 74 69 6f 6e 20 65 78 63 65    Exception exce
41b0: 70 74 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20  ption,..        
41c0: 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 63          string c
41d0: 61 74 65 67 6f 72 79 0d 0a 20 20 20 20 20 20 20  ategory..       
41e0: 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
41f0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
4200: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 65             if (e
4210: 78 63 65 70 74 69 6f 6e 20 21 3d 20 6e 75 6c 6c  xception != null
4220: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
4230: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 44 65         return De
4240: 62 75 67 41 6e 64 54 72 61 63 65 28 74 72 61 63  bugAndTrace(trac
4250: 65 50 72 69 6f 72 69 74 79 2c 20 64 65 62 75 67  ePriority, debug
4260: 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20  Callback,..     
4270: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4280: 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b     traceCallback
4290: 2c 20 6e 65 77 20 53 74 61 63 6b 54 72 61 63 65  , new StackTrace
42a0: 28 65 78 63 65 70 74 69 6f 6e 2c 20 74 72 75 65  (exception, true
42b0: 29 2c 20 30 2c 0d 0a 20 20 20 20 20 20 20 20 20  ), 0,..         
42c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
42d0: 78 63 65 70 74 69 6f 6e 2e 54 6f 53 74 72 69 6e  xception.ToStrin
42e0: 67 28 29 2c 20 63 61 74 65 67 6f 72 79 29 3b 0d  g(), category);.
42f0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
4300: 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d     return null;.
4310: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
4320: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
4330: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4340: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4350: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4360: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4370: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
4380: 20 5b 4d 65 74 68 6f 64 49 6d 70 6c 28 4d 65 74   [MethodImpl(Met
4390: 68 6f 64 49 6d 70 6c 4f 70 74 69 6f 6e 73 2e 4e  hodImplOptions.N
43a0: 6f 49 6e 6c 69 6e 69 6e 67 29 5d 0d 0a 20 20 20  oInlining)]..   
43b0: 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
43c0: 73 74 61 74 69 63 20 73 74 72 69 6e 67 20 44 65  static string De
43d0: 62 75 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 20  bugAndTrace(..  
43e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
43f0: 61 63 65 50 72 69 6f 72 69 74 79 20 74 72 61 63  acePriority trac
4400: 65 50 72 69 6f 72 69 74 79 2c 0d 0a 20 20 20 20  ePriority,..    
4410: 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
4420: 65 43 61 6c 6c 62 61 63 6b 20 64 65 62 75 67 43  eCallback debugC
4430: 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20  allback,..      
4440: 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 43            TraceC
4450: 61 6c 6c 62 61 63 6b 20 74 72 61 63 65 43 61 6c  allback traceCal
4460: 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20  lback,..        
4470: 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6d          string m
4480: 65 73 73 61 67 65 2c 0d 0a 20 20 20 20 20 20 20  essage,..       
4490: 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
44a0: 63 61 74 65 67 6f 72 79 0d 0a 20 20 20 20 20 20  category..      
44b0: 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
44c0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
44d0: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
44e0: 72 6e 20 44 65 62 75 67 41 6e 64 54 72 61 63 65  rn DebugAndTrace
44f0: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
4500: 20 20 20 20 20 20 20 74 72 61 63 65 50 72 69 6f         tracePrio
4510: 72 69 74 79 2c 20 64 65 62 75 67 43 61 6c 6c 62  rity, debugCallb
4520: 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61  ack, traceCallba
4530: 63 6b 2c 20 6e 75 6c 6c 2c 20 31 2c 0d 0a 20 20  ck, null, 1,..  
4540: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4550: 20 20 6d 65 73 73 61 67 65 2c 20 63 61 74 65 67    message, categ
4560: 6f 72 79 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ory);..         
4570: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
4580: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
4590: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
45a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
45b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
45c0: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
45d0: 20 20 20 20 20 20 20 5b 4d 65 74 68 6f 64 49 6d         [MethodIm
45e0: 70 6c 28 4d 65 74 68 6f 64 49 6d 70 6c 4f 70 74  pl(MethodImplOpt
45f0: 69 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e 69 6e 67 29  ions.NoInlining)
4600: 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ]..            p
4610: 72 69 76 61 74 65 20 73 74 61 74 69 63 20 73 74  rivate static st
4620: 72 69 6e 67 20 44 65 62 75 67 41 6e 64 54 72 61  ring DebugAndTra
4630: 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ce(..           
4640: 20 20 20 20 20 54 72 61 63 65 50 72 69 6f 72 69       TracePriori
4650: 74 79 20 74 72 61 63 65 50 72 69 6f 72 69 74 79  ty tracePriority
4660: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
4670: 20 20 20 54 72 61 63 65 43 61 6c 6c 62 61 63 6b     TraceCallback
4680: 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d   debugCallback,.
4690: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
46a0: 20 54 72 61 63 65 43 61 6c 6c 62 61 63 6b 20 74   TraceCallback t
46b0: 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20  raceCallback,.. 
46c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53                 S
46d0: 74 61 63 6b 54 72 61 63 65 20 73 74 61 63 6b 54  tackTrace stackT
46e0: 72 61 63 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  race,..         
46f0: 20 20 20 20 20 20 20 69 6e 74 20 6c 65 76 65 6c         int level
4700: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
4710: 20 20 20 73 74 72 69 6e 67 20 6d 65 73 73 61 67     string messag
4720: 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
4730: 20 20 20 20 73 74 72 69 6e 67 20 63 61 74 65 67      string categ
4740: 6f 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ory..           
4750: 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
4760: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
4770: 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
4780: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f             // NO
4790: 54 45 3a 20 41 6c 77 61 79 73 20 73 6b 69 70 20  TE: Always skip 
47a0: 74 68 69 73 20 63 61 6c 6c 20 66 72 61 6d 65 20  this call frame 
47b0: 69 66 20 74 68 65 20 73 74 61 63 6b 20 74 72 61  if the stack tra
47c0: 63 65 20 69 73 0d 0a 20 20 20 20 20 20 20 20 20  ce is..         
47d0: 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
47e0: 67 6f 69 6e 67 20 74 6f 20 62 65 20 63 61 70 74  going to be capt
47f0: 75 72 65 64 20 62 79 20 47 65 74 4d 65 74 68 6f  ured by GetMetho
4800: 64 4e 61 6d 65 2e 0d 0a 20 20 20 20 20 20 20 20  dName...        
4810: 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
4820: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
4830: 73 74 61 63 6b 54 72 61 63 65 20 3d 3d 20 6e 75  stackTrace == nu
4840: 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
4850: 20 20 20 20 20 20 20 20 20 6c 65 76 65 6c 2b 2b           level++
4860: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
4870: 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
4880: 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45           // NOTE
4890: 3a 20 46 6f 72 6d 61 74 20 74 68 65 20 6d 65 73  : Format the mes
48a0: 73 61 67 65 20 66 6f 72 20 64 69 73 70 6c 61 79  sage for display
48b0: 20 28 6f 6e 63 65 29 2e 0d 0a 20 20 20 20 20 20   (once)...      
48c0: 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
48d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
48e0: 72 69 6e 67 20 66 6f 72 6d 61 74 74 65 64 20 3d  ring formatted =
48f0: 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 22   String.Format("
4900: 7b 30 7d 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20  {0}: {1}",..    
4910: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4920: 47 65 74 4d 65 74 68 6f 64 4e 61 6d 65 28 73 74  GetMethodName(st
4930: 61 63 6b 54 72 61 63 65 2c 20 6c 65 76 65 6c 29  ackTrace, level)
4940: 2c 20 6d 65 73 73 61 67 65 29 3b 0d 0a 0d 0a 20  , message);.... 
4950: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
4960: 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
4970: 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 49 66 20 74     // NOTE: If t
4980: 68 65 20 64 65 62 75 67 20 63 61 6c 6c 62 61 63  he debug callbac
4990: 6b 20 69 73 20 69 6e 76 61 6c 69 64 20 6f 72 20  k is invalid or 
49a0: 74 68 65 20 74 72 61 63 65 20 70 72 69 6f 72 69  the trace priori
49b0: 74 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ty..            
49c0: 20 20 20 20 2f 2f 20 20 20 20 20 20 20 6f 66 20      //       of 
49d0: 74 68 69 73 20 6d 65 73 73 61 67 65 20 69 73 20  this message is 
49e0: 6c 65 73 73 20 74 68 61 6e 20 77 68 61 74 20 77  less than what w
49f0: 65 20 63 75 72 72 65 6e 74 6c 79 20 77 61 6e 74  e currently want
4a00: 20 74 6f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   to..           
4a10: 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 64 65       //       de
4a20: 62 75 67 2c 20 73 6b 69 70 20 69 74 2e 0d 0a 20  bug, skip it... 
4a30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
4a40: 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
4a50: 20 20 20 69 66 20 28 28 64 65 62 75 67 43 61 6c     if ((debugCal
4a60: 6c 62 61 63 6b 20 21 3d 20 6e 75 6c 6c 29 20 26  lback != null) &
4a70: 26 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  &..             
4a80: 20 20 20 20 20 20 20 28 74 72 61 63 65 50 72 69         (tracePri
4a90: 6f 72 69 74 79 20 3e 3d 20 44 65 62 75 67 50 72  ority >= DebugPr
4aa0: 69 6f 72 69 74 79 29 29 0d 0a 20 20 20 20 20 20  iority))..      
4ab0: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
4ac0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4ad0: 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
4ae0: 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45           // NOTE
4af0: 3a 20 49 6e 76 6f 6b 65 20 74 68 65 20 64 65 62  : Invoke the deb
4b00: 75 67 20 63 61 6c 6c 62 61 63 6b 20 77 69 74 68  ug callback with
4b10: 20 74 68 65 20 66 6f 72 6d 61 74 74 65 64 0d 0a   the formatted..
4b20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4b30: 20 20 20 20 2f 2f 20 20 20 20 20 20 20 6d 65 73      //       mes
4b40: 73 61 67 65 20 61 6e 64 20 74 68 65 20 63 61 74  sage and the cat
4b50: 65 67 6f 72 79 20 73 70 65 63 69 66 69 65 64 20  egory specified 
4b60: 62 79 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20  by the..        
4b70: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
4b80: 20 20 20 20 20 63 61 6c 6c 65 72 2e 0d 0a 20 20       caller...  
4b90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4ba0: 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
4bb0: 20 20 20 20 20 20 20 20 20 20 64 65 62 75 67 43            debugC
4bc0: 61 6c 6c 62 61 63 6b 28 66 6f 72 6d 61 74 74 65  allback(formatte
4bd0: 64 2c 20 63 61 74 65 67 6f 72 79 29 3b 0d 0a 20  d, category);.. 
4be0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
4bf0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
4c00: 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
4c10: 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a          // NOTE:
4c20: 20 49 66 20 74 68 65 20 74 72 61 63 65 20 63 61   If the trace ca
4c30: 6c 6c 62 61 63 6b 20 69 73 20 69 6e 76 61 6c 69  llback is invali
4c40: 64 20 6f 72 20 74 68 65 20 74 72 61 63 65 20 70  d or the trace p
4c50: 72 69 6f 72 69 74 79 0d 0a 20 20 20 20 20 20 20  riority..       
4c60: 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
4c70: 20 20 6f 66 20 74 68 69 73 20 6d 65 73 73 61 67    of this messag
4c80: 65 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20 77  e is less than w
4c90: 68 61 74 20 77 65 20 63 75 72 72 65 6e 74 6c 79  hat we currently
4ca0: 20 77 61 6e 74 20 74 6f 0d 0a 20 20 20 20 20 20   want to..      
4cb0: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
4cc0: 20 20 20 74 72 61 63 65 2c 20 73 6b 69 70 20 69     trace, skip i
4cd0: 74 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t...            
4ce0: 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
4cf0: 20 20 20 20 20 20 20 20 69 66 20 28 28 74 72 61          if ((tra
4d00: 63 65 43 61 6c 6c 62 61 63 6b 20 21 3d 20 6e 75  ceCallback != nu
4d10: 6c 6c 29 20 26 26 0d 0a 20 20 20 20 20 20 20 20  ll) &&..        
4d20: 20 20 20 20 20 20 20 20 20 20 20 20 28 74 72 61              (tra
4d30: 63 65 50 72 69 6f 72 69 74 79 20 3e 3d 20 54 72  cePriority >= Tr
4d40: 61 63 65 50 72 69 6f 72 69 74 79 29 29 0d 0a 20  acePriority)).. 
4d50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
4d60: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
4d70: 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
4d80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
4d90: 20 4e 4f 54 45 3a 20 49 6e 76 6f 6b 65 20 74 68   NOTE: Invoke th
4da0: 65 20 74 72 61 63 65 20 63 61 6c 6c 62 61 63 6b  e trace callback
4db0: 20 77 69 74 68 20 74 68 65 20 66 6f 72 6d 61 74   with the format
4dc0: 74 65 64 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ted..           
4dd0: 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
4de0: 20 20 6d 65 73 73 61 67 65 20 61 6e 64 20 74 68    message and th
4df0: 65 20 63 61 74 65 67 6f 72 79 20 73 70 65 63 69  e category speci
4e00: 66 69 65 64 20 62 79 20 74 68 65 0d 0a 20 20 20  fied by the..   
4e10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4e20: 20 2f 2f 20 20 20 20 20 20 20 63 61 6c 6c 65 72   //       caller
4e30: 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
4e40: 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
4e50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
4e60: 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 66 6f 72  raceCallback(for
4e70: 6d 61 74 74 65 64 2c 20 63 61 74 65 67 6f 72 79  matted, category
4e80: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
4e90: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
4ea0: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
4eb0: 6d 65 73 73 61 67 65 3b 0d 0a 20 20 20 20 20 20  message;..      
4ec0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
4ed0: 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d       #endregion.
4ee0: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
4ef0: 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
4f00: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
4f10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4f20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4f30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4f40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4f50: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65  /....        #re
4f60: 67 69 6f 6e 20 4d 6f 63 6b 52 65 67 69 73 74 72  gion MockRegistr
4f70: 79 20 43 6c 61 73 73 0d 0a 20 20 20 20 20 20 20  y Class..       
4f80: 20 70 72 69 76 61 74 65 20 73 65 61 6c 65 64 20   private sealed 
4f90: 63 6c 61 73 73 20 4d 6f 63 6b 52 65 67 69 73 74  class MockRegist
4fa0: 72 79 20 3a 20 49 44 69 73 70 6f 73 61 62 6c 65  ry : IDisposable
4fb0: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
4fc0: 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e           #region
4fd0: 20 50 75 62 6c 69 63 20 43 6f 6e 73 74 72 75 63   Public Construc
4fe0: 74 6f 72 73 0d 0a 20 20 20 20 20 20 20 20 20 20  tors..          
4ff0: 20 20 70 75 62 6c 69 63 20 4d 6f 63 6b 52 65 67    public MockReg
5000: 69 73 74 72 79 28 29 0d 0a 20 20 20 20 20 20 20  istry()..       
5010: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
5020: 20 20 20 20 20 20 20 20 77 68 61 74 49 66 20 3d          whatIf =
5030: 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20   true;..        
5040: 20 20 20 20 20 20 20 20 72 65 61 64 4f 6e 6c 79          readOnly
5050: 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20   = true;..      
5060: 20 20 20 20 20 20 20 20 20 20 73 61 66 65 20 3d            safe =
5070: 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20   true;..        
5080: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
5090: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
50a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
50b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
50c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
50d0: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
50e0: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 4d          public M
50f0: 6f 63 6b 52 65 67 69 73 74 72 79 28 0d 0a 20 20  ockRegistry(..  
5100: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f                bo
5110: 6f 6c 20 77 68 61 74 49 66 0d 0a 20 20 20 20 20  ol whatIf..     
5120: 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
5130: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3a 20                : 
5140: 74 68 69 73 28 29 0d 0a 20 20 20 20 20 20 20 20  this()..        
5150: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
5160: 20 20 20 20 20 20 20 74 68 69 73 2e 77 68 61 74         this.what
5170: 49 66 20 3d 20 77 68 61 74 49 66 3b 0d 0a 20 20  If = whatIf;..  
5180: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
5190: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
51a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
51b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
51c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
51d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
51e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
51f0: 62 6c 69 63 20 4d 6f 63 6b 52 65 67 69 73 74 72  blic MockRegistr
5200: 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y(..            
5210: 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c      bool whatIf,
5220: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
5230: 20 20 62 6f 6f 6c 20 72 65 61 64 4f 6e 6c 79 0d    bool readOnly.
5240: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
5250: 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   )..            
5260: 20 20 20 20 3a 20 74 68 69 73 28 77 68 61 74 49      : this(whatI
5270: 66 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  f)..            
5280: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
5290: 20 20 20 74 68 69 73 2e 72 65 61 64 4f 6e 6c 79     this.readOnly
52a0: 20 3d 20 72 65 61 64 4f 6e 6c 79 3b 0d 0a 20 20   = readOnly;..  
52b0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
52c0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
52d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
52e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
52f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5300: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
5310: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
5320: 62 6c 69 63 20 4d 6f 63 6b 52 65 67 69 73 74 72  blic MockRegistr
5330: 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y(..            
5340: 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c      bool whatIf,
5350: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
5360: 20 20 62 6f 6f 6c 20 72 65 61 64 4f 6e 6c 79 2c    bool readOnly,
5370: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
5380: 20 20 62 6f 6f 6c 20 73 61 66 65 0d 0a 20 20 20    bool safe..   
5390: 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a               )..
53a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
53b0: 3a 20 74 68 69 73 28 77 68 61 74 49 66 2c 20 72  : this(whatIf, r
53c0: 65 61 64 4f 6e 6c 79 29 0d 0a 20 20 20 20 20 20  eadOnly)..      
53d0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
53e0: 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 73 61           this.sa
53f0: 66 65 20 3d 20 73 61 66 65 3b 0d 0a 20 20 20 20  fe = safe;..    
5400: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
5410: 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f         #endregio
5420: 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n....           
5430: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
5440: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5450: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5460: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5470: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
5480: 20 20 20 20 23 72 65 67 69 6f 6e 20 50 75 62 6c      #region Publ
5490: 69 63 20 50 72 6f 70 65 72 74 69 65 73 0d 0a 20  ic Properties.. 
54a0: 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
54b0: 74 65 20 62 6f 6f 6c 20 77 68 61 74 49 66 3b 0d  te bool whatIf;.
54c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
54d0: 6c 69 63 20 62 6f 6f 6c 20 57 68 61 74 49 66 0d  lic bool WhatIf.
54e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
54f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5500: 67 65 74 20 7b 20 43 68 65 63 6b 44 69 73 70 6f  get { CheckDispo
5510: 73 65 64 28 29 3b 20 72 65 74 75 72 6e 20 77 68  sed(); return wh
5520: 61 74 49 66 3b 20 7d 0d 0a 20 20 20 20 20 20 20  atIf; }..       
5530: 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 43           set { C
5540: 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 20  heckDisposed(); 
5550: 77 68 61 74 49 66 20 3d 20 76 61 6c 75 65 3b 20  whatIf = value; 
5560: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
5570: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
5580: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5590: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
55a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
55b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
55c0: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
55d0: 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20     private bool 
55e0: 72 65 61 64 4f 6e 6c 79 3b 0d 0a 20 20 20 20 20  readOnly;..     
55f0: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f         public bo
5600: 6f 6c 20 52 65 61 64 4f 6e 6c 79 0d 0a 20 20 20  ol ReadOnly..   
5610: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
5620: 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20              get 
5630: 7b 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28  { CheckDisposed(
5640: 29 3b 20 72 65 74 75 72 6e 20 72 65 61 64 4f 6e  ); return readOn
5650: 6c 79 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  ly; }..         
5660: 20 20 20 20 20 20 20 73 65 74 20 7b 20 43 68 65         set { Che
5670: 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 20 72 65  ckDisposed(); re
5680: 61 64 4f 6e 6c 79 20 3d 20 76 61 6c 75 65 3b 20  adOnly = value; 
5690: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
56a0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
56b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
56c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
56d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
56e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
56f0: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
5700: 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20     private bool 
5710: 73 61 66 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  safe;..         
5720: 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 53     public bool S
5730: 61 66 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  afe..           
5740: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
5750: 20 20 20 20 67 65 74 20 7b 20 43 68 65 63 6b 44      get { CheckD
5760: 69 73 70 6f 73 65 64 28 29 3b 20 72 65 74 75 72  isposed(); retur
5770: 6e 20 73 61 66 65 3b 20 7d 0d 0a 20 20 20 20 20  n safe; }..     
5780: 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b             set {
5790: 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29   CheckDisposed()
57a0: 3b 20 73 61 66 65 20 3d 20 76 61 6c 75 65 3b 20  ; safe = value; 
57b0: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
57c0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
57d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
57e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
57f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5800: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5810: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
5820: 20 20 20 70 72 69 76 61 74 65 20 4d 6f 63 6b 52     private MockR
5830: 65 67 69 73 74 72 79 4b 65 79 20 63 6c 61 73 73  egistryKey class
5840: 65 73 52 6f 6f 74 3b 0d 0a 20 20 20 20 20 20 20  esRoot;..       
5850: 20 20 20 20 20 70 75 62 6c 69 63 20 4d 6f 63 6b       public Mock
5860: 52 65 67 69 73 74 72 79 4b 65 79 20 43 6c 61 73  RegistryKey Clas
5870: 73 65 73 52 6f 6f 74 0d 0a 20 20 20 20 20 20 20  sesRoot..       
5880: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
5890: 20 20 20 20 20 20 20 20 67 65 74 0d 0a 20 20 20          get..   
58a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
58b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
58c0: 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65      CheckDispose
58d0: 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  d();....        
58e0: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
58f0: 63 6c 61 73 73 65 73 52 6f 6f 74 20 3d 3d 20 6e  classesRoot == n
5900: 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
5910: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6c                cl
5920: 61 73 73 65 73 52 6f 6f 74 20 3d 20 6e 65 77 20  assesRoot = new 
5930: 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 28  MockRegistryKey(
5940: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
5950: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65                Re
5960: 67 69 73 74 72 79 2e 43 6c 61 73 73 65 73 52 6f  gistry.ClassesRo
5970: 6f 74 2c 20 77 68 61 74 49 66 2c 20 72 65 61 64  ot, whatIf, read
5980: 4f 6e 6c 79 2c 20 73 61 66 65 29 3b 0d 0a 0d 0a  Only, safe);....
5990: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
59a0: 20 20 20 20 72 65 74 75 72 6e 20 63 6c 61 73 73      return class
59b0: 65 73 52 6f 6f 74 3b 0d 0a 20 20 20 20 20 20 20  esRoot;..       
59c0: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
59d0: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
59e0: 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
59f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5a00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5a10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5a20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
5a30: 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
5a40: 61 74 65 20 4d 6f 63 6b 52 65 67 69 73 74 72 79  ate MockRegistry
5a50: 4b 65 79 20 63 75 72 72 65 6e 74 43 6f 6e 66 69  Key currentConfi
5a60: 67 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  g;..            
5a70: 70 75 62 6c 69 63 20 4d 6f 63 6b 52 65 67 69 73  public MockRegis
5a80: 74 72 79 4b 65 79 20 43 75 72 72 65 6e 74 43 6f  tryKey CurrentCo
5a90: 6e 66 69 67 0d 0a 20 20 20 20 20 20 20 20 20 20  nfig..          
5aa0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
5ab0: 20 20 20 20 20 67 65 74 0d 0a 20 20 20 20 20 20       get..      
5ac0: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
5ad0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5ae0: 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29   CheckDisposed()
5af0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
5b00: 20 20 20 20 20 20 20 20 20 69 66 20 28 63 75 72           if (cur
5b10: 72 65 6e 74 43 6f 6e 66 69 67 20 3d 3d 20 6e 75  rentConfig == nu
5b20: 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
5b30: 20 20 20 20 20 20 20 20 20 20 20 20 20 63 75 72               cur
5b40: 72 65 6e 74 43 6f 6e 66 69 67 20 3d 20 6e 65 77  rentConfig = new
5b50: 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79   MockRegistryKey
5b60: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
5b70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52                 R
5b80: 65 67 69 73 74 72 79 2e 43 75 72 72 65 6e 74 43  egistry.CurrentC
5b90: 6f 6e 66 69 67 2c 20 77 68 61 74 49 66 2c 20 72  onfig, whatIf, r
5ba0: 65 61 64 4f 6e 6c 79 2c 20 73 61 66 65 29 3b 0d  eadOnly, safe);.
5bb0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
5bc0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 63 75         return cu
5bd0: 72 72 65 6e 74 43 6f 6e 66 69 67 3b 0d 0a 20 20  rrentConfig;..  
5be0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
5bf0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
5c00: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
5c10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5c20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5c30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5c40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5c50: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
5c60: 20 70 72 69 76 61 74 65 20 4d 6f 63 6b 52 65 67   private MockReg
5c70: 69 73 74 72 79 4b 65 79 20 63 75 72 72 65 6e 74  istryKey current
5c80: 55 73 65 72 3b 0d 0a 20 20 20 20 20 20 20 20 20  User;..         
5c90: 20 20 20 70 75 62 6c 69 63 20 4d 6f 63 6b 52 65     public MockRe
5ca0: 67 69 73 74 72 79 4b 65 79 20 43 75 72 72 65 6e  gistryKey Curren
5cb0: 74 55 73 65 72 0d 0a 20 20 20 20 20 20 20 20 20  tUser..         
5cc0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
5cd0: 20 20 20 20 20 20 67 65 74 0d 0a 20 20 20 20 20        get..     
5ce0: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
5cf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5d00: 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28    CheckDisposed(
5d10: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
5d20: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 63 75            if (cu
5d30: 72 72 65 6e 74 55 73 65 72 20 3d 3d 20 6e 75 6c  rrentUser == nul
5d40: 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
5d50: 20 20 20 20 20 20 20 20 20 20 20 20 63 75 72 72              curr
5d60: 65 6e 74 55 73 65 72 20 3d 20 6e 65 77 20 4d 6f  entUser = new Mo
5d70: 63 6b 52 65 67 69 73 74 72 79 4b 65 79 28 0d 0a  ckRegistryKey(..
5d80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5d90: 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69              Regi
5da0: 73 74 72 79 2e 43 75 72 72 65 6e 74 55 73 65 72  stry.CurrentUser
5db0: 2c 20 77 68 61 74 49 66 2c 20 72 65 61 64 4f 6e  , whatIf, readOn
5dc0: 6c 79 2c 20 73 61 66 65 29 3b 0d 0a 0d 0a 20 20  ly, safe);....  
5dd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5de0: 20 20 72 65 74 75 72 6e 20 63 75 72 72 65 6e 74    return current
5df0: 55 73 65 72 3b 0d 0a 20 20 20 20 20 20 20 20 20  User;..         
5e00: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
5e10: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
5e20: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
5e30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5e40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5e50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5e60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
5e70: 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
5e80: 65 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65  e MockRegistryKe
5e90: 79 20 64 79 6e 44 61 74 61 3b 0d 0a 20 20 20 20  y dynData;..    
5ea0: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 4d          public M
5eb0: 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 44  ockRegistryKey D
5ec0: 79 6e 44 61 74 61 0d 0a 20 20 20 20 20 20 20 20  ynData..        
5ed0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
5ee0: 20 20 20 20 20 20 20 67 65 74 0d 0a 20 20 20 20         get..    
5ef0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
5f00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5f10: 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64     CheckDisposed
5f20: 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ();....         
5f30: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 64             if (d
5f40: 79 6e 44 61 74 61 20 3d 3d 20 6e 75 6c 6c 29 0d  ynData == null).
5f50: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
5f60: 20 20 20 20 20 20 20 20 20 64 79 6e 44 61 74 61           dynData
5f70: 20 3d 20 6e 65 77 20 4d 6f 63 6b 52 65 67 69 73   = new MockRegis
5f80: 74 72 79 4b 65 79 28 0d 0a 20 20 20 20 20 20 20  tryKey(..       
5f90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5fa0: 20 20 20 20 20 52 65 67 69 73 74 72 79 2e 44 79       Registry.Dy
5fb0: 6e 44 61 74 61 2c 20 77 68 61 74 49 66 2c 20 72  nData, whatIf, r
5fc0: 65 61 64 4f 6e 6c 79 2c 20 73 61 66 65 29 3b 0d  eadOnly, safe);.
5fd0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
5fe0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 64 79         return dy
5ff0: 6e 44 61 74 61 3b 0d 0a 20 20 20 20 20 20 20 20  nData;..        
6000: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
6010: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
6020: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
6030: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6040: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6050: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6060: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
6070: 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
6080: 74 65 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b  te MockRegistryK
6090: 65 79 20 6c 6f 63 61 6c 4d 61 63 68 69 6e 65 3b  ey localMachine;
60a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
60b0: 62 6c 69 63 20 4d 6f 63 6b 52 65 67 69 73 74 72  blic MockRegistr
60c0: 79 4b 65 79 20 4c 6f 63 61 6c 4d 61 63 68 69 6e  yKey LocalMachin
60d0: 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  e..            {
60e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
60f0: 20 20 67 65 74 0d 0a 20 20 20 20 20 20 20 20 20    get..         
6100: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
6110: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43 68                Ch
6120: 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a  eckDisposed();..
6130: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
6140: 20 20 20 20 20 20 69 66 20 28 6c 6f 63 61 6c 4d        if (localM
6150: 61 63 68 69 6e 65 20 3d 3d 20 6e 75 6c 6c 29 0d  achine == null).
6160: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
6170: 20 20 20 20 20 20 20 20 20 6c 6f 63 61 6c 4d 61           localMa
6180: 63 68 69 6e 65 20 3d 20 6e 65 77 20 4d 6f 63 6b  chine = new Mock
6190: 52 65 67 69 73 74 72 79 4b 65 79 28 0d 0a 20 20  RegistryKey(..  
61a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
61b0: 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74            Regist
61c0: 72 79 2e 4c 6f 63 61 6c 4d 61 63 68 69 6e 65 2c  ry.LocalMachine,
61d0: 20 77 68 61 74 49 66 2c 20 72 65 61 64 4f 6e 6c   whatIf, readOnl
61e0: 79 2c 20 73 61 66 65 29 3b 0d 0a 0d 0a 20 20 20  y, safe);....   
61f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6200: 20 72 65 74 75 72 6e 20 6c 6f 63 61 6c 4d 61 63   return localMac
6210: 68 69 6e 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  hine;..         
6220: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
6230: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
6240: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
6250: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6260: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6270: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6280: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
6290: 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
62a0: 65 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65  e MockRegistryKe
62b0: 79 20 70 65 72 66 6f 72 6d 61 6e 63 65 44 61 74  y performanceDat
62c0: 61 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  a;..            
62d0: 70 75 62 6c 69 63 20 4d 6f 63 6b 52 65 67 69 73  public MockRegis
62e0: 74 72 79 4b 65 79 20 50 65 72 66 6f 72 6d 61 6e  tryKey Performan
62f0: 63 65 44 61 74 61 0d 0a 20 20 20 20 20 20 20 20  ceData..        
6300: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
6310: 20 20 20 20 20 20 20 67 65 74 0d 0a 20 20 20 20         get..    
6320: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
6330: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6340: 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64     CheckDisposed
6350: 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ();....         
6360: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 70             if (p
6370: 65 72 66 6f 72 6d 61 6e 63 65 44 61 74 61 20 3d  erformanceData =
6380: 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
6390: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
63a0: 20 70 65 72 66 6f 72 6d 61 6e 63 65 44 61 74 61   performanceData
63b0: 20 3d 20 6e 65 77 20 4d 6f 63 6b 52 65 67 69 73   = new MockRegis
63c0: 74 72 79 4b 65 79 28 0d 0a 20 20 20 20 20 20 20  tryKey(..       
63d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
63e0: 20 20 20 20 20 52 65 67 69 73 74 72 79 2e 50 65       Registry.Pe
63f0: 72 66 6f 72 6d 61 6e 63 65 44 61 74 61 2c 20 77  rformanceData, w
6400: 68 61 74 49 66 2c 20 72 65 61 64 4f 6e 6c 79 2c  hatIf, readOnly,
6410: 20 73 61 66 65 29 3b 0d 0a 0d 0a 20 20 20 20 20   safe);....     
6420: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
6430: 65 74 75 72 6e 20 70 65 72 66 6f 72 6d 61 6e 63  eturn performanc
6440: 65 44 61 74 61 3b 0d 0a 20 20 20 20 20 20 20 20  eData;..        
6450: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
6460: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
6470: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
6480: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6490: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
64a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
64b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
64c0: 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
64d0: 74 65 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b  te MockRegistryK
64e0: 65 79 20 75 73 65 72 73 3b 0d 0a 20 20 20 20 20  ey users;..     
64f0: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 4d 6f         public Mo
6500: 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 55 73  ckRegistryKey Us
6510: 65 72 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ers..           
6520: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
6530: 20 20 20 20 67 65 74 0d 0a 20 20 20 20 20 20 20      get..       
6540: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
6550: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6560: 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b  CheckDisposed();
6570: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
6580: 20 20 20 20 20 20 20 20 69 66 20 28 75 73 65 72          if (user
6590: 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  s == null)..    
65a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
65b0: 20 20 20 20 75 73 65 72 73 20 3d 20 6e 65 77 20      users = new 
65c0: 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 28  MockRegistryKey(
65d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
65e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65                Re
65f0: 67 69 73 74 72 79 2e 55 73 65 72 73 2c 20 77 68  gistry.Users, wh
6600: 61 74 49 66 2c 20 72 65 61 64 4f 6e 6c 79 2c 20  atIf, readOnly, 
6610: 73 61 66 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  safe);....      
6620: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
6630: 74 75 72 6e 20 75 73 65 72 73 3b 0d 0a 20 20 20  turn users;..   
6640: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
6650: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
6660: 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 72             #endr
6670: 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20  egion....       
6680: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
6690: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
66a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
66b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
66c0: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
66d0: 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20          #region 
66e0: 50 75 62 6c 69 63 20 22 52 65 67 69 73 74 72 79  Public "Registry
66f0: 22 20 4d 65 74 68 6f 64 73 0d 0a 20 20 20 20 20  " Methods..     
6700: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 6f 62         public ob
6710: 6a 65 63 74 20 47 65 74 56 61 6c 75 65 28 0d 0a  ject GetValue(..
6720: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6730: 73 74 72 69 6e 67 20 6b 65 79 4e 61 6d 65 2c 0d  string keyName,.
6740: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
6750: 20 73 74 72 69 6e 67 20 76 61 6c 75 65 4e 61 6d   string valueNam
6760: 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
6770: 20 20 20 20 6f 62 6a 65 63 74 20 64 65 66 61 75      object defau
6780: 6c 74 56 61 6c 75 65 0d 0a 20 20 20 20 20 20 20  ltValue..       
6790: 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
67a0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
67b0: 20 20 20 20 20 20 20 20 20 20 20 43 68 65 63 6b             Check
67c0: 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20  Disposed();.... 
67d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
67e0: 65 74 75 72 6e 20 52 65 67 69 73 74 72 79 2e 47  eturn Registry.G
67f0: 65 74 56 61 6c 75 65 28 6b 65 79 4e 61 6d 65 2c  etValue(keyName,
6800: 20 76 61 6c 75 65 4e 61 6d 65 2c 20 64 65 66 61   valueName, defa
6810: 75 6c 74 56 61 6c 75 65 29 3b 0d 0a 20 20 20 20  ultValue);..    
6820: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
6830: 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
6840: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6850: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6860: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6870: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
6880: 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
6890: 69 63 20 76 6f 69 64 20 53 65 74 56 61 6c 75 65  ic void SetValue
68a0: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
68b0: 20 20 20 73 74 72 69 6e 67 20 6b 65 79 4e 61 6d     string keyNam
68c0: 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
68d0: 20 20 20 20 73 74 72 69 6e 67 20 76 61 6c 75 65      string value
68e0: 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  Name,..         
68f0: 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 76 61         object va
6900: 6c 75 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  lue..           
6910: 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
6920: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
6930: 20 20 20 20 20 20 20 43 68 65 63 6b 44 69 73 70         CheckDisp
6940: 6f 73 65 64 28 29 3b 0d 0a 20 20 20 20 20 20 20  osed();..       
6950: 20 20 20 20 20 20 20 20 20 43 68 65 63 6b 52 65           CheckRe
6960: 61 64 4f 6e 6c 79 28 29 3b 0d 0a 0d 0a 20 20 20  adOnly();....   
6970: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
6980: 28 21 77 68 61 74 49 66 29 0d 0a 20 20 20 20 20  (!whatIf)..     
6990: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52                 R
69a0: 65 67 69 73 74 72 79 2e 53 65 74 56 61 6c 75 65  egistry.SetValue
69b0: 28 6b 65 79 4e 61 6d 65 2c 20 76 61 6c 75 65 4e  (keyName, valueN
69c0: 61 6d 65 2c 20 76 61 6c 75 65 29 3b 0d 0a 20 20  ame, value);..  
69d0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
69e0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
69f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6a00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6a10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6a20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
6a30: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
6a40: 62 6c 69 63 20 76 6f 69 64 20 53 65 74 56 61 6c  blic void SetVal
6a50: 75 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue(..           
6a60: 20 20 20 20 20 73 74 72 69 6e 67 20 6b 65 79 4e       string keyN
6a70: 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ame,..          
6a80: 20 20 20 20 20 20 73 74 72 69 6e 67 20 76 61 6c        string val
6a90: 75 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20  ueName,..       
6aa0: 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20           object 
6ab0: 76 61 6c 75 65 2c 0d 0a 20 20 20 20 20 20 20 20  value,..        
6ac0: 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79          Registry
6ad0: 56 61 6c 75 65 4b 69 6e 64 20 76 61 6c 75 65 4b  ValueKind valueK
6ae0: 69 6e 64 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ind..           
6af0: 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
6b00: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
6b10: 20 20 20 20 20 20 20 43 68 65 63 6b 44 69 73 70         CheckDisp
6b20: 6f 73 65 64 28 29 3b 0d 0a 20 20 20 20 20 20 20  osed();..       
6b30: 20 20 20 20 20 20 20 20 20 43 68 65 63 6b 52 65           CheckRe
6b40: 61 64 4f 6e 6c 79 28 29 3b 0d 0a 0d 0a 20 20 20  adOnly();....   
6b50: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
6b60: 28 21 77 68 61 74 49 66 29 0d 0a 20 20 20 20 20  (!whatIf)..     
6b70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52                 R
6b80: 65 67 69 73 74 72 79 2e 53 65 74 56 61 6c 75 65  egistry.SetValue
6b90: 28 6b 65 79 4e 61 6d 65 2c 20 76 61 6c 75 65 4e  (keyName, valueN
6ba0: 61 6d 65 2c 20 76 61 6c 75 65 2c 20 76 61 6c 75  ame, value, valu
6bb0: 65 4b 69 6e 64 29 3b 0d 0a 20 20 20 20 20 20 20  eKind);..       
6bc0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
6bd0: 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
6be0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
6bf0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6c00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6c10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6c20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6c30: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
6c40: 20 23 72 65 67 69 6f 6e 20 50 72 69 76 61 74 65   #region Private
6c50: 20 4d 65 74 68 6f 64 73 0d 0a 20 20 20 20 20 20   Methods..      
6c60: 20 20 20 20 20 20 70 72 69 76 61 74 65 20 76 6f        private vo
6c70: 69 64 20 43 68 65 63 6b 52 65 61 64 4f 6e 6c 79  id CheckReadOnly
6c80: 28 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ()..            
6c90: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
6ca0: 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
6cb0: 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20         // NOTE: 
6cc0: 49 6e 20 22 72 65 61 64 2d 6f 6e 6c 79 22 20 6d  In "read-only" m
6cd0: 6f 64 65 2c 20 77 65 20 64 69 73 61 6c 6c 6f 77  ode, we disallow
6ce0: 20 61 6c 6c 20 77 72 69 74 65 20 61 63 63 65 73   all write acces
6cf0: 73 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  s...            
6d00: 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
6d10: 20 20 20 20 20 20 20 20 69 66 20 28 21 72 65 61          if (!rea
6d20: 64 4f 6e 6c 79 29 0d 0a 20 20 20 20 20 20 20 20  dOnly)..        
6d30: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
6d40: 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  rn;....         
6d50: 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77         throw new
6d60: 20 49 6e 76 61 6c 69 64 4f 70 65 72 61 74 69 6f   InvalidOperatio
6d70: 6e 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 20  nException();.. 
6d80: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
6d90: 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65            #endre
6da0: 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20  gion....        
6db0: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
6dc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6dd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6de0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6df0: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
6e00: 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 49         #region I
6e10: 44 69 73 70 6f 73 61 62 6c 65 20 22 50 61 74 74  Disposable "Patt
6e20: 65 72 6e 22 20 4d 65 6d 62 65 72 73 0d 0a 20 20  ern" Members..  
6e30: 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
6e40: 65 20 62 6f 6f 6c 20 64 69 73 70 6f 73 65 64 3b  e bool disposed;
6e50: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
6e60: 69 76 61 74 65 20 76 6f 69 64 20 43 68 65 63 6b  ivate void Check
6e70: 44 69 73 70 6f 73 65 64 28 29 20 2f 2a 20 74 68  Disposed() /* th
6e80: 72 6f 77 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20  row */..        
6e90: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
6ea0: 20 20 20 20 20 20 20 69 66 20 28 21 64 69 73 70         if (!disp
6eb0: 6f 73 65 64 29 0d 0a 20 20 20 20 20 20 20 20 20  osed)..         
6ec0: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
6ed0: 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  n;....          
6ee0: 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20        throw new 
6ef0: 4f 62 6a 65 63 74 44 69 73 70 6f 73 65 64 45 78  ObjectDisposedEx
6f00: 63 65 70 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20  ception(..      
6f10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 79                ty
6f20: 70 65 6f 66 28 4d 6f 63 6b 52 65 67 69 73 74 72  peof(MockRegistr
6f30: 79 29 2e 4e 61 6d 65 29 3b 0d 0a 20 20 20 20 20  y).Name);..     
6f40: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
6f50: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
6f60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6f70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6f80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6f90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
6fa0: 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
6fb0: 74 65 20 2f 2a 20 70 72 6f 74 65 63 74 65 64 20  te /* protected 
6fc0: 76 69 72 74 75 61 6c 20 2a 2f 20 76 6f 69 64 20  virtual */ void 
6fd0: 44 69 73 70 6f 73 65 28 0d 0a 20 20 20 20 20 20  Dispose(..      
6fe0: 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 64            bool d
6ff0: 69 73 70 6f 73 69 6e 67 0d 0a 20 20 20 20 20 20  isposing..      
7000: 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
7010: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
7020: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
7030: 21 64 69 73 70 6f 73 65 64 29 0d 0a 20 20 20 20  !disposed)..    
7040: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
7050: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7060: 20 20 20 69 66 20 28 64 69 73 70 6f 73 69 6e 67     if (disposing
7070: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
7080: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
7090: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
70a0: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
70b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
70c0: 2f 2f 2f 2f 2f 2f 0d 0a 20 20 20 20 20 20 20 20  //////..        
70d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
70e0: 2f 2f 20 64 69 73 70 6f 73 65 20 6d 61 6e 61 67  // dispose manag
70f0: 65 64 20 72 65 73 6f 75 72 63 65 73 20 68 65 72  ed resources her
7100: 65 2e 2e 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  e.....          
7110: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
7120: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7130: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7140: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
7150: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
7160: 20 28 63 6c 61 73 73 65 73 52 6f 6f 74 20 21 3d   (classesRoot !=
7170: 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
7180: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7190: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
71a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
71b0: 6c 61 73 73 65 73 52 6f 6f 74 2e 43 6c 6f 73 65  lassesRoot.Close
71c0: 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ();..           
71d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
71e0: 20 63 6c 61 73 73 65 73 52 6f 6f 74 20 3d 20 6e   classesRoot = n
71f0: 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ull;..          
7200: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
7210: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
7220: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 63             if (c
7230: 75 72 72 65 6e 74 43 6f 6e 66 69 67 20 21 3d 20  urrentConfig != 
7240: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
7250: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
7260: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
7270: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 75                cu
7280: 72 72 65 6e 74 43 6f 6e 66 69 67 2e 43 6c 6f 73  rrentConfig.Clos
7290: 65 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  e();..          
72a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
72b0: 20 20 63 75 72 72 65 6e 74 43 6f 6e 66 69 67 20    currentConfig 
72c0: 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20  = null;..       
72d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
72e0: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
72f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
7300: 20 28 63 75 72 72 65 6e 74 55 73 65 72 20 21 3d   (currentUser !=
7310: 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
7320: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7330: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
7340: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
7350: 75 72 72 65 6e 74 55 73 65 72 2e 43 6c 6f 73 65  urrentUser.Close
7360: 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ();..           
7370: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7380: 20 63 75 72 72 65 6e 74 55 73 65 72 20 3d 20 6e   currentUser = n
7390: 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ull;..          
73a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
73b0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
73c0: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 64             if (d
73d0: 79 6e 44 61 74 61 20 21 3d 20 6e 75 6c 6c 29 0d  ynData != null).
73e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
73f0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
7400: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7410: 20 20 20 20 20 20 20 20 64 79 6e 44 61 74 61 2e          dynData.
7420: 43 6c 6f 73 65 28 29 3b 0d 0a 20 20 20 20 20 20  Close();..      
7430: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7440: 20 20 20 20 20 20 64 79 6e 44 61 74 61 20 3d 20        dynData = 
7450: 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20  null;..         
7460: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
7470: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
7480: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
7490: 6c 6f 63 61 6c 4d 61 63 68 69 6e 65 20 21 3d 20  localMachine != 
74a0: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
74b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
74c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
74d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6c 6f                lo
74e0: 63 61 6c 4d 61 63 68 69 6e 65 2e 43 6c 6f 73 65  calMachine.Close
74f0: 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ();..           
7500: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7510: 20 6c 6f 63 61 6c 4d 61 63 68 69 6e 65 20 3d 20   localMachine = 
7520: 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20  null;..         
7530: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
7540: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
7550: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
7560: 70 65 72 66 6f 72 6d 61 6e 63 65 44 61 74 61 20  performanceData 
7570: 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  != null)..      
7580: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7590: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
75a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
75b0: 20 70 65 72 66 6f 72 6d 61 6e 63 65 44 61 74 61   performanceData
75c0: 2e 43 6c 6f 73 65 28 29 3b 0d 0a 20 20 20 20 20  .Close();..     
75d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
75e0: 20 20 20 20 20 20 20 70 65 72 66 6f 72 6d 61 6e         performan
75f0: 63 65 44 61 74 61 20 3d 20 6e 75 6c 6c 3b 0d 0a  ceData = null;..
7600: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7610: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
7620: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7630: 20 20 20 20 20 69 66 20 28 75 73 65 72 73 20 21       if (users !
7640: 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
7650: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7660: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
7670: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7680: 75 73 65 72 73 2e 43 6c 6f 73 65 28 29 3b 0d 0a  users.Close();..
7690: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
76a0: 20 20 20 20 20 20 20 20 20 20 20 20 75 73 65 72              user
76b0: 73 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20  s = null;..     
76c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
76d0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
76e0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
76f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7700: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
7710: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7720: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 20 20 20 20 20  /////////..     
7730: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
7740: 2f 20 72 65 6c 65 61 73 65 20 75 6e 6d 61 6e 61  / release unmana
7750: 67 65 64 20 72 65 73 6f 75 72 63 65 73 20 68 65  ged resources he
7760: 72 65 2e 2e 2e 0d 0a 20 20 20 20 20 20 20 20 20  re.....         
7770: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
7780: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7790: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
77a0: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
77b0: 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
77c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
77d0: 20 2f 2f 20 4e 4f 54 45 3a 20 54 68 69 73 20 6f   // NOTE: This o
77e0: 62 6a 65 63 74 20 69 73 20 6e 6f 77 20 64 69 73  bject is now dis
77f0: 70 6f 73 65 64 2e 0d 0a 20 20 20 20 20 20 20 20  posed...        
7800: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
7810: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7820: 20 20 20 20 64 69 73 70 6f 73 65 64 20 3d 20 74      disposed = t
7830: 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  rue;..          
7840: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
7850: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
7860: 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
7870: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
7880: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7890: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
78a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
78b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
78c0: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
78d0: 20 23 72 65 67 69 6f 6e 20 49 44 69 73 70 6f 73   #region IDispos
78e0: 61 62 6c 65 20 4d 65 6d 62 65 72 73 0d 0a 20 20  able Members..  
78f0: 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
7900: 20 76 6f 69 64 20 44 69 73 70 6f 73 65 28 29 0d   void Dispose().
7910: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
7920: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7930: 44 69 73 70 6f 73 65 28 74 72 75 65 29 3b 0d 0a  Dispose(true);..
7940: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7950: 47 43 2e 53 75 70 70 72 65 73 73 46 69 6e 61 6c  GC.SuppressFinal
7960: 69 7a 65 28 74 68 69 73 29 3b 0d 0a 20 20 20 20  ize(this);..    
7970: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
7980: 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f         #endregio
7990: 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n....           
79a0: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
79b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
79c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
79d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
79e0: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
79f0: 20 20 20 20 23 72 65 67 69 6f 6e 20 44 65 73 74      #region Dest
7a00: 72 75 63 74 6f 72 0d 0a 20 20 20 20 20 20 20 20  ructor..        
7a10: 20 20 20 20 7e 4d 6f 63 6b 52 65 67 69 73 74 72      ~MockRegistr
7a20: 79 28 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  y()..           
7a30: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
7a40: 20 20 20 20 44 69 73 70 6f 73 65 28 66 61 6c 73      Dispose(fals
7a50: 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e);..           
7a60: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
7a70: 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 20 20 20 20  #endregion..    
7a80: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23      }..        #
7a90: 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20  endregion....   
7aa0: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
7ab0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7ac0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7ad0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7ae0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
7af0: 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20          #region 
7b00: 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20  MockRegistryKey 
7b10: 43 6c 61 73 73 0d 0a 20 20 20 20 20 20 20 20 69  Class..        i
7b20: 6e 74 65 72 6e 61 6c 20 73 65 61 6c 65 64 20 63  nternal sealed c
7b30: 6c 61 73 73 20 4d 6f 63 6b 52 65 67 69 73 74 72  lass MockRegistr
7b40: 79 4b 65 79 20 3a 20 49 44 69 73 70 6f 73 61 62  yKey : IDisposab
7b50: 6c 65 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  le..        {.. 
7b60: 20 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69             #regi
7b70: 6f 6e 20 50 72 69 76 61 74 65 20 43 6f 6e 73 74  on Private Const
7b80: 72 75 63 74 6f 72 73 0d 0a 20 20 20 20 20 20 20  ructors..       
7b90: 20 20 20 20 20 70 72 69 76 61 74 65 20 4d 6f 63       private Moc
7ba0: 6b 52 65 67 69 73 74 72 79 4b 65 79 28 29 0d 0a  kRegistryKey()..
7bb0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
7bc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 77                 w
7bd0: 68 61 74 49 66 20 3d 20 74 72 75 65 3b 0d 0a 20  hatIf = true;.. 
7be0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
7bf0: 65 61 64 4f 6e 6c 79 20 3d 20 74 72 75 65 3b 0d  eadOnly = true;.
7c00: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
7c10: 20 73 61 66 65 20 3d 20 74 72 75 65 3b 0d 0a 20   safe = true;.. 
7c20: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
7c30: 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65            #endre
7c40: 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20  gion....        
7c50: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
7c60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7c70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7c80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7c90: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
7ca0: 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50         #region P
7cb0: 75 62 6c 69 63 20 43 6f 6e 73 74 72 75 63 74 6f  ublic Constructo
7cc0: 72 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  rs..            
7cd0: 70 75 62 6c 69 63 20 4d 6f 63 6b 52 65 67 69 73  public MockRegis
7ce0: 74 72 79 4b 65 79 28 0d 0a 20 20 20 20 20 20 20  tryKey(..       
7cf0: 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72           Registr
7d00: 79 4b 65 79 20 6b 65 79 0d 0a 20 20 20 20 20 20  yKey key..      
7d10: 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
7d20: 20 20 20 20 20 20 20 20 20 20 20 20 20 3a 20 74               : t
7d30: 68 69 73 28 29 0d 0a 20 20 20 20 20 20 20 20 20  his()..         
7d40: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
7d50: 20 20 20 20 20 20 74 68 69 73 2e 6b 65 79 20 3d        this.key =
7d60: 20 6b 65 79 3b 0d 0a 20 20 20 20 20 20 20 20 20   key;..         
7d70: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
7d80: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
7d90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7da0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
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 0d 0a 0d 0a 20 20 20 20 20  ///////....     
7dd0: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 4d 6f         public Mo
7de0: 63 6b 52 65 67 69 73 74 72 79 4b 65 79 28 0d 0a  ckRegistryKey(..
7df0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7e00: 52 65 67 69 73 74 72 79 4b 65 79 20 6b 65 79 2c  RegistryKey key,
7e10: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
7e20: 20 20 73 74 72 69 6e 67 20 73 75 62 4b 65 79 4e    string subKeyN
7e30: 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ame..           
7e40: 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
7e50: 20 20 20 20 20 20 20 20 3a 20 74 68 69 73 28 6b          : this(k
7e60: 65 79 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ey)..           
7e70: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
7e80: 20 20 20 20 74 68 69 73 2e 73 75 62 4b 65 79 4e      this.subKeyN
7e90: 61 6d 65 20 3d 20 73 75 62 4b 65 79 4e 61 6d 65  ame = subKeyName
7ea0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
7eb0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
7ec0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7ed0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7ee0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7ef0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7f00: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
7f10: 20 20 20 70 75 62 6c 69 63 20 4d 6f 63 6b 52 65     public MockRe
7f20: 67 69 73 74 72 79 4b 65 79 28 0d 0a 20 20 20 20  gistryKey(..    
7f30: 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69              Regi
7f40: 73 74 72 79 4b 65 79 20 6b 65 79 2c 0d 0a 20 20  stryKey key,..  
7f50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
7f60: 72 69 6e 67 20 73 75 62 4b 65 79 4e 61 6d 65 2c  ring subKeyName,
7f70: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
7f80: 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 0d 0a 20    bool whatIf.. 
7f90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29                 )
7fa0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
7fb0: 20 20 3a 20 74 68 69 73 28 6b 65 79 2c 20 73 75    : this(key, su
7fc0: 62 4b 65 79 4e 61 6d 65 29 0d 0a 20 20 20 20 20  bKeyName)..     
7fd0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
7fe0: 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 77            this.w
7ff0: 68 61 74 49 66 20 3d 20 77 68 61 74 49 66 3b 0d  hatIf = whatIf;.
8000: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
8010: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
8020: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8030: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8040: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8050: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8060: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
8070: 20 70 75 62 6c 69 63 20 4d 6f 63 6b 52 65 67 69   public MockRegi
8080: 73 74 72 79 4b 65 79 28 0d 0a 20 20 20 20 20 20  stryKey(..      
8090: 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74            Regist
80a0: 72 79 4b 65 79 20 6b 65 79 2c 0d 0a 20 20 20 20  ryKey key,..    
80b0: 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
80c0: 6e 67 20 73 75 62 4b 65 79 4e 61 6d 65 2c 0d 0a  ng subKeyName,..
80d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
80e0: 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20  bool whatIf,..  
80f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f                bo
8100: 6f 6c 20 72 65 61 64 4f 6e 6c 79 0d 0a 20 20 20  ol readOnly..   
8110: 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a               )..
8120: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8130: 3a 20 74 68 69 73 28 6b 65 79 2c 20 73 75 62 4b  : this(key, subK
8140: 65 79 4e 61 6d 65 2c 20 77 68 61 74 49 66 29 0d  eyName, whatIf).
8150: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
8160: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8170: 74 68 69 73 2e 72 65 61 64 4f 6e 6c 79 20 3d 20  this.readOnly = 
8180: 72 65 61 64 4f 6e 6c 79 3b 0d 0a 20 20 20 20 20  readOnly;..     
8190: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
81a0: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
81b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
81c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20  ///////////.... 
81f0: 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
8200: 63 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65  c MockRegistryKe
8210: 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y(..            
8220: 20 20 20 20 52 65 67 69 73 74 72 79 4b 65 79 20      RegistryKey 
8230: 6b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  key,..          
8240: 20 20 20 20 20 20 73 74 72 69 6e 67 20 73 75 62        string sub
8250: 4b 65 79 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20  KeyName,..      
8260: 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77            bool w
8270: 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20  hatIf,..        
8280: 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 72 65 61          bool rea
8290: 64 4f 6e 6c 79 2c 0d 0a 20 20 20 20 20 20 20 20  dOnly,..        
82a0: 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 73 61 66          bool saf
82b0: 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..             
82c0: 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20     )..          
82d0: 20 20 20 20 20 20 3a 20 74 68 69 73 28 6b 65 79        : this(key
82e0: 2c 20 73 75 62 4b 65 79 4e 61 6d 65 2c 20 77 68  , subKeyName, wh
82f0: 61 74 49 66 2c 20 72 65 61 64 4f 6e 6c 79 29 0d  atIf, readOnly).
8300: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
8310: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8320: 74 68 69 73 2e 73 61 66 65 20 3d 20 73 61 66 65  this.safe = safe
8330: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
8340: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
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 2f 2f 2f 2f 2f 2f  ////////////////
8370: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8380: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8390: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
83a0: 20 20 20 70 75 62 6c 69 63 20 4d 6f 63 6b 52 65     public MockRe
83b0: 67 69 73 74 72 79 4b 65 79 28 0d 0a 20 20 20 20  gistryKey(..    
83c0: 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69              Regi
83d0: 73 74 72 79 4b 65 79 20 6b 65 79 2c 0d 0a 20 20  stryKey key,..  
83e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f                bo
83f0: 6f 6c 20 77 68 61 74 49 66 0d 0a 20 20 20 20 20  ol whatIf..     
8400: 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
8410: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3a 20                : 
8420: 74 68 69 73 28 6b 65 79 2c 20 6e 75 6c 6c 2c 20  this(key, null, 
8430: 77 68 61 74 49 66 29 0d 0a 20 20 20 20 20 20 20  whatIf)..       
8440: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
8450: 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f          // do no
8460: 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20  thing...        
8470: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
8480: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
8490: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
84a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
84b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
84c0: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
84d0: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 4d          public M
84e0: 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 28 0d  ockRegistryKey(.
84f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
8500: 20 52 65 67 69 73 74 72 79 4b 65 79 20 6b 65 79   RegistryKey key
8510: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
8520: 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d     bool whatIf,.
8530: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
8540: 20 62 6f 6f 6c 20 72 65 61 64 4f 6e 6c 79 0d 0a   bool readOnly..
8550: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8560: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
8570: 20 20 20 3a 20 74 68 69 73 28 6b 65 79 2c 20 6e     : this(key, n
8580: 75 6c 6c 2c 20 77 68 61 74 49 66 2c 20 72 65 61  ull, whatIf, rea
8590: 64 4f 6e 6c 79 29 0d 0a 20 20 20 20 20 20 20 20  dOnly)..        
85a0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
85b0: 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74         // do not
85c0: 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 20  hing...         
85d0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
85e0: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
85f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8600: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8610: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8620: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
8630: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 4d 6f         public Mo
8640: 63 6b 52 65 67 69 73 74 72 79 4b 65 79 28 0d 0a  ckRegistryKey(..
8650: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8660: 52 65 67 69 73 74 72 79 4b 65 79 20 6b 65 79 2c  RegistryKey key,
8670: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
8680: 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a    bool whatIf,..
8690: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
86a0: 62 6f 6f 6c 20 72 65 61 64 4f 6e 6c 79 2c 0d 0a  bool readOnly,..
86b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
86c0: 62 6f 6f 6c 20 73 61 66 65 0d 0a 20 20 20 20 20  bool safe..     
86d0: 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
86e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3a 20                : 
86f0: 74 68 69 73 28 6b 65 79 2c 20 6e 75 6c 6c 2c 20  this(key, null, 
8700: 77 68 61 74 49 66 2c 20 72 65 61 64 4f 6e 6c 79  whatIf, readOnly
8710: 2c 20 73 61 66 65 29 0d 0a 20 20 20 20 20 20 20  , safe)..       
8720: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
8730: 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f          // do no
8740: 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20  thing...        
8750: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
8760: 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
8770: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
8780: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 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: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
87d0: 23 72 65 67 69 6f 6e 20 50 75 62 6c 69 63 20 4d  #region Public M
87e0: 65 74 68 6f 64 73 0d 0a 20 20 20 20 20 20 20 20  ethods..        
87f0: 20 20 20 20 70 75 62 6c 69 63 20 76 6f 69 64 20      public void 
8800: 43 6c 6f 73 65 28 29 0d 0a 20 20 20 20 20 20 20  Close()..       
8810: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
8820: 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
8830: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e              // N
8840: 4f 54 45 3a 20 4e 6f 20 64 69 73 70 6f 73 65 64  OTE: No disposed
8850: 20 63 68 65 63 6b 20 68 65 72 65 20 62 65 63 61   check here beca
8860: 75 73 65 20 63 61 6c 6c 69 6e 67 20 74 68 69 73  use calling this
8870: 20 6d 65 74 68 6f 64 0d 0a 20 20 20 20 20 20 20   method..       
8880: 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
8890: 20 20 73 68 6f 75 6c 64 20 62 65 20 6a 75 73 74    should be just
88a0: 20 6c 69 6b 65 20 63 61 6c 6c 69 6e 67 20 44 69   like calling Di
88b0: 73 70 6f 73 65 2e 0d 0a 20 20 20 20 20 20 20 20  spose...        
88c0: 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
88d0: 20 20 20 20 20 20 20 20 20 20 20 20 44 69 73 70              Disp
88e0: 6f 73 65 28 74 72 75 65 29 3b 0d 0a 20 20 20 20  ose(true);..    
88f0: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
8900: 20 20 20 20 20 20 20 20 20 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: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8940: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
8950: 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
8960: 69 63 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b  ic MockRegistryK
8970: 65 79 20 43 72 65 61 74 65 53 75 62 4b 65 79 28  ey CreateSubKey(
8980: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
8990: 20 20 73 74 72 69 6e 67 20 73 75 62 4b 65 79 4e    string subKeyN
89a0: 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ame..           
89b0: 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
89c0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
89d0: 20 20 20 20 20 20 20 43 68 65 63 6b 44 69 73 70         CheckDisp
89e0: 6f 73 65 64 28 29 3b 0d 0a 20 20 20 20 20 20 20  osed();..       
89f0: 20 20 20 20 20 20 20 20 20 43 68 65 63 6b 52 65           CheckRe
8a00: 61 64 4f 6e 6c 79 28 29 3b 0d 0a 0d 0a 20 20 20  adOnly();....   
8a10: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
8a20: 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  (key == null).. 
8a30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8a40: 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d     return null;.
8a50: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
8a60: 20 20 20 69 66 20 28 77 68 61 74 49 66 29 0d 0a     if (whatIf)..
8a70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8a80: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
8a90: 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
8aa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
8ab0: 2f 20 48 41 43 4b 3a 20 41 74 74 65 6d 70 74 20  / HACK: Attempt 
8ac0: 74 6f 20 6f 70 65 6e 20 74 68 65 20 73 70 65 63  to open the spec
8ad0: 69 66 69 65 64 20 73 75 62 2d 6b 65 79 2e 20 20  ified sub-key.  
8ae0: 49 66 20 74 68 69 73 0d 0a 20 20 20 20 20 20 20  If this..       
8af0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
8b00: 20 20 20 20 20 20 66 61 69 6c 73 2c 20 77 65 20        fails, we 
8b10: 77 69 6c 6c 20 73 69 6d 70 6c 79 20 72 65 74 75  will simply retu
8b20: 72 6e 20 74 68 65 20 77 72 61 70 70 65 64 20 72  rn the wrapped r
8b30: 6f 6f 74 20 6b 65 79 0d 0a 20 20 20 20 20 20 20  oot key..       
8b40: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
8b50: 20 20 20 20 20 20 69 74 73 65 6c 66 20 73 69 6e        itself sin
8b60: 63 65 20 6e 6f 20 77 72 69 74 65 73 20 61 72 65  ce no writes are
8b70: 20 61 6c 6c 6f 77 65 64 20 69 6e 20 27 77 68 61   allowed in 'wha
8b80: 74 2d 69 66 27 0d 0a 20 20 20 20 20 20 20 20 20  t-if'..         
8b90: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
8ba0: 20 20 20 20 6d 6f 64 65 20 61 6e 79 68 6f 77 2e      mode anyhow.
8bb0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
8bc0: 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
8bd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65                Re
8be0: 67 69 73 74 72 79 4b 65 79 20 73 75 62 4b 65 79  gistryKey subKey
8bf0: 20 3d 20 6b 65 79 2e 4f 70 65 6e 53 75 62 4b 65   = key.OpenSubKe
8c00: 79 28 73 75 62 4b 65 79 4e 61 6d 65 29 3b 0d 0a  y(subKeyName);..
8c10: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
8c20: 20 20 20 20 20 20 72 65 74 75 72 6e 20 28 73 75        return (su
8c30: 62 4b 65 79 20 21 3d 20 6e 75 6c 6c 29 20 3f 0d  bKey != null) ?.
8c40: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
8c50: 20 20 20 20 20 20 20 20 20 6e 65 77 20 4d 6f 63           new Moc
8c60: 6b 52 65 67 69 73 74 72 79 4b 65 79 28 0d 0a 20  kRegistryKey(.. 
8c70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8c80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
8c90: 75 62 4b 65 79 2c 20 77 68 61 74 49 66 2c 20 72  ubKey, whatIf, r
8ca0: 65 61 64 4f 6e 6c 79 2c 20 73 61 66 65 29 20 3a  eadOnly, safe) :
8cb0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
8cc0: 20 20 20 20 20 20 20 20 20 20 6e 65 77 20 4d 6f            new Mo
8cd0: 63 6b 52 65 67 69 73 74 72 79 4b 65 79 28 0d 0a  ckRegistryKey(..
8ce0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8cf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8d00: 6b 65 79 2c 20 73 75 62 4b 65 79 4e 61 6d 65 2c  key, subKeyName,
8d10: 20 77 68 61 74 49 66 2c 20 72 65 61 64 4f 6e 6c   whatIf, readOnl
8d20: 79 2c 20 73 61 66 65 29 3b 0d 0a 20 20 20 20 20  y, safe);..     
8d30: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
8d40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c                el
8d50: 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  se..            
8d60: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
8d70: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
8d80: 6e 20 6e 65 77 20 4d 6f 63 6b 52 65 67 69 73 74  n new MockRegist
8d90: 72 79 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20  ryKey(..        
8da0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8db0: 6b 65 79 2e 43 72 65 61 74 65 53 75 62 4b 65 79  key.CreateSubKey
8dc0: 28 73 75 62 4b 65 79 4e 61 6d 65 29 2c 20 77 68  (subKeyName), wh
8dd0: 61 74 49 66 2c 20 72 65 61 64 4f 6e 6c 79 2c 20  atIf, readOnly, 
8de0: 73 61 66 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  safe);..        
8df0: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
8e00: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
8e10: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
8e20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8e30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8e40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8e50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
8e60: 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
8e70: 63 20 76 6f 69 64 20 44 65 6c 65 74 65 53 75 62  c void DeleteSub
8e80: 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20  Key(..          
8e90: 20 20 20 20 20 20 73 74 72 69 6e 67 20 73 75 62        string sub
8ea0: 4b 65 79 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20  KeyName,..      
8eb0: 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 74            bool t
8ec0: 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 0d 0a 20  hrowOnMissing.. 
8ed0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29                 )
8ee0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
8ef0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
8f00: 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29   CheckDisposed()
8f10: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
8f20: 20 20 20 43 68 65 63 6b 52 65 61 64 4f 6e 6c 79     CheckReadOnly
8f30: 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ();....         
8f40: 20 20 20 20 20 20 20 69 66 20 28 6b 65 79 20 3d         if (key =
8f50: 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
8f60: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
8f70: 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  urn;....        
8f80: 20 20 20 20 20 20 20 20 69 66 20 28 21 77 68 61          if (!wha
8f90: 74 49 66 29 0d 0a 20 20 20 20 20 20 20 20 20 20  tIf)..          
8fa0: 20 20 20 20 20 20 20 20 20 20 6b 65 79 2e 44 65            key.De
8fb0: 6c 65 74 65 53 75 62 4b 65 79 28 73 75 62 4b 65  leteSubKey(subKe
8fc0: 79 4e 61 6d 65 2c 20 74 68 72 6f 77 4f 6e 4d 69  yName, throwOnMi
8fd0: 73 73 69 6e 67 29 3b 0d 0a 20 20 20 20 20 20 20  ssing);..       
8fe0: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
8ff0: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
9000: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9010: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9020: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9030: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
9040: 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
9050: 76 6f 69 64 20 44 65 6c 65 74 65 53 75 62 4b 65  void DeleteSubKe
9060: 79 54 72 65 65 28 0d 0a 20 20 20 20 20 20 20 20  yTree(..        
9070: 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 73          string s
9080: 75 62 4b 65 79 4e 61 6d 65 0d 0a 20 20 20 20 20  ubKeyName..     
9090: 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
90a0: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
90b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 43 68 65               Che
90c0: 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 20  ckDisposed();.. 
90d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43                 C
90e0: 68 65 63 6b 52 65 61 64 4f 6e 6c 79 28 29 3b 0d  heckReadOnly();.
90f0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
9100: 20 20 20 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75     if (key == nu
9110: 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
9120: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 3b           return;
9130: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
9140: 20 20 20 20 69 66 20 28 21 77 68 61 74 49 66 29      if (!whatIf)
9150: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
9160: 20 20 20 20 20 20 6b 65 79 2e 44 65 6c 65 74 65        key.Delete
9170: 53 75 62 4b 65 79 54 72 65 65 28 73 75 62 4b 65  SubKeyTree(subKe
9180: 79 4e 61 6d 65 29 3b 0d 0a 20 20 20 20 20 20 20  yName);..       
9190: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
91a0: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
91b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
91c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
91d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
91e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
91f0: 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
9200: 76 6f 69 64 20 44 65 6c 65 74 65 56 61 6c 75 65  void DeleteValue
9210: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
9220: 20 20 20 73 74 72 69 6e 67 20 6e 61 6d 65 2c 0d     string name,.
9230: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
9240: 20 62 6f 6f 6c 20 74 68 72 6f 77 4f 6e 4d 69 73   bool throwOnMis
9250: 73 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 20 20  sing..          
9260: 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
9270: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
9280: 20 20 20 20 20 20 20 20 43 68 65 63 6b 44 69 73          CheckDis
9290: 70 6f 73 65 64 28 29 3b 0d 0a 20 20 20 20 20 20  posed();..      
92a0: 20 20 20 20 20 20 20 20 20 20 43 68 65 63 6b 52            CheckR
92b0: 65 61 64 4f 6e 6c 79 28 29 3b 0d 0a 0d 0a 20 20  eadOnly();....  
92c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
92d0: 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a   (key == null)..
92e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
92f0: 20 20 20 20 72 65 74 75 72 6e 3b 0d 0a 0d 0a 20      return;.... 
9300: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
9310: 66 20 28 21 77 68 61 74 49 66 29 0d 0a 20 20 20  f (!whatIf)..   
9320: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9330: 20 6b 65 79 2e 44 65 6c 65 74 65 56 61 6c 75 65   key.DeleteValue
9340: 28 6e 61 6d 65 2c 20 74 68 72 6f 77 4f 6e 4d 69  (name, throwOnMi
9350: 73 73 69 6e 67 29 3b 0d 0a 20 20 20 20 20 20 20  ssing);..       
9360: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
9370: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
9380: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9390: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
93a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
93b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
93c0: 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
93d0: 73 74 72 69 6e 67 5b 5d 20 47 65 74 53 75 62 4b  string[] GetSubK
93e0: 65 79 4e 61 6d 65 73 28 29 0d 0a 20 20 20 20 20  eyNames()..     
93f0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
9400: 20 20 20 20 20 20 20 20 20 20 43 68 65 63 6b 44            CheckD
9410: 69 73 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20 20  isposed();....  
9420: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
9430: 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a   (key == null)..
9440: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9450: 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b      return null;
9460: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
9470: 20 20 20 20 72 65 74 75 72 6e 20 6b 65 79 2e 47      return key.G
9480: 65 74 53 75 62 4b 65 79 4e 61 6d 65 73 28 29 3b  etSubKeyNames();
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 6f 62 6a 65 63 74 20    public object 
9510: 47 65 74 56 61 6c 75 65 28 0d 0a 20 20 20 20 20  GetValue(..     
9520: 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
9530: 67 20 6e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20  g name,..       
9540: 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20           object 
9550: 64 65 66 61 75 6c 74 56 61 6c 75 65 0d 0a 20 20  defaultValue..  
9560: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d                ).
9570: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
9580: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9590: 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b  CheckDisposed();
95a0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
95b0: 20 20 20 20 69 66 20 28 6b 65 79 20 3d 3d 20 6e      if (key == n
95c0: 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
95d0: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
95e0: 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20   null;....      
95f0: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
9600: 20 6b 65 79 2e 47 65 74 56 61 6c 75 65 28 6e 61   key.GetValue(na
9610: 6d 65 2c 20 64 65 66 61 75 6c 74 56 61 6c 75 65  me, defaultValue
9620: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
9630: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
9640: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
9650: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9660: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9670: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9680: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
9690: 20 20 20 20 70 75 62 6c 69 63 20 4d 6f 63 6b 52      public MockR
96a0: 65 67 69 73 74 72 79 4b 65 79 20 4f 70 65 6e 53  egistryKey OpenS
96b0: 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20  ubKey(..        
96c0: 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 73          string s
96d0: 75 62 4b 65 79 4e 61 6d 65 0d 0a 20 20 20 20 20  ubKeyName..     
96e0: 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
96f0: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
9700: 20 20 20 20 20 20 20 20 20 20 20 20 20 43 68 65               Che
9710: 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 0d  ckDisposed();...
9720: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
9730: 20 72 65 74 75 72 6e 20 4f 70 65 6e 53 75 62 4b   return OpenSubK
9740: 65 79 28 73 75 62 4b 65 79 4e 61 6d 65 2c 20 66  ey(subKeyName, f
9750: 61 6c 73 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  alse);..        
9760: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
9770: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
9780: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9790: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
97a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
97b0: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
97c0: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 4d          public M
97d0: 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 4f  ockRegistryKey O
97e0: 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20 20  penSubKey(..    
97f0: 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
9800: 6e 67 20 73 75 62 4b 65 79 4e 61 6d 65 2c 0d 0a  ng subKeyName,..
9810: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9820: 62 6f 6f 6c 20 77 72 69 74 61 62 6c 65 0d 0a 20  bool writable.. 
9830: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29                 )
9840: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
9850: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
9860: 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29   CheckDisposed()
9870: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
9880: 20 20 20 20 20 69 66 20 28 77 72 69 74 61 62 6c       if (writabl
9890: 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e)..            
98a0: 20 20 20 20 20 20 20 20 43 68 65 63 6b 52 65 61          CheckRea
98b0: 64 4f 6e 6c 79 28 29 3b 0d 0a 0d 0a 20 20 20 20  dOnly();....    
98c0: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
98d0: 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  key == null)..  
98e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
98f0: 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a    return null;..
9900: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
9910: 20 20 52 65 67 69 73 74 72 79 4b 65 79 20 73 75    RegistryKey su
9920: 62 4b 65 79 20 3d 20 6b 65 79 2e 4f 70 65 6e 53  bKey = key.OpenS
9930: 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20  ubKey(..        
9940: 20 20 20 20 20 20 20 20 20 20 20 20 73 75 62 4b              subK
9950: 65 79 4e 61 6d 65 2c 20 77 68 61 74 49 66 20 3f  eyName, whatIf ?
9960: 20 66 61 6c 73 65 20 3a 20 77 72 69 74 61 62 6c   false : writabl
9970: 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e);....         
9980: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 28 73         return (s
9990: 75 62 4b 65 79 20 21 3d 20 6e 75 6c 6c 29 20 3f  ubKey != null) ?
99a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
99b0: 20 20 20 20 20 20 6e 65 77 20 4d 6f 63 6b 52 65        new MockRe
99c0: 67 69 73 74 72 79 4b 65 79 28 73 75 62 4b 65 79  gistryKey(subKey
99d0: 2c 20 77 68 61 74 49 66 2c 20 72 65 61 64 4f 6e  , whatIf, readOn
99e0: 6c 79 2c 20 73 61 66 65 29 20 3a 20 6e 75 6c 6c  ly, safe) : null
99f0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
9a00: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
9a10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9a20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9a30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9a40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9a50: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
9a60: 20 20 20 70 75 62 6c 69 63 20 76 6f 69 64 20 53     public void S
9a70: 65 74 56 61 6c 75 65 28 0d 0a 20 20 20 20 20 20  etValue(..      
9a80: 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
9a90: 20 6e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20   name,..        
9aa0: 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 76          object v
9ab0: 61 6c 75 65 0d 0a 20 20 20 20 20 20 20 20 20 20  alue..          
9ac0: 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
9ad0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
9ae0: 20 20 20 20 20 20 20 20 43 68 65 63 6b 44 69 73          CheckDis
9af0: 70 6f 73 65 64 28 29 3b 0d 0a 20 20 20 20 20 20  posed();..      
9b00: 20 20 20 20 20 20 20 20 20 20 43 68 65 63 6b 52            CheckR
9b10: 65 61 64 4f 6e 6c 79 28 29 3b 0d 0a 0d 0a 20 20  eadOnly();....  
9b20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
9b30: 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a   (key == null)..
9b40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9b50: 20 20 20 20 72 65 74 75 72 6e 3b 0d 0a 0d 0a 20      return;.... 
9b60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
9b70: 66 20 28 21 77 68 61 74 49 66 29 0d 0a 20 20 20  f (!whatIf)..   
9b80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9b90: 20 6b 65 79 2e 53 65 74 56 61 6c 75 65 28 6e 61   key.SetValue(na
9ba0: 6d 65 2c 20 76 61 6c 75 65 29 3b 0d 0a 20 20 20  me, value);..   
9bb0: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
9bc0: 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
9bd0: 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  on....          
9be0: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
9bf0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9c00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9c10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9c20: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
9c30: 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 75 62       #region Pub
9c40: 6c 69 63 20 50 72 6f 70 65 72 74 69 65 73 0d 0a  lic Properties..
9c50: 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
9c60: 69 63 20 73 74 72 69 6e 67 20 4e 61 6d 65 0d 0a  ic string Name..
9c70: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
9c80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67                 g
9c90: 65 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  et..            
9ca0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
9cb0: 20 20 20 20 20 20 20 20 20 20 20 43 68 65 63 6b             Check
9cc0: 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20  Disposed();.... 
9cd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9ce0: 20 20 20 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75     if (key == nu
9cf0: 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
9d00: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
9d10: 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20  urn null;....   
9d20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9d30: 20 72 65 74 75 72 6e 20 21 53 74 72 69 6e 67 2e   return !String.
9d40: 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 73 75  IsNullOrEmpty(su
9d50: 62 4b 65 79 4e 61 6d 65 29 20 3f 0d 0a 20 20 20  bKeyName) ?..   
9d60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9d70: 20 20 20 20 20 53 74 72 69 6e 67 2e 46 6f 72 6d       String.Form
9d80: 61 74 28 22 7b 30 7d 5c 5c 7b 31 7d 22 2c 20 6b  at("{0}\\{1}", k
9d90: 65 79 2e 4e 61 6d 65 2c 20 73 75 62 4b 65 79 4e  ey.Name, subKeyN
9da0: 61 6d 65 29 20 3a 0d 0a 20 20 20 20 20 20 20 20  ame) :..        
9db0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9dc0: 6b 65 79 2e 4e 61 6d 65 3b 0d 0a 20 20 20 20 20  key.Name;..     
9dd0: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
9de0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
9df0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
9e00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9e10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9e20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9e30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
9e40: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
9e50: 69 76 61 74 65 20 52 65 67 69 73 74 72 79 4b 65  ivate RegistryKe
9e60: 79 20 6b 65 79 3b 0d 0a 20 20 20 20 20 20 20 20  y key;..        
9e70: 20 20 20 20 70 75 62 6c 69 63 20 52 65 67 69 73      public Regis
9e80: 74 72 79 4b 65 79 20 4b 65 79 0d 0a 20 20 20 20  tryKey Key..    
9e90: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
9ea0: 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b             get {
9eb0: 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29   CheckDisposed()
9ec0: 3b 20 43 68 65 63 6b 53 61 66 65 28 29 3b 20 72  ; CheckSafe(); r
9ed0: 65 74 75 72 6e 20 6b 65 79 3b 20 7d 0d 0a 20 20  eturn key; }..  
9ee0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
9ef0: 20 20 20 20 20 20 20 20 20 20 20 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 2f 2f  ////////////////
9f30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
9f40: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
9f50: 69 76 61 74 65 20 73 74 72 69 6e 67 20 73 75 62  ivate string sub
9f60: 4b 65 79 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20  KeyName;..      
9f70: 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 72        public str
9f80: 69 6e 67 20 53 75 62 4b 65 79 4e 61 6d 65 0d 0a  ing SubKeyName..
9f90: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
9fa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67                 g
9fb0: 65 74 20 7b 20 43 68 65 63 6b 44 69 73 70 6f 73  et { CheckDispos
9fc0: 65 64 28 29 3b 20 72 65 74 75 72 6e 20 73 75 62  ed(); return sub
9fd0: 4b 65 79 4e 61 6d 65 3b 20 7d 0d 0a 20 20 20 20  KeyName; }..    
9fe0: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
9ff0: 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
a000: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a010: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a020: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a030: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
a040: 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
a050: 61 74 65 20 62 6f 6f 6c 20 77 68 61 74 49 66 3b  ate bool whatIf;
a060: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
a070: 62 6c 69 63 20 62 6f 6f 6c 20 57 68 61 74 49 66  blic bool WhatIf
a080: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
a090: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
a0a0: 20 67 65 74 20 7b 20 43 68 65 63 6b 44 69 73 70   get { CheckDisp
a0b0: 6f 73 65 64 28 29 3b 20 72 65 74 75 72 6e 20 77  osed(); return w
a0c0: 68 61 74 49 66 3b 20 7d 0d 0a 20 20 20 20 20 20  hatIf; }..      
a0d0: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
a0e0: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
a0f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a100: 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20  //////////....  
a130: 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
a140: 65 20 62 6f 6f 6c 20 72 65 61 64 4f 6e 6c 79 3b  e bool readOnly;
a150: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
a160: 62 6c 69 63 20 62 6f 6f 6c 20 52 65 61 64 4f 6e  blic bool ReadOn
a170: 6c 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ly..            
a180: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
a190: 20 20 20 67 65 74 20 7b 20 43 68 65 63 6b 44 69     get { CheckDi
a1a0: 73 70 6f 73 65 64 28 29 3b 20 72 65 74 75 72 6e  sposed(); return
a1b0: 20 72 65 61 64 4f 6e 6c 79 3b 20 7d 0d 0a 20 20   readOnly; }..  
a1c0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
a1d0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
a1e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a1f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a200: 2f 2f 2f 2f 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 0d 0a  //////////////..
a220: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
a230: 62 6c 69 63 20 62 6f 6f 6c 20 73 61 66 65 3b 0d  blic bool safe;.
a240: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
a250: 6c 69 63 20 62 6f 6f 6c 20 53 61 66 65 0d 0a 20  lic bool Safe.. 
a260: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
a270: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65                ge
a280: 74 20 7b 20 43 68 65 63 6b 44 69 73 70 6f 73 65  t { CheckDispose
a290: 64 28 29 3b 20 72 65 74 75 72 6e 20 73 61 66 65  d(); return safe
a2a0: 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
a2b0: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
a2c0: 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20  #endregion....  
a2d0: 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
a2e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a2f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a300: 2f 2f 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 0d 0a 0d  /////////////...
a320: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 72 65  .            #re
a330: 67 69 6f 6e 20 50 72 69 76 61 74 65 20 4d 65 74  gion Private Met
a340: 68 6f 64 73 0d 0a 20 20 20 20 20 20 20 20 20 20  hods..          
a350: 20 20 70 72 69 76 61 74 65 20 76 6f 69 64 20 43    private void C
a360: 68 65 63 6b 52 65 61 64 4f 6e 6c 79 28 29 0d 0a  heckReadOnly()..
a370: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
a380: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
a390: 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
a3a0: 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 49 6e 20 22     // NOTE: In "
a3b0: 72 65 61 64 2d 6f 6e 6c 79 22 20 6d 6f 64 65 2c  read-only" mode,
a3c0: 20 77 65 20 64 69 73 61 6c 6c 6f 77 20 61 6c 6c   we disallow all
a3d0: 20 77 72 69 74 65 20 61 63 63 65 73 73 2e 0d 0a   write access...
a3e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a3f0: 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
a400: 20 20 20 20 69 66 20 28 21 72 65 61 64 4f 6e 6c      if (!readOnl
a410: 79 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y)..            
a420: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 3b 0d          return;.
a430: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
a440: 20 20 20 74 68 72 6f 77 20 6e 65 77 20 49 6e 76     throw new Inv
a450: 61 6c 69 64 4f 70 65 72 61 74 69 6f 6e 45 78 63  alidOperationExc
a460: 65 70 74 69 6f 6e 28 29 3b 0d 0a 20 20 20 20 20  eption();..     
a470: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
a480: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
a490: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a4a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a4b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a4c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
a4d0: 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
a4e0: 74 65 20 76 6f 69 64 20 43 68 65 63 6b 53 61 66  te void CheckSaf
a4f0: 65 28 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e()..           
a500: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
a510: 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
a520: 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a          // NOTE:
a530: 20 49 6e 20 22 73 61 66 65 22 20 6d 6f 64 65 2c   In "safe" mode,
a540: 20 77 65 20 64 69 73 61 6c 6c 6f 77 20 61 6c 6c   we disallow all
a550: 20 64 69 72 65 63 74 20 61 63 63 65 73 73 20 74   direct access t
a560: 6f 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 20  o the..         
a570: 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
a580: 63 6f 6e 74 61 69 6e 65 64 20 72 65 67 69 73 74  contained regist
a590: 72 79 20 6b 65 79 2e 0d 0a 20 20 20 20 20 20 20  ry key...       
a5a0: 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
a5b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
a5c0: 28 21 73 61 66 65 29 0d 0a 20 20 20 20 20 20 20  (!safe)..       
a5d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
a5e0: 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  urn;....        
a5f0: 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65          throw ne
a600: 77 20 49 6e 76 61 6c 69 64 4f 70 65 72 61 74 69  w InvalidOperati
a610: 6f 6e 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a  onException();..
a620: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
a630: 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 72             #endr
a640: 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20  egion....       
a650: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
a660: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a670: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a680: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a690: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
a6a0: 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20          #region 
a6b0: 53 79 73 74 65 6d 2e 4f 62 6a 65 63 74 20 4f 76  System.Object Ov
a6c0: 65 72 72 69 64 65 73 0d 0a 20 20 20 20 20 20 20  errides..       
a6d0: 20 20 20 20 20 70 75 62 6c 69 63 20 6f 76 65 72       public over
a6e0: 72 69 64 65 20 73 74 72 69 6e 67 20 54 6f 53 74  ride string ToSt
a6f0: 72 69 6e 67 28 29 0d 0a 20 20 20 20 20 20 20 20  ring()..        
a700: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
a710: 20 20 20 20 20 20 20 43 68 65 63 6b 44 69 73 70         CheckDisp
a720: 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20  osed();....     
a730: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
a740: 6e 20 74 68 69 73 2e 4e 61 6d 65 3b 0d 0a 20 20  n this.Name;..  
a750: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
a760: 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67           #endreg
a770: 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ion....         
a780: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
a790: 2f 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 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
a7d0: 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 49 6d        #region Im
a7e0: 70 6c 69 63 69 74 20 43 6f 6e 76 65 72 73 69 6f  plicit Conversio
a7f0: 6e 20 4f 70 65 72 61 74 6f 72 73 0d 0a 20 20 20  n Operators..   
a800: 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
a810: 20 20 20 20 20 20 20 20 20 2f 2f 20 42 55 47 42           // BUGB
a820: 55 47 3a 20 52 65 6d 6f 76 65 20 6d 65 3f 20 20  UG: Remove me?  
a830: 54 68 69 73 20 73 68 6f 75 6c 64 20 62 65 20 73  This should be s
a840: 61 66 65 20 62 65 63 61 75 73 65 20 69 6e 20 27  afe because in '
a850: 77 68 61 74 2d 69 66 27 0d 0a 20 20 20 20 20 20  what-if'..      
a860: 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 20        //        
a870: 20 6d 6f 64 65 20 61 6c 6c 20 6b 65 79 73 20 61   mode all keys a
a880: 72 65 20 6f 70 65 6e 65 64 20 72 65 61 64 2d 6f  re opened read-o
a890: 6e 6c 79 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  nly...          
a8a0: 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
a8b0: 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20    public static 
a8c0: 69 6d 70 6c 69 63 69 74 20 6f 70 65 72 61 74 6f  implicit operato
a8d0: 72 20 52 65 67 69 73 74 72 79 4b 65 79 28 0d 0a  r RegistryKey(..
a8e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a8f0: 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20  MockRegistryKey 
a900: 6b 65 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20  key..           
a910: 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
a920: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
a930: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 28 6b         return (k
a940: 65 79 20 21 3d 20 6e 75 6c 6c 29 20 3f 20 6b 65  ey != null) ? ke
a950: 79 2e 4b 65 79 20 3a 20 6e 75 6c 6c 3b 0d 0a 20  y.Key : null;.. 
a960: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
a970: 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65            #endre
a980: 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20  gion....        
a990: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
a9a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a9b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a9c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a9d0: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
a9e0: 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 49         #region I
a9f0: 44 69 73 70 6f 73 61 62 6c 65 20 22 50 61 74 74  Disposable "Patt
aa00: 65 72 6e 22 20 4d 65 6d 62 65 72 73 0d 0a 20 20  ern" Members..  
aa10: 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
aa20: 65 20 62 6f 6f 6c 20 64 69 73 70 6f 73 65 64 3b  e bool disposed;
aa30: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
aa40: 69 76 61 74 65 20 76 6f 69 64 20 43 68 65 63 6b  ivate void Check
aa50: 44 69 73 70 6f 73 65 64 28 29 20 2f 2a 20 74 68  Disposed() /* th
aa60: 72 6f 77 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20  row */..        
aa70: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
aa80: 20 20 20 20 20 20 20 69 66 20 28 21 64 69 73 70         if (!disp
aa90: 6f 73 65 64 29 0d 0a 20 20 20 20 20 20 20 20 20  osed)..         
aaa0: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
aab0: 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  n;....          
aac0: 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20        throw new 
aad0: 4f 62 6a 65 63 74 44 69 73 70 6f 73 65 64 45 78  ObjectDisposedEx
aae0: 63 65 70 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20  ception(..      
aaf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 79                ty
ab00: 70 65 6f 66 28 4d 6f 63 6b 52 65 67 69 73 74 72  peof(MockRegistr
ab10: 79 4b 65 79 29 2e 4e 61 6d 65 29 3b 0d 0a 20 20  yKey).Name);..  
ab20: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
ab30: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
ab40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ab50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ab60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ab70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
ab80: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
ab90: 69 76 61 74 65 20 2f 2a 20 70 72 6f 74 65 63 74  ivate /* protect
aba0: 65 64 20 76 69 72 74 75 61 6c 20 2a 2f 20 76 6f  ed virtual */ vo
abb0: 69 64 20 44 69 73 70 6f 73 65 28 0d 0a 20 20 20  id Dispose(..   
abc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f               boo
abd0: 6c 20 64 69 73 70 6f 73 69 6e 67 0d 0a 20 20 20  l disposing..   
abe0: 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a               )..
abf0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
ac00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
ac10: 66 20 28 21 64 69 73 70 6f 73 65 64 29 0d 0a 20  f (!disposed).. 
ac20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
ac30: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
ac40: 20 20 20 20 20 20 69 66 20 28 64 69 73 70 6f 73        if (dispos
ac50: 69 6e 67 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ing)..          
ac60: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
ac70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ac80: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
ac90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
aca0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 20 20 20 20 20  /////////..     
acb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
acc0: 20 20 20 2f 2f 20 64 69 73 70 6f 73 65 20 6d 61     // dispose ma
acd0: 6e 61 67 65 64 20 72 65 73 6f 75 72 63 65 73 20  naged resources 
ace0: 68 65 72 65 2e 2e 2e 0d 0a 20 20 20 20 20 20 20  here.....       
acf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ad00: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
ad10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ad20: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
ad30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ad40: 20 69 66 20 28 6b 65 79 20 21 3d 20 6e 75 6c 6c   if (key != null
ad50: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
ad60: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
ad70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ad80: 20 20 20 20 20 20 20 20 20 20 6b 65 79 2e 43 6c            key.Cl
ad90: 6f 73 65 28 29 3b 0d 0a 20 20 20 20 20 20 20 20  ose();..        
ada0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
adb0: 20 20 20 20 6b 65 79 20 3d 20 6e 75 6c 6c 3b 0d      key = null;.
adc0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
add0: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
ade0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
adf0: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
ae00: 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
ae10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ae20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
ae30: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
ae40: 20 20 20 20 20 2f 2f 20 72 65 6c 65 61 73 65 20       // release 
ae50: 75 6e 6d 61 6e 61 67 65 64 20 72 65 73 6f 75 72  unmanaged resour
ae60: 63 65 73 20 68 65 72 65 2e 2e 2e 0d 0a 20 20 20  ces here.....   
ae70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ae80: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
ae90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
aea0: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
aeb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
aec0: 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
aed0: 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20         // NOTE: 
aee0: 54 68 69 73 20 6f 62 6a 65 63 74 20 69 73 20 6e  This object is n
aef0: 6f 77 20 64 69 73 70 6f 73 65 64 2e 0d 0a 20 20  ow disposed...  
af00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
af10: 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
af20: 20 20 20 20 20 20 20 20 20 20 64 69 73 70 6f 73            dispos
af30: 65 64 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20  ed = true;..    
af40: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
af50: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
af60: 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65            #endre
af70: 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20  gion....        
af80: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
afc0: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
afd0: 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 49         #region I
afe0: 44 69 73 70 6f 73 61 62 6c 65 20 4d 65 6d 62 65  Disposable Membe
aff0: 72 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  rs..            
b000: 70 75 62 6c 69 63 20 76 6f 69 64 20 44 69 73 70  public void Disp
b010: 6f 73 65 28 29 0d 0a 20 20 20 20 20 20 20 20 20  ose()..         
b020: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
b030: 20 20 20 20 20 20 44 69 73 70 6f 73 65 28 74 72        Dispose(tr
b040: 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ue);..          
b050: 20 20 20 20 20 20 47 43 2e 53 75 70 70 72 65 73        GC.Suppres
b060: 73 46 69 6e 61 6c 69 7a 65 28 74 68 69 73 29 3b  sFinalize(this);
b070: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
b080: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e  .            #en
b090: 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
b0a0: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
b0b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b0c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b0d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b0e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
b0f0: 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f            #regio
b100: 6e 20 44 65 73 74 72 75 63 74 6f 72 0d 0a 20 20  n Destructor..  
b110: 20 20 20 20 20 20 20 20 20 20 7e 4d 6f 63 6b 52            ~MockR
b120: 65 67 69 73 74 72 79 4b 65 79 28 29 0d 0a 20 20  egistryKey()..  
b130: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
b140: 20 20 20 20 20 20 20 20 20 20 20 20 20 44 69 73               Dis
b150: 70 6f 73 65 28 66 61 6c 73 65 29 3b 0d 0a 20 20  pose(false);..  
b160: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
b170: 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67           #endreg
b180: 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  ion..        }..
b190: 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
b1a0: 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  on....        //
b1b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b1c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b1d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b1e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b1f0: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
b200: 20 23 72 65 67 69 6f 6e 20 52 65 67 69 73 74 72   #region Registr
b210: 79 48 65 6c 70 65 72 20 43 6c 61 73 73 0d 0a 20  yHelper Class.. 
b220: 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
b230: 74 61 74 69 63 20 63 6c 61 73 73 20 52 65 67 69  tatic class Regi
b240: 73 74 72 79 48 65 6c 70 65 72 0d 0a 20 20 20 20  stryHelper..    
b250: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
b260: 20 20 20 23 72 65 67 69 6f 6e 20 50 75 62 6c 69     #region Publi
b270: 63 20 53 74 61 74 69 63 20 50 72 6f 70 65 72 74  c Static Propert
b280: 69 65 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ies..           
b290: 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
b2a0: 69 6e 74 20 73 75 62 4b 65 79 73 43 72 65 61 74  int subKeysCreat
b2b0: 65 64 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ed;..           
b2c0: 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 69   public static i
b2d0: 6e 74 20 53 75 62 4b 65 79 73 43 72 65 61 74 65  nt SubKeysCreate
b2e0: 64 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  d..            {
b2f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
b300: 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 73    get { return s
b310: 75 62 4b 65 79 73 43 72 65 61 74 65 64 3b 20 7d  ubKeysCreated; }
b320: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
b330: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
b340: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b350: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b360: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b370: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b380: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
b390: 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63    private static
b3a0: 20 69 6e 74 20 73 75 62 4b 65 79 73 44 65 6c 65   int subKeysDele
b3b0: 74 65 64 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ted;..          
b3c0: 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20    public static 
b3d0: 69 6e 74 20 53 75 62 4b 65 79 73 44 65 6c 65 74  int SubKeysDelet
b3e0: 65 64 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ed..            
b3f0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
b400: 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20     get { return 
b410: 73 75 62 4b 65 79 73 44 65 6c 65 74 65 64 3b 20  subKeysDeleted; 
b420: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
b430: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
b440: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b450: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b460: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b470: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b480: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
b490: 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69     private stati
b4a0: 63 20 69 6e 74 20 6b 65 79 56 61 6c 75 65 73 53  c int keyValuesS
b4b0: 65 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  et;..           
b4c0: 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 69   public static i
b4d0: 6e 74 20 4b 65 79 56 61 6c 75 65 73 53 65 74 0d  nt KeyValuesSet.
b4e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
b4f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b500: 67 65 74 20 7b 20 72 65 74 75 72 6e 20 6b 65 79  get { return key
b510: 56 61 6c 75 65 73 53 65 74 3b 20 7d 0d 0a 20 20  ValuesSet; }..  
b520: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
b530: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
b540: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b550: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b560: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b570: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
b580: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
b590: 69 76 61 74 65 20 73 74 61 74 69 63 20 69 6e 74  ivate static int
b5a0: 20 6b 65 79 56 61 6c 75 65 73 44 65 6c 65 74 65   keyValuesDelete
b5b0: 64 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  d;..            
b5c0: 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 69 6e  public static in
b5d0: 74 20 4b 65 79 56 61 6c 75 65 73 44 65 6c 65 74  t KeyValuesDelet
b5e0: 65 64 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ed..            
b5f0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
b600: 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20     get { return 
b610: 6b 65 79 56 61 6c 75 65 73 44 65 6c 65 74 65 64  keyValuesDeleted
b620: 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
b630: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
b640: 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20  #endregion....  
b650: 20 20 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f  ////////////////
b690: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
b6a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 72 65  .            #re
b6b0: 67 69 6f 6e 20 50 75 62 6c 69 63 20 53 74 61 74  gion Public Stat
b6c0: 69 63 20 4d 65 74 68 6f 64 73 0d 0a 20 20 20 20  ic Methods..    
b6d0: 20 20 20 20 20 20 20 20 5b 4d 65 74 68 6f 64 49          [MethodI
b6e0: 6d 70 6c 28 4d 65 74 68 6f 64 49 6d 70 6c 4f 70  mpl(MethodImplOp
b6f0: 74 69 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e 69 6e 67  tions.NoInlining
b700: 29 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  )]..            
b710: 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 4d 6f  public static Mo
b720: 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 4f 70  ckRegistryKey Op
b730: 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20  enSubKey(..     
b740: 20 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52             MockR
b750: 65 67 69 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b  egistryKey rootK
b760: 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ey,..           
b770: 20 20 20 20 20 73 74 72 69 6e 67 20 73 75 62 4b       string subK
b780: 65 79 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20  eyName,..       
b790: 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 72           bool wr
b7a0: 69 74 61 62 6c 65 2c 0d 0a 20 20 20 20 20 20 20  itable,..       
b7b0: 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68           bool wh
b7c0: 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20  atIf,..         
b7d0: 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62         bool verb
b7e0: 6f 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ose..           
b7f0: 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
b800: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
b810: 20 20 20 20 20 20 20 69 66 20 28 72 6f 6f 74 4b         if (rootK
b820: 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ey == null)..   
b830: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b840: 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d   return null;...
b850: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
b860: 20 69 66 20 28 76 65 72 62 6f 73 65 29 0d 0a 20   if (verbose).. 
b870: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b880: 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75     TraceOps.Debu
b890: 67 41 6e 64 54 72 61 63 65 28 77 72 69 74 61 62  gAndTrace(writab
b8a0: 6c 65 20 3f 0d 0a 20 20 20 20 20 20 20 20 20 20  le ?..          
b8b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
b8c0: 61 63 65 50 72 69 6f 72 69 74 79 2e 48 69 67 68  acePriority.High
b8d0: 65 73 74 20 3a 20 54 72 61 63 65 50 72 69 6f 72  est : TracePrior
b8e0: 69 74 79 2e 48 69 67 68 65 72 2c 0d 0a 20 20 20  ity.Higher,..   
b8f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b900: 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61       debugCallba
b910: 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63  ck, traceCallbac
b920: 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  k, String.Format
b930: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
b940: 20 20 20 20 20 20 20 20 20 20 20 22 72 6f 6f 74             "root
b950: 4b 65 79 20 3d 20 7b 30 7d 2c 20 73 75 62 4b 65  Key = {0}, subKe
b960: 79 4e 61 6d 65 20 3d 20 7b 31 7d 2c 20 77 72 69  yName = {1}, wri
b970: 74 61 62 6c 65 20 3d 20 7b 32 7d 22 2c 0d 0a 20  table = {2}",.. 
b980: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b990: 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61         ForDispla
b9a0: 79 28 72 6f 6f 74 4b 65 79 29 2c 20 46 6f 72 44  y(rootKey), ForD
b9b0: 69 73 70 6c 61 79 28 73 75 62 4b 65 79 4e 61 6d  isplay(subKeyNam
b9c0: 65 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e),..           
b9d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72               For
b9e0: 44 69 73 70 6c 61 79 28 77 72 69 74 61 62 6c 65  Display(writable
b9f0: 29 29 2c 20 74 72 61 63 65 43 61 74 65 67 6f 72  )), traceCategor
ba00: 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
ba10: 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
ba20: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 48 41             // HA
ba30: 43 4b 3a 20 41 6c 77 61 79 73 20 66 6f 72 62 69  CK: Always forbi
ba40: 64 20 77 72 69 74 61 62 6c 65 20 61 63 63 65 73  d writable acces
ba50: 73 20 77 68 65 6e 20 6f 70 65 72 61 74 69 6e 67  s when operating
ba60: 20 69 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 20   in..           
ba70: 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 27 77       //       'w
ba80: 68 61 74 2d 69 66 27 20 6d 6f 64 65 2e 0d 0a 20  hat-if' mode... 
ba90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
baa0: 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
bab0: 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b     MockRegistryK
bac0: 65 79 20 6b 65 79 20 3d 20 72 6f 6f 74 4b 65 79  ey key = rootKey
bad0: 2e 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20  .OpenSubKey(..  
bae0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
baf0: 20 20 73 75 62 4b 65 79 4e 61 6d 65 2c 20 77 68    subKeyName, wh
bb00: 61 74 49 66 20 3f 20 66 61 6c 73 65 20 3a 20 77  atIf ? false : w
bb10: 72 69 74 61 62 6c 65 29 3b 0d 0a 0d 0a 20 20 20  ritable);....   
bb20: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
bb30: 75 72 6e 20 28 6b 65 79 20 21 3d 20 6e 75 6c 6c  urn (key != null
bb40: 29 20 3f 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ) ?..           
bb50: 20 20 20 20 20 20 20 20 20 6e 65 77 20 4d 6f 63           new Moc
bb60: 6b 52 65 67 69 73 74 72 79 4b 65 79 28 6b 65 79  kRegistryKey(key
bb70: 2c 20 77 68 61 74 49 66 2c 20 66 61 6c 73 65 2c  , whatIf, false,
bb80: 20 66 61 6c 73 65 29 20 3a 20 6e 75 6c 6c 3b 0d   false) : null;.
bb90: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
bba0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
bbb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bbc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bbd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bbe0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bbf0: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
bc00: 20 5b 4d 65 74 68 6f 64 49 6d 70 6c 28 4d 65 74   [MethodImpl(Met
bc10: 68 6f 64 49 6d 70 6c 4f 70 74 69 6f 6e 73 2e 4e  hodImplOptions.N
bc20: 6f 49 6e 6c 69 6e 69 6e 67 29 5d 0d 0a 20 20 20  oInlining)]..   
bc30: 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
bc40: 73 74 61 74 69 63 20 4d 6f 63 6b 52 65 67 69 73  static MockRegis
bc50: 74 72 79 4b 65 79 20 43 72 65 61 74 65 53 75 62  tryKey CreateSub
bc60: 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20  Key(..          
bc70: 20 20 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 74        MockRegist
bc80: 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a  ryKey rootKey,..
bc90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bca0: 73 74 72 69 6e 67 20 73 75 62 4b 65 79 4e 61 6d  string subKeyNam
bcb0: 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
bcc0: 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c      bool whatIf,
bcd0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
bce0: 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 0d 0a    bool verbose..
bcf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bd00: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
bd10: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
bd20: 20 20 69 66 20 28 72 6f 6f 74 4b 65 79 20 3d 3d    if (rootKey ==
bd30: 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
bd40: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
bd50: 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20  rn null;....    
bd60: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
bd70: 76 65 72 62 6f 73 65 29 0d 0a 20 20 20 20 20 20  verbose)..      
bd80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
bd90: 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54  aceOps.DebugAndT
bda0: 72 61 63 65 28 54 72 61 63 65 50 72 69 6f 72 69  race(TracePriori
bdb0: 74 79 2e 48 69 67 68 65 73 74 2c 0d 0a 20 20 20  ty.Highest,..   
bdc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bdd0: 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61       debugCallba
bde0: 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63  ck, traceCallbac
bdf0: 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  k, String.Format
be00: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
be10: 20 20 20 20 20 20 20 20 20 20 20 22 72 6f 6f 74             "root
be20: 4b 65 79 20 3d 20 7b 30 7d 2c 20 73 75 62 4b 65  Key = {0}, subKe
be30: 79 4e 61 6d 65 20 3d 20 7b 31 7d 22 2c 0d 0a 20  yName = {1}",.. 
be40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
be50: 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61         ForDispla
be60: 79 28 72 6f 6f 74 4b 65 79 29 2c 20 46 6f 72 44  y(rootKey), ForD
be70: 69 73 70 6c 61 79 28 73 75 62 4b 65 79 4e 61 6d  isplay(subKeyNam
be80: 65 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  e)),..          
be90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
bea0: 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  aceCategory);...
beb0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
bec0: 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20   try..          
bed0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
bee0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
bef0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
bf00: 20 20 20 20 20 2f 2f 20 48 41 43 4b 3a 20 41 6c       // HACK: Al
bf10: 77 61 79 73 20 6f 70 65 6e 20 61 20 6b 65 79 2c  ways open a key,
bf20: 20 72 61 74 68 65 72 20 74 68 61 6e 20 63 72 65   rather than cre
bf30: 61 74 69 6e 67 20 6f 6e 65 20 77 68 65 6e 0d 0a  ating one when..
bf40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bf50: 20 20 20 20 2f 2f 20 20 20 20 20 20 20 6f 70 65      //       ope
bf60: 72 61 74 69 6e 67 20 69 6e 20 27 77 68 61 74 2d  rating in 'what-
bf70: 69 66 27 20 6d 6f 64 65 2e 0d 0a 20 20 20 20 20  if' mode...     
bf80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
bf90: 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
bfa0: 20 20 20 20 20 20 20 69 66 20 28 77 68 61 74 49         if (whatI
bfb0: 66 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  f)..            
bfc0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
bfd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bfe0: 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
bff0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
c000: 2f 20 48 41 43 4b 3a 20 41 74 74 65 6d 70 74 20  / HACK: Attempt 
c010: 74 6f 20 6f 70 65 6e 20 74 68 65 20 73 70 65 63  to open the spec
c020: 69 66 69 65 64 20 73 75 62 2d 6b 65 79 2e 20 20  ified sub-key.  
c030: 49 66 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  If..            
c040: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
c050: 20 20 20 20 20 74 68 69 73 20 66 61 69 6c 73 2c       this fails,
c060: 20 77 65 20 77 69 6c 6c 20 73 69 6d 70 6c 79 20   we will simply 
c070: 72 65 74 75 72 6e 20 74 68 65 20 72 6f 6f 74 0d  return the root.
c080: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
c090: 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
c0a0: 20 20 6b 65 79 20 69 74 73 65 6c 66 20 73 69 6e    key itself sin
c0b0: 63 65 20 6e 6f 20 77 72 69 74 65 73 20 61 72 65  ce no writes are
c0c0: 20 61 6c 6c 6f 77 65 64 20 69 6e 0d 0a 20 20 20   allowed in..   
c0d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c0e0: 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 27 77       //       'w
c0f0: 68 61 74 2d 69 66 27 20 6d 6f 64 65 20 61 6e 79  hat-if' mode any
c100: 68 6f 77 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  how...          
c110: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
c120: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
c130: 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65            MockRe
c140: 67 69 73 74 72 79 4b 65 79 20 6b 65 79 20 3d 20  gistryKey key = 
c150: 72 6f 6f 74 4b 65 79 2e 4f 70 65 6e 53 75 62 4b  rootKey.OpenSubK
c160: 65 79 28 73 75 62 4b 65 79 4e 61 6d 65 29 3b 0d  ey(subKeyName);.
c170: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
c180: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
c190: 6e 20 28 6b 65 79 20 21 3d 20 6e 75 6c 6c 29 20  n (key != null) 
c1a0: 3f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ?..             
c1b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6b                 k
c1c0: 65 79 20 3a 20 6e 65 77 20 4d 6f 63 6b 52 65 67  ey : new MockReg
c1d0: 69 73 74 72 79 4b 65 79 28 0d 0a 20 20 20 20 20  istryKey(..     
c1e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c1f0: 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b             rootK
c200: 65 79 2c 20 73 75 62 4b 65 79 4e 61 6d 65 2c 20  ey, subKeyName, 
c210: 77 68 61 74 49 66 2c 20 66 61 6c 73 65 2c 20 66  whatIf, false, f
c220: 61 6c 73 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  alse);..        
c230: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
c240: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c250: 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20     else..       
c260: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
c270: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c280: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e          return n
c290: 65 77 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b  ew MockRegistryK
c2a0: 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ey(..           
c2b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c2c0: 20 72 6f 6f 74 4b 65 79 2e 43 72 65 61 74 65 53   rootKey.CreateS
c2d0: 75 62 4b 65 79 28 73 75 62 4b 65 79 4e 61 6d 65  ubKey(subKeyName
c2e0: 29 2c 20 77 68 61 74 49 66 2c 20 66 61 6c 73 65  ), whatIf, false
c2f0: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
c300: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66                 f
c310: 61 6c 73 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  alse);..        
c320: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
c330: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
c340: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
c350: 20 20 66 69 6e 61 6c 6c 79 0d 0a 20 20 20 20 20    finally..     
c360: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
c370: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c380: 20 20 73 75 62 4b 65 79 73 43 72 65 61 74 65 64    subKeysCreated
c390: 2b 2b 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ++;..           
c3a0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
c3b0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
c3c0: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
c3d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c3e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c3f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c400: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
c410: 20 20 20 20 20 20 20 20 5b 4d 65 74 68 6f 64 49          [MethodI
c420: 6d 70 6c 28 4d 65 74 68 6f 64 49 6d 70 6c 4f 70  mpl(MethodImplOp
c430: 74 69 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e 69 6e 67  tions.NoInlining
c440: 29 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  )]..            
c450: 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 76 6f  public static vo
c460: 69 64 20 44 65 6c 65 74 65 53 75 62 4b 65 79 28  id DeleteSubKey(
c470: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
c480: 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65    MockRegistryKe
c490: 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20 20  y rootKey,..    
c4a0: 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
c4b0: 6e 67 20 73 75 62 4b 65 79 4e 61 6d 65 2c 0d 0a  ng subKeyName,..
c4c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c4d0: 62 6f 6f 6c 20 74 68 72 6f 77 4f 6e 4d 69 73 73  bool throwOnMiss
c4e0: 69 6e 67 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ing,..          
c4f0: 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49        bool whatI
c500: 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  f,..            
c510: 20 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65      bool verbose
c520: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
c530: 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20    )..           
c540: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
c550: 20 20 20 20 69 66 20 28 72 6f 6f 74 4b 65 79 20      if (rootKey 
c560: 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
c570: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
c580: 74 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  turn;....       
c590: 20 20 20 20 20 20 20 20 20 69 66 20 28 76 65 72           if (ver
c5a0: 62 6f 73 65 29 0d 0a 20 20 20 20 20 20 20 20 20  bose)..         
c5b0: 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
c5c0: 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63  Ops.DebugAndTrac
c5d0: 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e  e(TracePriority.
c5e0: 48 69 67 68 65 73 74 2c 0d 0a 20 20 20 20 20 20  Highest,..      
c5f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c600: 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c    debugCallback,
c610: 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20   traceCallback, 
c620: 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
c630: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c640: 20 20 20 20 20 20 20 20 22 72 6f 6f 74 4b 65 79          "rootKey
c650: 20 3d 20 7b 30 7d 2c 20 73 75 62 4b 65 79 4e 61   = {0}, subKeyNa
c660: 6d 65 20 3d 20 7b 31 7d 22 2c 0d 0a 20 20 20 20  me = {1}",..    
c670: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c680: 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 72      ForDisplay(r
c690: 6f 6f 74 4b 65 79 29 2c 20 46 6f 72 44 69 73 70  ootKey), ForDisp
c6a0: 6c 61 79 28 73 75 62 4b 65 79 4e 61 6d 65 29 29  lay(subKeyName))
c6b0: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
c6c0: 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
c6d0: 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
c6e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
c6f0: 20 28 21 77 68 61 74 49 66 29 0d 0a 20 20 20 20   (!whatIf)..    
c700: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c710: 72 6f 6f 74 4b 65 79 2e 44 65 6c 65 74 65 53 75  rootKey.DeleteSu
c720: 62 4b 65 79 28 73 75 62 4b 65 79 4e 61 6d 65 2c  bKey(subKeyName,
c730: 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 29   throwOnMissing)
c740: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
c750: 20 20 20 20 20 73 75 62 4b 65 79 73 44 65 6c 65       subKeysDele
c760: 74 65 64 2b 2b 3b 0d 0a 20 20 20 20 20 20 20 20  ted++;..        
c770: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
c780: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
c790: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c7a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c7b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c7c0: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
c7d0: 20 20 20 20 20 20 20 20 5b 4d 65 74 68 6f 64 49          [MethodI
c7e0: 6d 70 6c 28 4d 65 74 68 6f 64 49 6d 70 6c 4f 70  mpl(MethodImplOp
c7f0: 74 69 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e 69 6e 67  tions.NoInlining
c800: 29 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  )]..            
c810: 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 76 6f  public static vo
c820: 69 64 20 44 65 6c 65 74 65 53 75 62 4b 65 79 54  id DeleteSubKeyT
c830: 72 65 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ree(..          
c840: 20 20 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 74        MockRegist
c850: 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a  ryKey rootKey,..
c860: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c870: 73 74 72 69 6e 67 20 73 75 62 4b 65 79 4e 61 6d  string subKeyNam
c880: 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
c890: 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c      bool whatIf,
c8a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
c8b0: 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 0d 0a    bool verbose..
c8c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c8d0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
c8e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
c8f0: 20 20 69 66 20 28 72 6f 6f 74 4b 65 79 20 3d 3d    if (rootKey ==
c900: 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
c910: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
c920: 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  rn;....         
c930: 20 20 20 20 20 20 20 69 66 20 28 76 65 72 62 6f         if (verbo
c940: 73 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se)..           
c950: 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70           TraceOp
c960: 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28  s.DebugAndTrace(
c970: 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 48 69  TracePriority.Hi
c980: 67 68 65 73 74 2c 0d 0a 20 20 20 20 20 20 20 20  ghest,..        
c990: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c9a0: 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74  debugCallback, t
c9b0: 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74  raceCallback, St
c9c0: 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
c9d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c9e0: 20 20 20 20 20 20 22 72 6f 6f 74 4b 65 79 20 3d        "rootKey =
c9f0: 20 7b 30 7d 2c 20 73 75 62 4b 65 79 4e 61 6d 65   {0}, subKeyName
ca00: 20 3d 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20   = {1}",..      
ca10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ca20: 20 20 46 6f 72 44 69 73 70 6c 61 79 28 72 6f 6f    ForDisplay(roo
ca30: 74 4b 65 79 29 2c 20 46 6f 72 44 69 73 70 6c 61  tKey), ForDispla
ca40: 79 28 73 75 62 4b 65 79 4e 61 6d 65 29 29 2c 0d  y(subKeyName)),.
ca50: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
ca60: 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
ca70: 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
ca80: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
ca90: 21 77 68 61 74 49 66 29 0d 0a 20 20 20 20 20 20  !whatIf)..      
caa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f                ro
cab0: 6f 74 4b 65 79 2e 44 65 6c 65 74 65 53 75 62 4b  otKey.DeleteSubK
cac0: 65 79 54 72 65 65 28 73 75 62 4b 65 79 4e 61 6d  eyTree(subKeyNam
cad0: 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e);....         
cae0: 20 20 20 20 20 20 20 73 75 62 4b 65 79 73 44 65         subKeysDe
caf0: 6c 65 74 65 64 2b 2b 3b 0d 0a 20 20 20 20 20 20  leted++;..      
cb00: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
cb10: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
cb20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cb30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cb40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cb50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
cb60: 20 20 20 20 20 20 20 20 20 20 5b 4d 65 74 68 6f            [Metho
cb70: 64 49 6d 70 6c 28 4d 65 74 68 6f 64 49 6d 70 6c  dImpl(MethodImpl
cb80: 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e 69  Options.NoInlini
cb90: 6e 67 29 5d 0d 0a 20 20 20 20 20 20 20 20 20 20  ng)]..          
cba0: 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20    public static 
cbb0: 73 74 72 69 6e 67 5b 5d 20 47 65 74 53 75 62 4b  string[] GetSubK
cbc0: 65 79 4e 61 6d 65 73 28 0d 0a 20 20 20 20 20 20  eyNames(..      
cbd0: 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65            MockRe
cbe0: 67 69 73 74 72 79 4b 65 79 20 6b 65 79 2c 0d 0a  gistryKey key,..
cbf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cc00: 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20  bool whatIf,..  
cc10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f                bo
cc20: 6f 6c 20 76 65 72 62 6f 73 65 0d 0a 20 20 20 20  ol verbose..    
cc30: 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
cc40: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
cc50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
cc60: 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a   (key == null)..
cc70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cc80: 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b      return null;
cc90: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
cca0: 20 20 20 20 69 66 20 28 76 65 72 62 6f 73 65 29      if (verbose)
ccb0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
ccc0: 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44        TraceOps.D
ccd0: 65 62 75 67 41 6e 64 54 72 61 63 65 28 54 72 61  ebugAndTrace(Tra
cce0: 63 65 50 72 69 6f 72 69 74 79 2e 48 69 67 68 2c  cePriority.High,
ccf0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
cd00: 20 20 20 20 20 20 20 20 20 20 64 65 62 75 67 43            debugC
cd10: 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61  allback, traceCa
cd20: 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46  llback, String.F
cd30: 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
cd40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cd50: 22 6b 65 79 20 3d 20 7b 30 7d 22 2c 20 46 6f 72  "key = {0}", For
cd60: 44 69 73 70 6c 61 79 28 6b 65 79 29 29 2c 20 74  Display(key)), t
cd70: 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
cd80: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
cd90: 20 20 72 65 74 75 72 6e 20 6b 65 79 2e 47 65 74    return key.Get
cda0: 53 75 62 4b 65 79 4e 61 6d 65 73 28 29 3b 0d 0a  SubKeyNames();..
cdb0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
cdc0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
cdd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cde0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cdf0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ce00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ce10: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
ce20: 5b 4d 65 74 68 6f 64 49 6d 70 6c 28 4d 65 74 68  [MethodImpl(Meth
ce30: 6f 64 49 6d 70 6c 4f 70 74 69 6f 6e 73 2e 4e 6f  odImplOptions.No
ce40: 49 6e 6c 69 6e 69 6e 67 29 5d 0d 0a 20 20 20 20  Inlining)]..    
ce50: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73          public s
ce60: 74 61 74 69 63 20 6f 62 6a 65 63 74 20 47 65 74  tatic object Get
ce70: 56 61 6c 75 65 28 0d 0a 20 20 20 20 20 20 20 20  Value(..        
ce80: 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65 67 69          MockRegi
ce90: 73 74 72 79 4b 65 79 20 6b 65 79 2c 0d 0a 20 20  stryKey key,..  
cea0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
ceb0: 72 69 6e 67 20 6e 61 6d 65 2c 0d 0a 20 20 20 20  ring name,..    
cec0: 20 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65              obje
ced0: 63 74 20 64 65 66 61 75 6c 74 56 61 6c 75 65 2c  ct defaultValue,
cee0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
cef0: 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a    bool whatIf,..
cf00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cf10: 62 6f 6f 6c 20 76 65 72 62 6f 73 65 0d 0a 20 20  bool verbose..  
cf20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d                ).
cf30: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
cf40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cf50: 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29  if (key == null)
cf60: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
cf70: 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c        return nul
cf80: 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  l;....          
cf90: 20 20 20 20 20 20 69 66 20 28 76 65 72 62 6f 73        if (verbos
cfa0: 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e)..            
cfb0: 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73          TraceOps
cfc0: 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 54  .DebugAndTrace(T
cfd0: 72 61 63 65 50 72 69 6f 72 69 74 79 2e 48 69 67  racePriority.Hig
cfe0: 68 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  h,..            
cff0: 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62 75              debu
d000: 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65  gCallback, trace
d010: 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67  Callback, String
d020: 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  .Format(..      
d030: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d040: 20 20 22 6b 65 79 20 3d 20 7b 30 7d 2c 20 6e 61    "key = {0}, na
d050: 6d 65 20 3d 20 7b 31 7d 2c 20 64 65 66 61 75 6c  me = {1}, defaul
d060: 74 56 61 6c 75 65 20 3d 20 7b 32 7d 22 2c 0d 0a  tValue = {2}",..
d070: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d080: 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c          ForDispl
d090: 61 79 28 6b 65 79 29 2c 20 46 6f 72 44 69 73 70  ay(key), ForDisp
d0a0: 6c 61 79 28 6e 61 6d 65 29 2c 0d 0a 20 20 20 20  lay(name),..    
d0b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d0c0: 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 64      ForDisplay(d
d0d0: 65 66 61 75 6c 74 56 61 6c 75 65 29 29 2c 20 74  efaultValue)), t
d0e0: 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
d0f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
d100: 20 20 72 65 74 75 72 6e 20 6b 65 79 2e 47 65 74    return key.Get
d110: 56 61 6c 75 65 28 6e 61 6d 65 2c 20 64 65 66 61  Value(name, defa
d120: 75 6c 74 56 61 6c 75 65 29 3b 0d 0a 20 20 20 20  ultValue);..    
d130: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
d140: 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
d150: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d160: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d170: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d180: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
d190: 20 20 20 20 20 20 20 20 20 20 20 20 5b 4d 65 74              [Met
d1a0: 68 6f 64 49 6d 70 6c 28 4d 65 74 68 6f 64 49 6d  hodImpl(MethodIm
d1b0: 70 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e 6c 69  plOptions.NoInli
d1c0: 6e 69 6e 67 29 5d 0d 0a 20 20 20 20 20 20 20 20  ning)]..        
d1d0: 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69      public stati
d1e0: 63 20 76 6f 69 64 20 53 65 74 56 61 6c 75 65 28  c void SetValue(
d1f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
d200: 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65    MockRegistryKe
d210: 79 20 6b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20  y key,..        
d220: 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6e          string n
d230: 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ame,..          
d240: 20 20 20 20 20 20 6f 62 6a 65 63 74 20 76 61 6c        object val
d250: 75 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue,..           
d260: 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66       bool whatIf
d270: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
d280: 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 0d     bool verbose.
d290: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
d2a0: 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   )..            
d2b0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
d2c0: 20 20 20 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75     if (key == nu
d2d0: 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
d2e0: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 3b           return;
d2f0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
d300: 20 20 20 20 69 66 20 28 76 65 72 62 6f 73 65 29      if (verbose)
d310: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
d320: 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44        TraceOps.D
d330: 65 62 75 67 41 6e 64 54 72 61 63 65 28 54 72 61  ebugAndTrace(Tra
d340: 63 65 50 72 69 6f 72 69 74 79 2e 48 69 67 68 65  cePriority.Highe
d350: 73 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  st,..           
d360: 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62               deb
d370: 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63  ugCallback, trac
d380: 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e  eCallback, Strin
d390: 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
d3a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d3b0: 20 20 20 22 6b 65 79 20 3d 20 7b 30 7d 2c 20 6e     "key = {0}, n
d3c0: 61 6d 65 20 3d 20 7b 31 7d 2c 20 76 61 6c 75 65  ame = {1}, value
d3d0: 20 3d 20 7b 32 7d 22 2c 0d 0a 20 20 20 20 20 20   = {2}",..      
d3e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d3f0: 20 20 46 6f 72 44 69 73 70 6c 61 79 28 6b 65 79    ForDisplay(key
d400: 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 6e 61  ), ForDisplay(na
d410: 6d 65 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28  me), ForDisplay(
d420: 76 61 6c 75 65 29 29 2c 0d 0a 20 20 20 20 20 20  value)),..      
d430: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d440: 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29    traceCategory)
d450: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
d460: 20 20 20 20 20 69 66 20 28 21 77 68 61 74 49 66       if (!whatIf
d470: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
d480: 20 20 20 20 20 20 20 6b 65 79 2e 53 65 74 56 61         key.SetVa
d490: 6c 75 65 28 6e 61 6d 65 2c 20 76 61 6c 75 65 29  lue(name, value)
d4a0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
d4b0: 20 20 20 20 20 6b 65 79 56 61 6c 75 65 73 53 65       keyValuesSe
d4c0: 74 2b 2b 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  t++;..          
d4d0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
d4e0: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
d4f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d500: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d510: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d520: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
d530: 20 20 20 20 20 20 5b 4d 65 74 68 6f 64 49 6d 70        [MethodImp
d540: 6c 28 4d 65 74 68 6f 64 49 6d 70 6c 4f 70 74 69  l(MethodImplOpti
d550: 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e 69 6e 67 29 5d  ons.NoInlining)]
d560: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
d570: 62 6c 69 63 20 73 74 61 74 69 63 20 76 6f 69 64  blic static void
d580: 20 44 65 6c 65 74 65 56 61 6c 75 65 28 0d 0a 20   DeleteValue(.. 
d590: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4d                 M
d5a0: 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 6b  ockRegistryKey k
d5b0: 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ey,..           
d5c0: 20 20 20 20 20 73 74 72 69 6e 67 20 6e 61 6d 65       string name
d5d0: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
d5e0: 20 20 20 62 6f 6f 6c 20 74 68 72 6f 77 4f 6e 4d     bool throwOnM
d5f0: 69 73 73 69 6e 67 2c 0d 0a 20 20 20 20 20 20 20  issing,..       
d600: 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68           bool wh
d610: 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20  atIf,..         
d620: 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62         bool verb
d630: 6f 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ose..           
d640: 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
d650: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
d660: 20 20 20 20 20 20 20 69 66 20 28 6b 65 79 20 3d         if (key =
d670: 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
d680: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
d690: 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  urn;....        
d6a0: 20 20 20 20 20 20 20 20 69 66 20 28 76 65 72 62          if (verb
d6b0: 6f 73 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ose)..          
d6c0: 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f            TraceO
d6d0: 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65  ps.DebugAndTrace
d6e0: 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 48  (TracePriority.H
d6f0: 69 67 68 65 73 74 2c 0d 0a 20 20 20 20 20 20 20  ighest,..       
d700: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d710: 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20   debugCallback, 
d720: 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53  traceCallback, S
d730: 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
d740: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d750: 20 20 20 20 20 20 20 22 6b 65 79 20 3d 20 7b 30         "key = {0
d760: 7d 2c 20 6e 61 6d 65 20 3d 20 7b 31 7d 22 2c 20  }, name = {1}", 
d770: 46 6f 72 44 69 73 70 6c 61 79 28 6b 65 79 29 2c  ForDisplay(key),
d780: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
d790: 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73            ForDis
d7a0: 70 6c 61 79 28 6e 61 6d 65 29 29 2c 20 74 72 61  play(name)), tra
d7b0: 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
d7c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d7d0: 69 66 20 28 21 77 68 61 74 49 66 29 0d 0a 20 20  if (!whatIf)..  
d7e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d7f0: 20 20 6b 65 79 2e 44 65 6c 65 74 65 56 61 6c 75    key.DeleteValu
d800: 65 28 6e 61 6d 65 2c 20 74 68 72 6f 77 4f 6e 4d  e(name, throwOnM
d810: 69 73 73 69 6e 67 29 3b 0d 0a 0d 0a 20 20 20 20  issing);....    
d820: 20 20 20 20 20 20 20 20 20 20 20 20 6b 65 79 56              keyV
d830: 61 6c 75 65 73 44 65 6c 65 74 65 64 2b 2b 3b 0d  aluesDeleted++;.
d840: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
d850: 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64              #end
d860: 72 65 67 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20  region..        
d870: 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72  }..        #endr
d880: 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20  egion....       
d890: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
d8a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d8b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d8c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d8d0: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
d8e0: 20 20 20 20 23 72 65 67 69 6f 6e 20 53 74 72 69      #region Stri
d8f0: 6e 67 4c 69 73 74 20 43 6c 61 73 73 0d 0a 20 20  ngList Class..  
d900: 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 65        private se
d910: 61 6c 65 64 20 63 6c 61 73 73 20 53 74 72 69 6e  aled class Strin
d920: 67 4c 69 73 74 20 3a 20 4c 69 73 74 3c 73 74 72  gList : List<str
d930: 69 6e 67 3e 0d 0a 20 20 20 20 20 20 20 20 7b 0d  ing>..        {.
d940: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
d950: 6c 69 63 20 53 74 72 69 6e 67 4c 69 73 74 28 29  lic StringList()
d960: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
d970: 20 20 3a 20 62 61 73 65 28 29 0d 0a 20 20 20 20    : base()..    
d980: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
d990: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f             // do
d9a0: 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20   nothing...     
d9b0: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
d9c0: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
d9d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d9e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d9f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
da00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
da10: 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
da20: 63 20 53 74 72 69 6e 67 4c 69 73 74 28 49 45 6e  c StringList(IEn
da30: 75 6d 65 72 61 62 6c 65 3c 73 74 72 69 6e 67 3e  umerable<string>
da40: 20 63 6f 6c 6c 65 63 74 69 6f 6e 29 0d 0a 20 20   collection)..  
da50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3a 20                : 
da60: 62 61 73 65 28 63 6f 6c 6c 65 63 74 69 6f 6e 29  base(collection)
da70: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
da80: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
da90: 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d   // do nothing..
daa0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
dab0: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
dac0: 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
dad0: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
dae0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
daf0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
db00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
db10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
db20: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67  ....        #reg
db30: 69 6f 6e 20 53 74 72 69 6e 67 44 69 63 74 69 6f  ion StringDictio
db40: 6e 61 72 79 20 43 6c 61 73 73 0d 0a 20 20 20 20  nary Class..    
db50: 20 20 20 20 70 72 69 76 61 74 65 20 73 65 61 6c      private seal
db60: 65 64 20 63 6c 61 73 73 20 53 74 72 69 6e 67 44  ed class StringD
db70: 69 63 74 69 6f 6e 61 72 79 20 3a 20 44 69 63 74  ictionary : Dict
db80: 69 6f 6e 61 72 79 3c 73 74 72 69 6e 67 2c 20 73  ionary<string, s
db90: 74 72 69 6e 67 3e 0d 0a 20 20 20 20 20 20 20 20  tring>..        
dba0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  {..            p
dbb0: 75 62 6c 69 63 20 53 74 72 69 6e 67 44 69 63 74  ublic StringDict
dbc0: 69 6f 6e 61 72 79 28 29 0d 0a 20 20 20 20 20 20  ionary()..      
dbd0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
dbe0: 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e           // do n
dbf0: 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20  othing...       
dc00: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
dc10: 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72  }..        #endr
dc20: 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20  egion....       
dc30: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
dc40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
dc50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
dc60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
dc70: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
dc80: 20 20 20 20 23 72 65 67 69 6f 6e 20 56 65 72 73      #region Vers
dc90: 69 6f 6e 4c 69 73 74 20 43 6c 61 73 73 0d 0a 20  ionList Class.. 
dca0: 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
dcb0: 65 61 6c 65 64 20 63 6c 61 73 73 20 56 65 72 73  ealed class Vers
dcc0: 69 6f 6e 4c 69 73 74 20 3a 20 4c 69 73 74 3c 56  ionList : List<V
dcd0: 65 72 73 69 6f 6e 3e 0d 0a 20 20 20 20 20 20 20  ersion>..       
dce0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
dcf0: 70 75 62 6c 69 63 20 56 65 72 73 69 6f 6e 4c 69  public VersionLi
dd00: 73 74 28 29 0d 0a 20 20 20 20 20 20 20 20 20 20  st()..          
dd10: 20 20 20 20 20 20 3a 20 62 61 73 65 28 29 0d 0a        : base()..
dd20: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
dd30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
dd40: 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20  / do nothing... 
dd50: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
dd60: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
dd70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
dd80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
dd90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
dda0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
ddb0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
ddc0: 75 62 6c 69 63 20 56 65 72 73 69 6f 6e 4c 69 73  ublic VersionLis
ddd0: 74 28 49 45 6e 75 6d 65 72 61 62 6c 65 3c 56 65  t(IEnumerable<Ve
dde0: 72 73 69 6f 6e 3e 20 63 6f 6c 6c 65 63 74 69 6f  rsion> collectio
ddf0: 6e 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n)..            
de00: 20 20 20 20 3a 20 62 61 73 65 28 63 6f 6c 6c 65      : base(colle
de10: 63 74 69 6f 6e 29 0d 0a 20 20 20 20 20 20 20 20  ction)..        
de20: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
de30: 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74         // do not
de40: 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 20  hing...         
de50: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d     }..        }.
de60: 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67  .        #endreg
de70: 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  ion....        /
de80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
de90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
dea0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
deb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
dec0: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
ded0: 20 20 23 72 65 67 69 6f 6e 20 56 65 72 73 69 6f    #region Versio
dee0: 6e 4d 61 70 20 43 6c 61 73 73 0d 0a 20 20 20 20  nMap Class..    
def0: 20 20 20 20 70 72 69 76 61 74 65 20 73 65 61 6c      private seal
df00: 65 64 20 63 6c 61 73 73 20 56 65 72 73 69 6f 6e  ed class Version
df10: 4d 61 70 20 3a 20 44 69 63 74 69 6f 6e 61 72 79  Map : Dictionary
df20: 3c 73 74 72 69 6e 67 2c 20 56 65 72 73 69 6f 6e  <string, Version
df30: 4c 69 73 74 3e 0d 0a 20 20 20 20 20 20 20 20 7b  List>..        {
df40: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
df50: 62 6c 69 63 20 56 65 72 73 69 6f 6e 4d 61 70 28  blic VersionMap(
df60: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
df70: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
df80: 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e    // do nothing.
df90: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
dfa0: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
dfb0: 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
dfc0: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
dfd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
dfe0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
dff0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e000: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e010: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65  /....        #re
e020: 67 69 6f 6e 20 50 61 63 6b 61 67 65 20 43 6c 61  gion Package Cla
e030: 73 73 0d 0a 20 20 20 20 20 20 20 20 69 6e 74 65  ss..        inte
e040: 72 6e 61 6c 20 73 65 61 6c 65 64 20 63 6c 61 73  rnal sealed clas
e050: 73 20 50 61 63 6b 61 67 65 0d 0a 20 20 20 20 20  s Package..     
e060: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
e070: 20 20 23 72 65 67 69 6f 6e 20 50 75 62 6c 69 63    #region Public
e080: 20 43 6f 6e 73 74 72 75 63 74 6f 72 73 0d 0a 20   Constructors.. 
e090: 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
e0a0: 63 20 50 61 63 6b 61 67 65 28 29 0d 0a 20 20 20  c Package()..   
e0b0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
e0c0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64              // d
e0d0: 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20  o nothing...    
e0e0: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
e0f0: 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f         #endregio
e100: 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n....           
e110: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
e120: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e130: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e140: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e150: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
e160: 20 20 20 20 23 72 65 67 69 6f 6e 20 50 75 62 6c      #region Publ
e170: 69 63 20 50 72 6f 70 65 72 74 69 65 73 0d 0a 20  ic Properties.. 
e180: 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
e190: 74 65 20 41 73 73 65 6d 62 6c 79 4e 61 6d 65 20  te AssemblyName 
e1a0: 61 73 73 65 6d 62 6c 79 4e 61 6d 65 3b 0d 0a 20  assemblyName;.. 
e1b0: 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
e1c0: 63 20 41 73 73 65 6d 62 6c 79 4e 61 6d 65 20 41  c AssemblyName A
e1d0: 73 73 65 6d 62 6c 79 4e 61 6d 65 0d 0a 20 20 20  ssemblyName..   
e1e0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
e1f0: 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20              get 
e200: 7b 20 72 65 74 75 72 6e 20 61 73 73 65 6d 62 6c  { return assembl
e210: 79 4e 61 6d 65 3b 20 7d 0d 0a 20 20 20 20 20 20  yName; }..      
e220: 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20            set { 
e230: 61 73 73 65 6d 62 6c 79 4e 61 6d 65 20 3d 20 76  assemblyName = v
e240: 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20  alue; }..       
e250: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
e260: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
e270: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e280: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e290: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e2a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
e2b0: 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65           private
e2c0: 20 47 75 69 64 20 70 61 63 6b 61 67 65 49 64 3b   Guid packageId;
e2d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
e2e0: 62 6c 69 63 20 47 75 69 64 20 50 61 63 6b 61 67  blic Guid Packag
e2f0: 65 49 64 0d 0a 20 20 20 20 20 20 20 20 20 20 20  eId..           
e300: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
e310: 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e      get { return
e320: 20 70 61 63 6b 61 67 65 49 64 3b 20 7d 0d 0a 20   packageId; }.. 
e330: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
e340: 65 74 20 7b 20 70 61 63 6b 61 67 65 49 64 20 3d  et { packageId =
e350: 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20   value; }..     
e360: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
e370: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
e380: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e390: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e3a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e3b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
e3c0: 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
e3d0: 74 65 20 47 75 69 64 20 73 65 72 76 69 63 65 49  te Guid serviceI
e3e0: 64 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  d;..            
e3f0: 70 75 62 6c 69 63 20 47 75 69 64 20 53 65 72 76  public Guid Serv
e400: 69 63 65 49 64 0d 0a 20 20 20 20 20 20 20 20 20  iceId..         
e410: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
e420: 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75        get { retu
e430: 72 6e 20 73 65 72 76 69 63 65 49 64 3b 20 7d 0d  rn serviceId; }.
e440: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
e450: 20 73 65 74 20 7b 20 73 65 72 76 69 63 65 49 64   set { serviceId
e460: 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20   = value; }..   
e470: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
e480: 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
e490: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e4a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e4b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e4c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
e4d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69  .            pri
e4e0: 76 61 74 65 20 47 75 69 64 20 64 61 74 61 53 6f  vate Guid dataSo
e4f0: 75 72 63 65 49 64 3b 0d 0a 20 20 20 20 20 20 20  urceId;..       
e500: 20 20 20 20 20 70 75 62 6c 69 63 20 47 75 69 64       public Guid
e510: 20 44 61 74 61 53 6f 75 72 63 65 49 64 0d 0a 20   DataSourceId.. 
e520: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
e530: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65                ge
e540: 74 20 7b 20 72 65 74 75 72 6e 20 64 61 74 61 53  t { return dataS
e550: 6f 75 72 63 65 49 64 3b 20 7d 0d 0a 20 20 20 20  ourceId; }..    
e560: 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20              set 
e570: 7b 20 64 61 74 61 53 6f 75 72 63 65 49 64 20 3d  { dataSourceId =
e580: 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20   value; }..     
e590: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
e5a0: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
e5b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e5c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e5d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e5e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
e5f0: 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
e600: 74 65 20 47 75 69 64 20 64 61 74 61 50 72 6f 76  te Guid dataProv
e610: 69 64 65 72 49 64 3b 0d 0a 20 20 20 20 20 20 20  iderId;..       
e620: 20 20 20 20 20 70 75 62 6c 69 63 20 47 75 69 64       public Guid
e630: 20 44 61 74 61 50 72 6f 76 69 64 65 72 49 64 0d   DataProviderId.
e640: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
e650: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e660: 67 65 74 20 7b 20 72 65 74 75 72 6e 20 64 61 74  get { return dat
e670: 61 50 72 6f 76 69 64 65 72 49 64 3b 20 7d 0d 0a  aProviderId; }..
e680: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e690: 73 65 74 20 7b 20 64 61 74 61 50 72 6f 76 69 64  set { dataProvid
e6a0: 65 72 49 64 20 3d 20 76 61 6c 75 65 3b 20 7d 0d  erId = value; }.
e6b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
e6c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f  ////////////////
e6f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e700: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e710: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
e720: 20 70 72 69 76 61 74 65 20 47 75 69 64 20 61 64   private Guid ad
e730: 6f 4e 65 74 54 65 63 68 6e 6f 6c 6f 67 79 49 64  oNetTechnologyId
e740: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ;..            p
e750: 75 62 6c 69 63 20 47 75 69 64 20 41 64 6f 4e 65  ublic Guid AdoNe
e760: 74 54 65 63 68 6e 6f 6c 6f 67 79 49 64 0d 0a 20  tTechnologyId.. 
e770: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
e780: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65                ge
e790: 74 20 7b 20 72 65 74 75 72 6e 20 61 64 6f 4e 65  t { return adoNe
e7a0: 74 54 65 63 68 6e 6f 6c 6f 67 79 49 64 3b 20 7d  tTechnologyId; }
e7b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
e7c0: 20 20 73 65 74 20 7b 20 61 64 6f 4e 65 74 54 65    set { adoNetTe
e7d0: 63 68 6e 6f 6c 6f 67 79 49 64 20 3d 20 76 61 6c  chnologyId = val
e7e0: 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  ue; }..         
e7f0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
e800: 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 20 20    #endregion..  
e810: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
e820: 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20   #endregion.... 
e830: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
e840: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e850: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e860: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e870: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
e880: 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f  ..        #regio
e890: 6e 20 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20  n Configuration 
e8a0: 43 6c 61 73 73 0d 0a 20 20 20 20 20 20 20 20 70  Class..        p
e8b0: 72 69 76 61 74 65 20 73 65 61 6c 65 64 20 63 6c  rivate sealed cl
e8c0: 61 73 73 20 43 6f 6e 66 69 67 75 72 61 74 69 6f  ass Configuratio
e8d0: 6e 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  n..        {..  
e8e0: 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f            #regio
e8f0: 6e 20 50 72 69 76 61 74 65 20 43 6f 6e 73 74 61  n Private Consta
e900: 6e 74 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20  nts..           
e910: 20 70 72 69 76 61 74 65 20 63 6f 6e 73 74 20 63   private const c
e920: 68 61 72 20 53 77 69 74 63 68 20 3d 20 27 2d 27  har Switch = '-'
e930: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ;..            p
e940: 72 69 76 61 74 65 20 63 6f 6e 73 74 20 63 68 61  rivate const cha
e950: 72 20 41 6c 74 53 77 69 74 63 68 20 3d 20 27 2f  r AltSwitch = '/
e960: 27 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  ';....          
e970: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
e980: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e990: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e9a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e9b0: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
e9c0: 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61       private sta
e9d0: 74 69 63 20 72 65 61 64 6f 6e 6c 79 20 63 68 61  tic readonly cha
e9e0: 72 5b 5d 20 53 77 69 74 63 68 43 68 61 72 73 20  r[] SwitchChars 
e9f0: 3d 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  = {..           
ea00: 20 20 20 20 20 53 77 69 74 63 68 2c 20 41 6c 74       Switch, Alt
ea10: 53 77 69 74 63 68 0d 0a 20 20 20 20 20 20 20 20  Switch..        
ea20: 20 20 20 20 7d 3b 0d 0a 20 20 20 20 20 20 20 20      };..        
ea30: 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
ea40: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
ea50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ea60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ea70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ea80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ea90: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
eaa0: 20 23 72 65 67 69 6f 6e 20 50 72 69 76 61 74 65   #region Private
eab0: 20 43 6f 6e 73 74 72 75 63 74 6f 72 73 0d 0a 20   Constructors.. 
eac0: 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
ead0: 74 65 20 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e  te Configuration
eae0: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
eaf0: 20 20 20 41 73 73 65 6d 62 6c 79 20 61 73 73 65     Assembly asse
eb00: 6d 62 6c 79 2c 0d 0a 20 20 20 20 20 20 20 20 20  mbly,..         
eb10: 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6c 6f         string lo
eb20: 67 46 69 6c 65 4e 61 6d 65 2c 0d 0a 20 20 20 20  gFileName,..    
eb30: 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
eb40: 6e 67 20 64 69 72 65 63 74 6f 72 79 2c 0d 0a 20  ng directory,.. 
eb50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
eb60: 74 72 69 6e 67 20 63 6f 72 65 46 69 6c 65 4e 61  tring coreFileNa
eb70: 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me,..           
eb80: 20 20 20 20 20 73 74 72 69 6e 67 20 6c 69 6e 71       string linq
eb90: 46 69 6c 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20  FileName,..     
eba0: 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
ebb0: 67 20 64 65 73 69 67 6e 65 72 46 69 6c 65 4e 61  g designerFileNa
ebc0: 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me,..           
ebd0: 20 20 20 20 20 73 74 72 69 6e 67 20 72 65 67 69       string regi
ebe0: 73 74 72 79 56 65 72 73 69 6f 6e 2c 0d 0a 20 20  stryVersion,..  
ebf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
ec00: 72 69 6e 67 20 63 6f 6e 66 69 67 56 65 72 73 69  ring configVersi
ec10: 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  on,..           
ec20: 20 20 20 20 20 73 74 72 69 6e 67 20 64 65 62 75       string debu
ec30: 67 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20  gFormat,..      
ec40: 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
ec50: 20 74 72 61 63 65 46 6f 72 6d 61 74 2c 0d 0a 20   traceFormat,.. 
ec60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 49                 I
ec70: 6e 73 74 61 6c 6c 46 6c 61 67 73 20 69 6e 73 74  nstallFlags inst
ec80: 61 6c 6c 46 6c 61 67 73 2c 0d 0a 20 20 20 20 20  allFlags,..     
ec90: 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
eca0: 50 72 69 6f 72 69 74 79 20 64 65 62 75 67 50 72  Priority debugPr
ecb0: 69 6f 72 69 74 79 2c 0d 0a 20 20 20 20 20 20 20  iority,..       
ecc0: 20 20 20 20 20 20 20 20 20 54 72 61 63 65 50 72           TracePr
ecd0: 69 6f 72 69 74 79 20 74 72 61 63 65 50 72 69 6f  iority tracePrio
ece0: 72 69 74 79 2c 0d 0a 20 20 20 20 20 20 20 20 20  rity,..         
ecf0: 20 20 20 20 20 20 20 62 6f 6f 6c 20 69 6e 73 74         bool inst
ed00: 61 6c 6c 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  all,..          
ed10: 20 20 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34        bool wow64
ed20: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
ed30: 20 20 20 62 6f 6f 6c 20 6e 6f 52 75 6e 74 69 6d     bool noRuntim
ed40: 65 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20  eVersion,..     
ed50: 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
ed60: 6e 6f 44 65 73 6b 74 6f 70 2c 0d 0a 20 20 20 20  noDesktop,..    
ed70: 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
ed80: 20 6e 6f 43 6f 6d 70 61 63 74 2c 0d 0a 20 20 20   noCompact,..   
ed90: 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f               boo
eda0: 6c 20 6e 6f 4e 65 74 46 78 32 30 2c 0d 0a 20 20  l noNetFx20,..  
edb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f                bo
edc0: 6f 6c 20 6e 6f 4e 65 74 46 78 34 30 2c 0d 0a 20  ol noNetFx40,.. 
edd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62                 b
ede0: 6f 6f 6c 20 6e 6f 4e 65 74 46 78 34 35 2c 0d 0a  ool noNetFx45,..
edf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ee00: 62 6f 6f 6c 20 6e 6f 56 73 32 30 30 35 2c 0d 0a  bool noVs2005,..
ee10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ee20: 62 6f 6f 6c 20 6e 6f 56 73 32 30 30 38 2c 0d 0a  bool noVs2008,..
ee30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ee40: 62 6f 6f 6c 20 6e 6f 56 73 32 30 31 30 2c 0d 0a  bool noVs2010,..
ee50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ee60: 62 6f 6f 6c 20 6e 6f 56 73 32 30 31 32 2c 0d 0a  bool noVs2012,..
ee70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ee80: 62 6f 6f 6c 20 6e 6f 54 72 61 63 65 2c 0d 0a 20  bool noTrace,.. 
ee90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62                 b
eea0: 6f 6f 6c 20 6e 6f 43 6f 6e 73 6f 6c 65 2c 0d 0a  ool noConsole,..
eeb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
eec0: 62 6f 6f 6c 20 6e 6f 4c 6f 67 2c 0d 0a 20 20 20  bool noLog,..   
eed0: 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f               boo
eee0: 6c 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67  l throwOnMissing
eef0: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
ef00: 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d     bool whatIf,.
ef10: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
ef20: 20 62 6f 6f 6c 20 64 65 62 75 67 2c 0d 0a 20 20   bool debug,..  
ef30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f                bo
ef40: 6f 6c 20 76 65 72 62 6f 73 65 2c 0d 0a 20 20 20  ol verbose,..   
ef50: 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f               boo
ef60: 6c 20 63 6f 6e 66 69 72 6d 0d 0a 20 20 20 20 20  l confirm..     
ef70: 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
ef80: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
ef90: 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69               thi
efa0: 73 2e 61 73 73 65 6d 62 6c 79 20 3d 20 61 73 73  s.assembly = ass
efb0: 65 6d 62 6c 79 3b 0d 0a 20 20 20 20 20 20 20 20  embly;..        
efc0: 20 20 20 20 20 20 20 20 74 68 69 73 2e 6c 6f 67          this.log
efd0: 46 69 6c 65 4e 61 6d 65 20 3d 20 6c 6f 67 46 69  FileName = logFi
efe0: 6c 65 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20  leName;..       
eff0: 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 64 69           this.di
f000: 72 65 63 74 6f 72 79 20 3d 20 64 69 72 65 63 74  rectory = direct
f010: 6f 72 79 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ory;..          
f020: 20 20 20 20 20 20 74 68 69 73 2e 63 6f 72 65 46        this.coreF
f030: 69 6c 65 4e 61 6d 65 20 3d 20 63 6f 72 65 46 69  ileName = coreFi
f040: 6c 65 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20  leName;..       
f050: 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 6c 69           this.li
f060: 6e 71 46 69 6c 65 4e 61 6d 65 20 3d 20 6c 69 6e  nqFileName = lin
f070: 71 46 69 6c 65 4e 61 6d 65 3b 0d 0a 20 20 20 20  qFileName;..    
f080: 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73              this
f090: 2e 64 65 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d  .designerFileNam
f0a0: 65 20 3d 20 64 65 73 69 67 6e 65 72 46 69 6c 65  e = designerFile
f0b0: 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  Name;..         
f0c0: 20 20 20 20 20 20 20 74 68 69 73 2e 72 65 67 69         this.regi
f0d0: 73 74 72 79 56 65 72 73 69 6f 6e 20 3d 20 72 65  stryVersion = re
f0e0: 67 69 73 74 72 79 56 65 72 73 69 6f 6e 3b 0d 0a  gistryVersion;..
f0f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f100: 74 68 69 73 2e 63 6f 6e 66 69 67 56 65 72 73 69  this.configVersi
f110: 6f 6e 20 3d 20 63 6f 6e 66 69 67 56 65 72 73 69  on = configVersi
f120: 6f 6e 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  on;..           
f130: 20 20 20 20 20 74 68 69 73 2e 64 65 62 75 67 46       this.debugF
f140: 6f 72 6d 61 74 20 3d 20 64 65 62 75 67 46 6f 72  ormat = debugFor
f150: 6d 61 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  mat;..          
f160: 20 20 20 20 20 20 74 68 69 73 2e 74 72 61 63 65        this.trace
f170: 46 6f 72 6d 61 74 20 3d 20 74 72 61 63 65 46 6f  Format = traceFo
f180: 72 6d 61 74 3b 0d 0a 20 20 20 20 20 20 20 20 20  rmat;..         
f190: 20 20 20 20 20 20 20 74 68 69 73 2e 69 6e 73 74         this.inst
f1a0: 61 6c 6c 46 6c 61 67 73 20 3d 20 69 6e 73 74 61  allFlags = insta
f1b0: 6c 6c 46 6c 61 67 73 3b 0d 0a 20 20 20 20 20 20  llFlags;..      
f1c0: 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 64            this.d
f1d0: 65 62 75 67 50 72 69 6f 72 69 74 79 20 3d 20 64  ebugPriority = d
f1e0: 65 62 75 67 50 72 69 6f 72 69 74 79 3b 0d 0a 20  ebugPriority;.. 
f1f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
f200: 68 69 73 2e 74 72 61 63 65 50 72 69 6f 72 69 74  his.tracePriorit
f210: 79 20 3d 20 74 72 61 63 65 50 72 69 6f 72 69 74  y = tracePriorit
f220: 79 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y;..            
f230: 20 20 20 20 74 68 69 73 2e 69 6e 73 74 61 6c 6c      this.install
f240: 20 3d 20 69 6e 73 74 61 6c 6c 3b 0d 0a 20 20 20   = install;..   
f250: 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69               thi
f260: 73 2e 77 6f 77 36 34 20 3d 20 77 6f 77 36 34 3b  s.wow64 = wow64;
f270: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
f280: 20 20 74 68 69 73 2e 6e 6f 52 75 6e 74 69 6d 65    this.noRuntime
f290: 56 65 72 73 69 6f 6e 20 3d 20 6e 6f 52 75 6e 74  Version = noRunt
f2a0: 69 6d 65 56 65 72 73 69 6f 6e 3b 0d 0a 20 20 20  imeVersion;..   
f2b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69               thi
f2c0: 73 2e 6e 6f 44 65 73 6b 74 6f 70 20 3d 20 6e 6f  s.noDesktop = no
f2d0: 44 65 73 6b 74 6f 70 3b 0d 0a 20 20 20 20 20 20  Desktop;..      
f2e0: 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 6e            this.n
f2f0: 6f 43 6f 6d 70 61 63 74 20 3d 20 6e 6f 43 6f 6d  oCompact = noCom
f300: 70 61 63 74 3b 0d 0a 20 20 20 20 20 20 20 20 20  pact;..         
f310: 20 20 20 20 20 20 20 74 68 69 73 2e 6e 6f 4e 65         this.noNe
f320: 74 46 78 32 30 20 3d 20 6e 6f 4e 65 74 46 78 32  tFx20 = noNetFx2
f330: 30 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  0;..            
f340: 20 20 20 20 74 68 69 73 2e 6e 6f 4e 65 74 46 78      this.noNetFx
f350: 34 30 20 3d 20 6e 6f 4e 65 74 46 78 34 30 3b 0d  40 = noNetFx40;.
f360: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
f370: 20 74 68 69 73 2e 6e 6f 4e 65 74 46 78 34 35 20   this.noNetFx45 
f380: 3d 20 6e 6f 4e 65 74 46 78 34 35 3b 0d 0a 20 20  = noNetFx45;..  
f390: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
f3a0: 69 73 2e 6e 6f 56 73 32 30 30 35 20 3d 20 6e 6f  is.noVs2005 = no
f3b0: 56 73 32 30 30 35 3b 0d 0a 20 20 20 20 20 20 20  Vs2005;..       
f3c0: 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 6e 6f           this.no
f3d0: 56 73 32 30 30 38 20 3d 20 6e 6f 56 73 32 30 30  Vs2008 = noVs200
f3e0: 38 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  8;..            
f3f0: 20 20 20 20 74 68 69 73 2e 6e 6f 56 73 32 30 31      this.noVs201
f400: 30 20 3d 20 6e 6f 56 73 32 30 31 30 3b 0d 0a 20  0 = noVs2010;.. 
f410: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
f420: 68 69 73 2e 6e 6f 56 73 32 30 31 32 20 3d 20 6e  his.noVs2012 = n
f430: 6f 56 73 32 30 31 32 3b 0d 0a 20 20 20 20 20 20  oVs2012;..      
f440: 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 6e            this.n
f450: 6f 54 72 61 63 65 20 3d 20 6e 6f 54 72 61 63 65  oTrace = noTrace
f460: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
f470: 20 20 20 74 68 69 73 2e 6e 6f 43 6f 6e 73 6f 6c     this.noConsol
f480: 65 20 3d 20 6e 6f 43 6f 6e 73 6f 6c 65 3b 0d 0a  e = noConsole;..
f490: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f4a0: 74 68 69 73 2e 6e 6f 4c 6f 67 20 3d 20 6e 6f 4c  this.noLog = noL
f4b0: 6f 67 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  og;..           
f4c0: 20 20 20 20 20 74 68 69 73 2e 74 68 72 6f 77 4f       this.throwO
f4d0: 6e 4d 69 73 73 69 6e 67 20 3d 20 74 68 72 6f 77  nMissing = throw
f4e0: 4f 6e 4d 69 73 73 69 6e 67 3b 0d 0a 20 20 20 20  OnMissing;..    
f4f0: 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73              this
f500: 2e 77 68 61 74 49 66 20 3d 20 77 68 61 74 49 66  .whatIf = whatIf
f510: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
f520: 20 20 20 74 68 69 73 2e 64 65 62 75 67 20 3d 20     this.debug = 
f530: 64 65 62 75 67 3b 0d 0a 20 20 20 20 20 20 20 20  debug;..        
f540: 20 20 20 20 20 20 20 20 74 68 69 73 2e 76 65 72          this.ver
f550: 62 6f 73 65 20 3d 20 76 65 72 62 6f 73 65 3b 0d  bose = verbose;.
f560: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
f570: 20 74 68 69 73 2e 63 6f 6e 66 69 72 6d 20 3d 20   this.confirm = 
f580: 63 6f 6e 66 69 72 6d 3b 0d 0a 20 20 20 20 20 20  confirm;..      
f590: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
f5a0: 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d       #endregion.
f5b0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
f5c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f5d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f5e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f5f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f600: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
f610: 20 20 23 72 65 67 69 6f 6e 20 50 72 69 76 61 74    #region Privat
f620: 65 20 53 74 61 74 69 63 20 4d 65 74 68 6f 64 73  e Static Methods
f630: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
f640: 69 76 61 74 65 20 73 74 61 74 69 63 20 76 6f 69  ivate static voi
f650: 64 20 47 65 74 44 65 66 61 75 6c 74 46 69 6c 65  d GetDefaultFile
f660: 4e 61 6d 65 73 28 0d 0a 20 20 20 20 20 20 20 20  Names(..        
f670: 20 20 20 20 20 20 20 20 72 65 66 20 73 74 72 69          ref stri
f680: 6e 67 20 64 69 72 65 63 74 6f 72 79 2c 0d 0a 20  ng directory,.. 
f690: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
f6a0: 65 66 20 73 74 72 69 6e 67 20 63 6f 72 65 46 69  ef string coreFi
f6b0: 6c 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20  leName,..       
f6c0: 20 20 20 20 20 20 20 20 20 72 65 66 20 73 74 72           ref str
f6d0: 69 6e 67 20 6c 69 6e 71 46 69 6c 65 4e 61 6d 65  ing linqFileName
f6e0: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
f6f0: 20 20 20 72 65 66 20 73 74 72 69 6e 67 20 64 65     ref string de
f700: 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 0d 0a  signerFileName..
f710: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f720: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
f730: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
f740: 20 20 69 66 20 28 74 68 69 73 41 73 73 65 6d 62    if (thisAssemb
f750: 6c 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ly == null)..   
f760: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f770: 20 72 65 74 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20   return;....    
f780: 20 20 20 20 20 20 20 20 20 20 20 20 64 69 72 65              dire
f790: 63 74 6f 72 79 20 3d 20 50 61 74 68 2e 47 65 74  ctory = Path.Get
f7a0: 44 69 72 65 63 74 6f 72 79 4e 61 6d 65 28 74 68  DirectoryName(th
f7b0: 69 73 41 73 73 65 6d 62 6c 79 2e 4c 6f 63 61 74  isAssembly.Locat
f7c0: 69 6f 6e 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ion);....       
f7d0: 20 20 20 20 20 20 20 20 20 69 66 20 28 53 74 72           if (Str
f7e0: 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74  ing.IsNullOrEmpt
f7f0: 79 28 64 69 72 65 63 74 6f 72 79 29 29 0d 0a 20  y(directory)).. 
f800: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f810: 20 20 20 72 65 74 75 72 6e 3b 0d 0a 0d 0a 20 20     return;....  
f820: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
f830: 72 65 46 69 6c 65 4e 61 6d 65 20 3d 20 50 61 74  reFileName = Pat
f840: 68 2e 43 6f 6d 62 69 6e 65 28 64 69 72 65 63 74  h.Combine(direct
f850: 6f 72 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ory,..          
f860: 20 20 20 20 20 20 20 20 20 20 49 6e 73 74 61 6c            Instal
f870: 6c 65 72 2e 43 6f 72 65 46 69 6c 65 4e 61 6d 65  ler.CoreFileName
f880: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
f890: 20 20 20 20 20 20 6c 69 6e 71 46 69 6c 65 4e 61        linqFileNa
f8a0: 6d 65 20 3d 20 50 61 74 68 2e 43 6f 6d 62 69 6e  me = Path.Combin
f8b0: 65 28 64 69 72 65 63 74 6f 72 79 2c 0d 0a 20 20  e(directory,..  
f8c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f8d0: 20 20 49 6e 73 74 61 6c 6c 65 72 2e 4c 69 6e 71    Installer.Linq
f8e0: 46 69 6c 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20  FileName);....  
f8f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65                de
f900: 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 20 3d  signerFileName =
f910: 20 50 61 74 68 2e 43 6f 6d 62 69 6e 65 28 64 69   Path.Combine(di
f920: 72 65 63 74 6f 72 79 2c 0d 0a 20 20 20 20 20 20  rectory,..      
f930: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 49 6e                In
f940: 73 74 61 6c 6c 65 72 2e 44 65 73 69 67 6e 65 72  staller.Designer
f950: 46 69 6c 65 4e 61 6d 65 29 3b 0d 0a 20 20 20 20  FileName);..    
f960: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
f970: 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
f980: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f990: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f9a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f9b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
f9c0: 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
f9d0: 61 74 65 20 73 74 61 74 69 63 20 62 6f 6f 6c 20  ate static bool 
f9e0: 43 68 65 63 6b 4f 70 74 69 6f 6e 28 0d 0a 20 20  CheckOption(..  
f9f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
fa00: 66 20 73 74 72 69 6e 67 20 61 72 67 0d 0a 20 20  f string arg..  
fa10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d                ).
fa20: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
fa30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fa40: 73 74 72 69 6e 67 20 72 65 73 75 6c 74 20 3d 20  string result = 
fa50: 61 72 67 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  arg;....        
fa60: 20 20 20 20 20 20 20 20 69 66 20 28 21 53 74 72          if (!Str
fa70: 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74  ing.IsNullOrEmpt
fa80: 79 28 72 65 73 75 6c 74 29 29 0d 0a 20 20 20 20  y(result))..    
fa90: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
faa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fab0: 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
fac0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f             // NO
fad0: 54 45 3a 20 52 65 6d 6f 76 65 20 61 6c 6c 20 6c  TE: Remove all l
fae0: 65 61 64 69 6e 67 20 73 77 69 74 63 68 20 63 68  eading switch ch
faf0: 61 72 73 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  ars...          
fb00: 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
fb10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fb20: 20 20 72 65 73 75 6c 74 20 3d 20 72 65 73 75 6c    result = resul
fb30: 74 2e 54 72 69 6d 53 74 61 72 74 28 53 77 69 74  t.TrimStart(Swit
fb40: 63 68 43 68 61 72 73 29 3b 0d 0a 0d 0a 20 20 20  chChars);....   
fb50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fb60: 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
fb70: 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45           // NOTE
fb80: 3a 20 48 6f 77 20 6d 61 6e 79 20 63 68 61 72 73  : How many chars
fb90: 20 77 65 72 65 20 72 65 6d 6f 76 65 64 3f 0d 0a   were removed?..
fba0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fbb0: 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
fbc0: 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 20              int 
fbd0: 63 6f 75 6e 74 20 3d 20 61 72 67 2e 4c 65 6e 67  count = arg.Leng
fbe0: 74 68 20 2d 20 72 65 73 75 6c 74 2e 4c 65 6e 67  th - result.Leng
fbf0: 74 68 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  th;....         
fc00: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
fc10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fc20: 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 57 61 73 20     // NOTE: Was 
fc30: 74 68 65 72 65 20 61 74 20 6c 65 61 73 74 20 6f  there at least o
fc40: 6e 65 3f 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ne?..           
fc50: 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
fc60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fc70: 20 69 66 20 28 63 6f 75 6e 74 20 3e 20 30 29 0d   if (count > 0).
fc80: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
fc90: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
fca0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fcb0: 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
fcc0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e              // N
fcd0: 4f 54 45 3a 20 4f 6b 2c 20 72 65 70 6c 61 63 65  OTE: Ok, replace
fce0: 20 74 68 65 69 72 20 6f 72 69 67 69 6e 61 6c 0d   their original.
fcf0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
fd00: 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
fd10: 20 20 61 72 67 75 6d 65 6e 74 2e 0d 0a 20 20 20    argument...   
fd20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fd30: 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
fd40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fd50: 20 61 72 67 20 3d 20 72 65 73 75 6c 74 3b 0d 0a   arg = result;..
fd60: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
fd70: 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
fd80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fd90: 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 59        // NOTE: Y
fda0: 65 73 2c 20 74 68 69 73 20 69 73 20 61 20 73 77  es, this is a sw
fdb0: 69 74 63 68 2e 0d 0a 20 20 20 20 20 20 20 20 20  itch...         
fdc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
fdd0: 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
fde0: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
fdf0: 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20  n true;..       
fe00: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
fe10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fe20: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
fe30: 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
fe40: 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
fe50: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
fe60: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
fe70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fe80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fe90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fea0: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
feb0: 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74      private stat
fec0: 69 63 20 62 6f 6f 6c 20 4d 61 74 63 68 4f 70 74  ic bool MatchOpt
fed0: 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ion(..          
fee0: 20 20 20 20 20 20 73 74 72 69 6e 67 20 61 72 67        string arg
fef0: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
ff00: 20 20 20 73 74 72 69 6e 67 20 6f 70 74 69 6f 6e     string option
ff10: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
ff20: 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20    )..           
ff30: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
ff40: 20 20 20 20 69 66 20 28 28 61 72 67 20 3d 3d 20      if ((arg == 
ff50: 6e 75 6c 6c 29 20 7c 7c 20 28 6f 70 74 69 6f 6e  null) || (option
ff60: 20 3d 3d 20 6e 75 6c 6c 29 29 0d 0a 20 20 20 20   == null))..    
ff70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ff80: 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d  return false;...
ff90: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
ffa0: 20 72 65 74 75 72 6e 20 53 74 72 69 6e 67 2e 43   return String.C
ffb0: 6f 6d 70 61 72 65 28 61 72 67 2c 20 30 2c 20 6f  ompare(arg, 0, o
ffc0: 70 74 69 6f 6e 2c 20 30 2c 0d 0a 20 20 20 20 20  ption, 0,..     
ffd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61                 a
ffe0: 72 67 2e 4c 65 6e 67 74 68 2c 20 53 74 72 69 6e  rg.Length, Strin
fff0: 67 43 6f 6d 70 61 72 69 73 6f 6e 2e 4f 72 64 69  gComparison.Ordi
10000 6e 61 6c 49 67 6e 6f 72 65 43 61 73 65 29 20 3d  nalIgnoreCase) =
10010 3d 20 30 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  = 0;..          
10020 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
10030 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
10040 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10050 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10060 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10070 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
10080 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74        private st
10090 61 74 69 63 20 62 6f 6f 6c 3f 20 50 61 72 73 65  atic bool? Parse
100a0 42 6f 6f 6c 65 61 6e 28 0d 0a 20 20 20 20 20 20  Boolean(..      
100b0 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
100c0 20 74 65 78 74 0d 0a 20 20 20 20 20 20 20 20 20   text..         
100d0 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
100e0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
100f0 20 20 20 20 20 20 20 20 20 69 66 20 28 21 53 74           if (!St
10100 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70  ring.IsNullOrEmp
10110 74 79 28 74 65 78 74 29 29 0d 0a 20 20 20 20 20  ty(text))..     
10120 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
10130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10140 20 20 62 6f 6f 6c 20 76 61 6c 75 65 3b 0d 0a 0d    bool value;...
10150 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
10160 20 20 20 20 20 69 66 20 28 62 6f 6f 6c 2e 54 72       if (bool.Tr
10170 79 50 61 72 73 65 28 74 65 78 74 2c 20 6f 75 74  yParse(text, out
10180 20 76 61 6c 75 65 29 29 0d 0a 20 20 20 20 20 20   value))..      
10190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
101a0 20 20 72 65 74 75 72 6e 20 76 61 6c 75 65 3b 0d    return value;.
101b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
101c0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
101d0 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c        return nul
101e0 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l;..            
101f0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
10200 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
10210 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10220 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10230 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10240 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
10250 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74      private stat
10260 69 63 20 6f 62 6a 65 63 74 20 50 61 72 73 65 45  ic object ParseE
10270 6e 75 6d 28 0d 0a 20 20 20 20 20 20 20 20 20 20  num(..          
10280 20 20 20 20 20 20 54 79 70 65 20 65 6e 75 6d 54        Type enumT
10290 79 70 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ype,..          
102a0 20 20 20 20 20 20 73 74 72 69 6e 67 20 74 65 78        string tex
102b0 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t,..            
102c0 20 20 20 20 62 6f 6f 6c 20 6e 6f 43 61 73 65 0d      bool noCase.
102d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
102e0 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   )..            
102f0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
10300 20 20 20 69 66 20 28 28 65 6e 75 6d 54 79 70 65     if ((enumType
10310 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20 21 65 6e   == null) || !en
10320 75 6d 54 79 70 65 2e 49 73 45 6e 75 6d 29 0d 0a  umType.IsEnum)..
10330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10340 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b      return null;
10350 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
10360 20 20 20 20 69 66 20 28 21 53 74 72 69 6e 67 2e      if (!String.
10370 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 74 65  IsNullOrEmpty(te
10380 78 74 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  xt))..          
10390 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
103a0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79               try
103b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
103c0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
103d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
103e0 20 72 65 74 75 72 6e 20 45 6e 75 6d 2e 50 61 72   return Enum.Par
103f0 73 65 28 65 6e 75 6d 54 79 70 65 2c 20 74 65 78  se(enumType, tex
10400 74 2c 20 6e 6f 43 61 73 65 29 3b 0d 0a 20 20 20  t, noCase);..   
10410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10420 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
10430 20 20 20 20 20 20 20 20 63 61 74 63 68 0d 0a 20          catch.. 
10440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10450 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
10460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
10470 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20   do nothing...  
10480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10490 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
104a0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
104b0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
104c0 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20   null;..        
104d0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
104e0 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
104f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
10500 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10510 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10520 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10530 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10540 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
10550 23 72 65 67 69 6f 6e 20 50 75 62 6c 69 63 20 53  #region Public S
10560 74 61 74 69 63 20 4d 65 74 68 6f 64 73 0d 0a 20  tatic Methods.. 
10570 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
10580 63 20 73 74 61 74 69 63 20 43 6f 6e 66 69 67 75  c static Configu
10590 72 61 74 69 6f 6e 20 43 72 65 61 74 65 44 65 66  ration CreateDef
105a0 61 75 6c 74 28 29 0d 0a 20 20 20 20 20 20 20 20  ault()..        
105b0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
105c0 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 64 69         string di
105d0 72 65 63 74 6f 72 79 20 3d 20 6e 75 6c 6c 3b 0d  rectory = null;.
105e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
105f0 20 73 74 72 69 6e 67 20 63 6f 72 65 46 69 6c 65   string coreFile
10600 4e 61 6d 65 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20  Name = null;..  
10610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
10620 72 69 6e 67 20 6c 69 6e 71 46 69 6c 65 4e 61 6d  ring linqFileNam
10630 65 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20  e = null;..     
10640 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
10650 67 20 64 65 73 69 67 6e 65 72 46 69 6c 65 4e 61  g designerFileNa
10660 6d 65 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20  me = null;....  
10670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 47 65                Ge
10680 74 44 65 66 61 75 6c 74 46 69 6c 65 4e 61 6d 65  tDefaultFileName
10690 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  s(..            
106a0 20 20 20 20 20 20 20 20 72 65 66 20 64 69 72 65          ref dire
106b0 63 74 6f 72 79 2c 20 72 65 66 20 63 6f 72 65 46  ctory, ref coreF
106c0 69 6c 65 4e 61 6d 65 2c 20 72 65 66 20 6c 69 6e  ileName, ref lin
106d0 71 46 69 6c 65 4e 61 6d 65 2c 0d 0a 20 20 20 20  qFileName,..    
106e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
106f0 72 65 66 20 64 65 73 69 67 6e 65 72 46 69 6c 65  ref designerFile
10700 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  Name);....      
10710 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
10720 20 6e 65 77 20 43 6f 6e 66 69 67 75 72 61 74 69   new Configurati
10730 6f 6e 28 74 68 69 73 41 73 73 65 6d 62 6c 79 2c  on(thisAssembly,
10740 20 6e 75 6c 6c 2c 20 64 69 72 65 63 74 6f 72 79   null, directory
10750 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
10760 20 20 20 20 20 20 20 63 6f 72 65 46 69 6c 65 4e         coreFileN
10770 61 6d 65 2c 20 6c 69 6e 71 46 69 6c 65 4e 61 6d  ame, linqFileNam
10780 65 2c 20 64 65 73 69 67 6e 65 72 46 69 6c 65 4e  e, designerFileN
10790 61 6d 65 2c 20 6e 75 6c 6c 2c 20 6e 75 6c 6c 2c  ame, null, null,
107a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
107b0 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44        TraceOps.D
107c0 65 62 75 67 46 6f 72 6d 61 74 2c 20 54 72 61 63  ebugFormat, Trac
107d0 65 4f 70 73 2e 54 72 61 63 65 46 6f 72 6d 61 74  eOps.TraceFormat
107e0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
107f0 20 20 20 20 20 20 20 49 6e 73 74 61 6c 6c 46 6c         InstallFl
10800 61 67 73 2e 44 65 66 61 75 6c 74 2c 20 54 72 61  ags.Default, Tra
10810 63 65 50 72 69 6f 72 69 74 79 2e 44 65 66 61 75  cePriority.Defau
10820 6c 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  lt,..           
10830 20 20 20 20 20 20 20 20 20 54 72 61 63 65 50 72           TracePr
10840 69 6f 72 69 74 79 2e 44 65 66 61 75 6c 74 2c 20  iority.Default, 
10850 74 72 75 65 2c 20 66 61 6c 73 65 2c 20 66 61 6c  true, false, fal
10860 73 65 2c 20 66 61 6c 73 65 2c 20 66 61 6c 73 65  se, false, false
10870 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
10880 20 20 20 20 20 20 20 66 61 6c 73 65 2c 20 66 61         false, fa
10890 6c 73 65 2c 20 66 61 6c 73 65 2c 20 66 61 6c 73  lse, false, fals
108a0 65 2c 20 66 61 6c 73 65 2c 20 66 61 6c 73 65 2c  e, false, false,
108b0 20 66 61 6c 73 65 2c 20 66 61 6c 73 65 2c 0d 0a   false, false,..
108c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
108d0 20 20 20 20 66 61 6c 73 65 2c 20 66 61 6c 73 65      false, false
108e0 2c 20 74 72 75 65 2c 20 74 72 75 65 2c 20 66 61  , true, true, fa
108f0 6c 73 65 2c 20 66 61 6c 73 65 2c 20 66 61 6c 73  lse, false, fals
10900 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e);..           
10910 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
10920 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
10930 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10940 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10950 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10960 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
10970 20 20 20 20 20 5b 4d 65 74 68 6f 64 49 6d 70 6c       [MethodImpl
10980 28 4d 65 74 68 6f 64 49 6d 70 6c 4f 70 74 69 6f  (MethodImplOptio
10990 6e 73 2e 4e 6f 49 6e 6c 69 6e 69 6e 67 29 5d 0d  ns.NoInlining)].
109a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
109b0 6c 69 63 20 73 74 61 74 69 63 20 62 6f 6f 6c 20  lic static bool 
109c0 46 72 6f 6d 41 72 67 73 28 0d 0a 20 20 20 20 20  FromArgs(..     
109d0 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
109e0 67 5b 5d 20 61 72 67 73 2c 0d 0a 20 20 20 20 20  g[] args,..     
109f0 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
10a00 73 74 72 69 63 74 2c 0d 0a 20 20 20 20 20 20 20  strict,..       
10a10 20 20 20 20 20 20 20 20 20 72 65 66 20 43 6f 6e           ref Con
10a20 66 69 67 75 72 61 74 69 6f 6e 20 63 6f 6e 66 69  figuration confi
10a30 67 75 72 61 74 69 6f 6e 2c 0d 0a 20 20 20 20 20  guration,..     
10a40 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20 73             ref s
10a50 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20  tring error..   
10a60 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a               )..
10a70 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
10a80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
10a90 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ry..            
10aa0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
10ab0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 61             if (a
10ac0 72 67 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  rgs == null)..  
10ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10ae0 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75        return tru
10af0 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
10b00 20 20 20 20 20 20 20 20 20 20 69 66 20 28 63 6f            if (co
10b10 6e 66 69 67 75 72 61 74 69 6f 6e 20 3d 3d 20 6e  nfiguration == n
10b20 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
10b30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
10b40 6e 66 69 67 75 72 61 74 69 6f 6e 20 3d 20 43 6f  nfiguration = Co
10b50 6e 66 69 67 75 72 61 74 69 6f 6e 2e 43 72 65 61  nfiguration.Crea
10b60 74 65 44 65 66 61 75 6c 74 28 29 3b 0d 0a 0d 0a  teDefault();....
10b70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10b80 20 20 20 20 69 6e 74 20 6c 65 6e 67 74 68 20 3d      int length =
10b90 20 61 72 67 73 2e 4c 65 6e 67 74 68 3b 0d 0a 0d   args.Length;...
10ba0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
10bb0 20 20 20 20 20 66 6f 72 20 28 69 6e 74 20 69 6e       for (int in
10bc0 64 65 78 20 3d 20 30 3b 20 69 6e 64 65 78 20 3c  dex = 0; index <
10bd0 20 6c 65 6e 67 74 68 3b 20 69 6e 64 65 78 2b 2b   length; index++
10be0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
10bf0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
10c00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10c10 20 20 73 74 72 69 6e 67 20 61 72 67 20 3d 20 61    string arg = a
10c20 72 67 73 5b 69 6e 64 65 78 5d 3b 0d 0a 0d 0a 20  rgs[index];.... 
10c30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10c40 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
10c50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10c60 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 53 6b 69 70     // NOTE: Skip
10c70 20 61 6e 79 20 61 72 67 75 6d 65 6e 74 20 74 68   any argument th
10c80 61 74 20 69 73 20 6e 75 6c 6c 20 28 3f 29 20 6f  at is null (?) o
10c90 72 20 61 6e 20 65 6d 70 74 79 0d 0a 20 20 20 20  r an empty..    
10ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10cb0 20 20 20 20 2f 2f 20 20 20 20 20 20 20 73 74 72      //       str
10cc0 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  ing...          
10cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
10ce0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
10cf0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 53 74            if (St
10d00 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70  ring.IsNullOrEmp
10d10 74 79 28 61 72 67 29 29 0d 0a 20 20 20 20 20 20  ty(arg))..      
10d20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10d30 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d        continue;.
10d40 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
10d50 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
10d60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10d70 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20         // NOTE: 
10d80 57 65 20 61 72 65 20 67 6f 69 6e 67 20 74 6f 20  We are going to 
10d90 6d 6f 64 69 66 79 20 74 68 65 20 6f 72 69 67 69  modify the origi
10da0 6e 61 6c 20 61 72 67 75 6d 65 6e 74 0d 0a 20 20  nal argument..  
10db0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10dc0 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 62        //       b
10dd0 79 20 72 65 6d 6f 76 69 6e 67 20 61 6e 79 20 6c  y removing any l
10de0 65 61 64 69 6e 67 20 6f 70 74 69 6f 6e 20 63 68  eading option ch
10df0 61 72 61 63 74 65 72 73 3b 0d 0a 20 20 20 20 20  aracters;..     
10e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10e10 20 20 20 2f 2f 20 20 20 20 20 20 20 74 68 65 72     //       ther
10e20 65 66 6f 72 65 2c 20 77 65 20 75 73 65 20 61 20  efore, we use a 
10e30 6e 65 77 20 73 74 72 69 6e 67 20 74 6f 20 68 6f  new string to ho
10e40 6c 64 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20  ld the..        
10e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10e60 2f 2f 20 20 20 20 20 20 20 6d 6f 64 69 66 69 65  //       modifie
10e70 64 20 61 72 67 75 6d 65 6e 74 2e 0d 0a 20 20 20  d argument...   
10e80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10e90 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
10ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10eb0 20 73 74 72 69 6e 67 20 6e 65 77 41 72 67 20 3d   string newArg =
10ec0 20 61 72 67 3b 0d 0a 0d 0a 20 20 20 20 20 20 20   arg;....       
10ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10ee0 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
10ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
10f00 4e 4f 54 45 3a 20 41 6c 6c 20 74 68 65 20 73 75  NOTE: All the su
10f10 70 70 6f 72 74 65 64 20 63 6f 6d 6d 61 6e 64 20  pported command 
10f20 6c 69 6e 65 20 6f 70 74 69 6f 6e 73 20 6d 75 73  line options mus
10f30 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  t..             
10f40 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
10f50 20 20 20 20 62 65 67 69 6e 20 77 69 74 68 20 61      begin with a
10f60 6e 20 6f 70 74 69 6f 6e 20 63 68 61 72 61 63 74  n option charact
10f70 65 72 20 28 65 2e 67 2e 20 61 20 6d 69 6e 75 73  er (e.g. a minus
10f80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
10f90 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
10fa0 20 20 20 6f 72 20 66 6f 72 77 61 72 64 20 73 6c     or forward sl
10fb0 61 73 68 29 3b 20 61 74 74 65 6d 70 74 20 74 6f  ash); attempt to
10fc0 20 76 61 6c 69 64 61 74 65 20 74 68 61 74 0d 0a   validate that..
10fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10fe0 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
10ff0 20 6e 6f 77 2e 20 20 49 66 20 77 65 20 66 61 69   now.  If we fai
11000 6c 20 69 6e 20 73 74 72 69 63 74 20 6d 6f 64 65  l in strict mode
11010 2c 20 77 65 20 61 72 65 20 64 6f 6e 65 3b 0d 0a  , we are done;..
11020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11030 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
11040 20 6f 74 68 65 72 77 69 73 65 2c 20 6a 75 73 74   otherwise, just
11050 20 73 6b 69 70 20 74 68 69 73 20 61 72 67 75 6d   skip this argum
11060 65 6e 74 20 61 6e 64 20 61 64 76 61 6e 63 65 0d  ent and advance.
11070 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
11080 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
11090 20 20 74 6f 20 74 68 65 20 6e 65 78 74 20 6f 6e    to the next on
110a0 65 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e...            
110b0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
110c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
110d0 20 20 20 20 20 20 20 20 69 66 20 28 21 43 68 65          if (!Che
110e0 63 6b 4f 70 74 69 6f 6e 28 72 65 66 20 6e 65 77  ckOption(ref new
110f0 41 72 67 29 29 0d 0a 20 20 20 20 20 20 20 20 20  Arg))..         
11100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
11110 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
11120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72                er
11130 72 6f 72 20 3d 20 54 72 61 63 65 4f 70 73 2e 44  ror = TraceOps.D
11140 65 62 75 67 41 6e 64 54 72 61 63 65 28 0d 0a 20  ebugAndTrace(.. 
11150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
11170 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77  racePriority.Low
11180 65 73 74 2c 20 64 65 62 75 67 43 61 6c 6c 62 61  est, debugCallba
11190 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ck,..           
111a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
111b0 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61       traceCallba
111c0 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ck, String.Forma
111d0 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
111e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
111f0 20 20 20 20 22 55 6e 73 75 70 70 6f 72 74 65 64      "Unsupported
11200 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 20 61 72   command line ar
11210 67 75 6d 65 6e 74 3a 20 7b 30 7d 22 2c 0d 0a 20  gument: {0}",.. 
11220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46                 F
11240 6f 72 44 69 73 70 6c 61 79 28 61 72 67 29 29 2c  orDisplay(arg)),
11250 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
11260 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
11270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11280 69 66 20 28 73 74 72 69 63 74 29 0d 0a 20 20 20  if (strict)..   
11290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
112a0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
112b0 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20  urn false;....  
112c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
112d0 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e            contin
112e0 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
112f0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
11300 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
11310 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
11320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11330 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 41        // NOTE: A
11340 6c 6c 20 74 68 65 20 73 75 70 70 6f 72 74 65 64  ll the supported
11350 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 20 6f 70   command line op
11360 74 69 6f 6e 73 20 6d 75 73 74 0d 0a 20 20 20 20  tions must..    
11370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11380 20 20 20 20 2f 2f 20 20 20 20 20 20 20 68 61 76      //       hav
11390 65 20 61 20 76 61 6c 75 65 3b 20 74 68 65 72 65  e a value; there
113a0 66 6f 72 65 2c 20 61 74 74 65 6d 70 74 20 74 6f  fore, attempt to
113b0 20 61 64 76 61 6e 63 65 0d 0a 20 20 20 20 20 20   advance..      
113c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
113d0 20 20 2f 2f 20 20 20 20 20 20 20 74 6f 20 69 74    //       to it
113e0 20 6e 6f 77 2e 20 20 49 66 20 77 65 20 66 61 69   now.  If we fai
113f0 6c 2c 20 77 65 20 61 72 65 20 64 6f 6e 65 2e 0d  l, we are done..
11400 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
11410 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
11420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11430 20 20 20 20 20 69 6e 64 65 78 2b 2b 3b 0d 0a 0d       index++;...
11440 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
11450 20 20 20 20 20 20 20 20 20 69 66 20 28 69 6e 64           if (ind
11460 65 78 20 3e 3d 20 6c 65 6e 67 74 68 29 0d 0a 20  ex >= length).. 
11470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11480 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
11490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
114a0 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 54 72        error = Tr
114b0 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54  aceOps.DebugAndT
114c0 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20  race(..         
114d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
114e0 20 20 20 20 20 20 20 54 72 61 63 65 50 72 69 6f         TracePrio
114f0 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62  rity.Lowest, deb
11500 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20  ugCallback,..   
11510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11520 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
11530 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69  ceCallback, Stri
11540 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ng.Format(..    
11550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11560 20 20 20 20 20 20 20 20 20 20 20 20 22 4d 69 73              "Mis
11570 73 69 6e 67 20 76 61 6c 75 65 20 66 6f 72 20 6f  sing value for o
11580 70 74 69 6f 6e 3a 20 7b 30 7d 22 2c 0d 0a 20 20  ption: {0}",..  
11590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
115a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f                Fo
115b0 72 44 69 73 70 6c 61 79 28 61 72 67 29 29 2c 20  rDisplay(arg)), 
115c0 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
115d0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
115e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
115f0 66 20 28 73 74 72 69 63 74 29 0d 0a 20 20 20 20  f (strict)..    
11600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11610 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
11620 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20  rn false;....   
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 20 20 62 72 65 61 6b 3b 0d           break;.
11650 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
11660 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
11670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11680 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
11690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
116a0 20 20 2f 2f 20 4e 4f 54 45 3a 20 47 72 61 62 20    // NOTE: Grab 
116b0 74 68 65 20 74 65 78 74 75 61 6c 20 76 61 6c 75  the textual valu
116c0 65 20 6f 66 20 74 68 69 73 20 63 6f 6d 6d 61 6e  e of this comman
116d0 64 20 6c 69 6e 65 0d 0a 20 20 20 20 20 20 20 20  d line..        
116e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
116f0 2f 2f 20 20 20 20 20 20 20 6f 70 74 69 6f 6e 2e  //       option.
11700 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
11710 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
11720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11730 20 20 20 20 20 20 73 74 72 69 6e 67 20 74 65 78        string tex
11740 74 20 3d 20 61 72 67 73 5b 69 6e 64 65 78 5d 3b  t = args[index];
11750 0d 0a 0d 0a 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 2f 2f 0d 0a              //..
11770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11780 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a          // NOTE:
11790 20 46 69 67 75 72 65 20 6f 75 74 20 77 68 69 63   Figure out whic
117a0 68 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 20 6f  h command line o
117b0 70 74 69 6f 6e 20 74 68 69 73 20 69 73 0d 0a 20  ption this is.. 
117c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
117d0 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
117e0 28 62 61 73 65 64 20 6f 6e 20 61 20 70 61 72 74  (based on a part
117f0 69 61 6c 20 6e 61 6d 65 20 6d 61 74 63 68 29 20  ial name match) 
11800 61 6e 64 20 74 68 65 6e 20 74 72 79 0d 0a 20 20  and then try..  
11810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11820 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 74        //       t
11830 6f 20 69 6e 74 65 72 70 72 65 74 20 74 68 65 20  o interpret the 
11840 74 65 78 74 75 61 6c 20 76 61 6c 75 65 20 61 73  textual value as
11850 20 74 68 65 20 63 6f 72 72 65 63 74 0d 0a 20 20   the correct..  
11860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11870 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 74        //       t
11880 79 70 65 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  ype...          
11890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
118a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
118b0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 4d 61            if (Ma
118c0 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67  tchOption(newArg
118d0 2c 20 22 63 6f 6e 66 69 67 56 65 72 73 69 6f 6e  , "configVersion
118e0 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  "))..           
118f0 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
11900 20 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 20 20 20 63 6f 6e 66              conf
11920 69 67 75 72 61 74 69 6f 6e 2e 63 6f 6e 66 69 67  iguration.config
11930 56 65 72 73 69 6f 6e 20 3d 20 74 65 78 74 3b 0d  Version = text;.
11940 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
11950 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
11960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11970 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74      else if (Mat
11980 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c  chOption(newArg,
11990 20 22 63 6f 6e 66 69 72 6d 22 29 29 0d 0a 20 20   "confirm"))..  
119a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
119b0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
119c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
119d0 20 20 20 20 20 62 6f 6f 6c 3f 20 76 61 6c 75 65       bool? value
119e0 20 3d 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28   = ParseBoolean(
119f0 74 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  text);....      
11a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11a10 20 20 20 20 20 20 69 66 20 28 76 61 6c 75 65 20        if (value 
11a20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
11a30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11a40 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
11a50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11a60 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
11a70 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41   TraceOps.DebugA
11a80 6e 64 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20  ndTrace(..      
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 54 72                Tr
11ab0 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65  acePriority.Lowe
11ac0 73 74 2c 20 64 65 62 75 67 43 61 6c 6c 62 61 63  st, debugCallbac
11ad0 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  k,..            
11ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11af0 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c          traceCal
11b00 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f  lback, String.Fo
11b10 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
11b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11b30 20 20 20 20 20 20 20 20 20 20 20 22 49 6e 76 61             "Inva
11b40 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20  lid {0} boolean 
11b50 76 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20  value: {1}",..  
11b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11b70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11b80 20 20 46 6f 72 44 69 73 70 6c 61 79 28 61 72 67    ForDisplay(arg
11b90 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 74 65  ), ForDisplay(te
11ba0 78 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  xt)),..         
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 20 20 20 74 72 61 63 65             trace
11bd0 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
11be0 20 20 20 20 20 20 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 69 66                if
11c00 20 28 73 74 72 69 63 74 29 0d 0a 20 20 20 20 20   (strict)..     
11c10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
11c30 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a  eturn false;....
11c40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11c50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11c60 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20  continue;..     
11c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11c80 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
11c90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11ca0 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72          configur
11cb0 61 74 69 6f 6e 2e 63 6f 6e 66 69 72 6d 20 3d 20  ation.confirm = 
11cc0 28 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20 20  (bool)value;..  
11cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11ce0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
11cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11d00 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f   else if (MatchO
11d10 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 63  ption(newArg, "c
11d20 6f 72 65 46 69 6c 65 4e 61 6d 65 22 29 29 0d 0a  oreFileName"))..
11d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11d40 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
11d50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11d60 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61         configura
11d70 74 69 6f 6e 2e 63 6f 72 65 46 69 6c 65 4e 61 6d  tion.coreFileNam
11d80 65 20 3d 20 74 65 78 74 3b 0d 0a 20 20 20 20 20  e = text;..     
11d90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11da0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
11db0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c                el
11dc0 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69  se if (MatchOpti
11dd0 6f 6e 28 6e 65 77 41 72 67 2c 20 22 64 65 62 75  on(newArg, "debu
11de0 67 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  g"))..          
11df0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
11e00 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
11e10 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f               boo
11e20 6c 3f 20 76 61 6c 75 65 20 3d 20 50 61 72 73 65  l? value = Parse
11e30 42 6f 6f 6c 65 61 6e 28 74 65 78 74 29 3b 0d 0a  Boolean(text);..
11e40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
11e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
11e60 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29   (value == null)
11e70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
11e80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
11e90 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
11ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11eb0 20 65 72 72 6f 72 20 3d 20 54 72 61 63 65 4f 70   error = TraceOp
11ec0 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28  s.DebugAndTrace(
11ed0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
11ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11ef0 20 20 20 20 20 20 54 72 61 63 65 50 72 69 6f 72        TracePrior
11f00 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75  ity.Lowest, debu
11f10 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20  gCallback,..    
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 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53  traceCallback, S
11f50 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
11f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11f80 20 20 20 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20     "Invalid {0} 
11f90 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 3a 20 7b  boolean value: {
11fa0 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  1}",..          
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 46 6f 72 44 69 73            ForDis
11fd0 70 6c 61 79 28 61 72 67 29 2c 20 46 6f 72 44 69  play(arg), ForDi
11fe0 73 70 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a 20  splay(text)),.. 
11ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12010 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
12020 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
12030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12040 20 20 20 20 20 20 69 66 20 28 73 74 72 69 63 74        if (strict
12050 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
12060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12070 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
12080 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  lse;....        
12090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
120a0 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65          continue
120b0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
120c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
120d0 0d 0a 0d 0a 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 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 64 65  configuration.de
12100 62 75 67 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75  bug = (bool)valu
12110 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
12120 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
12130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12140 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28         else if (
12150 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41  MatchOption(newA
12160 72 67 2c 20 22 64 65 62 75 67 46 6f 72 6d 61 74  rg, "debugFormat
12170 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  "))..           
12180 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
12190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
121a0 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66              conf
121b0 69 67 75 72 61 74 69 6f 6e 2e 64 65 62 75 67 46  iguration.debugF
121c0 6f 72 6d 61 74 20 3d 20 74 65 78 74 3b 0d 0a 20  ormat = text;.. 
121d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
121e0 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
121f0 4f 70 73 2e 44 65 62 75 67 46 6f 72 6d 61 74 20  Ops.DebugFormat 
12200 3d 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e  = configuration.
12210 64 65 62 75 67 46 6f 72 6d 61 74 3b 0d 0a 20 20  debugFormat;..  
12220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12230 20 20 20 20 20 20 7d 0d 0a 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 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f   else if (MatchO
12260 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 64  ption(newArg, "d
12270 65 62 75 67 50 72 69 6f 72 69 74 79 22 29 29 0d  ebugPriority")).
12280 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
12290 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
122a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
122b0 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 76          object v
122c0 61 6c 75 65 20 3d 20 50 61 72 73 65 45 6e 75 6d  alue = ParseEnum
122d0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
122e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
122f0 20 20 20 74 79 70 65 6f 66 28 54 72 61 63 65 50     typeof(TraceP
12300 72 69 6f 72 69 74 79 29 2c 20 74 65 78 74 2c 20  riority), text, 
12310 74 72 75 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  true);....      
12320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12330 20 20 20 20 20 20 69 66 20 28 76 61 6c 75 65 20        if (value 
12340 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
12350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12360 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
12370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12380 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
12390 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41   TraceOps.DebugA
123a0 6e 64 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20  ndTrace(..      
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 54 72                Tr
123d0 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65  acePriority.Lowe
123e0 73 74 2c 20 64 65 62 75 67 43 61 6c 6c 62 61 63  st, debugCallbac
123f0 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  k,..            
12400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12410 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c          traceCal
12420 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f  lback, String.Fo
12430 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
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 22 49 6e 76 61             "Inva
12460 6c 69 64 20 7b 30 7d 20 76 61 6c 75 65 3a 20 7b  lid {0} value: {
12470 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  1}",..          
12480 20 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 46 6f 72 44 69 73            ForDis
124a0 70 6c 61 79 28 61 72 67 29 2c 20 46 6f 72 44 69  play(arg), ForDi
124b0 73 70 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a 20  splay(text)),.. 
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 20 20 20 20 20 20 20 20                  
124e0 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
124f0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
12500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12510 20 20 20 20 20 20 69 66 20 28 73 74 72 69 63 74        if (strict
12520 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
12530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12540 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
12550 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  lse;....        
12560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12570 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65          continue
12580 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
12590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
125a0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
125b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
125c0 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 64 65  configuration.de
125d0 62 75 67 50 72 69 6f 72 69 74 79 20 3d 20 28 54  bugPriority = (T
125e0 72 61 63 65 50 72 69 6f 72 69 74 79 29 76 61 6c  racePriority)val
125f0 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
12600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12610 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 50   TraceOps.DebugP
12620 72 69 6f 72 69 74 79 20 3d 20 63 6f 6e 66 69 67  riority = config
12630 75 72 61 74 69 6f 6e 2e 64 65 62 75 67 50 72 69  uration.debugPri
12640 6f 72 69 74 79 3b 0d 0a 20 20 20 20 20 20 20 20  ority;..        
12650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12660 7d 0d 0a 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 65 6c 73 65 20             else 
12680 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28  if (MatchOption(
12690 6e 65 77 41 72 67 2c 20 22 64 65 73 69 67 6e 65  newArg, "designe
126a0 72 46 69 6c 65 4e 61 6d 65 22 29 29 0d 0a 20 20  rFileName"))..  
126b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
126c0 20 20 20 20 20 20 7b 0d 0a 20 20 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 20 20 63 6f 6e 66 69 67 75 72 61 74 69       configurati
126f0 6f 6e 2e 64 65 73 69 67 6e 65 72 46 69 6c 65 4e  on.designerFileN
12700 61 6d 65 20 3d 20 74 65 78 74 3b 0d 0a 20 20 20  ame = text;..   
12710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12720 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
12730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12740 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70  else if (MatchOp
12750 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 64 69  tion(newArg, "di
12760 72 65 63 74 6f 72 79 22 29 29 0d 0a 20 20 20 20  rectory"))..    
12770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12780 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
12790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
127a0 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e     configuration
127b0 2e 64 69 72 65 63 74 6f 72 79 20 3d 20 74 65 78  .directory = tex
127c0 74 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  t;....          
127d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
127e0 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
127f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12800 20 20 2f 2f 20 4e 4f 54 45 3a 20 2a 53 50 45 43    // NOTE: *SPEC
12810 49 41 4c 2a 20 4d 75 73 74 20 72 65 66 72 65 73  IAL* Must refres
12820 68 20 74 68 65 20 66 69 6c 65 20 6e 61 6d 65 73  h the file names
12830 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
12840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
12850 20 20 20 20 20 20 20 68 65 72 65 20 62 65 63 61         here beca
12860 75 73 65 20 74 68 65 20 75 6e 64 65 72 6c 79 69  use the underlyi
12870 6e 67 20 64 69 72 65 63 74 6f 72 79 0d 0a 20 20  ng directory..  
12880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12890 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
128a0 20 20 20 68 61 73 20 63 68 61 6e 67 65 64 2e 0d     has changed..
128b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
128c0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
128d0 0a 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 73 74 72               str
128f0 69 6e 67 20 63 6f 72 65 46 69 6c 65 4e 61 6d 65  ing coreFileName
12900 20 3d 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e   = configuration
12910 2e 63 6f 72 65 46 69 6c 65 4e 61 6d 65 3b 0d 0a  .coreFileName;..
12920 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
12930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
12940 20 28 21 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c   (!String.IsNull
12950 4f 72 45 6d 70 74 79 28 63 6f 72 65 46 69 6c 65  OrEmpty(coreFile
12960 4e 61 6d 65 29 29 0d 0a 20 20 20 20 20 20 20 20  Name))..        
12970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12980 20 20 20 20 20 20 20 20 63 6f 72 65 46 69 6c 65          coreFile
12990 4e 61 6d 65 20 3d 20 50 61 74 68 2e 47 65 74 46  Name = Path.GetF
129a0 69 6c 65 4e 61 6d 65 28 63 6f 72 65 46 69 6c 65  ileName(coreFile
129b0 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  Name);....      
129c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
129d0 20 20 20 20 20 20 69 66 20 28 53 74 72 69 6e 67        if (String
129e0 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 63  .IsNullOrEmpty(c
129f0 6f 72 65 46 69 6c 65 4e 61 6d 65 29 29 0d 0a 20  oreFileName)).. 
12a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12a10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
12a20 6f 72 65 46 69 6c 65 4e 61 6d 65 20 3d 20 49 6e  oreFileName = In
12a30 73 74 61 6c 6c 65 72 2e 43 6f 72 65 46 69 6c 65  staller.CoreFile
12a40 4e 61 6d 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  Name;....       
12a50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12a60 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69       configurati
12a70 6f 6e 2e 63 6f 72 65 46 69 6c 65 4e 61 6d 65 20  on.coreFileName 
12a80 3d 20 50 61 74 68 2e 43 6f 6d 62 69 6e 65 28 0d  = Path.Combine(.
12a90 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
12aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12ab0 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 64   configuration.d
12ac0 69 72 65 63 74 6f 72 79 2c 20 63 6f 72 65 46 69  irectory, coreFi
12ad0 6c 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20  leName);....    
12ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12af0 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6c          string l
12b00 69 6e 71 46 69 6c 65 4e 61 6d 65 20 3d 20 63 6f  inqFileName = co
12b10 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6c 69 6e 71  nfiguration.linq
12b20 46 69 6c 65 4e 61 6d 65 3b 0d 0a 0d 0a 20 20 20  FileName;....   
12b30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12b40 20 20 20 20 20 20 20 20 20 69 66 20 28 21 53 74           if (!St
12b50 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70  ring.IsNullOrEmp
12b60 74 79 28 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 29  ty(linqFileName)
12b70 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
12b80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12b90 20 20 20 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 20     linqFileName 
12ba0 3d 20 50 61 74 68 2e 47 65 74 46 69 6c 65 4e 61  = Path.GetFileNa
12bb0 6d 65 28 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 29  me(linqFileName)
12bc0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
12bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12be0 20 69 66 20 28 53 74 72 69 6e 67 2e 49 73 4e 75   if (String.IsNu
12bf0 6c 6c 4f 72 45 6d 70 74 79 28 6c 69 6e 71 46 69  llOrEmpty(linqFi
12c00 6c 65 4e 61 6d 65 29 29 0d 0a 20 20 20 20 20 20  leName))..      
12c10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12c20 20 20 20 20 20 20 20 20 20 20 6c 69 6e 71 46 69            linqFi
12c30 6c 65 4e 61 6d 65 20 3d 20 49 6e 73 74 61 6c 6c  leName = Install
12c40 65 72 2e 4c 69 6e 71 46 69 6c 65 4e 61 6d 65 3b  er.LinqFileName;
12c50 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
12c60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12c70 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6c 69  configuration.li
12c80 6e 71 46 69 6c 65 4e 61 6d 65 20 3d 20 50 61 74  nqFileName = Pat
12c90 68 2e 43 6f 6d 62 69 6e 65 28 0d 0a 20 20 20 20  h.Combine(..    
12ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12cb0 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66              conf
12cc0 69 67 75 72 61 74 69 6f 6e 2e 64 69 72 65 63 74  iguration.direct
12cd0 6f 72 79 2c 20 6c 69 6e 71 46 69 6c 65 4e 61 6d  ory, linqFileNam
12ce0 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e);....         
12cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12d00 20 20 20 73 74 72 69 6e 67 20 64 65 73 69 67 6e     string design
12d10 65 72 46 69 6c 65 4e 61 6d 65 20 3d 20 63 6f 6e  erFileName = con
12d20 66 69 67 75 72 61 74 69 6f 6e 2e 64 65 73 69 67  figuration.desig
12d30 6e 65 72 46 69 6c 65 4e 61 6d 65 3b 0d 0a 0d 0a  nerFileName;....
12d40 20 20 20 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 69 66 20 28              if (
12d60 21 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72  !String.IsNullOr
12d70 45 6d 70 74 79 28 64 65 73 69 67 6e 65 72 46 69  Empty(designerFi
12d80 6c 65 4e 61 6d 65 29 29 0d 0a 20 20 20 20 20 20  leName))..      
12d90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12da0 20 20 20 20 20 20 20 20 20 20 64 65 73 69 67 6e            design
12db0 65 72 46 69 6c 65 4e 61 6d 65 20 3d 20 50 61 74  erFileName = Pat
12dc0 68 2e 47 65 74 46 69 6c 65 4e 61 6d 65 28 64 65  h.GetFileName(de
12dd0 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 29 3b  signerFileName);
12de0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
12df0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12e00 69 66 20 28 53 74 72 69 6e 67 2e 49 73 4e 75 6c  if (String.IsNul
12e10 6c 4f 72 45 6d 70 74 79 28 64 65 73 69 67 6e 65  lOrEmpty(designe
12e20 72 46 69 6c 65 4e 61 6d 65 29 29 0d 0a 20 20 20  rFileName))..   
12e30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12e40 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65 73               des
12e50 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 20 3d 20  ignerFileName = 
12e60 49 6e 73 74 61 6c 6c 65 72 2e 44 65 73 69 67 6e  Installer.Design
12e70 65 72 46 69 6c 65 4e 61 6d 65 3b 0d 0a 0d 0a 20  erFileName;.... 
12e80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12e90 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69             confi
12ea0 67 75 72 61 74 69 6f 6e 2e 64 65 73 69 67 6e 65  guration.designe
12eb0 72 46 69 6c 65 4e 61 6d 65 20 3d 20 50 61 74 68  rFileName = Path
12ec0 2e 43 6f 6d 62 69 6e 65 28 0d 0a 20 20 20 20 20  .Combine(..     
12ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12ee0 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69             confi
12ef0 67 75 72 61 74 69 6f 6e 2e 64 69 72 65 63 74 6f  guration.directo
12f00 72 79 2c 20 64 65 73 69 67 6e 65 72 46 69 6c 65  ry, designerFile
12f10 4e 61 6d 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  Name);..        
12f20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12f30 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
12f40 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20             else 
12f50 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28  if (MatchOption(
12f60 6e 65 77 41 72 67 2c 20 22 69 6e 73 74 61 6c 6c  newArg, "install
12f70 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  "))..           
12f80 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
12f90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12fa0 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
12fb0 3f 20 76 61 6c 75 65 20 3d 20 50 61 72 73 65 42  ? value = ParseB
12fc0 6f 6f 6c 65 61 6e 28 74 65 78 74 29 3b 0d 0a 0d  oolean(text);...
12fd0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
12fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
12ff0 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d  (value == null).
13000 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
13010 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
13020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13040 65 72 72 6f 72 20 3d 20 54 72 61 63 65 4f 70 73  error = TraceOps
13050 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 0d  .DebugAndTrace(.
13060 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
13070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13080 20 20 20 20 20 54 72 61 63 65 50 72 69 6f 72 69       TracePriori
13090 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75 67  ty.Lowest, debug
130a0 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20  Callback,..     
130b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
130c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
130d0 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74  raceCallback, St
130e0 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
130f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13110 20 20 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20 62    "Invalid {0} b
13120 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 3a 20 7b 31  oolean value: {1
13130 7d 22 2c 0d 0a 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 20 20                  
13150 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70           ForDisp
13160 6c 61 79 28 61 72 67 29 2c 20 46 6f 72 44 69 73  lay(arg), ForDis
13170 70 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a 20 20  play(text)),..  
13180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
131a0 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29    traceCategory)
131b0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
131c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
131d0 20 20 20 20 20 69 66 20 28 73 74 72 69 63 74 29       if (strict)
131e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
131f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13200 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
13210 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  se;....         
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 63 6f 6e 74 69 6e 75 65 3b         continue;
13240 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
13250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
13260 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
13270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
13280 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 69 6e 73  onfiguration.ins
13290 74 61 6c 6c 20 3d 20 28 62 6f 6f 6c 29 76 61 6c  tall = (bool)val
132a0 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
132b0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
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 65 6c 73 65 20 69 66 20          else if 
132e0 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77  (MatchOption(new
132f0 41 72 67 2c 20 22 69 6e 73 74 61 6c 6c 46 6c 61  Arg, "installFla
13300 67 73 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20  gs"))..         
13310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
13320 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
13330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6f 62                ob
13340 6a 65 63 74 20 76 61 6c 75 65 20 3d 20 50 61 72  ject value = Par
13350 73 65 45 6e 75 6d 28 0d 0a 20 20 20 20 20 20 20  seEnum(..       
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 74 79 70 65 6f 66 28           typeof(
13380 49 6e 73 74 61 6c 6c 46 6c 61 67 73 29 2c 20 74  InstallFlags), t
13390 65 78 74 2c 20 74 72 75 65 29 3b 0d 0a 0d 0a 20  ext, true);.... 
133a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
133b0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76             if (v
133c0 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  alue == null).. 
133d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
133e0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
133f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72                er
13410 72 6f 72 20 3d 20 54 72 61 63 65 4f 70 73 2e 44  ror = TraceOps.D
13420 65 62 75 67 41 6e 64 54 72 61 63 65 28 0d 0a 20  ebugAndTrace(.. 
13430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13450 20 20 20 54 72 61 63 65 50 72 69 6f 72 69 74 79     TracePriority
13460 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75 67 43 61  .Lowest, debugCa
13470 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20  llback,..       
13480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13490 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
134a0 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69  ceCallback, Stri
134b0 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ng.Format(..    
134c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
134d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
134e0 22 49 6e 76 61 6c 69 64 20 69 6e 73 74 61 6c 6c  "Invalid install
134f0 20 66 6c 61 67 73 20 76 61 6c 75 65 3a 20 7b 30   flags value: {0
13500 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }",..           
13510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13520 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70           ForDisp
13530 6c 61 79 28 74 65 78 74 29 29 2c 20 74 72 61 63  lay(text)), trac
13540 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
13550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
13570 66 20 28 73 74 72 69 63 74 29 0d 0a 20 20 20 20  f (strict)..    
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 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d  return false;...
135b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
135c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
135d0 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20   continue;..    
135e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
135f0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
13600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13610 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75           configu
13620 72 61 74 69 6f 6e 2e 69 6e 73 74 61 6c 6c 46 6c  ration.installFl
13630 61 67 73 20 3d 20 28 49 6e 73 74 61 6c 6c 46 6c  ags = (InstallFl
13640 61 67 73 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20  ags)value;..    
13650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13660 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
13670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
13680 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74  lse if (MatchOpt
13690 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 6c 69 6e  ion(newArg, "lin
136a0 71 46 69 6c 65 4e 61 6d 65 22 29 29 0d 0a 20 20  qFileName"))..  
136b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
136c0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
136d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
136e0 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69       configurati
136f0 6f 6e 2e 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 20  on.linqFileName 
13700 3d 20 74 65 78 74 3b 0d 0a 20 20 20 20 20 20 20  = text;..       
13710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13720 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
13730 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65              else
13740 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e   if (MatchOption
13750 28 6e 65 77 41 72 67 2c 20 22 6c 6f 67 46 69 6c  (newArg, "logFil
13760 65 4e 61 6d 65 22 29 29 0d 0a 20 20 20 20 20 20  eName"))..      
13770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13780 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
13790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
137a0 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6c   configuration.l
137b0 6f 67 46 69 6c 65 4e 61 6d 65 20 3d 20 74 65 78  ogFileName = tex
137c0 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t;..            
137d0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
137e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
137f0 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28         else if (
13800 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41  MatchOption(newA
13810 72 67 2c 20 22 6e 6f 43 6f 6d 70 61 63 74 22 29  rg, "noCompact")
13820 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
13830 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
13840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13850 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 3f 20            bool? 
13860 76 61 6c 75 65 20 3d 20 50 61 72 73 65 42 6f 6f  value = ParseBoo
13870 6c 65 61 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a 20  lean(text);.... 
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 69 66 20 28 76             if (v
138a0 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  alue == null).. 
138b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
138c0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 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 20 20 20 20 20 20 20 20 20 65 72                er
138f0 72 6f 72 20 3d 20 54 72 61 63 65 4f 70 73 2e 44  ror = TraceOps.D
13900 65 62 75 67 41 6e 64 54 72 61 63 65 28 0d 0a 20  ebugAndTrace(.. 
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 20                  
13930 20 20 20 54 72 61 63 65 50 72 69 6f 72 69 74 79     TracePriority
13940 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75 67 43 61  .Lowest, debugCa
13950 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20  llback,..       
13960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13970 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
13980 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69  ceCallback, Stri
13990 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ng.Format(..    
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 20 20 20 20 20                  
139c0 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20 62 6f 6f  "Invalid {0} boo
139d0 6c 65 61 6e 20 76 61 6c 75 65 3a 20 7b 31 7d 22  lean value: {1}"
139e0 2c 0d 0a 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 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61         ForDispla
13a10 79 28 61 72 67 29 2c 20 46 6f 72 44 69 73 70 6c  y(arg), ForDispl
13a20 61 79 28 74 65 78 74 29 29 2c 0d 0a 20 20 20 20  ay(text)),..    
13a30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13a40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13a50 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
13a60 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
13a70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13a80 20 20 20 69 66 20 28 73 74 72 69 63 74 29 0d 0a     if (strict)..
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 20 20 20 20 20                  
13ab0 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
13ac0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
13ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13ae0 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a       continue;..
13af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13b00 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
13b10 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
13b20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
13b30 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 43 6f 6d  figuration.noCom
13b40 70 61 63 74 20 3d 20 28 62 6f 6f 6c 29 76 61 6c  pact = (bool)val
13b50 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
13b60 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
13b70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13b80 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20          else if 
13b90 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77  (MatchOption(new
13ba0 41 72 67 2c 20 22 6e 6f 43 6f 6e 73 6f 6c 65 22  Arg, "noConsole"
13bb0 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
13bc0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
13bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13be0 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 3f             bool?
13bf0 20 76 61 6c 75 65 20 3d 20 50 61 72 73 65 42 6f   value = ParseBo
13c00 6f 6c 65 61 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a  olean(text);....
13c10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13c20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
13c30 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  value == null)..
13c40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13c50 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
13c60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
13c80 72 72 6f 72 20 3d 20 54 72 61 63 65 4f 70 73 2e  rror = TraceOps.
13c90 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 0d 0a  DebugAndTrace(..
13ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13cc0 20 20 20 20 54 72 61 63 65 50 72 69 6f 72 69 74      TracePriorit
13cd0 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75 67 43  y.Lowest, debugC
13ce0 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20  allback,..      
13cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13d00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
13d10 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72  aceCallback, Str
13d20 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
13d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13d40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13d50 20 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20 62 6f   "Invalid {0} bo
13d60 6f 6c 65 61 6e 20 76 61 6c 75 65 3a 20 7b 31 7d  olean value: {1}
13d70 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
13d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13d90 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c          ForDispl
13da0 61 79 28 61 72 67 29 2c 20 46 6f 72 44 69 73 70  ay(arg), ForDisp
13db0 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a 20 20 20  lay(text)),..   
13dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13de0 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
13df0 0d 0a 0d 0a 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 20                  
13e10 20 20 20 20 69 66 20 28 73 74 72 69 63 74 29 0d      if (strict).
13e20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
13e30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13e40 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
13e50 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
13e60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13e70 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d        continue;.
13e80 0a 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 20 20 20 20 7d 0d 0a               }..
13ea0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
13eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
13ec0 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 43 6f  nfiguration.noCo
13ed0 6e 73 6f 6c 65 20 3d 20 28 62 6f 6f 6c 29 76 61  nsole = (bool)va
13ee0 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lue;..          
13ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
13f00 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
13f10 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66           else if
13f20 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65   (MatchOption(ne
13f30 77 41 72 67 2c 20 22 6e 6f 44 65 73 6b 74 6f 70  wArg, "noDesktop
13f40 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  "))..           
13f50 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
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 20 20 20 20 20 62 6f 6f 6c              bool
13f80 3f 20 76 61 6c 75 65 20 3d 20 50 61 72 73 65 42  ? value = ParseB
13f90 6f 6f 6c 65 61 6e 28 74 65 78 74 29 3b 0d 0a 0d  oolean(text);...
13fa0 0a 20 20 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 69 66 20               if 
13fc0 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d  (value == null).
13fd0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
13fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
13ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14010 65 72 72 6f 72 20 3d 20 54 72 61 63 65 4f 70 73  error = TraceOps
14020 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 0d  .DebugAndTrace(.
14030 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
14040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14050 20 20 20 20 20 54 72 61 63 65 50 72 69 6f 72 69       TracePriori
14060 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75 67  ty.Lowest, debug
14070 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20  Callback,..     
14080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
140a0 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74  raceCallback, St
140b0 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
140c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
140d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
140e0 20 20 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20 62    "Invalid {0} b
140f0 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 3a 20 7b 31  oolean value: {1
14100 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }",..           
14110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14120 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70           ForDisp
14130 6c 61 79 28 61 72 67 29 2c 20 46 6f 72 44 69 73  lay(arg), ForDis
14140 70 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a 20 20  play(text)),..  
14150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14170 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29    traceCategory)
14180 3b 0d 0a 0d 0a 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 20 20 20 20 20 69 66 20 28 73 74 72 69 63 74 29       if (strict)
141b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
141c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
141d0 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
141e0 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  se;....         
141f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14200 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b         continue;
14210 0d 0a 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 20 20 20 20 7d 0d                }.
14230 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
14240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
14250 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 44  onfiguration.noD
14260 65 73 6b 74 6f 70 20 3d 20 28 62 6f 6f 6c 29 76  esktop = (bool)v
14270 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alue;..         
14280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
14290 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
142a0 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69            else i
142b0 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e  f (MatchOption(n
142c0 65 77 41 72 67 2c 20 22 6e 6f 4c 6f 67 22 29 29  ewArg, "noLog"))
142d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
142e0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
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 20 62 6f 6f 6c 3f 20 76           bool? v
14310 61 6c 75 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c  alue = ParseBool
14320 65 61 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20  ean(text);....  
14330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14340 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76 61            if (va
14350 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  lue == null)..  
14360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14370 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
14380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14390 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
143a0 6f 72 20 3d 20 54 72 61 63 65 4f 70 73 2e 44 65  or = TraceOps.De
143b0 62 75 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 20  bugAndTrace(..  
143c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
143d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
143e0 20 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e    TracePriority.
143f0 4c 6f 77 65 73 74 2c 20 64 65 62 75 67 43 61 6c  Lowest, debugCal
14400 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20  lback,..        
14410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14420 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
14430 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e  eCallback, Strin
14440 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
14450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
14470 49 6e 76 61 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c  Invalid {0} bool
14480 65 61 6e 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c  ean value: {1}",
14490 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
144a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
144b0 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79        ForDisplay
144c0 28 61 72 67 29 2c 20 46 6f 72 44 69 73 70 6c 61  (arg), ForDispla
144d0 79 28 74 65 78 74 29 29 2c 0d 0a 20 20 20 20 20  y(text)),..     
144e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
144f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
14500 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
14510 0d 0a 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 20 69 66 20 28 73 74 72 69 63 74 29 0d 0a 20    if (strict).. 
14540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14560 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
14570 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
14580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14590 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20      continue;.. 
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 7d 0d 0a 0d 0a             }....
145c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
145d0 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66              conf
145e0 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 4c 6f 67 20  iguration.noLog 
145f0 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a  = (bool)value;..
14600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14610 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
14620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14630 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63     else if (Matc
14640 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20  hOption(newArg, 
14650 22 6e 6f 4e 65 74 46 78 32 30 22 29 29 0d 0a 20  "noNetFx20")).. 
14660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14670 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
14680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14690 20 20 20 20 20 20 62 6f 6f 6c 3f 20 76 61 6c 75        bool? valu
146a0 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e  e = ParseBoolean
146b0 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20  (text);....     
146c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
146d0 20 20 20 20 20 20 20 69 66 20 28 76 61 6c 75 65         if (value
146e0 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
146f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14700 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
14710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14720 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20            error 
14730 3d 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67  = TraceOps.Debug
14740 41 6e 64 54 72 61 63 65 28 0d 0a 20 20 20 20 20  AndTrace(..     
14750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
14770 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77  racePriority.Low
14780 65 73 74 2c 20 64 65 62 75 67 43 61 6c 6c 62 61  est, debugCallba
14790 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ck,..           
147a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
147b0 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
147c0 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46  llback, String.F
147d0 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
147e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
147f0 20 20 20 20 20 20 20 20 20 20 20 20 22 49 6e 76              "Inv
14800 61 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e  alid {0} boolean
14810 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20   value: {1}",.. 
14820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14840 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 61 72     ForDisplay(ar
14850 67 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 74  g), ForDisplay(t
14860 65 78 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20  ext)),..        
14870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14880 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
14890 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
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 20 69                 i
148c0 66 20 28 73 74 72 69 63 74 29 0d 0a 20 20 20 20  f (strict)..    
148d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
148e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
148f0 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d  return false;...
14900 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
14910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14920 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20   continue;..    
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 7d 0d 0a 0d 0a 20 20 20          }....   
14950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14960 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75           configu
14970 72 61 74 69 6f 6e 2e 6e 6f 4e 65 74 46 78 32 30  ration.noNetFx20
14980 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d   = (bool)value;.
14990 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
149a0 20 20 20 20 20 20 20 20 20 7d 0d 0a 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 65 6c 73 65 20 69 66 20 28 4d 61 74      else if (Mat
149d0 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c  chOption(newArg,
149e0 20 22 6e 6f 4e 65 74 46 78 34 30 22 29 29 0d 0a   "noNetFx40"))..
149f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14a00 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
14a10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14a20 20 20 20 20 20 20 20 62 6f 6f 6c 3f 20 76 61 6c         bool? val
14a30 75 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c 65 61  ue = ParseBoolea
14a40 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20  n(text);....    
14a50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14a60 20 20 20 20 20 20 20 20 69 66 20 28 76 61 6c 75          if (valu
14a70 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  e == null)..    
14a80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14a90 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
14aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14ab0 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72             error
14ac0 20 3d 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75   = TraceOps.Debu
14ad0 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 20 20 20  gAndTrace(..    
14ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14b00 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f  TracePriority.Lo
14b10 77 65 73 74 2c 20 64 65 62 75 67 43 61 6c 6c 62  west, debugCallb
14b20 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ack,..          
14b30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14b40 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
14b50 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e  allback, String.
14b60 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
14b70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14b80 20 20 20 20 20 20 20 20 20 20 20 20 20 22 49 6e               "In
14b90 76 61 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c 65 61  valid {0} boolea
14ba0 6e 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a  n value: {1}",..
14bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14bd0 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 61      ForDisplay(a
14be0 72 67 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28  rg), ForDisplay(
14bf0 74 65 78 74 29 29 2c 0d 0a 20 20 20 20 20 20 20  text)),..       
14c00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14c10 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
14c20 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
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 20 20 20 20 20                  
14c50 69 66 20 28 73 74 72 69 63 74 29 0d 0a 20 20 20  if (strict)..   
14c60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14c80 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
14c90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
14ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14cb0 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20    continue;..   
14cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14cd0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
14ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14cf0 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67            config
14d00 75 72 61 74 69 6f 6e 2e 6e 6f 4e 65 74 46 78 34  uration.noNetFx4
14d10 30 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 65 3b  0 = (bool)value;
14d20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
14d30 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
14d40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14d50 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61       else if (Ma
14d60 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67  tchOption(newArg
14d70 2c 20 22 6e 6f 4e 65 74 46 78 34 35 22 29 29 0d  , "noNetFx45")).
14d80 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
14d90 20 20 20 20 20 20 20 20 20 7b 0d 0a 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 20 20 20 20 20 62 6f 6f 6c 3f 20 76 61          bool? va
14dc0 6c 75 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c 65  lue = ParseBoole
14dd0 61 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20 20  an(text);....   
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 69 66 20 28 76 61 6c           if (val
14e00 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ue == null)..   
14e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14e20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
14e30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14e40 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
14e50 72 20 3d 20 54 72 61 63 65 4f 70 73 2e 44 65 62  r = TraceOps.Deb
14e60 75 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 20 20  ugAndTrace(..   
14e70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14e80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14e90 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c   TracePriority.L
14ea0 6f 77 65 73 74 2c 20 64 65 62 75 67 43 61 6c 6c  owest, debugCall
14eb0 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20  back,..         
14ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14ed0 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
14ee0 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67  Callback, String
14ef0 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  .Format(..      
14f00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 49                "I
14f20 6e 76 61 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c 65  nvalid {0} boole
14f30 61 6e 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d  an value: {1}",.
14f40 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
14f50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14f60 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28       ForDisplay(
14f70 61 72 67 29 2c 20 46 6f 72 44 69 73 70 6c 61 79  arg), ForDisplay
14f80 28 74 65 78 74 29 29 2c 0d 0a 20 20 20 20 20 20  (text)),..      
14f90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
14fb0 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  aceCategory);...
14fc0 0a 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 20 20 20 20                  
14fe0 20 69 66 20 28 73 74 72 69 63 74 29 0d 0a 20 20   if (strict)..  
14ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15010 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
15020 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
15030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15040 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20     continue;..  
15050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15060 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
15070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15080 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69             confi
15090 67 75 72 61 74 69 6f 6e 2e 6e 6f 4e 65 74 46 78  guration.noNetFx
150a0 34 35 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 65  45 = (bool)value
150b0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
150c0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
150d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
150e0 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d        else if (M
150f0 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72  atchOption(newAr
15100 67 2c 20 22 6e 6f 52 75 6e 74 69 6d 65 56 65 72  g, "noRuntimeVer
15110 73 69 6f 6e 22 29 29 0d 0a 20 20 20 20 20 20 20  sion"))..       
15120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15130 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
15140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15150 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d 20 50 61  bool? value = Pa
15160 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65 78 74 29  rseBoolean(text)
15170 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
15180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15190 20 69 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75   if (value == nu
151a0 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
151b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
151c0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
151d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
151e0 20 20 20 20 65 72 72 6f 72 20 3d 20 54 72 61 63      error = Trac
151f0 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61  eOps.DebugAndTra
15200 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ce(..           
15210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15220 20 20 20 20 20 20 20 20 20 54 72 61 63 65 50 72           TracePr
15230 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64  iority.Lowest, d
15240 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20  ebugCallback,.. 
15250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15270 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b     traceCallback
15280 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  , String.Format(
15290 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
152a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
152b0 20 20 20 20 20 20 22 49 6e 76 61 6c 69 64 20 7b        "Invalid {
152c0 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65  0} boolean value
152d0 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20  : {1}",..       
152e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
152f0 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72               For
15300 44 69 73 70 6c 61 79 28 61 72 67 29 2c 20 46 6f  Display(arg), Fo
15310 72 44 69 73 70 6c 61 79 28 74 65 78 74 29 29 2c  rDisplay(text)),
15320 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
15330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15340 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67        traceCateg
15350 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
15360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15370 20 20 20 20 20 20 20 20 20 69 66 20 28 73 74 72           if (str
15380 69 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ict)..          
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 72 65 74 75 72 6e            return
153b0 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20   false;....     
153c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
153d0 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69             conti
153e0 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  nue;..          
153f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15400 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
15410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15420 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e     configuration
15430 2e 6e 6f 52 75 6e 74 69 6d 65 56 65 72 73 69 6f  .noRuntimeVersio
15440 6e 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 65 3b  n = (bool)value;
15450 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
15460 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
15470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15480 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61       else if (Ma
15490 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67  tchOption(newArg
154a0 2c 20 22 6e 6f 54 72 61 63 65 22 29 29 0d 0a 20  , "noTrace")).. 
154b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
154c0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
154d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
154e0 20 20 20 20 20 20 62 6f 6f 6c 3f 20 76 61 6c 75        bool? valu
154f0 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e  e = ParseBoolean
15500 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20  (text);....     
15510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15520 20 20 20 20 20 20 20 69 66 20 28 76 61 6c 75 65         if (value
15530 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
15540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15550 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
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 20 20 65 72 72 6f 72 20            error 
15580 3d 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67  = TraceOps.Debug
15590 41 6e 64 54 72 61 63 65 28 0d 0a 20 20 20 20 20  AndTrace(..     
155a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
155b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
155c0 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77  racePriority.Low
155d0 65 73 74 2c 20 64 65 62 75 67 43 61 6c 6c 62 61  est, debugCallba
155e0 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ck,..           
155f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15600 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
15610 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46  llback, String.F
15620 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
15630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15640 20 20 20 20 20 20 20 20 20 20 20 20 22 49 6e 76              "Inv
15650 61 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e  alid {0} boolean
15660 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20   value: {1}",.. 
15670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15690 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 61 72     ForDisplay(ar
156a0 67 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 74  g), ForDisplay(t
156b0 65 78 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20  ext)),..        
156c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
156d0 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
156e0 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
156f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
15710 66 20 28 73 74 72 69 63 74 29 0d 0a 20 20 20 20  f (strict)..    
15720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15740 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d  return false;...
15750 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
15760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15770 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20   continue;..    
15780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15790 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
157a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
157b0 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75           configu
157c0 72 61 74 69 6f 6e 2e 6e 6f 54 72 61 63 65 20 3d  ration.noTrace =
157d0 20 28 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20   (bool)value;.. 
157e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
157f0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
15800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15810 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68    else if (Match
15820 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22  Option(newArg, "
15830 6e 6f 56 73 32 30 30 35 22 29 29 0d 0a 20 20 20  noVs2005"))..   
15840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15850 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
15860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15870 20 20 20 20 62 6f 6f 6c 3f 20 76 61 6c 75 65 20      bool? value 
15880 3d 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74  = ParseBoolean(t
15890 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ext);....       
158a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
158b0 20 20 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d       if (value =
158c0 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
158d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
158e0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
158f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15900 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
15910 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e  TraceOps.DebugAn
15920 64 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20  dTrace(..       
15930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15940 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61               Tra
15950 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73  cePriority.Lowes
15960 74 2c 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b  t, debugCallback
15970 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
15980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15990 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c         traceCall
159a0 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72  back, String.For
159b0 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
159c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
159d0 20 20 20 20 20 20 20 20 20 20 22 49 6e 76 61 6c            "Inval
159e0 69 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76  id {0} boolean v
159f0 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20  alue: {1}",..   
15a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15a10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15a20 20 46 6f 72 44 69 73 70 6c 61 79 28 61 72 67 29   ForDisplay(arg)
15a30 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 74 65 78  , ForDisplay(tex
15a40 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  t)),..          
15a50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15a60 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
15a70 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20  ategory);....   
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 20 20 69 66 20               if 
15aa0 28 73 74 72 69 63 74 29 0d 0a 20 20 20 20 20 20  (strict)..      
15ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
15ad0 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20  turn false;.... 
15ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
15b00 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20  ontinue;..      
15b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15b20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
15b30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15b40 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61         configura
15b50 74 69 6f 6e 2e 6e 6f 56 73 32 30 30 35 20 3d 20  tion.noVs2005 = 
15b60 28 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20 20  (bool)value;..  
15b70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15b80 20 20 20 20 20 20 7d 0d 0a 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 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f   else if (MatchO
15bb0 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 6e  ption(newArg, "n
15bc0 6f 56 73 32 30 30 38 22 29 29 0d 0a 20 20 20 20  oVs2008"))..    
15bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15be0 20 20 20 20 7b 0d 0a 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 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d     bool? value =
15c10 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65   ParseBoolean(te
15c20 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  xt);....        
15c30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15c40 20 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d 3d      if (value ==
15c50 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
15c60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15c70 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
15c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15c90 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 54         error = T
15ca0 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64  raceOps.DebugAnd
15cb0 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20  Trace(..        
15cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15cd0 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
15ce0 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74  ePriority.Lowest
15cf0 2c 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c  , debugCallback,
15d00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
15d10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15d20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62        traceCallb
15d30 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d  ack, String.Form
15d40 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
15d50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15d60 20 20 20 20 20 20 20 20 20 22 49 6e 76 61 6c 69           "Invali
15d70 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61  d {0} boolean va
15d80 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20  lue: {1}",..    
15d90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15da0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15db0 46 6f 72 44 69 73 70 6c 61 79 28 61 72 67 29 2c  ForDisplay(arg),
15dc0 20 46 6f 72 44 69 73 70 6c 61 79 28 74 65 78 74   ForDisplay(text
15dd0 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  )),..           
15de0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15df0 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
15e00 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
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 20 20 20 69 66 20 28              if (
15e30 73 74 72 69 63 74 29 0d 0a 20 20 20 20 20 20 20  strict)..       
15e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15e50 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
15e60 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20  urn false;....  
15e70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15e80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
15e90 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20  ntinue;..       
15ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15eb0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
15ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15ed0 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74        configurat
15ee0 69 6f 6e 2e 6e 6f 56 73 32 30 30 38 20 3d 20 28  ion.noVs2008 = (
15ef0 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20 20 20  bool)value;..   
15f00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15f10 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
15f20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15f30 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70  else if (MatchOp
15f40 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 6e 6f  tion(newArg, "no
15f50 56 73 32 30 31 30 22 29 29 0d 0a 20 20 20 20 20  Vs2010"))..     
15f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15f70 20 20 20 7b 0d 0a 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 20 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d 20    bool? value = 
15fa0 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65 78  ParseBoolean(tex
15fb0 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  t);....         
15fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15fd0 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d 3d 20     if (value == 
15fe0 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
15ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16000 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
16010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16020 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 54 72        error = Tr
16030 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54  aceOps.DebugAndT
16040 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20  race(..         
16050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16060 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
16070 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c  Priority.Lowest,
16080 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d   debugCallback,.
16090 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
160a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
160b0 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61       traceCallba
160c0 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ck, String.Forma
160d0 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
160e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
160f0 20 20 20 20 20 20 20 20 22 49 6e 76 61 6c 69 64          "Invalid
16100 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 6c   {0} boolean val
16110 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20  ue: {1}",..     
16120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46                 F
16140 6f 72 44 69 73 70 6c 61 79 28 61 72 67 29 2c 20  orDisplay(arg), 
16150 46 6f 72 44 69 73 70 6c 61 79 28 74 65 78 74 29  ForDisplay(text)
16160 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
16170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16180 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74          traceCat
16190 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  egory);....     
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 20 20 20 69 66 20 28 73             if (s
161c0 74 72 69 63 74 29 0d 0a 20 20 20 20 20 20 20 20  trict)..        
161d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
161e0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
161f0 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20  rn false;....   
16200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16210 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
16220 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20  tinue;..        
16230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16240 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
16250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16260 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69       configurati
16270 6f 6e 2e 6e 6f 56 73 32 30 31 30 20 3d 20 28 62  on.noVs2010 = (b
16280 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20  ool)value;..    
16290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
162a0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
162b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
162c0 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74  lse if (MatchOpt
162d0 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 6e 6f 56  ion(newArg, "noV
162e0 73 32 30 31 32 22 29 29 0d 0a 20 20 20 20 20 20  s2012"))..      
162f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16300 20 20 7b 0d 0a 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 20 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d 20 50   bool? value = P
16330 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65 78 74  arseBoolean(text
16340 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
16350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16360 20 20 69 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e    if (value == n
16370 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
16380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16390 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
163a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
163b0 20 20 20 20 20 65 72 72 6f 72 20 3d 20 54 72 61       error = Tra
163c0 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72  ceOps.DebugAndTr
163d0 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ace(..          
163e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
163f0 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 50            TraceP
16400 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20  riority.Lowest, 
16410 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a  debugCallback,..
16420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16440 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63      traceCallbac
16450 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  k, String.Format
16460 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
16470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16480 20 20 20 20 20 20 20 22 49 6e 76 61 6c 69 64 20         "Invalid 
16490 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75  {0} boolean valu
164a0 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20  e: {1}",..      
164b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
164c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f                Fo
164d0 72 44 69 73 70 6c 61 79 28 61 72 67 29 2c 20 46  rDisplay(arg), F
164e0 6f 72 44 69 73 70 6c 61 79 28 74 65 78 74 29 29  orDisplay(text))
164f0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
16500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16510 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65         traceCate
16520 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
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 20 20 20 69 66 20 28 73 74            if (st
16550 72 69 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20  rict)..         
16560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16570 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
16580 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20  n false;....    
16590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
165a0 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74              cont
165b0 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  inue;..         
165c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
165d0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
165e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
165f0 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f      configuratio
16600 6e 2e 6e 6f 56 73 32 30 31 32 20 3d 20 28 62 6f  n.noVs2012 = (bo
16610 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20  ol)value;..     
16620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16630 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
16640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c                el
16650 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69  se if (MatchOpti
16660 6f 6e 28 6e 65 77 41 72 67 2c 20 22 72 65 67 69  on(newArg, "regi
16670 73 74 72 79 56 65 72 73 69 6f 6e 22 29 29 0d 0a  stryVersion"))..
16680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16690 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
166a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
166b0 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61         configura
166c0 74 69 6f 6e 2e 72 65 67 69 73 74 72 79 56 65 72  tion.registryVer
166d0 73 69 6f 6e 20 3d 20 74 65 78 74 3b 0d 0a 20 20  sion = text;..  
166e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
166f0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
16700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16710 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f   else if (MatchO
16720 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 73  ption(newArg, "s
16730 74 72 69 63 74 22 29 29 0d 0a 20 20 20 20 20 20  trict"))..      
16740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16750 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
16760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16770 20 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d 20 50   bool? value = P
16780 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65 78 74  arseBoolean(text
16790 29 3b 0d 0a 0d 0a 20 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 69 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e    if (value == n
167c0 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
167d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
167e0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
167f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16800 20 20 20 20 20 65 72 72 6f 72 20 3d 20 54 72 61       error = Tra
16810 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72  ceOps.DebugAndTr
16820 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ace(..          
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 20 20 20 54 72 61 63 65 50            TraceP
16850 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20  riority.Lowest, 
16860 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a  debugCallback,..
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 20 20 20 20                  
16890 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63      traceCallbac
168a0 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  k, String.Format
168b0 28 0d 0a 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 20 22 49 6e 76 61 6c 69 64 20         "Invalid 
168e0 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75  {0} boolean valu
168f0 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20  e: {1}",..      
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 20 20 20 20 20 46 6f                Fo
16920 72 44 69 73 70 6c 61 79 28 61 72 67 29 2c 20 46  rDisplay(arg), F
16930 6f 72 44 69 73 70 6c 61 79 28 74 65 78 74 29 29  orDisplay(text))
16940 2c 0d 0a 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 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65         traceCate
16970 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
16980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16990 20 20 20 20 20 20 20 20 20 20 69 66 20 28 73 74            if (st
169a0 72 69 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20  rict)..         
169b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
169c0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
169d0 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20  n false;....    
169e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
169f0 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74              cont
16a00 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  inue;..         
16a10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16a20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
16a30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16a40 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
16a50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16a60 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 41 6c 6c      // NOTE: All
16a70 6f 77 20 74 68 65 20 63 6f 6d 6d 61 6e 64 20 6c  ow the command l
16a80 69 6e 65 20 61 72 67 75 6d 65 6e 74 73 20 74 6f  ine arguments to
16a90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
16aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
16ab0 20 20 20 20 20 20 20 6f 76 65 72 72 69 64 65 20         override 
16ac0 74 68 65 20 22 73 74 72 69 63 74 6e 65 73 73 22  the "strictness"
16ad0 20 73 65 74 74 69 6e 67 0d 0a 20 20 20 20 20 20   setting..      
16ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16af0 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 70        //       p
16b00 72 6f 76 69 64 65 64 20 62 79 20 6f 75 72 20 63  rovided by our c
16b10 61 6c 6c 65 72 2e 0d 0a 20 20 20 20 20 20 20 20  aller...        
16b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16b30 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
16b40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16b50 20 20 20 20 73 74 72 69 63 74 20 3d 20 28 62 6f      strict = (bo
16b60 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20  ol)value;..     
16b70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16b80 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
16b90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c                el
16ba0 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69  se if (MatchOpti
16bb0 6f 6e 28 6e 65 77 41 72 67 2c 20 22 74 68 72 6f  on(newArg, "thro
16bc0 77 4f 6e 4d 69 73 73 69 6e 67 22 29 29 0d 0a 20  wOnMissing")).. 
16bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16be0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
16bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16c00 20 20 20 20 20 20 62 6f 6f 6c 3f 20 76 61 6c 75        bool? valu
16c10 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e  e = ParseBoolean
16c20 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20  (text);....     
16c30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16c40 20 20 20 20 20 20 20 69 66 20 28 76 61 6c 75 65         if (value
16c50 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
16c60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16c70 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
16c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16c90 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20            error 
16ca0 3d 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67  = TraceOps.Debug
16cb0 41 6e 64 54 72 61 63 65 28 0d 0a 20 20 20 20 20  AndTrace(..     
16cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
16ce0 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77  racePriority.Low
16cf0 65 73 74 2c 20 64 65 62 75 67 43 61 6c 6c 62 61  est, debugCallba
16d00 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ck,..           
16d10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16d20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
16d30 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46  llback, String.F
16d40 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
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 20 20 22 49 6e 76              "Inv
16d70 61 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e  alid {0} boolean
16d80 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20   value: {1}",.. 
16d90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16da0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16db0 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 61 72     ForDisplay(ar
16dc0 67 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 74  g), ForDisplay(t
16dd0 65 78 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20  ext)),..        
16de0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16df0 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
16e00 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
16e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16e20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
16e30 66 20 28 73 74 72 69 63 74 29 0d 0a 20 20 20 20  f (strict)..    
16e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16e60 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d  return false;...
16e70 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
16e80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16e90 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20   continue;..    
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 20 7d 0d 0a 0d 0a 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 20 20 20 63 6f 6e 66 69 67 75           configu
16ee0 72 61 74 69 6f 6e 2e 74 68 72 6f 77 4f 6e 4d 69  ration.throwOnMi
16ef0 73 73 69 6e 67 20 3d 20 28 62 6f 6f 6c 29 76 61  ssing = (bool)va
16f00 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lue;..          
16f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
16f20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
16f30 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66           else if
16f40 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65   (MatchOption(ne
16f50 77 41 72 67 2c 20 22 74 72 61 63 65 46 6f 72 6d  wArg, "traceForm
16f60 61 74 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20  at"))..         
16f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
16f80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
16f90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
16fa0 6e 66 69 67 75 72 61 74 69 6f 6e 2e 74 72 61 63  nfiguration.trac
16fb0 65 46 6f 72 6d 61 74 20 3d 20 74 65 78 74 3b 0d  eFormat = text;.
16fc0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
16fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61               Tra
16fe0 63 65 4f 70 73 2e 54 72 61 63 65 46 6f 72 6d 61  ceOps.TraceForma
16ff0 74 20 3d 20 63 6f 6e 66 69 67 75 72 61 74 69 6f  t = configuratio
17000 6e 2e 74 72 61 63 65 46 6f 72 6d 61 74 3b 0d 0a  n.traceFormat;..
17010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17020 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
17030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17040 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63     else if (Matc
17050 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20  hOption(newArg, 
17060 22 74 72 61 63 65 50 72 69 6f 72 69 74 79 22 29  "tracePriority")
17070 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
17080 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
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 6f 62 6a 65 63 74            object
170b0 20 76 61 6c 75 65 20 3d 20 50 61 72 73 65 45 6e   value = ParseEn
170c0 75 6d 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  um(..           
170d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
170e0 20 20 20 20 20 74 79 70 65 6f 66 28 54 72 61 63       typeof(Trac
170f0 65 50 72 69 6f 72 69 74 79 29 2c 20 74 65 78 74  ePriority), text
17100 2c 20 74 72 75 65 29 3b 0d 0a 0d 0a 20 20 20 20  , true);....    
17110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17120 20 20 20 20 20 20 20 20 69 66 20 28 76 61 6c 75          if (valu
17130 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  e == null)..    
17140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17150 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
17160 20 20 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 65 72 72 6f 72             error
17180 20 3d 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75   = TraceOps.Debu
17190 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 20 20 20  gAndTrace(..    
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 20 20 20 20 20 20 20                  
171c0 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f  TracePriority.Lo
171d0 77 65 73 74 2c 20 64 65 62 75 67 43 61 6c 6c 62  west, debugCallb
171e0 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ack,..          
171f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17200 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
17210 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e  allback, String.
17220 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
17230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17240 20 20 20 20 20 20 20 20 20 20 20 20 20 22 49 6e               "In
17250 76 61 6c 69 64 20 7b 30 7d 20 76 61 6c 75 65 3a  valid {0} value:
17260 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20   {1}",..        
17270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17280 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44              ForD
17290 69 73 70 6c 61 79 28 61 72 67 29 2c 20 46 6f 72  isplay(arg), For
172a0 44 69 73 70 6c 61 79 28 74 65 78 74 29 29 2c 0d  Display(text)),.
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 20 20 20                  
172d0 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f       traceCatego
172e0 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
172f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17300 20 20 20 20 20 20 20 20 69 66 20 28 73 74 72 69          if (stri
17310 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ct)..           
17320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17330 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
17340 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  false;....      
17350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17360 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e            contin
17370 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
17380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17390 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
173a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
173b0 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e    configuration.
173c0 74 72 61 63 65 50 72 69 6f 72 69 74 79 20 3d 20  tracePriority = 
173d0 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 29 76  (TracePriority)v
173e0 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alue;..         
173f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17400 20 20 20 54 72 61 63 65 4f 70 73 2e 54 72 61 63     TraceOps.Trac
17410 65 50 72 69 6f 72 69 74 79 20 3d 20 63 6f 6e 66  ePriority = conf
17420 69 67 75 72 61 74 69 6f 6e 2e 74 72 61 63 65 50  iguration.traceP
17430 72 69 6f 72 69 74 79 3b 0d 0a 20 20 20 20 20 20  riority;..      
17440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17450 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
17460 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73               els
17470 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f  e if (MatchOptio
17480 6e 28 6e 65 77 41 72 67 2c 20 22 76 65 72 62 6f  n(newArg, "verbo
17490 73 65 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20  se"))..         
174a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
174b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
174c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f                bo
174d0 6f 6c 3f 20 76 61 6c 75 65 20 3d 20 50 61 72 73  ol? value = Pars
174e0 65 42 6f 6f 6c 65 61 6e 28 74 65 78 74 29 3b 0d  eBoolean(text);.
174f0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
17500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
17510 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c  f (value == null
17520 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
17530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
17540 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
17550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17560 20 20 65 72 72 6f 72 20 3d 20 54 72 61 63 65 4f    error = TraceO
17570 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65  ps.DebugAndTrace
17580 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
17590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
175a0 20 20 20 20 20 20 20 54 72 61 63 65 50 72 69 6f         TracePrio
175b0 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62  rity.Lowest, deb
175c0 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20  ugCallback,..   
175d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
175e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
175f0 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20   traceCallback, 
17600 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
17610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17630 20 20 20 20 22 49 6e 76 61 6c 69 64 20 7b 30 7d      "Invalid {0}
17640 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 3a 20   boolean value: 
17650 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  {1}",..         
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 46 6f 72 44 69             ForDi
17680 73 70 6c 61 79 28 61 72 67 29 2c 20 46 6f 72 44  splay(arg), ForD
17690 69 73 70 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a  isplay(text)),..
176a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
176b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
176c0 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72      traceCategor
176d0 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
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 69 66 20 28 73 74 72 69 63         if (stric
17700 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t)..            
17710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17720 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
17730 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  alse;....       
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 20 63 6f 6e 74 69 6e 75           continu
17760 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
17770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17780 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
17790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
177a0 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 76   configuration.v
177b0 65 72 62 6f 73 65 20 3d 20 28 62 6f 6f 6c 29 76  erbose = (bool)v
177c0 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alue;..         
177d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
177e0 0d 0a 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 65 6c 73 65 20 69            else i
17800 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e  f (MatchOption(n
17810 65 77 41 72 67 2c 20 22 77 68 61 74 49 66 22 29  ewArg, "whatIf")
17820 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
17830 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
17840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17850 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 3f 20            bool? 
17860 76 61 6c 75 65 20 3d 20 50 61 72 73 65 42 6f 6f  value = ParseBoo
17870 6c 65 61 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a 20  lean(text);.... 
17880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17890 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76             if (v
178a0 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  alue == null).. 
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 20 20 7b 0d 0a 20 20             {..  
178d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
178e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72                er
178f0 72 6f 72 20 3d 20 54 72 61 63 65 4f 70 73 2e 44  ror = TraceOps.D
17900 65 62 75 67 41 6e 64 54 72 61 63 65 28 0d 0a 20  ebugAndTrace(.. 
17910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17930 20 20 20 54 72 61 63 65 50 72 69 6f 72 69 74 79     TracePriority
17940 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75 67 43 61  .Lowest, debugCa
17950 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20  llback,..       
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 20 20 20 20 20 20 74 72 61               tra
17980 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69  ceCallback, Stri
17990 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ng.Format(..    
179a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
179b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
179c0 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20 62 6f 6f  "Invalid {0} boo
179d0 6c 65 61 6e 20 76 61 6c 75 65 3a 20 7b 31 7d 22  lean value: {1}"
179e0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
179f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17a00 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61         ForDispla
17a10 79 28 61 72 67 29 2c 20 46 6f 72 44 69 73 70 6c  y(arg), ForDispl
17a20 61 79 28 74 65 78 74 29 29 2c 0d 0a 20 20 20 20  ay(text)),..    
17a30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17a40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17a50 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
17a60 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
17a70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17a80 20 20 20 69 66 20 28 73 74 72 69 63 74 29 0d 0a     if (strict)..
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 20 20 20 20 20                  
17ab0 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
17ac0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
17ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17ae0 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a       continue;..
17af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17b00 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
17b10 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
17b20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
17b30 66 69 67 75 72 61 74 69 6f 6e 2e 77 68 61 74 49  figuration.whatI
17b40 66 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 65 3b  f = (bool)value;
17b50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
17b60 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
17b70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17b80 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61       else if (Ma
17b90 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67  tchOption(newArg
17ba0 2c 20 22 77 6f 77 36 34 22 29 29 0d 0a 20 20 20  , "wow64"))..   
17bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17bc0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
17bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17be0 20 20 20 20 62 6f 6f 6c 3f 20 76 61 6c 75 65 20      bool? value 
17bf0 3d 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74  = ParseBoolean(t
17c00 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ext);....       
17c10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17c20 20 20 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d       if (value =
17c30 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
17c40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17c50 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
17c60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17c70 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
17c80 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e  TraceOps.DebugAn
17c90 64 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20  dTrace(..       
17ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61               Tra
17cc0 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73  cePriority.Lowes
17cd0 74 2c 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b  t, debugCallback
17ce0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
17cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17d00 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c         traceCall
17d10 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72  back, String.For
17d20 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
17d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17d40 20 20 20 20 20 20 20 20 20 20 22 49 6e 76 61 6c            "Inval
17d50 69 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76  id {0} boolean v
17d60 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20  alue: {1}",..   
17d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17d90 20 46 6f 72 44 69 73 70 6c 61 79 28 61 72 67 29   ForDisplay(arg)
17da0 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 74 65 78  , ForDisplay(tex
17db0 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  t)),..          
17dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17dd0 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
17de0 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20  ategory);....   
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 69 66 20               if 
17e10 28 73 74 72 69 63 74 29 0d 0a 20 20 20 20 20 20  (strict)..      
17e20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17e30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
17e40 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20  turn false;.... 
17e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17e60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
17e70 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20  ontinue;..      
17e80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17e90 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
17ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17eb0 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61         configura
17ec0 74 69 6f 6e 2e 77 6f 77 36 34 20 3d 20 28 62 6f  tion.wow64 = (bo
17ed0 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20  ol)value;..     
17ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17ef0 20 20 20 7d 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 65 6c                el
17f10 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  se..            
17f20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 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 20 20 20 20 65 72 72 6f 72             error
17f50 20 3d 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75   = TraceOps.Debu
17f60 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 20 20 20  gAndTrace(..    
17f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17f80 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
17f90 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74  ePriority.Lowest
17fa0 2c 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c  , debugCallback,
17fb0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
17fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17fd0 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c    traceCallback,
17fe0 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d   String.Format(.
17ff0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
18000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18010 20 22 55 6e 73 75 70 70 6f 72 74 65 64 20 63 6f   "Unsupported co
18020 6d 6d 61 6e 64 20 6c 69 6e 65 20 6f 70 74 69 6f  mmand line optio
18030 6e 3a 20 7b 30 7d 22 2c 0d 0a 20 20 20 20 20 20  n: {0}",..      
18040 20 20 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 46 6f 72 44 69 73            ForDis
18060 70 6c 61 79 28 61 72 67 29 29 2c 20 74 72 61 63  play(arg)), trac
18070 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
18080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18090 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 73             if (s
180a0 74 72 69 63 74 29 0d 0a 20 20 20 20 20 20 20 20  trict)..        
180b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
180c0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
180d0 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alse;..         
180e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
180f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
18100 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
18110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
18120 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20  eturn true;..   
18130 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
18140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18150 63 61 74 63 68 20 28 45 78 63 65 70 74 69 6f 6e  catch (Exception
18160 20 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20   e)..           
18170 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
18180 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
18190 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61  eOps.DebugAndTra
181a0 63 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 79  ce(TracePriority
181b0 2e 48 69 67 68 65 73 74 2c 0d 0a 20 20 20 20 20  .Highest,..     
181c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
181d0 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b     debugCallback
181e0 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c  , traceCallback,
181f0 20 65 2c 20 74 72 61 63 65 43 61 74 65 67 6f 72   e, traceCategor
18200 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
18210 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72             error
18220 20 3d 20 22 46 61 69 6c 65 64 20 74 6f 20 6d 6f   = "Failed to mo
18230 64 69 66 79 20 63 6f 6e 66 69 67 75 72 61 74 69  dify configurati
18240 6f 6e 2e 22 3b 0d 0a 20 20 20 20 20 20 20 20 20  on.";..         
18250 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
18260 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
18270 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20  rn false;..     
18280 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
18290 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
182a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
182b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
182c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
182d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
182e0 20 20 20 20 20 20 20 20 20 20 20 5b 4d 65 74 68             [Meth
182f0 6f 64 49 6d 70 6c 28 4d 65 74 68 6f 64 49 6d 70  odImpl(MethodImp
18300 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e  lOptions.NoInlin
18310 69 6e 67 29 5d 0d 0a 20 20 20 20 20 20 20 20 20  ing)]..         
18320 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63     public static
18330 20 62 6f 6f 6c 20 50 72 6f 63 65 73 73 28 0d 0a   bool Process(..
18340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18350 73 74 72 69 6e 67 5b 5d 20 61 72 67 73 2c 0d 0a  string[] args,..
18360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18370 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 63 6f  Configuration co
18380 6e 66 69 67 75 72 61 74 69 6f 6e 2c 0d 0a 20 20  nfiguration,..  
18390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f                bo
183a0 6f 6c 20 73 74 72 69 63 74 2c 0d 0a 20 20 20 20  ol strict,..    
183b0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20              ref 
183c0 73 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20  string error..  
183d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d                ).
183e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
183f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18400 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20  try..           
18410 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
18420 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
18430 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 3d 3d  configuration ==
18440 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
18450 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
18460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18470 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22         error = "
18480 49 6e 76 61 6c 69 64 20 63 6f 6e 66 69 67 75 72  Invalid configur
18490 61 74 69 6f 6e 2e 22 3b 0d 0a 20 20 20 20 20 20  ation.";..      
184a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
184b0 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
184c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
184d0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
184e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 41 73                As
184f0 73 65 6d 62 6c 79 20 61 73 73 65 6d 62 6c 79 20  sembly assembly 
18500 3d 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e  = configuration.
18510 61 73 73 65 6d 62 6c 79 3b 0d 0a 0d 0a 20 20 20  assembly;....   
18520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18530 20 69 66 20 28 61 73 73 65 6d 62 6c 79 20 3d 3d   if (assembly ==
18540 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
18550 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
18560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18570 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22         error = "
18580 49 6e 76 61 6c 69 64 20 61 73 73 65 6d 62 6c 79  Invalid assembly
18590 2e 22 3b 0d 0a 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 72 65 74               ret
185b0 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20  urn false;..    
185c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
185d0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
185e0 20 20 20 20 20 20 20 20 20 69 66 20 28 21 63 6f           if (!co
185f0 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 54 72  nfiguration.noTr
18600 61 63 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ace)..          
18610 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
18620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18630 20 20 20 20 20 69 66 20 28 21 63 6f 6e 66 69 67       if (!config
18640 75 72 61 74 69 6f 6e 2e 6e 6f 4c 6f 67 20 26 26  uration.noLog &&
18650 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
18660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 74                St
18670 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70  ring.IsNullOrEmp
18680 74 79 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  ty(configuration
18690 2e 6c 6f 67 46 69 6c 65 4e 61 6d 65 29 29 0d 0a  .logFileName))..
186a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
186b0 20 20 20 20 20 20 20 20 7b 0d 0a 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 20 2f 2f 0d 0a 20 20 20 20 20         //..     
186e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
186f0 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20         // NOTE: 
18700 55 73 65 20 74 68 65 20 64 65 66 61 75 6c 74 20  Use the default 
18710 6c 6f 67 20 66 69 6c 65 20 6e 61 6d 65 2e 0d 0a  log file name...
18720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18730 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
18740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18750 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66              conf
18760 69 67 75 72 61 74 69 6f 6e 2e 6c 6f 67 46 69 6c  iguration.logFil
18770 65 4e 61 6d 65 20 3d 20 47 65 74 4c 6f 67 46 69  eName = GetLogFi
18780 6c 65 4e 61 6d 65 28 0d 0a 20 20 20 20 20 20 20  leName(..       
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 22 74 72 61 63 65 22           "trace"
187b0 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
187c0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
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 2f 2f 2f 2f 2f 2f 2f           ///////
187f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18800 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18810 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18820 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
18830 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
18840 21 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e  !configuration.n
18850 6f 43 6f 6e 73 6f 6c 65 29 0d 0a 20 20 20 20 20  oConsole)..     
18860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18870 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
18880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18890 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
188a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
188b0 20 20 2f 2f 20 4e 4f 54 45 3a 20 49 6e 20 76 65    // NOTE: In ve
188c0 72 62 6f 73 65 20 6d 6f 64 65 2c 20 64 65 62 75  rbose mode, debu
188d0 67 20 6f 75 74 70 75 74 20 28 74 68 61 74 20 6d  g output (that m
188e0 65 65 74 73 0d 0a 20 20 20 20 20 20 20 20 20 20  eets..          
188f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18900 20 20 2f 2f 20 20 20 20 20 20 20 74 68 65 20 63    //       the c
18910 6f 6e 66 69 67 75 72 65 64 20 70 72 69 6f 72 69  onfigured priori
18920 74 79 20 63 72 69 74 65 72 69 61 29 20 77 69 6c  ty criteria) wil
18930 6c 20 62 65 0d 0a 20 20 20 20 20 20 20 20 20 20  l be..          
18940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18950 20 20 2f 2f 20 20 20 20 20 20 20 64 69 73 70 6c    //       displ
18960 61 79 65 64 20 74 6f 20 74 68 65 20 63 6f 6e 73  ayed to the cons
18970 6f 6c 65 3b 20 6f 74 68 65 72 77 69 73 65 2c 20  ole; otherwise, 
18980 74 72 61 63 65 0d 0a 20 20 20 20 20 20 20 20 20  trace..         
18990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
189a0 20 20 20 2f 2f 20 20 20 20 20 20 20 6f 75 74 70     //       outp
189b0 75 74 20 28 74 68 61 74 20 6d 65 65 74 73 20 74  ut (that meets t
189c0 68 65 20 63 6f 6e 66 69 67 75 72 65 64 20 70 72  he configured pr
189d0 69 6f 72 69 74 79 0d 0a 20 20 20 20 20 20 20 20  iority..        
189e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
189f0 20 20 20 20 2f 2f 20 20 20 20 20 20 20 63 72 69      //       cri
18a00 74 65 72 69 61 29 20 77 69 6c 6c 20 62 65 20 64  teria) will be d
18a10 69 73 70 6c 61 79 65 64 20 74 6f 20 74 68 65 20  isplayed to the 
18a20 63 6f 6e 73 6f 6c 65 2e 0d 0a 20 20 20 20 20 20  console...      
18a30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18a40 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
18a50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18a60 20 20 20 20 20 20 69 66 20 28 63 6f 6e 66 69 67        if (config
18a70 75 72 61 74 69 6f 6e 2e 64 65 62 75 67 29 0d 0a  uration.debug)..
18a80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18a90 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
18aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
18ac0 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
18ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18ae0 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 41 64 64 20     // NOTE: Add 
18af0 74 68 65 20 63 6f 6e 73 6f 6c 65 20 74 72 61 63  the console trac
18b00 65 20 6c 69 73 74 65 6e 65 72 20 74 6f 20 74 68  e listener to th
18b10 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..             
18b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18b30 20 20 20 2f 2f 20 20 20 20 20 20 20 6c 69 73 74     //       list
18b40 20 6f 66 20 74 72 61 63 65 20 6c 69 73 74 65 6e   of trace listen
18b50 65 72 73 20 6d 61 69 6e 74 61 69 6e 65 64 20 62  ers maintained b
18b60 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  y..             
18b70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18b80 20 20 20 2f 2f 20 20 20 20 20 20 20 74 68 65 20     //       the 
18b90 54 72 61 63 65 4f 70 73 20 63 6c 61 73 73 20 28  TraceOps class (
18ba0 69 2e 65 2e 20 6f 6e 6c 79 20 6d 65 73 73 61 67  i.e. only messag
18bb0 65 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  es..            
18bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18bd0 20 20 20 20 2f 2f 20 20 20 20 20 20 20 74 68 61      //       tha
18be0 74 20 6d 65 65 74 20 74 68 65 20 64 65 62 75 67  t meet the debug
18bf0 20 70 72 69 6f 72 69 74 79 20 77 69 6c 6c 20 62   priority will b
18c00 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..             
18c10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18c20 20 20 20 2f 2f 20 20 20 20 20 20 20 73 65 65 6e     //       seen
18c30 20 6f 6e 20 74 68 65 20 63 6f 6e 73 6f 6c 65 29   on the console)
18c40 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
18c50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18c60 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
18c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18c80 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e         TraceOps.
18c90 53 65 74 75 70 44 65 62 75 67 4c 69 73 74 65 6e  SetupDebugListen
18ca0 65 72 73 28 29 3b 0d 0a 20 20 20 20 20 20 20 20  ers();..        
18cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18cc0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
18cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18ce0 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20     else..       
18cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18d00 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
18d10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18d20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
18d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18d40 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e              // N
18d50 4f 54 45 3a 20 41 64 64 20 74 68 65 20 63 6f 6e  OTE: Add the con
18d60 73 6f 6c 65 20 74 72 61 63 65 20 6c 69 73 74 65  sole trace liste
18d70 6e 65 72 20 74 6f 20 74 68 65 0d 0a 20 20 20 20  ner to the..    
18d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18d90 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
18da0 20 20 20 20 20 6c 69 73 74 20 6f 66 20 62 75 69       list of bui
18db0 6c 74 2d 69 6e 20 74 72 61 63 65 20 6c 69 73 74  lt-in trace list
18dc0 65 6e 65 72 73 20 28 69 2e 65 2e 0d 0a 20 20 20  eners (i.e...   
18dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18de0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
18df0 20 20 20 20 20 20 6f 6e 6c 79 20 6d 65 73 73 61        only messa
18e00 67 65 73 20 74 68 61 74 20 6d 65 65 74 20 74 68  ges that meet th
18e10 65 20 74 72 61 63 65 0d 0a 20 20 20 20 20 20 20  e trace..       
18e20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18e30 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
18e40 20 20 70 72 69 6f 72 69 74 79 20 77 69 6c 6c 20    priority will 
18e50 62 65 20 73 65 65 6e 20 6f 6e 20 74 68 65 20 63  be seen on the c
18e60 6f 6e 73 6f 6c 65 29 2e 0d 0a 20 20 20 20 20 20  onsole)...      
18e70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18e80 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
18e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
18eb0 61 63 65 2e 4c 69 73 74 65 6e 65 72 73 2e 41 64  ace.Listeners.Ad
18ec0 64 28 6e 65 77 20 43 6f 6e 73 6f 6c 65 54 72 61  d(new ConsoleTra
18ed0 63 65 4c 69 73 74 65 6e 65 72 28 29 29 3b 0d 0a  ceListener());..
18ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18ef0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 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 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
18f20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18f30 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
18f40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18f50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18f60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
18f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18f80 20 20 20 20 20 20 20 69 66 20 28 21 63 6f 6e 66         if (!conf
18f90 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 4c 6f 67 20  iguration.noLog 
18fa0 26 26 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  &&..            
18fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18fc0 21 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72  !String.IsNullOr
18fd0 45 6d 70 74 79 28 63 6f 6e 66 69 67 75 72 61 74  Empty(configurat
18fe0 69 6f 6e 2e 6c 6f 67 46 69 6c 65 4e 61 6d 65 29  ion.logFileName)
18ff0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
19000 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
19010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19020 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 2e            Trace.
19030 4c 69 73 74 65 6e 65 72 73 2e 41 64 64 28 6e 65  Listeners.Add(ne
19040 77 20 54 65 78 74 57 72 69 74 65 72 54 72 61 63  w TextWriterTrac
19050 65 4c 69 73 74 65 6e 65 72 28 0d 0a 20 20 20 20  eListener(..    
19060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19070 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66              conf
19080 69 67 75 72 61 74 69 6f 6e 2e 6c 6f 67 46 69 6c  iguration.logFil
19090 65 4e 61 6d 65 29 29 3b 0d 0a 0d 0a 20 20 20 20  eName));....    
190a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
190b0 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
190c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
190d0 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a          // NOTE:
190e0 20 54 65 63 68 6e 69 63 61 6c 6c 79 2c 20 77 65   Technically, we
190f0 20 63 72 65 61 74 65 64 20 74 68 65 20 6c 6f 67   created the log
19100 20 66 69 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20   file...        
19110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19120 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
19130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19140 20 20 20 20 66 69 6c 65 73 43 72 65 61 74 65 64      filesCreated
19150 2b 2b 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ++;..           
19160 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
19170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19180 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
19190 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
191a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
191b0 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 44 75       // NOTE: Du
191c0 6d 70 20 74 68 65 20 63 6f 6e 66 69 67 75 72 61  mp the configura
191d0 74 69 6f 6e 20 6e 6f 77 20 69 6e 20 63 61 73 65  tion now in case
191e0 20 77 65 20 6e 65 65 64 20 74 6f 0d 0a 20 20 20   we need to..   
191f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19200 20 2f 2f 20 20 20 20 20 20 20 74 72 6f 75 62 6c   //       troubl
19210 65 73 68 6f 6f 74 20 61 6e 79 20 69 73 73 75 65  eshoot any issue
19220 73 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  s...            
19230 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
19240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19250 69 66 20 28 63 6f 6e 66 69 67 75 72 61 74 69 6f  if (configuratio
19260 6e 2e 64 65 62 75 67 50 72 69 6f 72 69 74 79 20  n.debugPriority 
19270 3c 3d 20 54 72 61 63 65 50 72 69 6f 72 69 74 79  <= TracePriority
19280 2e 4d 65 64 69 75 6d 29 0d 0a 20 20 20 20 20 20  .Medium)..      
19290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
192a0 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e    configuration.
192b0 44 75 6d 70 28 64 65 62 75 67 43 61 6c 6c 62 61  Dump(debugCallba
192c0 63 6b 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ck);....        
192d0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
192e0 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 74 72  configuration.tr
192f0 61 63 65 50 72 69 6f 72 69 74 79 20 3c 3d 20 54  acePriority <= T
19300 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4d 65 64  racePriority.Med
19310 69 75 6d 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ium)..          
19320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
19330 6e 66 69 67 75 72 61 74 69 6f 6e 2e 44 75 6d 70  nfiguration.Dump
19340 28 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 29 3b  (traceCallback);
19350 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
19360 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
19370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19380 2f 2f 20 4e 4f 54 45 3a 20 53 68 6f 77 20 77 68  // NOTE: Show wh
19390 65 72 65 20 77 65 20 61 72 65 20 72 75 6e 6e 69  ere we are runni
193a0 6e 67 20 66 72 6f 6d 20 61 6e 64 20 68 6f 77 20  ng from and how 
193b0 77 65 20 77 65 72 65 0d 0a 20 20 20 20 20 20 20  we were..       
193c0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
193d0 20 20 20 20 20 20 69 6e 76 6f 6b 65 64 2e 0d 0a        invoked...
193e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
193f0 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
19400 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
19410 6e 67 20 6c 6f 63 61 74 69 6f 6e 20 3d 20 61 73  ng location = as
19420 73 65 6d 62 6c 79 2e 4c 6f 63 61 74 69 6f 6e 3b  sembly.Location;
19430 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
19440 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73          TraceOps
19450 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 54  .DebugAndTrace(T
19460 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4d 65 64  racePriority.Med
19470 69 75 6d 4c 6f 77 2c 0d 0a 20 20 20 20 20 20 20  iumLow,..       
19480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19490 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20   debugCallback, 
194a0 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53  traceCallback, S
194b0 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
194c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
194d0 20 20 20 20 20 20 20 22 52 75 6e 6e 69 6e 67 20         "Running 
194e0 65 78 65 63 75 74 61 62 6c 65 20 69 73 3a 20 7b  executable is: {
194f0 30 7d 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28  0}", ForDisplay(
19500 6c 6f 63 61 74 69 6f 6e 29 29 2c 0d 0a 20 20 20  location)),..   
19510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19520 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f       traceCatego
19530 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
19540 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
19550 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61  eOps.DebugAndTra
19560 63 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 79  ce(TracePriority
19570 2e 4d 65 64 69 75 6d 4c 6f 77 2c 0d 0a 20 20 20  .MediumLow,..   
19580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19590 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61       debugCallba
195a0 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63  ck, traceCallbac
195b0 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  k, String.Format
195c0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
195d0 20 20 20 20 20 20 20 20 20 20 20 22 4f 72 69 67             "Orig
195e0 69 6e 61 6c 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e  inal command lin
195f0 65 20 69 73 3a 20 7b 30 7d 22 2c 0d 0a 20 20 20  e is: {0}",..   
19600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19610 20 20 20 20 20 45 6e 76 69 72 6f 6e 6d 65 6e 74       Environment
19620 2e 43 6f 6d 6d 61 6e 64 4c 69 6e 65 29 2c 20 74  .CommandLine), t
19630 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
19640 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
19650 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44        TraceOps.D
19660 65 62 75 67 41 6e 64 54 72 61 63 65 28 54 72 61  ebugAndTrace(Tra
19670 63 65 50 72 69 6f 72 69 74 79 2e 4d 65 64 69 75  cePriority.Mediu
19680 6d 4c 6f 77 2c 0d 0a 20 20 20 20 20 20 20 20 20  mLow,..         
19690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
196a0 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72  ebugCallback, tr
196b0 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72  aceCallback, Str
196c0 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
196d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
196e0 20 20 20 20 20 22 52 75 6e 6e 69 6e 67 20 70 72       "Running pr
196f0 6f 63 65 73 73 20 69 73 20 7b 30 7d 2e 22 2c 20  ocess is {0}.", 
19700 49 73 36 34 42 69 74 50 72 6f 63 65 73 73 28 29  Is64BitProcess()
19710 20 3f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   ?..            
19720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19730 22 36 34 2d 62 69 74 22 20 3a 20 22 33 32 2d 62  "64-bit" : "32-b
19740 69 74 22 29 2c 20 74 72 61 63 65 43 61 74 65 67  it"), traceCateg
19750 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
19760 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
19770 28 21 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e  (!configuration.
19780 77 68 61 74 49 66 29 0d 0a 20 20 20 20 20 20 20  whatIf)..       
19790 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
197a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
197b0 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
197c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
197d0 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 49 66 20      // NOTE: If 
197e0 74 68 65 20 64 65 62 75 67 67 65 72 20 69 73 20  the debugger is 
197f0 61 74 74 61 63 68 65 64 20 61 6e 64 20 57 68 61  attached and Wha
19800 74 2d 49 66 20 6d 6f 64 65 0d 0a 20 20 20 20 20  t-If mode..     
19810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19820 20 20 20 2f 2f 20 20 20 20 20 20 20 69 73 20 5b     //       is [
19830 6e 6f 77 5d 20 64 69 73 61 62 6c 65 64 2c 20 69  now] disabled, i
19840 73 73 75 65 20 61 20 77 61 72 6e 69 6e 67 2e 0d  ssue a warning..
19850 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
19860 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
19870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19880 20 20 20 20 20 69 66 20 28 44 65 62 75 67 67 65       if (Debugge
19890 72 2e 49 73 41 74 74 61 63 68 65 64 29 0d 0a 20  r.IsAttached).. 
198a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
198b0 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
198c0 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63  Ops.DebugAndTrac
198d0 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e  e(TracePriority.
198e0 4d 65 64 69 75 6d 48 69 67 68 2c 0d 0a 20 20 20  MediumHigh,..   
198f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19900 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62               deb
19910 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63  ugCallback, trac
19920 65 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20  eCallback,..    
19930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19940 20 20 20 20 20 20 20 20 20 20 20 20 22 46 6f 72              "For
19950 63 65 64 20 74 6f 20 64 69 73 61 62 6c 65 20 5c  ced to disable \
19960 22 77 68 61 74 2d 69 66 5c 22 20 6d 6f 64 65 20  "what-if\" mode 
19970 77 69 74 68 20 22 20 2b 0d 0a 20 20 20 20 20 20  with " +..      
19980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19990 20 20 20 20 20 20 20 20 20 20 22 64 65 62 75 67            "debug
199a0 67 65 72 20 61 74 74 61 63 68 65 64 2e 22 2c 20  ger attached.", 
199b0 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
199c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
199d0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
199e0 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65              else
199f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
19a00 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
19a10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19a20 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41   TraceOps.DebugA
19a30 6e 64 54 72 61 63 65 28 54 72 61 63 65 50 72 69  ndTrace(TracePri
19a40 6f 72 69 74 79 2e 4d 65 64 69 75 6d 48 69 67 68  ority.MediumHigh
19a50 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
19a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
19a70 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72  ebugCallback, tr
19a80 61 63 65 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20  aceCallback,..  
19a90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19aa0 20 20 20 20 20 20 20 20 20 20 22 4e 6f 20 61 63            "No ac
19ab0 74 75 61 6c 20 63 68 61 6e 67 65 73 20 77 69 6c  tual changes wil
19ac0 6c 20 62 65 20 6d 61 64 65 20 74 6f 20 74 68 69  l be made to thi
19ad0 73 20 22 20 2b 0d 0a 20 20 20 20 20 20 20 20 20  s " +..         
19ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19af0 20 20 20 22 73 79 73 74 65 6d 20 62 65 63 61 75     "system becau
19b00 73 65 20 5c 22 77 68 61 74 2d 69 66 5c 22 20 6d  se \"what-if\" m
19b10 6f 64 65 20 69 73 20 65 6e 61 62 6c 65 64 2e 22  ode is enabled."
19b20 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
19b30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
19b40 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
19b50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19b60 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
19b70 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
19b80 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
19b90 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 49 66       // NOTE: If
19ba0 20 74 68 65 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e   the command lin
19bb0 65 20 68 61 73 20 6e 6f 74 20 62 65 65 6e 20 6d  e has not been m
19bc0 61 6e 75 61 6c 6c 79 0d 0a 20 20 20 20 20 20 20  anually..       
19bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
19be0 20 20 20 20 20 20 63 6f 6e 66 69 72 6d 65 64 20        confirmed 
19bf0 28 69 2e 65 2e 20 76 69 61 20 74 68 65 20 65 78  (i.e. via the ex
19c00 70 6c 69 63 69 74 20 63 6f 6d 6d 61 6e 64 20 6c  plicit command l
19c10 69 6e 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ine..           
19c20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
19c30 20 20 6f 70 74 69 6f 6e 29 2c 20 74 68 65 6e 20    option), then 
19c40 73 74 6f 70 20 70 72 6f 63 65 73 73 69 6e 67 20  stop processing 
19c50 6e 6f 77 2e 20 20 57 65 20 65 6e 66 6f 72 63 65  now.  We enforce
19c60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
19c70 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 74        //       t
19c80 68 69 73 20 72 75 6c 65 20 73 6f 20 74 68 61 74  his rule so that
19c90 20 73 69 6d 70 6c 79 20 64 6f 75 62 6c 65 2d 63   simply double-c
19ca0 6c 69 63 6b 69 6e 67 20 74 68 65 0d 0a 20 20 20  licking the..   
19cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19cc0 20 2f 2f 20 20 20 20 20 20 20 65 78 65 63 75 74   //       execut
19cd0 61 62 6c 65 20 77 69 6c 6c 20 6e 6f 74 20 72 65  able will not re
19ce0 73 75 6c 74 20 69 6e 20 61 6e 79 20 63 68 61 6e  sult in any chan
19cf0 67 65 73 20 62 65 69 6e 67 0d 0a 20 20 20 20 20  ges being..     
19d00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
19d10 2f 20 20 20 20 20 20 20 6d 61 64 65 20 74 6f 20  /       made to 
19d20 74 68 65 20 73 79 73 74 65 6d 2e 0d 0a 20 20 20  the system...   
19d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19d40 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
19d50 20 20 20 20 20 20 20 20 20 69 66 20 28 21 63 6f           if (!co
19d60 6e 66 69 67 75 72 61 74 69 6f 6e 2e 63 6f 6e 66  nfiguration.conf
19d70 69 72 6d 29 0d 0a 20 20 20 20 20 20 20 20 20 20  irm)..          
19d80 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
19d90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19da0 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 43 61       error = "Ca
19db0 6e 6e 6f 74 20 63 6f 6e 74 69 6e 75 65 2c 20 74  nnot continue, t
19dc0 68 65 20 5c 22 63 6f 6e 66 69 72 6d 5c 22 20 6f  he \"confirm\" o
19dd0 70 74 69 6f 6e 20 69 73 20 22 20 2b 0d 0a 20 20  ption is " +..  
19de0 20 20 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 6e 6f 74 20 65            "not e
19e00 6e 61 62 6c 65 64 2e 22 3b 0d 0a 0d 0a 20 20 20  nabled.";....   
19e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19e20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
19e30 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
19e40 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
19e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19e60 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20   return true;.. 
19e70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
19e80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
19e90 20 20 63 61 74 63 68 20 28 45 78 63 65 70 74 69    catch (Excepti
19ea0 6f 6e 20 65 29 0d 0a 20 20 20 20 20 20 20 20 20  on e)..         
19eb0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
19ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
19ed0 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54  aceOps.DebugAndT
19ee0 72 61 63 65 28 54 72 61 63 65 50 72 69 6f 72 69  race(TracePriori
19ef0 74 79 2e 48 69 67 68 65 73 74 2c 0d 0a 20 20 20  ty.Highest,..   
19f00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19f10 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61       debugCallba
19f20 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63  ck, traceCallbac
19f30 6b 2c 20 65 2c 20 74 72 61 63 65 43 61 74 65 67  k, e, traceCateg
19f40 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
19f50 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
19f60 6f 72 20 3d 20 22 46 61 69 6c 65 64 20 74 6f 20  or = "Failed to 
19f70 70 72 6f 63 65 73 73 20 63 6f 6e 66 69 67 75 72  process configur
19f80 61 74 69 6f 6e 2e 22 3b 0d 0a 20 20 20 20 20 20  ation.";..      
19f90 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
19fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
19fb0 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20  eturn false;..  
19fc0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
19fd0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
19fe0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19ff0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a000 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a010 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
1a020 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 4d  ..            [M
1a030 65 74 68 6f 64 49 6d 70 6c 28 4d 65 74 68 6f 64  ethodImpl(Method
1a040 49 6d 70 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e  ImplOptions.NoIn
1a050 6c 69 6e 69 6e 67 29 5d 0d 0a 20 20 20 20 20 20  lining)]..      
1a060 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61        public sta
1a070 74 69 63 20 62 6f 6f 6c 20 43 68 65 63 6b 52 75  tic bool CheckRu
1a080 6e 74 69 6d 65 56 65 72 73 69 6f 6e 28 0d 0a 20  ntimeVersion(.. 
1a090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43                 C
1a0a0 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 63 6f 6e  onfiguration con
1a0b0 66 69 67 75 72 61 74 69 6f 6e 2c 0d 0a 20 20 20  figuration,..   
1a0c0 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f               boo
1a0d0 6c 20 73 74 72 69 63 74 2c 0d 0a 20 20 20 20 20  l strict,..     
1a0e0 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20 73             ref s
1a0f0 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20  tring error..   
1a100 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a               )..
1a110 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
1a120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
1a130 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ry..            
1a140 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
1a150 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 63             if (c
1a160 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 3d 3d 20  onfiguration == 
1a170 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
1a180 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
1a190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a1a0 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 49        error = "I
1a1b0 6e 76 61 6c 69 64 20 63 6f 6e 66 69 67 75 72 61  nvalid configura
1a1c0 74 69 6f 6e 2e 22 3b 0d 0a 20 20 20 20 20 20 20  tion.";..       
1a1d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a1e0 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
1a1f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a200 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
1a210 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
1a220 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1a230 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 57 68       // NOTE: Wh
1a240 61 74 20 76 65 72 73 69 6f 6e 20 6f 66 20 74 68  at version of th
1a250 65 20 72 75 6e 74 69 6d 65 20 77 61 73 20 74 68  e runtime was th
1a260 65 20 63 6f 72 65 20 28 70 72 69 6d 61 72 79 29  e core (primary)
1a270 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1a280 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 61        //       a
1a290 73 73 65 6d 62 6c 79 20 63 6f 6d 70 69 6c 65 64  ssembly compiled
1a2a0 20 61 67 61 69 6e 73 74 20 28 65 2e 67 2e 20 22   against (e.g. "
1a2b0 76 32 2e 30 2e 35 30 37 32 37 22 20 6f 72 0d 0a  v2.0.50727" or..
1a2c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a2d0 20 20 20 20 2f 2f 20 20 20 20 20 20 20 22 76 34      //       "v4
1a2e0 2e 30 2e 33 30 33 31 39 22 29 2e 0d 0a 20 20 20  .0.30319")...   
1a2f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a300 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
1a310 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
1a320 63 6f 72 65 49 6d 61 67 65 52 75 6e 74 69 6d 65  coreImageRuntime
1a330 56 65 72 73 69 6f 6e 20 3d 20 47 65 74 49 6d 61  Version = GetIma
1a340 67 65 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e  geRuntimeVersion
1a350 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
1a360 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69             confi
1a370 67 75 72 61 74 69 6f 6e 2e 63 6f 72 65 46 69 6c  guration.coreFil
1a380 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20  eName);....     
1a390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1a3a0 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
1a3b0 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20         // NOTE: 
1a3c0 57 65 20 61 6c 6c 6f 77 20 74 68 65 20 61 63 74  We allow the act
1a3d0 75 61 6c 20 69 6d 61 67 65 20 72 75 6e 74 69 6d  ual image runtim
1a3e0 65 20 63 68 65 63 6b 69 6e 67 20 74 6f 20 62 65  e checking to be
1a3f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1a400 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 62        //       b
1a410 79 70 61 73 73 65 64 20 76 69 61 20 74 68 65 20  ypassed via the 
1a420 22 2d 6e 6f 52 75 6e 74 69 6d 65 56 65 72 73 69  "-noRuntimeVersi
1a430 6f 6e 22 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65  on" command line
1a440 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1a450 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 6f        //       o
1a460 70 74 69 6f 6e 2e 20 20 54 68 65 20 63 6f 6d 6d  ption.  The comm
1a470 61 6e 64 20 6c 69 6e 65 20 6f 70 74 69 6f 6e 20  and line option 
1a480 69 73 20 69 6e 74 65 6e 64 65 64 20 66 6f 72 0d  is intended for.
1a490 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1a4a0 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 65 78       //       ex
1a4b0 70 65 72 74 20 75 73 65 20 6f 6e 6c 79 2e 0d 0a  pert use only...
1a4c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a4d0 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
1a4e0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
1a4f0 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f  configuration.no
1a500 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 29 0d  RuntimeVersion).
1a510 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1a520 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
1a530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a540 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e  TraceOps.DebugAn
1a550 64 54 72 61 63 65 28 54 72 61 63 65 50 72 69 6f  dTrace(TracePrio
1a560 72 69 74 79 2e 4d 65 64 69 75 6d 2c 0d 0a 20 20  rity.Medium,..  
1a570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a580 20 20 20 20 20 20 20 20 20 20 64 65 62 75 67 43            debugC
1a590 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61  allback, traceCa
1a5a0 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46  llback, String.F
1a5b0 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
1a5c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a5d0 20 20 20 20 22 41 73 73 65 6d 62 6c 79 20 69 73      "Assembly is
1a5e0 20 63 6f 6d 70 69 6c 65 64 20 66 6f 72 20 74 68   compiled for th
1a5f0 65 20 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b  e .NET Framework
1a600 20 7b 30 7d 3b 20 22 20 2b 0d 0a 20 20 20 20 20   {0}; " +..     
1a610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a620 20 20 20 20 20 20 20 22 68 6f 77 65 76 65 72 2c         "however,
1a630 20 69 6e 73 74 61 6c 6c 61 74 69 6f 6e 20 72 65   installation re
1a640 73 74 72 69 63 74 69 6f 6e 73 20 62 61 73 65 64  strictions based
1a650 20 6f 6e 20 74 68 69 73 20 22 20 2b 0d 0a 20 20   on this " +..  
1a660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a670 20 20 20 20 20 20 20 20 20 20 22 66 61 63 74 20            "fact 
1a680 68 61 76 65 20 62 65 65 6e 20 64 69 73 61 62 6c  have been disabl
1a690 65 64 20 76 69 61 20 74 68 65 20 63 6f 6d 6d 61  ed via the comma
1a6a0 6e 64 20 6c 69 6e 65 2e 22 2c 0d 0a 20 20 20 20  nd line.",..    
1a6b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a6c0 20 20 20 20 20 20 20 20 63 6f 72 65 49 6d 61 67          coreImag
1a6d0 65 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 29  eRuntimeVersion)
1a6e0 2c 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29  , traceCategory)
1a6f0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
1a700 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
1a710 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20 20  urn true;..     
1a720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
1a730 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1a740 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
1a750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a760 2f 2f 20 54 4f 44 4f 3a 20 52 65 73 74 72 69 63  // TODO: Restric
1a770 74 20 74 68 65 20 63 6f 6e 66 69 67 75 72 61 74  t the configurat
1a780 69 6f 6e 20 62 61 73 65 64 20 6f 6e 20 77 68 69  ion based on whi
1a790 63 68 20 69 6d 61 67 65 0d 0a 20 20 20 20 20 20  ch image..      
1a7a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
1a7b0 20 20 20 20 20 20 20 72 75 6e 74 69 6d 65 20 76         runtime v
1a7c0 65 72 73 69 6f 6e 73 20 28 77 68 69 63 68 20 6d  ersions (which m
1a7d0 6f 72 65 2d 6f 72 2d 6c 65 73 73 20 63 6f 72 72  ore-or-less corr
1a7e0 65 73 70 6f 6e 64 0d 0a 20 20 20 20 20 20 20 20  espond..        
1a7f0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
1a800 20 20 20 20 20 74 6f 20 2e 4e 45 54 20 46 72 61       to .NET Fra
1a810 6d 65 77 6f 72 6b 20 76 65 72 73 69 6f 6e 73 29  mework versions)
1a820 20 61 72 65 20 73 75 70 70 6f 72 74 65 64 20 62   are supported b
1a830 79 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 20  y the..         
1a840 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
1a850 20 20 20 20 76 65 72 73 69 6f 6e 73 20 6f 66 20      versions of 
1a860 56 69 73 75 61 6c 20 53 74 75 64 69 6f 20 74 68  Visual Studio th
1a870 61 74 20 61 72 65 20 69 6e 73 74 61 6c 6c 65 64  at are installed
1a880 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
1a890 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
1a8a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
1a8b0 66 20 28 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c  f (String.IsNull
1a8c0 4f 72 45 6d 70 74 79 28 63 6f 72 65 49 6d 61 67  OrEmpty(coreImag
1a8d0 65 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 29  eRuntimeVersion)
1a8e0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
1a8f0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
1a900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a910 20 20 65 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c    error = "inval
1a920 69 64 20 63 6f 72 65 20 66 69 6c 65 20 69 6d 61  id core file ima
1a930 67 65 20 72 75 6e 74 69 6d 65 20 76 65 72 73 69  ge runtime versi
1a940 6f 6e 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  on";..          
1a950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
1a960 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20  turn false;..   
1a970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a980 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
1a990 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20          else if 
1a9a0 28 53 74 72 69 6e 67 2e 45 71 75 61 6c 73 28 0d  (String.Equals(.
1a9b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1a9c0 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 72               cor
1a9d0 65 49 6d 61 67 65 52 75 6e 74 69 6d 65 56 65 72  eImageRuntimeVer
1a9e0 73 69 6f 6e 2c 20 43 4c 52 76 32 49 6d 61 67 65  sion, CLRv2Image
1a9f0 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 2c 0d  RuntimeVersion,.
1aa00 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1aa10 20 20 20 20 20 20 20 20 20 20 20 20 20 53 74 72               Str
1aa20 69 6e 67 43 6f 6d 70 61 72 69 73 6f 6e 2e 4f 72  ingComparison.Or
1aa30 64 69 6e 61 6c 29 29 0d 0a 20 20 20 20 20 20 20  dinal))..       
1aa40 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
1aa50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1aa60 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
1aa70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1aa80 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 46 6f 72      // NOTE: For
1aa90 20 74 68 65 20 43 4c 52 20 76 32 2e 30 20 72 75   the CLR v2.0 ru
1aaa0 6e 74 69 6d 65 2c 20 6d 61 6b 65 20 73 75 72 65  ntime, make sure
1aab0 20 77 65 20 64 69 73 61 62 6c 65 0d 0a 20 20 20   we disable..   
1aac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1aad0 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 61 6e       //       an
1aae0 79 20 61 74 74 65 6d 70 74 20 74 6f 20 75 73 65  y attempt to use
1aaf0 20 69 74 20 66 6f 72 20 74 68 69 6e 67 73 20 74   it for things t
1ab00 68 61 74 20 72 65 71 75 69 72 65 0d 0a 20 20 20  hat require..   
1ab10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ab20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 61 6e       //       an
1ab30 20 61 73 73 65 6d 62 6c 79 20 63 6f 6d 70 69 6c   assembly compil
1ab40 65 64 20 66 6f 72 20 74 68 65 20 43 4c 52 20 76  ed for the CLR v
1ab50 34 2e 30 2e 20 20 49 74 20 69 73 0d 0a 20 20 20  4.0.  It is..   
1ab60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ab70 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 75 6e       //       un
1ab80 63 65 72 74 61 69 6e 20 69 66 20 74 68 69 73 20  certain if this 
1ab90 69 73 20 61 63 74 75 61 6c 6c 79 20 61 20 70 72  is actually a pr
1aba0 6f 62 6c 65 6d 20 69 6e 0d 0a 20 20 20 20 20 20  oblem in..      
1abb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1abc0 20 20 2f 2f 20 20 20 20 20 20 20 70 72 61 63 74    //       pract
1abd0 69 63 65 20 61 73 20 74 68 65 20 43 4c 52 20 76  ice as the CLR v
1abe0 34 2e 30 20 63 61 6e 20 6c 6f 61 64 20 61 6e 64  4.0 can load and
1abf0 20 75 73 65 20 61 6e 0d 0a 20 20 20 20 20 20 20   use an..       
1ac00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ac10 20 2f 2f 20 20 20 20 20 20 20 61 73 73 65 6d 62   //       assemb
1ac20 6c 79 20 63 6f 6d 70 69 6c 65 64 20 77 69 74 68  ly compiled with
1ac30 20 74 68 65 20 43 4c 52 20 76 32 2e 30 3b 20 68   the CLR v2.0; h
1ac40 6f 77 65 76 65 72 2c 0d 0a 20 20 20 20 20 20 20  owever,..       
1ac50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ac60 20 2f 2f 20 20 20 20 20 20 20 73 69 6e 63 65 20   //       since 
1ac70 74 68 69 73 20 70 72 6f 6a 65 63 74 20 6f 66 66  this project off
1ac80 65 72 73 20 62 6f 74 68 20 63 6f 6e 66 69 67 75  ers both configu
1ac90 72 61 74 69 6f 6e 73 2c 0d 0a 20 20 20 20 20 20  rations,..      
1aca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1acb0 20 20 2f 2f 20 20 20 20 20 20 20 77 65 20 63 75    //       we cu
1acc0 72 72 65 6e 74 6c 79 20 64 69 73 61 6c 6c 6f 77  rrently disallow
1acd0 20 74 68 69 73 20 6d 69 73 6d 61 74 63 68 2e 0d   this mismatch..
1ace0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1acf0 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
1ad00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ad10 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69       configurati
1ad20 6f 6e 2e 6e 6f 4e 65 74 46 78 34 30 20 3d 20 74  on.noNetFx40 = t
1ad30 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  rue;..          
1ad40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
1ad50 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 4e 65  nfiguration.noNe
1ad60 74 46 78 34 35 20 3d 20 74 72 75 65 3b 0d 0a 20  tFx45 = true;.. 
1ad70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ad80 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61         configura
1ad90 74 69 6f 6e 2e 6e 6f 56 73 32 30 31 30 20 3d 20  tion.noVs2010 = 
1ada0 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  true;..         
1adb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
1adc0 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 56  onfiguration.noV
1add0 73 32 30 31 32 20 3d 20 74 72 75 65 3b 0d 0a 0d  s2012 = true;...
1ade0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1adf0 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70           TraceOp
1ae00 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28  s.DebugAndTrace(
1ae10 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4d 65  TracePriority.Me
1ae20 64 69 75 6d 2c 0d 0a 20 20 20 20 20 20 20 20 20  dium,..         
1ae30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ae40 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b     debugCallback
1ae50 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c  , traceCallback,
1ae60 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d   String.Format(.
1ae70 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1ae80 20 20 20 20 20 20 20 20 20 20 20 20 20 22 41 73               "As
1ae90 73 65 6d 62 6c 79 20 69 73 20 63 6f 6d 70 69 6c  sembly is compil
1aea0 65 64 20 66 6f 72 20 74 68 65 20 2e 4e 45 54 20  ed for the .NET 
1aeb0 46 72 61 6d 65 77 6f 72 6b 20 7b 30 7d 2c 20 22  Framework {0}, "
1aec0 20 2b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   +..            
1aed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1aee0 22 73 75 70 70 6f 72 74 20 66 6f 72 20 2e 4e 45  "support for .NE
1aef0 54 20 46 72 61 6d 65 77 6f 72 6b 20 7b 31 7d 20  T Framework {1} 
1af00 69 73 20 6e 6f 77 20 64 69 73 61 62 6c 65 64 2e  is now disabled.
1af10 22 2c 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 20 20 20 20                  
1af30 43 4c 52 76 32 49 6d 61 67 65 52 75 6e 74 69 6d  CLRv2ImageRuntim
1af40 65 56 65 72 73 69 6f 6e 2c 20 43 4c 52 76 34 49  eVersion, CLRv4I
1af50 6d 61 67 65 52 75 6e 74 69 6d 65 56 65 72 73 69  mageRuntimeVersi
1af60 6f 6e 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  on),..          
1af70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1af80 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29    traceCategory)
1af90 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
1afa0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
1afb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c                el
1afc0 73 65 20 69 66 20 28 53 74 72 69 6e 67 2e 45 71  se if (String.Eq
1afd0 75 61 6c 73 28 0d 0a 20 20 20 20 20 20 20 20 20  uals(..         
1afe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1aff0 20 20 20 63 6f 72 65 49 6d 61 67 65 52 75 6e 74     coreImageRunt
1b000 69 6d 65 56 65 72 73 69 6f 6e 2c 20 43 4c 52 76  imeVersion, CLRv
1b010 34 49 6d 61 67 65 52 75 6e 74 69 6d 65 56 65 72  4ImageRuntimeVer
1b020 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20  sion,..         
1b030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b040 20 20 20 53 74 72 69 6e 67 43 6f 6d 70 61 72 69     StringCompari
1b050 73 6f 6e 2e 4f 72 64 69 6e 61 6c 29 29 0d 0a 20  son.Ordinal)).. 
1b060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b070 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
1b080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
1b090 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1b0a0 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54            // NOT
1b0b0 45 3a 20 46 6f 72 20 74 68 65 20 43 4c 52 20 76  E: For the CLR v
1b0c0 34 2e 30 20 72 75 6e 74 69 6d 65 2c 20 6d 61 6b  4.0 runtime, mak
1b0d0 65 20 73 75 72 65 20 77 65 20 64 69 73 61 62 6c  e sure we disabl
1b0e0 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..             
1b0f0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
1b100 20 20 20 20 61 6e 79 20 61 74 74 65 6d 70 74 20      any attempt 
1b110 74 6f 20 75 73 65 20 69 74 20 66 6f 72 20 74 68  to use it for th
1b120 69 6e 67 73 20 74 68 61 74 20 72 65 71 75 69 72  ings that requir
1b130 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..             
1b140 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
1b150 20 20 20 20 61 6e 20 61 73 73 65 6d 62 6c 79 20      an assembly 
1b160 63 6f 6d 70 69 6c 65 64 20 66 6f 72 20 74 68 65  compiled for the
1b170 20 43 4c 52 20 76 32 2e 30 2e 0d 0a 20 20 20 20   CLR v2.0...    
1b180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b190 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
1b1a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b1b0 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f  configuration.no
1b1c0 4e 65 74 46 78 32 30 20 3d 20 74 72 75 65 3b 0d  NetFx20 = true;.
1b1d0 0a 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 63 6f 6e 66 69 67 75           configu
1b1f0 72 61 74 69 6f 6e 2e 6e 6f 56 73 32 30 30 35 20  ration.noVs2005 
1b200 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20  = true;..       
1b210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b220 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e   configuration.n
1b230 6f 56 73 32 30 30 38 20 3d 20 74 72 75 65 3b 0d  oVs2008 = true;.
1b240 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
1b250 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
1b260 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63  Ops.DebugAndTrac
1b270 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e  e(TracePriority.
1b280 4d 65 64 69 75 6d 2c 0d 0a 20 20 20 20 20 20 20  Medium,..       
1b290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b2a0 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61       debugCallba
1b2b0 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63  ck, traceCallbac
1b2c0 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  k, String.Format
1b2d0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
1b2e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
1b2f0 41 73 73 65 6d 62 6c 79 20 69 73 20 63 6f 6d 70  Assembly is comp
1b300 69 6c 65 64 20 66 6f 72 20 74 68 65 20 2e 4e 45  iled for the .NE
1b310 54 20 46 72 61 6d 65 77 6f 72 6b 20 7b 30 7d 2c  T Framework {0},
1b320 20 22 20 2b 0d 0a 20 20 20 20 20 20 20 20 20 20   " +..          
1b330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b340 20 20 22 73 75 70 70 6f 72 74 20 66 6f 72 20 2e    "support for .
1b350 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b 20 7b 31  NET Framework {1
1b360 7d 20 69 73 20 6e 6f 77 20 64 69 73 61 62 6c 65  } is now disable
1b370 64 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  d.",..          
1b380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b390 20 20 46 6f 72 44 69 73 70 6c 61 79 28 43 4c 52    ForDisplay(CLR
1b3a0 76 34 49 6d 61 67 65 52 75 6e 74 69 6d 65 56 65  v4ImageRuntimeVe
1b3b0 72 73 69 6f 6e 29 2c 0d 0a 20 20 20 20 20 20 20  rsion),..       
1b3c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b3d0 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28       ForDisplay(
1b3e0 43 4c 52 76 32 49 6d 61 67 65 52 75 6e 74 69 6d  CLRv2ImageRuntim
1b3f0 65 56 65 72 73 69 6f 6e 29 29 2c 0d 0a 20 20 20  eVersion)),..   
1b400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b410 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
1b420 74 65 67 6f 72 79 29 3b 0d 0a 20 20 20 20 20 20  tegory);..      
1b430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
1b440 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1b450 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20       else..     
1b460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
1b470 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1b480 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20            error 
1b490 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  = String.Format(
1b4a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1b4b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 75                "u
1b4c0 6e 73 75 70 70 6f 72 74 65 64 20 63 6f 72 65 20  nsupported core 
1b4d0 66 69 6c 65 20 69 6d 61 67 65 20 72 75 6e 74 69  file image runti
1b4e0 6d 65 20 76 65 72 73 69 6f 6e 20 22 20 2b 0d 0a  me version " +..
1b4f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b500 20 20 20 20 20 20 20 20 20 20 20 20 22 7b 30 7d              "{0}
1b510 2c 20 6d 75 73 74 20 62 65 20 7b 31 7d 20 6f 72  , must be {1} or
1b520 20 7b 32 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20   {2}",..        
1b530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b540 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 63      ForDisplay(c
1b550 6f 72 65 49 6d 61 67 65 52 75 6e 74 69 6d 65 56  oreImageRuntimeV
1b560 65 72 73 69 6f 6e 29 2c 0d 0a 20 20 20 20 20 20  ersion),..      
1b570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b580 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79        ForDisplay
1b590 28 43 4c 52 76 32 49 6d 61 67 65 52 75 6e 74 69  (CLRv2ImageRunti
1b5a0 6d 65 56 65 72 73 69 6f 6e 29 2c 0d 0a 20 20 20  meVersion),..   
1b5b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b5c0 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70           ForDisp
1b5d0 6c 61 79 28 43 4c 52 76 34 49 6d 61 67 65 52 75  lay(CLRv4ImageRu
1b5e0 6e 74 69 6d 65 56 65 72 73 69 6f 6e 29 29 3b 0d  ntimeVersion));.
1b5f0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
1b600 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
1b610 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  n false;..      
1b620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
1b630 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
1b640 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72         return tr
1b650 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
1b660 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
1b670 20 20 20 20 20 20 20 20 63 61 74 63 68 20 28 45          catch (E
1b680 78 63 65 70 74 69 6f 6e 20 65 29 0d 0a 20 20 20  xception e)..   
1b690 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
1b6a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b6b0 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62      TraceOps.Deb
1b6c0 75 67 41 6e 64 54 72 61 63 65 28 54 72 61 63 65  ugAndTrace(Trace
1b6d0 50 72 69 6f 72 69 74 79 2e 48 69 67 68 65 73 74  Priority.Highest
1b6e0 2c 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 64 65 62 75 67             debug
1b700 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43  Callback, traceC
1b710 61 6c 6c 62 61 63 6b 2c 20 65 2c 20 74 72 61 63  allback, e, trac
1b720 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
1b730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b740 20 20 20 65 72 72 6f 72 20 3d 20 22 46 61 69 6c     error = "Fail
1b750 65 64 20 74 6f 20 63 68 65 63 6b 20 69 6d 61 67  ed to check imag
1b760 65 20 72 75 6e 74 69 6d 65 20 76 65 72 73 69 6f  e runtime versio
1b770 6e 2e 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  n.";..          
1b780 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
1b790 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
1b7a0 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  n false;..      
1b7b0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
1b7c0 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d       #endregion.
1b7d0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
1b7e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b7f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b800 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b810 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b820 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
1b830 20 20 23 72 65 67 69 6f 6e 20 50 75 62 6c 69 63    #region Public
1b840 20 4d 65 74 68 6f 64 73 0d 0a 20 20 20 20 20 20   Methods..      
1b850 20 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f        public boo
1b860 6c 20 48 61 73 46 6c 61 67 73 28 0d 0a 20 20 20  l HasFlags(..   
1b870 20 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 73               Ins
1b880 74 61 6c 6c 46 6c 61 67 73 20 68 61 73 46 6c 61  tallFlags hasFla
1b890 67 73 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  gs,..           
1b8a0 20 20 20 20 20 62 6f 6f 6c 20 61 6c 6c 0d 0a 20       bool all.. 
1b8b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29                 )
1b8c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
1b8d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1b8e0 20 69 66 20 28 61 6c 6c 29 0d 0a 20 20 20 20 20   if (all)..     
1b8f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
1b900 65 74 75 72 6e 20 28 28 69 6e 73 74 61 6c 6c 46  eturn ((installF
1b910 6c 61 67 73 20 26 20 68 61 73 46 6c 61 67 73 29  lags & hasFlags)
1b920 20 3d 3d 20 68 61 73 46 6c 61 67 73 29 3b 0d 0a   == hasFlags);..
1b930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b940 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20  else..          
1b950 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
1b960 20 28 28 69 6e 73 74 61 6c 6c 46 6c 61 67 73 20   ((installFlags 
1b970 26 20 68 61 73 46 6c 61 67 73 29 20 21 3d 20 49  & hasFlags) != I
1b980 6e 73 74 61 6c 6c 46 6c 61 67 73 2e 4e 6f 6e 65  nstallFlags.None
1b990 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
1b9a0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
1b9b0 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
1b9c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b9d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b9e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b9f0 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
1ba00 20 20 20 20 70 75 62 6c 69 63 20 76 6f 69 64 20      public void 
1ba10 44 75 6d 70 28 0d 0a 20 20 20 20 20 20 20 20 20  Dump(..         
1ba20 20 20 20 20 20 20 20 54 72 61 63 65 43 61 6c 6c         TraceCall
1ba30 62 61 63 6b 20 74 72 61 63 65 43 61 6c 6c 62 61  back traceCallba
1ba40 63 6b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ck..            
1ba50 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20      )..         
1ba60 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
1ba70 20 20 20 20 20 20 69 66 20 28 74 72 61 63 65 43        if (traceC
1ba80 61 6c 6c 62 61 63 6b 20 21 3d 20 6e 75 6c 6c 29  allback != null)
1ba90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1baa0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
1bab0 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
1bac0 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f  llback(String.Fo
1bad0 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75  rmat(NameAndValu
1bae0 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20  eFormat,..      
1baf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bb00 20 20 22 41 73 73 65 6d 62 6c 79 22 2c 20 46 6f    "Assembly", Fo
1bb10 72 44 69 73 70 6c 61 79 28 61 73 73 65 6d 62 6c  rDisplay(assembl
1bb20 79 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  y)),..          
1bb30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
1bb40 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  aceCategory);...
1bb50 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1bb60 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61       traceCallba
1bb70 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  ck(String.Format
1bb80 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72  (NameAndValueFor
1bb90 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  mat,..          
1bba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 4c                "L
1bbb0 6f 67 46 69 6c 65 4e 61 6d 65 22 2c 20 46 6f 72  ogFileName", For
1bbc0 44 69 73 70 6c 61 79 28 6c 6f 67 46 69 6c 65 4e  Display(logFileN
1bbd0 61 6d 65 29 29 2c 0d 0a 20 20 20 20 20 20 20 20  ame)),..        
1bbe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bbf0 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
1bc00 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
1bc10 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c         traceCall
1bc20 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d  back(String.Form
1bc30 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46  at(NameAndValueF
1bc40 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20  ormat,..        
1bc50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bc60 22 44 69 72 65 63 74 6f 72 79 22 2c 20 46 6f 72  "Directory", For
1bc70 44 69 73 70 6c 61 79 28 64 69 72 65 63 74 6f 72  Display(director
1bc80 79 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  y)),..          
1bc90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
1bca0 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  aceCategory);...
1bcb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1bcc0 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61       traceCallba
1bcd0 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  ck(String.Format
1bce0 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72  (NameAndValueFor
1bcf0 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  mat,..          
1bd00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 43                "C
1bd10 6f 72 65 46 69 6c 65 4e 61 6d 65 22 2c 20 46 6f  oreFileName", Fo
1bd20 72 44 69 73 70 6c 61 79 28 63 6f 72 65 46 69 6c  rDisplay(coreFil
1bd30 65 4e 61 6d 65 29 29 2c 0d 0a 20 20 20 20 20 20  eName)),..      
1bd40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bd50 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29    traceCategory)
1bd60 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
1bd70 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
1bd80 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f  llback(String.Fo
1bd90 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75  rmat(NameAndValu
1bda0 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20  eFormat,..      
1bdb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bdc0 20 20 22 4c 69 6e 71 46 69 6c 65 4e 61 6d 65 22    "LinqFileName"
1bdd0 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 6c 69 6e  , ForDisplay(lin
1bde0 71 46 69 6c 65 4e 61 6d 65 29 29 2c 0d 0a 20 20  qFileName)),..  
1bdf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1be00 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67        traceCateg
1be10 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
1be20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
1be30 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e  ceCallback(Strin
1be40 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64  g.Format(NameAnd
1be50 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20  ValueFormat,..  
1be60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1be70 20 20 20 20 20 20 22 44 65 73 69 67 6e 65 72 46        "DesignerF
1be80 69 6c 65 4e 61 6d 65 22 2c 20 46 6f 72 44 69 73  ileName", ForDis
1be90 70 6c 61 79 28 64 65 73 69 67 6e 65 72 46 69 6c  play(designerFil
1bea0 65 4e 61 6d 65 29 29 2c 0d 0a 20 20 20 20 20 20  eName)),..      
1beb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bec0 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29    traceCategory)
1bed0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
1bee0 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
1bef0 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f  llback(String.Fo
1bf00 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75  rmat(NameAndValu
1bf10 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20  eFormat,..      
1bf20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bf30 20 20 22 52 65 67 69 73 74 72 79 56 65 72 73 69    "RegistryVersi
1bf40 6f 6e 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28  on", ForDisplay(
1bf50 72 65 67 69 73 74 72 79 56 65 72 73 69 6f 6e 29  registryVersion)
1bf60 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
1bf70 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
1bf80 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
1bf90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bfa0 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b     traceCallback
1bfb0 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e  (String.Format(N
1bfc0 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61  ameAndValueForma
1bfd0 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t,..            
1bfe0 20 20 20 20 20 20 20 20 20 20 20 20 22 43 6f 6e              "Con
1bff0 66 69 67 56 65 72 73 69 6f 6e 22 2c 20 46 6f 72  figVersion", For
1c000 44 69 73 70 6c 61 79 28 63 6f 6e 66 69 67 56 65  Display(configVe
1c010 72 73 69 6f 6e 29 29 2c 0d 0a 20 20 20 20 20 20  rsion)),..      
1c020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c030 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29    traceCategory)
1c040 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
1c050 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
1c060 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f  llback(String.Fo
1c070 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75  rmat(NameAndValu
1c080 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20  eFormat,..      
1c090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c0a0 20 20 22 44 65 62 75 67 46 6f 72 6d 61 74 22 2c    "DebugFormat",
1c0b0 20 46 6f 72 44 69 73 70 6c 61 79 28 64 65 62 75   ForDisplay(debu
1c0c0 67 46 6f 72 6d 61 74 29 29 2c 0d 0a 20 20 20 20  gFormat)),..    
1c0d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c0e0 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72      traceCategor
1c0f0 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
1c100 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
1c110 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e  Callback(String.
1c120 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61  Format(NameAndVa
1c130 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20  lueFormat,..    
1c140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c150 20 20 20 20 22 54 72 61 63 65 46 6f 72 6d 61 74      "TraceFormat
1c160 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 74 72  ", ForDisplay(tr
1c170 61 63 65 46 6f 72 6d 61 74 29 29 2c 0d 0a 20 20  aceFormat)),..  
1c180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c190 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67        traceCateg
1c1a0 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
1c1b0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
1c1c0 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e  ceCallback(Strin
1c1d0 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64  g.Format(NameAnd
1c1e0 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20  ValueFormat,..  
1c1f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c200 20 20 20 20 20 20 22 49 6e 73 74 61 6c 6c 46 6c        "InstallFl
1c210 61 67 73 22 2c 20 46 6f 72 44 69 73 70 6c 61 79  ags", ForDisplay
1c220 28 69 6e 73 74 61 6c 6c 46 6c 61 67 73 29 29 2c  (installFlags)),
1c230 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1c240 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
1c250 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20  ategory);....   
1c260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c270 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53   traceCallback(S
1c280 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d  tring.Format(Nam
1c290 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c  eAndValueFormat,
1c2a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1c2b0 20 20 20 20 20 20 20 20 20 20 22 44 65 62 75 67            "Debug
1c2c0 50 72 69 6f 72 69 74 79 22 2c 20 46 6f 72 44 69  Priority", ForDi
1c2d0 73 70 6c 61 79 28 64 65 62 75 67 50 72 69 6f 72  splay(debugPrior
1c2e0 69 74 79 29 29 2c 0d 0a 20 20 20 20 20 20 20 20  ity)),..        
1c2f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c300 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
1c310 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
1c320 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c         traceCall
1c330 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d  back(String.Form
1c340 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46  at(NameAndValueF
1c350 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20  ormat,..        
1c360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c370 22 54 72 61 63 65 50 72 69 6f 72 69 74 79 22 2c  "TracePriority",
1c380 20 46 6f 72 44 69 73 70 6c 61 79 28 74 72 61 63   ForDisplay(trac
1c390 65 50 72 69 6f 72 69 74 79 29 29 2c 0d 0a 20 20  ePriority)),..  
1c3a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c3b0 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67        traceCateg
1c3c0 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
1c3d0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
1c3e0 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e  ceCallback(Strin
1c3f0 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64  g.Format(NameAnd
1c400 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20  ValueFormat,..  
1c410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c420 20 20 20 20 20 20 22 49 6e 73 74 61 6c 6c 22 2c        "Install",
1c430 20 46 6f 72 44 69 73 70 6c 61 79 28 69 6e 73 74   ForDisplay(inst
1c440 61 6c 6c 29 29 2c 0d 0a 20 20 20 20 20 20 20 20  all)),..        
1c450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c460 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
1c470 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
1c480 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c         traceCall
1c490 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d  back(String.Form
1c4a0 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46  at(NameAndValueF
1c4b0 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20  ormat,..        
1c4c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c4d0 22 57 6f 77 36 34 22 2c 20 46 6f 72 44 69 73 70  "Wow64", ForDisp
1c4e0 6c 61 79 28 77 6f 77 36 34 29 29 2c 0d 0a 20 20  lay(wow64)),..  
1c4f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c500 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67        traceCateg
1c510 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
1c520 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
1c530 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e  ceCallback(Strin
1c540 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64  g.Format(NameAnd
1c550 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20  ValueFormat,..  
1c560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c570 20 20 20 20 20 20 22 4e 6f 52 75 6e 74 69 6d 65        "NoRuntime
1c580 56 65 72 73 69 6f 6e 22 2c 20 46 6f 72 44 69 73  Version", ForDis
1c590 70 6c 61 79 28 6e 6f 52 75 6e 74 69 6d 65 56 65  play(noRuntimeVe
1c5a0 72 73 69 6f 6e 29 29 2c 0d 0a 20 20 20 20 20 20  rsion)),..      
1c5b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c5c0 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29    traceCategory)
1c5d0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
1c5e0 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
1c5f0 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f  llback(String.Fo
1c600 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75  rmat(NameAndValu
1c610 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20  eFormat,..      
1c620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c630 20 20 22 4e 6f 44 65 73 6b 74 6f 70 22 2c 20 46    "NoDesktop", F
1c640 6f 72 44 69 73 70 6c 61 79 28 6e 6f 44 65 73 6b  orDisplay(noDesk
1c650 74 6f 70 29 29 2c 0d 0a 20 20 20 20 20 20 20 20  top)),..        
1c660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c670 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
1c680 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
1c690 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c         traceCall
1c6a0 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d  back(String.Form
1c6b0 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46  at(NameAndValueF
1c6c0 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20  ormat,..        
1c6d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c6e0 22 4e 6f 43 6f 6d 70 61 63 74 22 2c 20 46 6f 72  "NoCompact", For
1c6f0 44 69 73 70 6c 61 79 28 6e 6f 43 6f 6d 70 61 63  Display(noCompac
1c700 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  t)),..          
1c710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
1c720 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  aceCategory);...
1c730 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1c740 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61       traceCallba
1c750 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  ck(String.Format
1c760 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72  (NameAndValueFor
1c770 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  mat,..          
1c780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 4e                "N
1c790 6f 4e 65 74 46 78 32 30 22 2c 20 46 6f 72 44 69  oNetFx20", ForDi
1c7a0 73 70 6c 61 79 28 6e 6f 4e 65 74 46 78 32 30 29  splay(noNetFx20)
1c7b0 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
1c7c0 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
1c7d0 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
1c7e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c7f0 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b     traceCallback
1c800 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e  (String.Format(N
1c810 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61  ameAndValueForma
1c820 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t,..            
1c830 20 20 20 20 20 20 20 20 20 20 20 20 22 4e 6f 4e              "NoN
1c840 65 74 46 78 34 30 22 2c 20 46 6f 72 44 69 73 70  etFx40", ForDisp
1c850 6c 61 79 28 6e 6f 4e 65 74 46 78 34 30 29 29 2c  lay(noNetFx40)),
1c860 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1c870 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
1c880 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20  ategory);....   
1c890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c8a0 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53   traceCallback(S
1c8b0 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d  tring.Format(Nam
1c8c0 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c  eAndValueFormat,
1c8d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1c8e0 20 20 20 20 20 20 20 20 20 20 22 4e 6f 4e 65 74            "NoNet
1c8f0 46 78 34 35 22 2c 20 46 6f 72 44 69 73 70 6c 61  Fx45", ForDispla
1c900 79 28 6e 6f 4e 65 74 46 78 34 35 29 29 2c 0d 0a  y(noNetFx45)),..
1c910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c920 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74          traceCat
1c930 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  egory);....     
1c940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
1c950 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72  raceCallback(Str
1c960 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41  ing.Format(NameA
1c970 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a  ndValueFormat,..
1c980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c990 20 20 20 20 20 20 20 20 22 4e 6f 56 73 32 30 30          "NoVs200
1c9a0 35 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 6e  5", ForDisplay(n
1c9b0 6f 56 73 32 30 30 35 29 29 2c 0d 0a 20 20 20 20  oVs2005)),..    
1c9c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c9d0 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72      traceCategor
1c9e0 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
1c9f0 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
1ca00 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e  Callback(String.
1ca10 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61  Format(NameAndVa
1ca20 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20  lueFormat,..    
1ca30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ca40 20 20 20 20 22 4e 6f 56 73 32 30 30 38 22 2c 20      "NoVs2008", 
1ca50 46 6f 72 44 69 73 70 6c 61 79 28 6e 6f 56 73 32  ForDisplay(noVs2
1ca60 30 30 38 29 29 2c 0d 0a 20 20 20 20 20 20 20 20  008)),..        
1ca70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ca80 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
1ca90 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
1caa0 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c         traceCall
1cab0 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d  back(String.Form
1cac0 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46  at(NameAndValueF
1cad0 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20  ormat,..        
1cae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1caf0 22 4e 6f 56 73 32 30 31 30 22 2c 20 46 6f 72 44  "NoVs2010", ForD
1cb00 69 73 70 6c 61 79 28 6e 6f 56 73 32 30 31 30 29  isplay(noVs2010)
1cb10 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
1cb20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
1cb30 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
1cb40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cb50 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b     traceCallback
1cb60 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e  (String.Format(N
1cb70 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61  ameAndValueForma
1cb80 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t,..            
1cb90 20 20 20 20 20 20 20 20 20 20 20 20 22 4e 6f 56              "NoV
1cba0 73 32 30 31 32 22 2c 20 46 6f 72 44 69 73 70 6c  s2012", ForDispl
1cbb0 61 79 28 6e 6f 56 73 32 30 31 32 29 29 2c 0d 0a  ay(noVs2012)),..
1cbc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cbd0 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74          traceCat
1cbe0 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  egory);....     
1cbf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
1cc00 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72  raceCallback(Str
1cc10 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41  ing.Format(NameA
1cc20 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a  ndValueFormat,..
1cc30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cc40 20 20 20 20 20 20 20 20 22 4e 6f 54 72 61 63 65          "NoTrace
1cc50 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 6e 6f  ", ForDisplay(no
1cc60 54 72 61 63 65 29 29 2c 0d 0a 20 20 20 20 20 20  Trace)),..      
1cc70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cc80 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29    traceCategory)
1cc90 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
1cca0 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
1ccb0 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f  llback(String.Fo
1ccc0 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75  rmat(NameAndValu
1ccd0 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20  eFormat,..      
1cce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ccf0 20 20 22 4e 6f 43 6f 6e 73 6f 6c 65 22 2c 20 46    "NoConsole", F
1cd00 6f 72 44 69 73 70 6c 61 79 28 6e 6f 43 6f 6e 73  orDisplay(noCons
1cd10 6f 6c 65 29 29 2c 0d 0a 20 20 20 20 20 20 20 20  ole)),..        
1cd20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cd30 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
1cd40 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
1cd50 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c         traceCall
1cd60 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d  back(String.Form
1cd70 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46  at(NameAndValueF
1cd80 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20  ormat,..        
1cd90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cda0 22 4e 6f 4c 6f 67 22 2c 20 46 6f 72 44 69 73 70  "NoLog", ForDisp
1cdb0 6c 61 79 28 6e 6f 4c 6f 67 29 29 2c 0d 0a 20 20  lay(noLog)),..  
1cdc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cdd0 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67        traceCateg
1cde0 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
1cdf0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
1ce00 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e  ceCallback(Strin
1ce10 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64  g.Format(NameAnd
1ce20 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20  ValueFormat,..  
1ce30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ce40 20 20 20 20 20 20 22 54 68 72 6f 77 4f 6e 4d 69        "ThrowOnMi
1ce50 73 73 69 6e 67 22 2c 20 46 6f 72 44 69 73 70 6c  ssing", ForDispl
1ce60 61 79 28 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e  ay(throwOnMissin
1ce70 67 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  g)),..          
1ce80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
1ce90 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  aceCategory);...
1cea0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1ceb0 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61       traceCallba
1cec0 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  ck(String.Format
1ced0 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72  (NameAndValueFor
1cee0 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  mat,..          
1cef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 57                "W
1cf00 68 61 74 49 66 22 2c 20 46 6f 72 44 69 73 70 6c  hatIf", ForDispl
1cf10 61 79 28 77 68 61 74 49 66 29 29 2c 0d 0a 20 20  ay(whatIf)),..  
1cf20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cf30 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67        traceCateg
1cf40 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
1cf50 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
1cf60 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e  ceCallback(Strin
1cf70 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64  g.Format(NameAnd
1cf80 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20  ValueFormat,..  
1cf90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cfa0 20 20 20 20 20 20 22 44 65 62 75 67 22 2c 20 46        "Debug", F
1cfb0 6f 72 44 69 73 70 6c 61 79 28 64 65 62 75 67 29  orDisplay(debug)
1cfc0 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
1cfd0 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
1cfe0 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
1cff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d000 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b     traceCallback
1d010 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e  (String.Format(N
1d020 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61  ameAndValueForma
1d030 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t,..            
1d040 20 20 20 20 20 20 20 20 20 20 20 20 22 56 65 72              "Ver
1d050 62 6f 73 65 22 2c 20 46 6f 72 44 69 73 70 6c 61  bose", ForDispla
1d060 79 28 76 65 72 62 6f 73 65 29 29 2c 0d 0a 20 20  y(verbose)),..  
1d070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d080 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67        traceCateg
1d090 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
1d0a0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
1d0b0 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e  ceCallback(Strin
1d0c0 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64  g.Format(NameAnd
1d0d0 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20  ValueFormat,..  
1d0e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d0f0 20 20 20 20 20 20 22 43 6f 6e 66 69 72 6d 22 2c        "Confirm",
1d100 20 46 6f 72 44 69 73 70 6c 61 79 28 63 6f 6e 66   ForDisplay(conf
1d110 69 72 6d 29 29 2c 0d 0a 20 20 20 20 20 20 20 20  irm)),..        
1d120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d130 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
1d140 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
1d150 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
1d160 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d170 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d180 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d190 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
1d1a0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 61 73            if (as
1d1b0 73 65 6d 62 6c 79 20 21 3d 20 6e 75 6c 6c 29 0d  sembly != null).
1d1c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1d1d0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
1d1e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d1f0 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74  traceCallback(St
1d200 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65  ring.Format(Name
1d210 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d  AndValueFormat,.
1d220 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1d230 20 20 20 20 20 20 20 20 20 20 20 20 20 22 41 73               "As
1d240 73 65 6d 62 6c 79 54 69 74 6c 65 22 2c 0d 0a 20  semblyTitle",.. 
1d250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d260 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69             ForDi
1d270 73 70 6c 61 79 28 47 65 74 41 73 73 65 6d 62 6c  splay(GetAssembl
1d280 79 54 69 74 6c 65 28 61 73 73 65 6d 62 6c 79 29  yTitle(assembly)
1d290 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  )),..           
1d2a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d2b0 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
1d2c0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1d2d0 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
1d2e0 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67  eCallback(String
1d2f0 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56  .Format(NameAndV
1d300 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20  alueFormat,..   
1d310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d320 20 20 20 20 20 20 20 20 20 22 41 73 73 65 6d 62           "Assemb
1d330 6c 79 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 22  lyConfiguration"
1d340 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
1d350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46                 F
1d360 6f 72 44 69 73 70 6c 61 79 28 47 65 74 41 73 73  orDisplay(GetAss
1d370 65 6d 62 6c 79 43 6f 6e 66 69 67 75 72 61 74 69  emblyConfigurati
1d380 6f 6e 28 61 73 73 65 6d 62 6c 79 29 29 29 2c 0d  on(assembly))),.
1d390 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1d3a0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
1d3b0 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 20 20  ceCategory);..  
1d3c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d3d0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
1d3e0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
1d3f0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
1d400 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
1d410 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
1d420 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d430 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d440 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d450 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d460 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1d470 23 72 65 67 69 6f 6e 20 50 75 62 6c 69 63 20 50  #region Public P
1d480 72 6f 70 65 72 74 69 65 73 0d 0a 20 20 20 20 20  roperties..     
1d490 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 41         private A
1d4a0 73 73 65 6d 62 6c 79 20 61 73 73 65 6d 62 6c 79  ssembly assembly
1d4b0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ;..            p
1d4c0 75 62 6c 69 63 20 41 73 73 65 6d 62 6c 79 20 41  ublic Assembly A
1d4d0 73 73 65 6d 62 6c 79 0d 0a 20 20 20 20 20 20 20  ssembly..       
1d4e0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
1d4f0 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65          get { re
1d500 74 75 72 6e 20 61 73 73 65 6d 62 6c 79 3b 20 7d  turn assembly; }
1d510 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1d520 20 20 73 65 74 20 7b 20 61 73 73 65 6d 62 6c 79    set { assembly
1d530 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20   = value; }..   
1d540 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
1d550 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
1d560 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d570 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d580 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d590 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
1d5a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69  .            pri
1d5b0 76 61 74 65 20 73 74 72 69 6e 67 20 6c 6f 67 46  vate string logF
1d5c0 69 6c 65 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20  ileName;..      
1d5d0 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 72        public str
1d5e0 69 6e 67 20 4c 6f 67 46 69 6c 65 4e 61 6d 65 0d  ing LogFileName.
1d5f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
1d600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d610 67 65 74 20 7b 20 72 65 74 75 72 6e 20 6c 6f 67  get { return log
1d620 46 69 6c 65 4e 61 6d 65 3b 20 7d 0d 0a 20 20 20  FileName; }..   
1d630 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74               set
1d640 20 7b 20 6c 6f 67 46 69 6c 65 4e 61 6d 65 20 3d   { logFileName =
1d650 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20   value; }..     
1d660 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
1d670 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
1d680 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d690 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d6a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d6b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
1d6c0 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
1d6d0 74 65 20 73 74 72 69 6e 67 20 64 69 72 65 63 74  te string direct
1d6e0 6f 72 79 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ory;..          
1d6f0 20 20 70 75 62 6c 69 63 20 73 74 72 69 6e 67 20    public string 
1d700 44 69 72 65 63 74 6f 72 79 0d 0a 20 20 20 20 20  Directory..     
1d710 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
1d720 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20            get { 
1d730 72 65 74 75 72 6e 20 64 69 72 65 63 74 6f 72 79  return directory
1d740 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
1d750 20 20 20 20 20 73 65 74 20 7b 20 64 69 72 65 63       set { direc
1d760 74 6f 72 79 20 3d 20 76 61 6c 75 65 3b 20 7d 0d  tory = value; }.
1d770 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
1d780 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
1d790 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d7a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d7b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d7c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d7d0 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
1d7e0 20 70 72 69 76 61 74 65 20 73 74 72 69 6e 67 20   private string 
1d7f0 63 6f 72 65 46 69 6c 65 4e 61 6d 65 3b 0d 0a 20  coreFileName;.. 
1d800 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
1d810 63 20 73 74 72 69 6e 67 20 43 6f 72 65 46 69 6c  c string CoreFil
1d820 65 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 20  eName..         
1d830 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
1d840 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75        get { retu
1d850 72 6e 20 63 6f 72 65 46 69 6c 65 4e 61 6d 65 3b  rn coreFileName;
1d860 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
1d870 20 20 20 20 73 65 74 20 7b 20 63 6f 72 65 46 69      set { coreFi
1d880 6c 65 4e 61 6d 65 20 3d 20 76 61 6c 75 65 3b 20  leName = value; 
1d890 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
1d8a0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1d8b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d8c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d8d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d8e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d8f0 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
1d900 20 20 20 70 72 69 76 61 74 65 20 73 74 72 69 6e     private strin
1d910 67 20 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 3b 0d  g linqFileName;.
1d920 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
1d930 6c 69 63 20 73 74 72 69 6e 67 20 4c 69 6e 71 46  lic string LinqF
1d940 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20  ileName..       
1d950 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
1d960 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65          get { re
1d970 74 75 72 6e 20 6c 69 6e 71 46 69 6c 65 4e 61 6d  turn linqFileNam
1d980 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  e; }..          
1d990 20 20 20 20 20 20 73 65 74 20 7b 20 6c 69 6e 71        set { linq
1d9a0 46 69 6c 65 4e 61 6d 65 20 3d 20 76 61 6c 75 65  FileName = value
1d9b0 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
1d9c0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
1d9d0 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
1d9e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d9f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1da00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1da10 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
1da20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 72       private str
1da30 69 6e 67 20 64 65 73 69 67 6e 65 72 46 69 6c 65  ing designerFile
1da40 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  Name;..         
1da50 20 20 20 70 75 62 6c 69 63 20 73 74 72 69 6e 67     public string
1da60 20 44 65 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d   DesignerFileNam
1da70 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  e..            {
1da80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1da90 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 64    get { return d
1daa0 65 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 3b  esignerFileName;
1dab0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
1dac0 20 20 20 20 73 65 74 20 7b 20 64 65 73 69 67 6e      set { design
1dad0 65 72 46 69 6c 65 4e 61 6d 65 20 3d 20 76 61 6c  erFileName = val
1dae0 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  ue; }..         
1daf0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
1db00 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
1db10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1db20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1db30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1db40 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
1db50 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
1db60 74 72 69 6e 67 20 72 65 67 69 73 74 72 79 56 65  tring registryVe
1db70 72 73 69 6f 6e 3b 0d 0a 20 20 20 20 20 20 20 20  rsion;..        
1db80 20 20 20 20 70 75 62 6c 69 63 20 73 74 72 69 6e      public strin
1db90 67 20 52 65 67 69 73 74 72 79 56 65 72 73 69 6f  g RegistryVersio
1dba0 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  n..            {
1dbb0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1dbc0 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 72    get { return r
1dbd0 65 67 69 73 74 72 79 56 65 72 73 69 6f 6e 3b 20  egistryVersion; 
1dbe0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
1dbf0 20 20 20 73 65 74 20 7b 20 72 65 67 69 73 74 72     set { registr
1dc00 79 56 65 72 73 69 6f 6e 20 3d 20 76 61 6c 75 65  yVersion = value
1dc10 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
1dc20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
1dc30 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
1dc40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1dc50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1dc60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1dc70 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
1dc80 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 72       private str
1dc90 69 6e 67 20 63 6f 6e 66 69 67 56 65 72 73 69 6f  ing configVersio
1dca0 6e 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n;..            
1dcb0 70 75 62 6c 69 63 20 73 74 72 69 6e 67 20 43 6f  public string Co
1dcc0 6e 66 69 67 56 65 72 73 69 6f 6e 0d 0a 20 20 20  nfigVersion..   
1dcd0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
1dce0 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20              get 
1dcf0 7b 20 72 65 74 75 72 6e 20 63 6f 6e 66 69 67 56  { return configV
1dd00 65 72 73 69 6f 6e 3b 20 7d 0d 0a 20 20 20 20 20  ersion; }..     
1dd10 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b             set {
1dd20 20 63 6f 6e 66 69 67 56 65 72 73 69 6f 6e 20 3d   configVersion =
1dd30 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20   value; }..     
1dd40 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
1dd50 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
1dd60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1dd70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1dd80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1dd90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
1dda0 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
1ddb0 74 65 20 73 74 72 69 6e 67 20 64 65 62 75 67 46  te string debugF
1ddc0 6f 72 6d 61 74 3b 0d 0a 20 20 20 20 20 20 20 20  ormat;..        
1ddd0 20 20 20 20 70 75 62 6c 69 63 20 73 74 72 69 6e      public strin
1dde0 67 20 44 65 62 75 67 46 6f 72 6d 61 74 0d 0a 20  g DebugFormat.. 
1ddf0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
1de00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65                ge
1de10 74 20 7b 20 72 65 74 75 72 6e 20 64 65 62 75 67  t { return debug
1de20 46 6f 72 6d 61 74 3b 20 7d 0d 0a 20 20 20 20 20  Format; }..     
1de30 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b             set {
1de40 20 64 65 62 75 67 46 6f 72 6d 61 74 20 3d 20 76   debugFormat = v
1de50 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20  alue; }..       
1de60 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
1de70 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
1de80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1de90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1dea0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1deb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
1dec0 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65           private
1ded0 20 73 74 72 69 6e 67 20 74 72 61 63 65 46 6f 72   string traceFor
1dee0 6d 61 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  mat;..          
1def0 20 20 70 75 62 6c 69 63 20 73 74 72 69 6e 67 20    public string 
1df00 54 72 61 63 65 46 6f 72 6d 61 74 0d 0a 20 20 20  TraceFormat..   
1df10 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
1df20 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20              get 
1df30 7b 20 72 65 74 75 72 6e 20 74 72 61 63 65 46 6f  { return traceFo
1df40 72 6d 61 74 3b 20 7d 0d 0a 20 20 20 20 20 20 20  rmat; }..       
1df50 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 74           set { t
1df60 72 61 63 65 46 6f 72 6d 61 74 20 3d 20 76 61 6c  raceFormat = val
1df70 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  ue; }..         
1df80 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
1df90 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
1dfa0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1dfb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1dfc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1dfd0 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
1dfe0 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 49         private I
1dff0 6e 73 74 61 6c 6c 46 6c 61 67 73 20 69 6e 73 74  nstallFlags inst
1e000 61 6c 6c 46 6c 61 67 73 3b 0d 0a 20 20 20 20 20  allFlags;..     
1e010 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 49 6e         public In
1e020 73 74 61 6c 6c 46 6c 61 67 73 20 49 6e 73 74 61  stallFlags Insta
1e030 6c 6c 46 6c 61 67 73 0d 0a 20 20 20 20 20 20 20  llFlags..       
1e040 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
1e050 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65          get { re
1e060 74 75 72 6e 20 69 6e 73 74 61 6c 6c 46 6c 61 67  turn installFlag
1e070 73 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  s; }..          
1e080 20 20 20 20 20 20 73 65 74 20 7b 20 69 6e 73 74        set { inst
1e090 61 6c 6c 46 6c 61 67 73 20 3d 20 76 61 6c 75 65  allFlags = value
1e0a0 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
1e0b0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
1e0c0 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
1e0d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e0e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e0f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e100 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
1e110 20 20 20 20 20 70 72 69 76 61 74 65 20 54 72 61       private Tra
1e120 63 65 50 72 69 6f 72 69 74 79 20 64 65 62 75 67  cePriority debug
1e130 50 72 69 6f 72 69 74 79 3b 0d 0a 20 20 20 20 20  Priority;..     
1e140 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 54 72         public Tr
1e150 61 63 65 50 72 69 6f 72 69 74 79 20 44 65 62 75  acePriority Debu
1e160 67 50 72 69 6f 72 69 74 79 0d 0a 20 20 20 20 20  gPriority..     
1e170 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
1e180 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20            get { 
1e190 72 65 74 75 72 6e 20 64 65 62 75 67 50 72 69 6f  return debugPrio
1e1a0 72 69 74 79 3b 20 7d 0d 0a 20 20 20 20 20 20 20  rity; }..       
1e1b0 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 64           set { d
1e1c0 65 62 75 67 50 72 69 6f 72 69 74 79 20 3d 20 76  ebugPriority = v
1e1d0 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20  alue; }..       
1e1e0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
1e1f0 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
1e200 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e210 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e220 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e230 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
1e240 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65           private
1e250 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 20 74   TracePriority t
1e260 72 61 63 65 50 72 69 6f 72 69 74 79 3b 0d 0a 20  racePriority;.. 
1e270 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
1e280 63 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 20  c TracePriority 
1e290 54 72 61 63 65 50 72 69 6f 72 69 74 79 0d 0a 20  TracePriority.. 
1e2a0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
1e2b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65                ge
1e2c0 74 20 7b 20 72 65 74 75 72 6e 20 74 72 61 63 65  t { return trace
1e2d0 50 72 69 6f 72 69 74 79 3b 20 7d 0d 0a 20 20 20  Priority; }..   
1e2e0 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74               set
1e2f0 20 7b 20 74 72 61 63 65 50 72 69 6f 72 69 74 79   { tracePriority
1e300 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20   = value; }..   
1e310 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
1e320 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
1e330 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e340 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e350 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e360 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
1e370 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69  .            pri
1e380 76 61 74 65 20 62 6f 6f 6c 20 69 6e 73 74 61 6c  vate bool instal
1e390 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l;..            
1e3a0 70 75 62 6c 69 63 20 62 6f 6f 6c 20 49 6e 73 74  public bool Inst
1e3b0 61 6c 6c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  all..           
1e3c0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
1e3d0 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e      get { return
1e3e0 20 69 6e 73 74 61 6c 6c 3b 20 7d 0d 0a 20 20 20   install; }..   
1e3f0 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74               set
1e400 20 7b 20 69 6e 73 74 61 6c 6c 20 3d 20 76 61 6c   { install = val
1e410 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  ue; }..         
1e420 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
1e430 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
1e440 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e450 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e460 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e470 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
1e480 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 62         private b
1e490 6f 6f 6c 20 77 6f 77 36 34 3b 0d 0a 20 20 20 20  ool wow64;..    
1e4a0 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 62          public b
1e4b0 6f 6f 6c 20 57 6f 77 36 34 0d 0a 20 20 20 20 20  ool Wow64..     
1e4c0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
1e4d0 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20            get { 
1e4e0 72 65 74 75 72 6e 20 77 6f 77 36 34 3b 20 7d 0d  return wow64; }.
1e4f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1e500 20 73 65 74 20 7b 20 77 6f 77 36 34 20 3d 20 76   set { wow64 = v
1e510 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20  alue; }..       
1e520 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
1e530 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
1e540 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e550 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e560 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e570 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
1e580 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65           private
1e590 20 62 6f 6f 6c 20 6e 6f 52 75 6e 74 69 6d 65 56   bool noRuntimeV
1e5a0 65 72 73 69 6f 6e 3b 0d 0a 20 20 20 20 20 20 20  ersion;..       
1e5b0 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c       public bool
1e5c0 20 4e 6f 52 75 6e 74 69 6d 65 56 65 72 73 69 6f   NoRuntimeVersio
1e5d0 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  n..            {
1e5e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1e5f0 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 6e    get { return n
1e600 6f 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 3b  oRuntimeVersion;
1e610 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
1e620 20 20 20 20 73 65 74 20 7b 20 6e 6f 52 75 6e 74      set { noRunt
1e630 69 6d 65 56 65 72 73 69 6f 6e 20 3d 20 76 61 6c  imeVersion = val
1e640 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  ue; }..         
1e650 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
1e660 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
1e670 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e680 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e690 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e6a0 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
1e6b0 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 62         private b
1e6c0 6f 6f 6c 20 6e 6f 44 65 73 6b 74 6f 70 3b 0d 0a  ool noDesktop;..
1e6d0 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
1e6e0 69 63 20 62 6f 6f 6c 20 4e 6f 44 65 73 6b 74 6f  ic bool NoDeskto
1e6f0 70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  p..            {
1e700 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1e710 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 6e    get { return n
1e720 6f 44 65 73 6b 74 6f 70 3b 20 7d 0d 0a 20 20 20  oDesktop; }..   
1e730 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74               set
1e740 20 7b 20 6e 6f 44 65 73 6b 74 6f 70 20 3d 20 76   { noDesktop = v
1e750 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20  alue; }..       
1e760 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
1e770 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
1e780 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e790 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e7a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e7b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
1e7c0 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65           private
1e7d0 20 62 6f 6f 6c 20 6e 6f 43 6f 6d 70 61 63 74 3b   bool noCompact;
1e7e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
1e7f0 62 6c 69 63 20 62 6f 6f 6c 20 4e 6f 43 6f 6d 70  blic bool NoComp
1e800 61 63 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20  act..           
1e810 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
1e820 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e      get { return
1e830 20 6e 6f 43 6f 6d 70 61 63 74 3b 20 7d 0d 0a 20   noCompact; }.. 
1e840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
1e850 65 74 20 7b 20 6e 6f 43 6f 6d 70 61 63 74 20 3d  et { noCompact =
1e860 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20   value; }..     
1e870 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
1e880 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
1e890 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e8a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e8b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e8c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
1e8d0 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
1e8e0 74 65 20 62 6f 6f 6c 20 6e 6f 4e 65 74 46 78 32  te bool noNetFx2
1e8f0 30 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  0;..            
1e900 70 75 62 6c 69 63 20 62 6f 6f 6c 20 4e 6f 4e 65  public bool NoNe
1e910 74 46 78 32 30 0d 0a 20 20 20 20 20 20 20 20 20  tFx20..         
1e920 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
1e930 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75        get { retu
1e940 72 6e 20 6e 6f 4e 65 74 46 78 32 30 3b 20 7d 0d  rn noNetFx20; }.
1e950 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1e960 20 73 65 74 20 7b 20 6e 6f 4e 65 74 46 78 32 30   set { noNetFx20
1e970 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20   = value; }..   
1e980 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
1e990 20 20 20 20 20 20 20 20 20 20 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 2f 2f  ////////////////
1e9d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
1e9e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69  .            pri
1e9f0 76 61 74 65 20 62 6f 6f 6c 20 6e 6f 4e 65 74 46  vate bool noNetF
1ea00 78 34 30 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  x40;..          
1ea10 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 4e 6f    public bool No
1ea20 4e 65 74 46 78 34 30 0d 0a 20 20 20 20 20 20 20  NetFx40..       
1ea30 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
1ea40 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65          get { re
1ea50 74 75 72 6e 20 6e 6f 4e 65 74 46 78 34 30 3b 20  turn noNetFx40; 
1ea60 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
1ea70 20 20 20 73 65 74 20 7b 20 6e 6f 4e 65 74 46 78     set { noNetFx
1ea80 34 30 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20  40 = value; }.. 
1ea90 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
1eaa0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
1eab0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1eac0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ead0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1eae0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
1eaf0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
1eb00 72 69 76 61 74 65 20 62 6f 6f 6c 20 6e 6f 4e 65  rivate bool noNe
1eb10 74 46 78 34 35 3b 0d 0a 20 20 20 20 20 20 20 20  tFx45;..        
1eb20 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20      public bool 
1eb30 4e 6f 4e 65 74 46 78 34 35 0d 0a 20 20 20 20 20  NoNetFx45..     
1eb40 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
1eb50 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20            get { 
1eb60 72 65 74 75 72 6e 20 6e 6f 4e 65 74 46 78 34 35  return noNetFx45
1eb70 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
1eb80 20 20 20 20 20 73 65 74 20 7b 20 6e 6f 4e 65 74       set { noNet
1eb90 46 78 34 35 20 3d 20 76 61 6c 75 65 3b 20 7d 0d  Fx45 = value; }.
1eba0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
1ebb0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
1ebc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ebd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ebe0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ebf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ec00 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
1ec10 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 6e 6f   private bool no
1ec20 56 73 32 30 30 35 3b 0d 0a 20 20 20 20 20 20 20  Vs2005;..       
1ec30 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c       public bool
1ec40 20 4e 6f 56 73 32 30 30 35 0d 0a 20 20 20 20 20   NoVs2005..     
1ec50 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
1ec60 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20            get { 
1ec70 72 65 74 75 72 6e 20 6e 6f 56 73 32 30 30 35 3b  return noVs2005;
1ec80 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
1ec90 20 20 20 20 73 65 74 20 7b 20 6e 6f 56 73 32 30      set { noVs20
1eca0 30 35 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20  05 = value; }.. 
1ecb0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
1ecc0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
1ecd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ece0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ecf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ed00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
1ed10 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
1ed20 72 69 76 61 74 65 20 62 6f 6f 6c 20 6e 6f 56 73  rivate bool noVs
1ed30 32 30 30 38 3b 0d 0a 20 20 20 20 20 20 20 20 20  2008;..         
1ed40 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 4e     public bool N
1ed50 6f 56 73 32 30 30 38 0d 0a 20 20 20 20 20 20 20  oVs2008..       
1ed60 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
1ed70 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65          get { re
1ed80 74 75 72 6e 20 6e 6f 56 73 32 30 30 38 3b 20 7d  turn noVs2008; }
1ed90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1eda0 20 20 73 65 74 20 7b 20 6e 6f 56 73 32 30 30 38    set { noVs2008
1edb0 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20   = value; }..   
1edc0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
1edd0 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
1ede0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1edf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ee00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ee10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
1ee20 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69  .            pri
1ee30 76 61 74 65 20 62 6f 6f 6c 20 6e 6f 56 73 32 30  vate bool noVs20
1ee40 31 30 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  10;..           
1ee50 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 4e 6f 56   public bool NoV
1ee60 73 32 30 31 30 0d 0a 20 20 20 20 20 20 20 20 20  s2010..         
1ee70 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
1ee80 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75        get { retu
1ee90 72 6e 20 6e 6f 56 73 32 30 31 30 3b 20 7d 0d 0a  rn noVs2010; }..
1eea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1eeb0 73 65 74 20 7b 20 6e 6f 56 73 32 30 31 30 20 3d  set { noVs2010 =
1eec0 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20   value; }..     
1eed0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
1eee0 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
1eef0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ef00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ef10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ef20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
1ef30 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
1ef40 74 65 20 62 6f 6f 6c 20 6e 6f 56 73 32 30 31 32  te bool noVs2012
1ef50 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ;..            p
1ef60 75 62 6c 69 63 20 62 6f 6f 6c 20 4e 6f 56 73 32  ublic bool NoVs2
1ef70 30 31 32 0d 0a 20 20 20 20 20 20 20 20 20 20 20  012..           
1ef80 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
1ef90 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e      get { return
1efa0 20 6e 6f 56 73 32 30 31 32 3b 20 7d 0d 0a 20 20   noVs2012; }..  
1efb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65                se
1efc0 74 20 7b 20 6e 6f 56 73 32 30 31 32 20 3d 20 76  t { noVs2012 = v
1efd0 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20  alue; }..       
1efe0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
1eff0 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
1f000 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f010 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f020 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f030 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
1f040 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65           private
1f050 20 62 6f 6f 6c 20 6e 6f 54 72 61 63 65 3b 0d 0a   bool noTrace;..
1f060 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
1f070 69 63 20 62 6f 6f 6c 20 4e 6f 54 72 61 63 65 0d  ic bool NoTrace.
1f080 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
1f090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f0a0 67 65 74 20 7b 20 72 65 74 75 72 6e 20 6e 6f 54  get { return noT
1f0b0 72 61 63 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20  race; }..       
1f0c0 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 6e           set { n
1f0d0 6f 54 72 61 63 65 20 3d 20 76 61 6c 75 65 3b 20  oTrace = value; 
1f0e0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
1f0f0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1f100 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f110 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f120 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f130 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f140 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
1f150 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20     private bool 
1f160 6e 6f 43 6f 6e 73 6f 6c 65 3b 0d 0a 20 20 20 20  noConsole;..    
1f170 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 62          public b
1f180 6f 6f 6c 20 4e 6f 43 6f 6e 73 6f 6c 65 0d 0a 20  ool NoConsole.. 
1f190 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
1f1a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65                ge
1f1b0 74 20 7b 20 72 65 74 75 72 6e 20 6e 6f 43 6f 6e  t { return noCon
1f1c0 73 6f 6c 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20  sole; }..       
1f1d0 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 6e           set { n
1f1e0 6f 43 6f 6e 73 6f 6c 65 20 3d 20 76 61 6c 75 65  oConsole = value
1f1f0 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
1f200 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
1f210 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
1f220 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f230 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f240 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f250 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
1f260 20 20 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f       private boo
1f270 6c 20 6e 6f 4c 6f 67 3b 0d 0a 20 20 20 20 20 20  l noLog;..      
1f280 20 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f        public boo
1f290 6c 20 4e 6f 4c 6f 67 0d 0a 20 20 20 20 20 20 20  l NoLog..       
1f2a0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
1f2b0 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65          get { re
1f2c0 74 75 72 6e 20 6e 6f 4c 6f 67 3b 20 7d 0d 0a 20  turn noLog; }.. 
1f2d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
1f2e0 65 74 20 7b 20 6e 6f 4c 6f 67 20 3d 20 76 61 6c  et { noLog = val
1f2f0 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  ue; }..         
1f300 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
1f310 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
1f320 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f330 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f340 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f350 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
1f360 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 62         private b
1f370 6f 6f 6c 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69  ool throwOnMissi
1f380 6e 67 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ng;..           
1f390 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 54 68 72   public bool Thr
1f3a0 6f 77 4f 6e 4d 69 73 73 69 6e 67 0d 0a 20 20 20  owOnMissing..   
1f3b0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
1f3c0 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20              get 
1f3d0 7b 20 72 65 74 75 72 6e 20 74 68 72 6f 77 4f 6e  { return throwOn
1f3e0 4d 69 73 73 69 6e 67 3b 20 7d 0d 0a 20 20 20 20  Missing; }..    
1f3f0 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20              set 
1f400 7b 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67  { throwOnMissing
1f410 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20   = value; }..   
1f420 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
1f430 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
1f440 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f450 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f460 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f470 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
1f480 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69  .            pri
1f490 76 61 74 65 20 62 6f 6f 6c 20 77 68 61 74 49 66  vate bool whatIf
1f4a0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ;..            p
1f4b0 75 62 6c 69 63 20 62 6f 6f 6c 20 57 68 61 74 49  ublic bool WhatI
1f4c0 66 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  f..            {
1f4d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1f4e0 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 77    get { return w
1f4f0 68 61 74 49 66 3b 20 7d 0d 0a 20 20 20 20 20 20  hatIf; }..      
1f500 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20            set { 
1f510 77 68 61 74 49 66 20 3d 20 76 61 6c 75 65 3b 20  whatIf = value; 
1f520 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
1f530 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1f540 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f550 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f560 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f570 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f580 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
1f590 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20     private bool 
1f5a0 64 65 62 75 67 3b 0d 0a 20 20 20 20 20 20 20 20  debug;..        
1f5b0 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20      public bool 
1f5c0 44 65 62 75 67 0d 0a 20 20 20 20 20 20 20 20 20  Debug..         
1f5d0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
1f5e0 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75        get { retu
1f5f0 72 6e 20 64 65 62 75 67 3b 20 7d 0d 0a 20 20 20  rn debug; }..   
1f600 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74               set
1f610 20 7b 20 64 65 62 75 67 20 3d 20 76 61 6c 75 65   { debug = value
1f620 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
1f630 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
1f640 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
1f650 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f660 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f670 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f680 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
1f690 20 20 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f       private boo
1f6a0 6c 20 76 65 72 62 6f 73 65 3b 0d 0a 20 20 20 20  l verbose;..    
1f6b0 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 62          public b
1f6c0 6f 6f 6c 20 56 65 72 62 6f 73 65 0d 0a 20 20 20  ool Verbose..   
1f6d0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
1f6e0 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20              get 
1f6f0 7b 20 72 65 74 75 72 6e 20 76 65 72 62 6f 73 65  { return verbose
1f700 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
1f710 20 20 20 20 20 73 65 74 20 7b 20 76 65 72 62 6f       set { verbo
1f720 73 65 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20  se = value; }.. 
1f730 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
1f740 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
1f750 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f760 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f770 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f780 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
1f790 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
1f7a0 72 69 76 61 74 65 20 62 6f 6f 6c 20 63 6f 6e 66  rivate bool conf
1f7b0 69 72 6d 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  irm;..          
1f7c0 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 43 6f    public bool Co
1f7d0 6e 66 69 72 6d 0d 0a 20 20 20 20 20 20 20 20 20  nfirm..         
1f7e0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
1f7f0 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75        get { retu
1f800 72 6e 20 63 6f 6e 66 69 72 6d 3b 20 7d 0d 0a 20  rn confirm; }.. 
1f810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
1f820 65 74 20 7b 20 63 6f 6e 66 69 72 6d 20 3d 20 76  et { confirm = v
1f830 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20  alue; }..       
1f840 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
1f850 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
1f860 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
1f870 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
1f880 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
1f890 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f8a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f8b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f8c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f8d0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67  ....        #reg
1f8e0 69 6f 6e 20 46 72 61 6d 65 77 6f 72 6b 4c 69 73  ion FrameworkLis
1f8f0 74 20 43 6c 61 73 73 0d 0a 20 20 20 20 20 20 20  t Class..       
1f900 20 70 72 69 76 61 74 65 20 73 65 61 6c 65 64 20   private sealed 
1f910 63 6c 61 73 73 20 46 72 61 6d 65 77 6f 72 6b 4c  class FrameworkL
1f920 69 73 74 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  ist..        {..
1f930 20 20 20 20 20 20 20 20 20 20 20 20 23 72 65 67              #reg
1f940 69 6f 6e 20 50 75 62 6c 69 63 20 43 6f 6e 73 74  ion Public Const
1f950 72 75 63 74 6f 72 73 0d 0a 20 20 20 20 20 20 20  ructors..       
1f960 20 20 20 20 20 70 75 62 6c 69 63 20 46 72 61 6d       public Fram
1f970 65 77 6f 72 6b 4c 69 73 74 28 29 0d 0a 20 20 20  eworkList()..   
1f980 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
1f990 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64              // d
1f9a0 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20  o nothing...    
1f9b0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
1f9c0 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f         #endregio
1f9d0 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n....           
1f9e0 20 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 2f 2f 2f 2f  ////////////////
1fa10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fa20 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
1fa30 20 20 20 20 23 72 65 67 69 6f 6e 20 50 75 62 6c      #region Publ
1fa40 69 63 20 4d 65 74 68 6f 64 73 0d 0a 20 20 20 20  ic Methods..    
1fa50 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
1fa60 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20  MockRegistryKey 
1fa70 72 6f 6f 74 4b 65 79 3b 0d 0a 20 20 20 20 20 20  rootKey;..      
1fa80 20 20 20 20 20 20 70 75 62 6c 69 63 20 4d 6f 63        public Moc
1fa90 6b 52 65 67 69 73 74 72 79 4b 65 79 20 52 6f 6f  kRegistryKey Roo
1faa0 74 4b 65 79 0d 0a 20 20 20 20 20 20 20 20 20 20  tKey..          
1fab0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
1fac0 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72       get { retur
1fad0 6e 20 72 6f 6f 74 4b 65 79 3b 20 7d 0d 0a 20 20  n rootKey; }..  
1fae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65                se
1faf0 74 20 7b 20 72 6f 6f 74 4b 65 79 20 3d 20 76 61  t { rootKey = va
1fb00 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  lue; }..        
1fb10 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
1fb20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
1fb30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fb40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fb50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fb60 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
1fb70 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
1fb80 53 74 72 69 6e 67 4c 69 73 74 20 6e 61 6d 65 73  StringList names
1fb90 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ;..            p
1fba0 75 62 6c 69 63 20 53 74 72 69 6e 67 4c 69 73 74  ublic StringList
1fbb0 20 4e 61 6d 65 73 0d 0a 20 20 20 20 20 20 20 20   Names..        
1fbc0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
1fbd0 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74         get { ret
1fbe0 75 72 6e 20 6e 61 6d 65 73 3b 20 7d 0d 0a 20 20  urn names; }..  
1fbf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65                se
1fc00 74 20 7b 20 6e 61 6d 65 73 20 3d 20 76 61 6c 75  t { names = valu
1fc10 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  e; }..          
1fc20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
1fc30 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
1fc40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fc50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fc60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fc70 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
1fc80 20 20 20 20 20 20 70 72 69 76 61 74 65 20 56 65        private Ve
1fc90 72 73 69 6f 6e 4d 61 70 20 76 65 72 73 69 6f 6e  rsionMap version
1fca0 73 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  s;..            
1fcb0 70 75 62 6c 69 63 20 56 65 72 73 69 6f 6e 4d 61  public VersionMa
1fcc0 70 20 56 65 72 73 69 6f 6e 73 0d 0a 20 20 20 20  p Versions..    
1fcd0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
1fce0 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b             get {
1fcf0 20 72 65 74 75 72 6e 20 76 65 72 73 69 6f 6e 73   return versions
1fd00 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
1fd10 20 20 20 20 20 73 65 74 20 7b 20 76 65 72 73 69       set { versi
1fd20 6f 6e 73 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a  ons = value; }..
1fd30 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
1fd40 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
1fd50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fd60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fd70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fd80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fd90 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1fda0 70 72 69 76 61 74 65 20 53 74 72 69 6e 67 4c 69  private StringLi
1fdb0 73 74 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 73  st platformNames
1fdc0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ;..            p
1fdd0 75 62 6c 69 63 20 53 74 72 69 6e 67 4c 69 73 74  ublic StringList
1fde0 20 50 6c 61 74 66 6f 72 6d 4e 61 6d 65 73 0d 0a   PlatformNames..
1fdf0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
1fe00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67                 g
1fe10 65 74 20 7b 20 72 65 74 75 72 6e 20 70 6c 61 74  et { return plat
1fe20 66 6f 72 6d 4e 61 6d 65 73 3b 20 7d 0d 0a 20 20  formNames; }..  
1fe30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65                se
1fe40 74 20 7b 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65  t { platformName
1fe50 73 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20  s = value; }..  
1fe60 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
1fe70 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67           #endreg
1fe80 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  ion..        }..
1fe90 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
1fea0 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  on....        //
1feb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fec0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fed0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fee0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fef0 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
1ff00 20 23 72 65 67 69 6f 6e 20 56 73 4c 69 73 74 20   #region VsList 
1ff10 43 6c 61 73 73 0d 0a 20 20 20 20 20 20 20 20 70  Class..        p
1ff20 72 69 76 61 74 65 20 73 65 61 6c 65 64 20 63 6c  rivate sealed cl
1ff30 61 73 73 20 56 73 4c 69 73 74 0d 0a 20 20 20 20  ass VsList..    
1ff40 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
1ff50 20 20 20 23 72 65 67 69 6f 6e 20 50 75 62 6c 69     #region Publi
1ff60 63 20 43 6f 6e 73 74 72 75 63 74 6f 72 73 0d 0a  c Constructors..
1ff70 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
1ff80 69 63 20 56 73 4c 69 73 74 28 29 0d 0a 20 20 20  ic VsList()..   
1ff90 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
1ffa0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64              // d
1ffb0 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20  o nothing...    
1ffc0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
1ffd0 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f         #endregio
1ffe0 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n....           
1fff0 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
20000 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20010 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
20040 20 20 20 20 23 72 65 67 69 6f 6e 20 50 75 62 6c      #region Publ
20050 69 63 20 50 72 6f 70 65 72 74 69 65 73 0d 0a 20  ic Properties.. 
20060 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
20070 74 65 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b  te MockRegistryK
20080 65 79 20 72 6f 6f 74 4b 65 79 3b 0d 0a 20 20 20  ey rootKey;..   
20090 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
200a0 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20  MockRegistryKey 
200b0 52 6f 6f 74 4b 65 79 0d 0a 20 20 20 20 20 20 20  RootKey..       
200c0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
200d0 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65          get { re
200e0 74 75 72 6e 20 72 6f 6f 74 4b 65 79 3b 20 7d 0d  turn rootKey; }.
200f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
20100 20 73 65 74 20 7b 20 72 6f 6f 74 4b 65 79 20 3d   set { rootKey =
20110 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20   value; }..     
20120 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
20130 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20170 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
20180 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
20190 74 65 20 56 65 72 73 69 6f 6e 4c 69 73 74 20 76  te VersionList v
201a0 65 72 73 69 6f 6e 73 3b 0d 0a 20 20 20 20 20 20  ersions;..      
201b0 20 20 20 20 20 20 70 75 62 6c 69 63 20 56 65 72        public Ver
201c0 73 69 6f 6e 4c 69 73 74 20 56 65 72 73 69 6f 6e  sionList Version
201d0 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  s..            {
201e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
201f0 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 76    get { return v
20200 65 72 73 69 6f 6e 73 3b 20 7d 0d 0a 20 20 20 20  ersions; }..    
20210 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20              set 
20220 7b 20 76 65 72 73 69 6f 6e 73 20 3d 20 76 61 6c  { versions = val
20230 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  ue; }..         
20240 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
20250 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 20 20    #endregion..  
20260 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
20270 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 20 20 20   #endregion..   
20280 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d       #endregion.
20290 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
202a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
202b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
202c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
202d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
202e0 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72  //....        #r
202f0 65 67 69 6f 6e 20 50 72 69 76 61 74 65 20 43 6f  egion Private Co
20300 6e 73 74 61 6e 74 20 44 61 74 61 0d 0a 20 20 20  nstant Data..   
20310 20 20 20 20 20 70 72 69 76 61 74 65 20 63 6f 6e       private con
20320 73 74 20 73 74 72 69 6e 67 20 43 6f 72 65 46 69  st string CoreFi
20330 6c 65 4e 61 6d 65 20 3d 20 22 53 79 73 74 65 6d  leName = "System
20340 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c  .Data.SQLite.dll
20350 22 3b 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  ";..        priv
20360 61 74 65 20 63 6f 6e 73 74 20 73 74 72 69 6e 67  ate const string
20370 20 4c 69 6e 71 46 69 6c 65 4e 61 6d 65 20 3d 20   LinqFileName = 
20380 22 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c  "System.Data.SQL
20390 69 74 65 2e 4c 69 6e 71 2e 64 6c 6c 22 3b 0d 0a  ite.Linq.dll";..
203a0 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
203b0 63 6f 6e 73 74 20 73 74 72 69 6e 67 20 44 65 73  const string Des
203c0 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 20 3d 20  ignerFileName = 
203d0 22 53 51 4c 69 74 65 2e 44 65 73 69 67 6e 65 72  "SQLite.Designer
203e0 2e 64 6c 6c 22 3b 0d 0a 20 20 20 20 20 20 20 20  .dll";..        
203f0 70 72 69 76 61 74 65 20 63 6f 6e 73 74 20 73 74  private const st
20400 72 69 6e 67 20 50 72 6f 76 69 64 65 72 4e 61 6d  ring ProviderNam
20410 65 20 3d 20 22 53 51 4c 69 74 65 20 44 61 74 61  e = "SQLite Data
20420 20 50 72 6f 76 69 64 65 72 22 3b 0d 0a 20 20 20   Provider";..   
20430 20 20 20 20 20 70 72 69 76 61 74 65 20 63 6f 6e       private con
20440 73 74 20 73 74 72 69 6e 67 20 50 72 6f 6a 65 63  st string Projec
20450 74 4e 61 6d 65 20 3d 20 22 53 79 73 74 65 6d 2e  tName = "System.
20460 44 61 74 61 2e 53 51 4c 69 74 65 22 3b 0d 0a 20  Data.SQLite";.. 
20470 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 63         private c
20480 6f 6e 73 74 20 73 74 72 69 6e 67 20 4c 65 67 61  onst string Lega
20490 63 79 50 72 6f 6a 65 63 74 4e 61 6d 65 20 3d 20  cyProjectName = 
204a0 22 53 51 4c 69 74 65 22 3b 0d 0a 20 20 20 20 20  "SQLite";..     
204b0 20 20 20 70 72 69 76 61 74 65 20 63 6f 6e 73 74     private const
204c0 20 73 74 72 69 6e 67 20 49 6e 76 61 72 69 61 6e   string Invarian
204d0 74 4e 61 6d 65 20 3d 20 22 53 79 73 74 65 6d 2e  tName = "System.
204e0 44 61 74 61 2e 53 51 4c 69 74 65 22 3b 0d 0a 20  Data.SQLite";.. 
204f0 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 63         private c
20500 6f 6e 73 74 20 73 74 72 69 6e 67 20 46 61 63 74  onst string Fact
20510 6f 72 79 54 79 70 65 4e 61 6d 65 20 3d 20 22 53  oryTypeName = "S
20520 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74  ystem.Data.SQLit
20530 65 2e 53 51 4c 69 74 65 46 61 63 74 6f 72 79 22  e.SQLiteFactory"
20540 3b 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  ;..        priva
20550 74 65 20 63 6f 6e 73 74 20 73 74 72 69 6e 67 20  te const string 
20560 44 65 73 63 72 69 70 74 69 6f 6e 20 3d 20 22 2e  Description = ".
20570 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b 20 44 61  NET Framework Da
20580 74 61 20 50 72 6f 76 69 64 65 72 20 66 6f 72 20  ta Provider for 
20590 53 51 4c 69 74 65 22 3b 0d 0a 0d 0a 20 20 20 20  SQLite";....    
205a0 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
205b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
205c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
205d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
205e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
205f0 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 63         private c
20600 6f 6e 73 74 20 73 74 72 69 6e 67 20 43 4c 52 76  onst string CLRv
20610 32 49 6d 61 67 65 52 75 6e 74 69 6d 65 56 65 72  2ImageRuntimeVer
20620 73 69 6f 6e 20 3d 20 22 76 32 2e 30 2e 35 30 37  sion = "v2.0.507
20630 32 37 22 3b 0d 0a 20 20 20 20 20 20 20 20 70 72  27";..        pr
20640 69 76 61 74 65 20 63 6f 6e 73 74 20 73 74 72 69  ivate const stri
20650 6e 67 20 43 4c 52 76 34 49 6d 61 67 65 52 75 6e  ng CLRv4ImageRun
20660 74 69 6d 65 56 65 72 73 69 6f 6e 20 3d 20 22 76  timeVersion = "v
20670 34 2e 30 2e 33 30 33 31 39 22 3b 0d 0a 0d 0a 20  4.0.30319";.... 
20680 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
20690 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
206a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
206b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
206c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
206d0 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
206e0 65 20 63 6f 6e 73 74 20 73 74 72 69 6e 67 20 4e  e const string N
206f0 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61  ameAndValueForma
20700 74 20 3d 20 22 7b 30 7d 3a 20 7b 31 7d 22 3b 0d  t = "{0}: {1}";.
20710 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
20720 20 63 6f 6e 73 74 20 73 74 72 69 6e 67 20 4c 6f   const string Lo
20730 67 46 69 6c 65 53 75 66 66 69 78 20 3d 20 22 2e  gFileSuffix = ".
20740 6c 6f 67 22 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  log";....       
20750 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
20760 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20770 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20780 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20790 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
207a0 20 20 20 20 70 72 69 76 61 74 65 20 63 6f 6e 73      private cons
207b0 74 20 73 74 72 69 6e 67 20 52 6f 6f 74 4b 65 79  t string RootKey
207c0 4e 61 6d 65 20 3d 20 22 53 6f 66 74 77 61 72 65  Name = "Software
207d0 22 3b 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  ";..        priv
207e0 61 74 65 20 63 6f 6e 73 74 20 73 74 72 69 6e 67  ate const string
207f0 20 57 6f 77 36 34 53 75 62 4b 65 79 4e 61 6d 65   Wow64SubKeyName
20800 20 3d 20 22 57 6f 77 36 34 33 32 4e 6f 64 65 22   = "Wow6432Node"
20810 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ;....        ///
20820 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20830 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20840 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20850 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20860 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
20870 2f 2f 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 4e  //..        // N
20880 4f 54 45 3a 20 54 68 65 20 2e 4e 45 54 20 46 72  OTE: The .NET Fr
20890 61 6d 65 77 6f 72 6b 20 68 61 73 20 62 6f 74 68  amework has both
208a0 20 33 32 2d 62 69 74 20 61 6e 64 20 36 34 2d 62   32-bit and 64-b
208b0 69 74 20 65 64 69 74 69 6f 6e 73 2e 0d 0a 20 20  it editions...  
208c0 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
208d0 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63    private static
208e0 20 72 65 61 64 6f 6e 6c 79 20 62 6f 6f 6c 20 4e   readonly bool N
208f0 65 74 46 78 49 73 33 32 42 69 74 4f 6e 6c 79 20  etFxIs32BitOnly 
20900 3d 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20  = false;....    
20910 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
20920 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20930 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20940 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20950 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
20960 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
20970 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 46 6f 72 20     // NOTE: For 
20980 6e 6f 77 2c 20 56 69 73 75 61 6c 20 53 74 75 64  now, Visual Stud
20990 69 6f 20 69 73 20 61 6c 77 61 79 73 20 61 20 33  io is always a 3
209a0 32 2d 62 69 74 20 61 70 70 6c 69 63 61 74 69 6f  2-bit applicatio
209b0 6e 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 0d 0a  n...        //..
209c0 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
209d0 73 74 61 74 69 63 20 72 65 61 64 6f 6e 6c 79 20  static readonly 
209e0 62 6f 6f 6c 20 56 73 49 73 33 32 42 69 74 4f 6e  bool VsIs32BitOn
209f0 6c 79 20 3d 20 74 72 75 65 3b 0d 0a 0d 0a 20 20  ly = true;....  
20a00 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
20a10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20a20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20a30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20a40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
20a50 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
20a60 20 73 74 61 74 69 63 20 72 65 61 64 6f 6e 6c 79   static readonly
20a70 20 73 74 72 69 6e 67 20 56 73 49 64 46 6f 72 6d   string VsIdForm
20a80 61 74 20 3d 20 22 42 22 3b 0d 0a 0d 0a 20 20 20  at = "B";....   
20a90 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
20aa0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20ab0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20ac0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20ad0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
20ae0 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
20af0 73 74 61 74 69 63 20 72 65 61 64 6f 6e 6c 79 20  static readonly 
20b00 73 74 72 69 6e 67 20 58 50 61 74 68 46 6f 72 41  string XPathForA
20b10 64 64 45 6c 65 6d 65 6e 74 20 3d 0d 0a 20 20 20  ddElement =..   
20b20 20 20 20 20 20 20 20 20 20 22 63 6f 6e 66 69 67           "config
20b30 75 72 61 74 69 6f 6e 2f 73 79 73 74 65 6d 2e 64  uration/system.d
20b40 61 74 61 2f 44 62 50 72 6f 76 69 64 65 72 46 61  ata/DbProviderFa
20b50 63 74 6f 72 69 65 73 2f 61 64 64 5b 40 69 6e 76  ctories/add[@inv
20b60 61 72 69 61 6e 74 3d 5c 22 7b 30 7d 5c 22 5d 22  ariant=\"{0}\"]"
20b70 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69  ;....        pri
20b80 76 61 74 65 20 73 74 61 74 69 63 20 72 65 61 64  vate static read
20b90 6f 6e 6c 79 20 73 74 72 69 6e 67 20 58 50 61 74  only string XPat
20ba0 68 46 6f 72 52 65 6d 6f 76 65 45 6c 65 6d 65 6e  hForRemoveElemen
20bb0 74 20 3d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  t =..           
20bc0 20 22 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2f   "configuration/
20bd0 73 79 73 74 65 6d 2e 64 61 74 61 2f 44 62 50 72  system.data/DbPr
20be0 6f 76 69 64 65 72 46 61 63 74 6f 72 69 65 73 2f  oviderFactories/
20bf0 72 65 6d 6f 76 65 5b 40 69 6e 76 61 72 69 61 6e  remove[@invarian
20c00 74 3d 5c 22 7b 30 7d 5c 22 5d 22 3b 0d 0a 20 20  t=\"{0}\"]";..  
20c10 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
20c20 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
20c30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20c40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20c50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20c60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20c70 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23  ///....        #
20c80 72 65 67 69 6f 6e 20 50 72 69 76 61 74 65 20 53  region Private S
20c90 74 61 74 69 63 20 44 61 74 61 0d 0a 20 20 20 20  tatic Data..    
20ca0 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74      private stat
20cb0 69 63 20 41 73 73 65 6d 62 6c 79 20 74 68 69 73  ic Assembly this
20cc0 41 73 73 65 6d 62 6c 79 20 3d 20 41 73 73 65 6d  Assembly = Assem
20cd0 62 6c 79 2e 47 65 74 45 78 65 63 75 74 69 6e 67  bly.GetExecuting
20ce0 41 73 73 65 6d 62 6c 79 28 29 3b 0d 0a 0d 0a 20  Assembly();.... 
20cf0 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
20d00 74 61 74 69 63 20 73 74 72 69 6e 67 20 74 72 61  tatic string tra
20d10 63 65 43 61 74 65 67 6f 72 79 20 3d 20 50 61 74  ceCategory = Pat
20d20 68 2e 47 65 74 46 69 6c 65 4e 61 6d 65 28 0d 0a  h.GetFileName(..
20d30 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73              this
20d40 41 73 73 65 6d 62 6c 79 2e 4c 6f 63 61 74 69 6f  Assembly.Locatio
20d50 6e 29 3b 20 2f 2a 20 4e 4f 54 45 3a 20 53 61 6d  n); /* NOTE: Sam
20d60 65 20 66 6f 72 20 64 65 62 75 67 20 61 6e 64 20  e for debug and 
20d70 74 72 61 63 65 2e 20 2a 2f 0d 0a 0d 0a 20 20 20  trace. */....   
20d80 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61       private sta
20d90 74 69 63 20 54 72 61 63 65 43 61 6c 6c 62 61 63  tic TraceCallbac
20da0 6b 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 20  k debugCallback 
20db0 3d 20 41 70 70 44 65 62 75 67 3b 0d 0a 20 20 20  = AppDebug;..   
20dc0 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61       private sta
20dd0 74 69 63 20 54 72 61 63 65 43 61 6c 6c 62 61 63  tic TraceCallbac
20de0 6b 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 20  k traceCallback 
20df0 3d 20 41 70 70 54 72 61 63 65 3b 0d 0a 0d 0a 20  = AppTrace;.... 
20e00 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
20e10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20e20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20e30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20e40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
20e50 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
20e60 65 20 73 74 61 74 69 63 20 73 74 72 69 6e 67 20  e static string 
20e70 73 79 73 74 65 6d 44 69 72 65 63 74 6f 72 79 20  systemDirectory 
20e80 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a 23 69 66 20 57  = null;....#if W
20e90 49 4e 44 4f 57 53 0d 0a 20 20 20 20 20 20 20 20  INDOWS..        
20ea0 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 73  private static s
20eb0 74 72 69 6e 67 20 73 79 73 74 65 6d 44 69 72 65  tring systemDire
20ec0 63 74 6f 72 79 57 6f 77 36 34 20 3d 20 6e 75 6c  ctoryWow64 = nul
20ed0 6c 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20  l;..#endif....  
20ee0 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
20ef0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20f00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20f10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20f20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
20f30 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
20f40 20 73 74 61 74 69 63 20 69 6e 74 20 66 69 6c 65   static int file
20f50 73 43 72 65 61 74 65 64 20 3d 20 30 3b 0d 0a 20  sCreated = 0;.. 
20f60 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
20f70 74 61 74 69 63 20 69 6e 74 20 66 69 6c 65 73 4d  tatic int filesM
20f80 6f 64 69 66 69 65 64 20 3d 20 30 3b 0d 0a 20 20  odified = 0;..  
20f90 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74        private st
20fa0 61 74 69 63 20 69 6e 74 20 66 69 6c 65 73 44 65  atic int filesDe
20fb0 6c 65 74 65 64 20 3d 20 30 3b 0d 0a 20 20 20 20  leted = 0;..    
20fc0 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
20fd0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
20fe0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20ff0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21000 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21010 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21020 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65  /....        #re
21030 67 69 6f 6e 20 54 72 61 63 65 20 48 61 6e 64 6c  gion Trace Handl
21040 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 70 72 69  ing..        pri
21050 76 61 74 65 20 73 74 61 74 69 63 20 73 74 72 69  vate static stri
21060 6e 67 20 47 65 74 4c 6f 67 46 69 6c 65 4e 61 6d  ng GetLogFileNam
21070 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
21080 73 74 72 69 6e 67 20 74 79 70 65 4e 61 6d 65 0d  string typeName.
21090 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 20 2f  .            ) /
210a0 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a 20 20 20 20  * throw */..    
210b0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
210c0 20 20 20 73 74 72 69 6e 67 20 66 69 6c 65 4e 61     string fileNa
210d0 6d 65 20 3d 20 50 61 74 68 2e 47 65 74 54 65 6d  me = Path.GetTem
210e0 70 46 69 6c 65 4e 61 6d 65 28 29 3b 0d 0a 20 20  pFileName();..  
210f0 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
21100 20 64 69 72 65 63 74 6f 72 79 20 3d 20 50 61 74   directory = Pat
21110 68 2e 47 65 74 44 69 72 65 63 74 6f 72 79 4e 61  h.GetDirectoryNa
21120 6d 65 28 66 69 6c 65 4e 61 6d 65 29 3b 0d 0a 20  me(fileName);.. 
21130 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
21140 67 20 66 69 6c 65 4e 61 6d 65 4f 6e 6c 79 20 3d  g fileNameOnly =
21150 20 50 61 74 68 2e 47 65 74 46 69 6c 65 4e 61 6d   Path.GetFileNam
21160 65 57 69 74 68 6f 75 74 45 78 74 65 6e 73 69 6f  eWithoutExtensio
21170 6e 28 66 69 6c 65 4e 61 6d 65 29 3b 0d 0a 0d 0a  n(fileName);....
21180 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
21190 6e 67 20 6e 65 77 46 69 6c 65 4e 61 6d 65 20 3d  ng newFileName =
211a0 20 50 61 74 68 2e 43 6f 6d 62 69 6e 65 28 64 69   Path.Combine(di
211b0 72 65 63 74 6f 72 79 2c 20 53 74 72 69 6e 67 2e  rectory, String.
211c0 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
211d0 20 20 20 20 20 20 20 20 20 22 7b 30 7d 7b 31 7d           "{0}{1}
211e0 7b 32 7d 22 2c 20 74 72 61 63 65 43 61 74 65 67  {2}", traceCateg
211f0 6f 72 79 2c 20 21 53 74 72 69 6e 67 2e 49 73 4e  ory, !String.IsN
21200 75 6c 6c 4f 72 45 6d 70 74 79 28 74 79 70 65 4e  ullOrEmpty(typeN
21210 61 6d 65 29 20 3f 0d 0a 20 20 20 20 20 20 20 20  ame) ?..        
21220 20 20 20 20 20 20 20 20 20 20 20 20 22 2e 22 20              "." 
21230 2b 20 74 79 70 65 4e 61 6d 65 20 3a 20 53 74 72  + typeName : Str
21240 69 6e 67 2e 45 6d 70 74 79 2c 20 22 2e 22 20 2b  ing.Empty, "." +
21250 20 66 69 6c 65 4e 61 6d 65 4f 6e 6c 79 20 2b 0d   fileNameOnly +.
21260 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
21270 20 20 20 20 20 4c 6f 67 46 69 6c 65 53 75 66 66       LogFileSuff
21280 69 78 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ix));....       
21290 20 20 20 20 20 46 69 6c 65 2e 4d 6f 76 65 28 66       File.Move(f
212a0 69 6c 65 4e 61 6d 65 2c 20 6e 65 77 46 69 6c 65  ileName, newFile
212b0 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  Name);....      
212c0 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 65 77        return new
212d0 46 69 6c 65 4e 61 6d 65 3b 0d 0a 20 20 20 20 20  FileName;..     
212e0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
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 2f 2f  ////////////////
21330 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
21340 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69     private stati
21350 63 20 76 6f 69 64 20 41 70 70 44 65 62 75 67 28  c void AppDebug(
21360 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74  ..            st
21370 72 69 6e 67 20 6d 65 73 73 61 67 65 2c 0d 0a 20  ring message,.. 
21380 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
21390 67 20 63 61 74 65 67 6f 72 79 0d 0a 20 20 20 20  g category..    
213a0 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
213b0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
213c0 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67    TraceOps.Debug
213d0 43 6f 72 65 28 53 74 72 69 6e 67 2e 46 6f 72 6d  Core(String.Form
213e0 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
213f0 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65       TraceOps.De
21400 62 75 67 46 6f 72 6d 61 74 2c 20 54 72 61 63 65  bugFormat, Trace
21410 4f 70 73 2e 4e 65 78 74 44 65 62 75 67 49 64 28  Ops.NextDebugId(
21420 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
21430 20 20 20 20 54 72 61 63 65 4f 70 73 2e 54 69 6d      TraceOps.Tim
21440 65 53 74 61 6d 70 28 44 61 74 65 54 69 6d 65 2e  eStamp(DateTime.
21450 55 74 63 4e 6f 77 29 2c 20 6d 65 73 73 61 67 65  UtcNow), message
21460 29 2c 20 63 61 74 65 67 6f 72 79 29 3b 0d 0a 20  ), category);.. 
21470 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
21480 20 20 20 20 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 2f  ////////////////
214b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
214c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
214d0 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
214e0 74 61 74 69 63 20 76 6f 69 64 20 41 70 70 54 72  tatic void AppTr
214f0 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ace(..          
21500 20 20 73 74 72 69 6e 67 20 6d 65 73 73 61 67 65    string message
21510 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  ,..            s
21520 74 72 69 6e 67 20 63 61 74 65 67 6f 72 79 0d 0a  tring category..
21530 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
21540 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
21550 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 54        TraceOps.T
21560 72 61 63 65 43 6f 72 65 28 53 74 72 69 6e 67 2e  raceCore(String.
21570 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
21580 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70           TraceOp
21590 73 2e 54 72 61 63 65 46 6f 72 6d 61 74 2c 20 54  s.TraceFormat, T
215a0 72 61 63 65 4f 70 73 2e 4e 65 78 74 54 72 61 63  raceOps.NextTrac
215b0 65 49 64 28 29 2c 0d 0a 20 20 20 20 20 20 20 20  eId(),..        
215c0 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73          TraceOps
215d0 2e 54 69 6d 65 53 74 61 6d 70 28 44 61 74 65 54  .TimeStamp(DateT
215e0 69 6d 65 2e 55 74 63 4e 6f 77 29 2c 20 6d 65 73  ime.UtcNow), mes
215f0 73 61 67 65 29 2c 20 63 61 74 65 67 6f 72 79 29  sage), category)
21600 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  ;..        }..  
21610 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
21620 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
21630 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21640 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21650 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21660 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21670 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23  ///....        #
21680 72 65 67 69 6f 6e 20 47 65 6e 65 72 69 63 20 50  region Generic P
21690 6c 61 74 66 6f 72 6d 20 48 61 6e 64 6c 69 6e 67  latform Handling
216a0 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
216b0 65 20 73 74 61 74 69 63 20 62 6f 6f 6c 20 49 73  e static bool Is
216c0 36 34 42 69 74 50 72 6f 63 65 73 73 28 29 0d 0a  64BitProcess()..
216d0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
216e0 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
216f0 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20         // NOTE: 
21700 52 65 74 75 72 6e 73 20 74 72 75 65 20 69 66 20  Returns true if 
21710 74 68 65 20 63 75 72 72 65 6e 74 20 70 72 6f 63  the current proc
21720 65 73 73 20 69 73 20 36 34 2d 62 69 74 2e 20 20  ess is 64-bit.  
21730 49 66 20 74 68 69 73 0d 0a 20 20 20 20 20 20 20  If this..       
21740 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 69 73       //       is
21750 20 74 72 75 65 2c 20 77 65 20 2a 6b 6e 6f 77 2a   true, we *know*
21760 20 74 68 61 74 20 77 65 20 6d 75 73 74 20 62 65   that we must be
21770 20 72 75 6e 6e 69 6e 67 20 6f 6e 20 61 20 36 34   running on a 64
21780 2d 62 69 74 0d 0a 20 20 20 20 20 20 20 20 20 20  -bit..          
21790 20 20 2f 2f 20 20 20 20 20 20 20 6f 70 65 72 61    //       opera
217a0 74 69 6e 67 20 73 79 73 74 65 6d 20 61 73 20 77  ting system as w
217b0 65 6c 6c 2e 20 20 48 6f 77 65 76 65 72 2c 20 69  ell.  However, i
217c0 66 20 74 68 69 73 20 69 73 20 66 61 6c 73 65 2c  f this is false,
217d0 20 77 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20   we..           
217e0 20 2f 2f 20 20 20 20 20 20 20 64 6f 20 6e 6f 74   //       do not
217f0 20 6e 65 63 65 73 73 61 72 69 6c 79 20 6b 6e 6f   necessarily kno
21800 77 20 74 68 61 74 20 77 65 20 61 72 65 20 72 75  w that we are ru
21810 6e 6e 69 6e 67 20 6f 6e 20 61 20 33 32 2d 62 69  nning on a 32-bi
21820 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  t..            /
21830 2f 20 20 20 20 20 20 20 6f 70 65 72 61 74 69 6e  /       operatin
21840 67 20 73 79 73 74 65 6d 2c 20 64 75 65 20 74 6f  g system, due to
21850 20 57 6f 57 36 34 20 28 57 69 6e 33 32 2d 6f 6e   WoW64 (Win32-on
21860 2d 57 69 6e 36 34 29 2c 20 65 74 63 2e 0d 0a 20  -Win64), etc... 
21870 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
21880 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
21890 6e 20 28 49 6e 74 50 74 72 2e 53 69 7a 65 20 3d  n (IntPtr.Size =
218a0 3d 20 73 69 7a 65 6f 66 28 6c 6f 6e 67 29 29 3b  = sizeof(long));
218b0 20 2f 2f 20 4e 4f 54 45 3a 20 50 6f 69 6e 74 65   // NOTE: Pointe
218c0 72 20 69 73 20 36 34 2d 62 69 74 73 3f 0d 0a 20  r is 64-bits?.. 
218d0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
218e0 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
218f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21900 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21910 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21920 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
21930 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
21940 74 61 74 69 63 20 73 74 72 69 6e 67 20 47 65 74  tatic string Get
21950 52 6f 6f 74 4b 65 79 4e 61 6d 65 28 0d 0a 20 20  RootKeyName(..  
21960 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77            bool w
21970 6f 77 36 34 0d 0a 20 20 20 20 20 20 20 20 20 20  ow64..          
21980 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a    )..        {..
21990 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
219a0 72 6e 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  rn String.Format
219b0 28 22 7b 30 7d 7b 31 7d 22 2c 20 52 6f 6f 74 4b  ("{0}{1}", RootK
219c0 65 79 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20  eyName,..       
219d0 20 20 20 20 20 20 20 20 20 77 6f 77 36 34 20 26           wow64 &
219e0 26 20 49 73 36 34 42 69 74 50 72 6f 63 65 73 73  & Is64BitProcess
219f0 28 29 20 3f 0d 0a 20 20 20 20 20 20 20 20 20 20  () ?..          
21a00 20 20 20 20 20 20 20 20 20 20 22 5c 5c 22 20 2b            "\\" +
21a10 20 57 6f 77 36 34 53 75 62 4b 65 79 4e 61 6d 65   Wow64SubKeyName
21a20 20 3a 20 53 74 72 69 6e 67 2e 45 6d 70 74 79 29   : String.Empty)
21a30 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  ;..        }....
21a40 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
21a50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21a60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21a70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21a80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
21a90 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  ...        priva
21aa0 74 65 20 73 74 61 74 69 63 20 73 74 72 69 6e 67  te static string
21ab0 20 47 65 74 53 79 73 74 65 6d 44 69 72 65 63 74   GetSystemDirect
21ac0 6f 72 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ory(..          
21ad0 20 20 62 6f 6f 6c 20 77 6f 77 36 34 0d 0a 20 20    bool wow64..  
21ae0 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
21af0 20 20 20 20 20 7b 0d 0a 23 69 66 20 57 49 4e 44       {..#if WIND
21b00 4f 57 53 0d 0a 20 20 20 20 20 20 20 20 20 20 20  OWS..           
21b10 20 69 66 20 28 77 6f 77 36 34 29 0d 0a 20 20 20   if (wow64)..   
21b20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
21b30 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
21b40 73 79 73 74 65 6d 44 69 72 65 63 74 6f 72 79 57  systemDirectoryW
21b50 6f 77 36 34 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  ow64 == null).. 
21b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
21b70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
21b80 20 20 20 20 20 20 73 79 73 74 65 6d 44 69 72 65        systemDire
21b90 63 74 6f 72 79 57 6f 77 36 34 20 3d 0d 0a 20 20  ctoryWow64 =..  
21ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21bb0 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69        UnsafeNati
21bc0 76 65 4d 65 74 68 6f 64 73 2e 47 65 74 53 79 73  veMethods.GetSys
21bd0 74 65 6d 44 69 72 65 63 74 6f 72 79 28 29 3b 0d  temDirectory();.
21be0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
21bf0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
21c00 20 20 20 20 20 20 72 65 74 75 72 6e 20 73 79 73        return sys
21c10 74 65 6d 44 69 72 65 63 74 6f 72 79 57 6f 77 36  temDirectoryWow6
21c20 34 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  4;..            
21c30 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 65  }..            e
21c40 6c 73 65 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20  lse..#endif..   
21c50 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
21c60 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
21c70 73 79 73 74 65 6d 44 69 72 65 63 74 6f 72 79 20  systemDirectory 
21c80 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
21c90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 79                sy
21ca0 73 74 65 6d 44 69 72 65 63 74 6f 72 79 20 3d 20  stemDirectory = 
21cb0 45 6e 76 69 72 6f 6e 6d 65 6e 74 2e 53 79 73 74  Environment.Syst
21cc0 65 6d 44 69 72 65 63 74 6f 72 79 3b 0d 0a 0d 0a  emDirectory;....
21cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21ce0 72 65 74 75 72 6e 20 73 79 73 74 65 6d 44 69 72  return systemDir
21cf0 65 63 74 6f 72 79 3b 0d 0a 20 20 20 20 20 20 20  ectory;..       
21d00 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
21d10 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72  }..        #endr
21d20 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20  egion....       
21d30 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
21d40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21d50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21d60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21d70 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
21d80 20 20 20 20 23 72 65 67 69 6f 6e 20 47 65 6e 65      #region Gene
21d90 72 69 63 20 53 74 72 69 6e 67 20 48 61 6e 64 6c  ric String Handl
21da0 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 70 72 69  ing..        pri
21db0 76 61 74 65 20 73 74 61 74 69 63 20 73 74 72 69  vate static stri
21dc0 6e 67 20 46 6f 72 44 69 73 70 6c 61 79 28 0d 0a  ng ForDisplay(..
21dd0 20 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65              obje
21de0 63 74 20 76 61 6c 75 65 0d 0a 20 20 20 20 20 20  ct value..      
21df0 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
21e00 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
21e10 69 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c  if (value == nul
21e20 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
21e30 20 20 20 20 72 65 74 75 72 6e 20 22 3c 6e 75 6c      return "<nul
21e40 6c 3e 22 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  l>";....        
21e50 20 20 20 20 73 74 72 69 6e 67 20 72 65 73 75 6c      string resul
21e60 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t;..            
21e70 54 79 70 65 20 74 79 70 65 20 3d 20 76 61 6c 75  Type type = valu
21e80 65 2e 47 65 74 54 79 70 65 28 29 3b 0d 0a 0d 0a  e.GetType();....
21e90 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
21ea0 74 79 70 65 20 3d 3d 20 74 79 70 65 6f 66 28 58  type == typeof(X
21eb0 6d 6c 45 6c 65 6d 65 6e 74 29 29 0d 0a 20 20 20  mlElement))..   
21ec0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
21ed0 20 20 20 20 20 20 20 20 20 20 20 20 58 6d 6c 45              XmlE
21ee0 6c 65 6d 65 6e 74 20 65 6c 65 6d 65 6e 74 20 3d  lement element =
21ef0 20 28 58 6d 6c 45 6c 65 6d 65 6e 74 29 76 61 6c   (XmlElement)val
21f00 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ue;....         
21f10 20 20 20 20 20 20 20 72 65 73 75 6c 74 20 3d 20         result = 
21f20 65 6c 65 6d 65 6e 74 2e 4f 75 74 65 72 58 6d 6c  element.OuterXml
21f30 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
21f40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 65 6c  ..            el
21f50 73 65 20 69 66 20 28 74 79 70 65 20 3d 3d 20 74  se if (type == t
21f60 79 70 65 6f 66 28 56 65 72 73 69 6f 6e 29 29 0d  ypeof(Version)).
21f70 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
21f80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21f90 56 65 72 73 69 6f 6e 20 76 65 72 73 69 6f 6e 20  Version version 
21fa0 3d 20 28 56 65 72 73 69 6f 6e 29 76 61 6c 75 65  = (Version)value
21fb0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
21fc0 20 20 20 20 20 72 65 73 75 6c 74 20 3d 20 53 74       result = St
21fd0 72 69 6e 67 2e 46 6f 72 6d 61 74 28 22 76 7b 30  ring.Format("v{0
21fe0 7d 22 2c 20 76 65 72 73 69 6f 6e 29 3b 0d 0a 20  }", version);.. 
21ff0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
22000 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a            else..
22010 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
22020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
22030 65 73 75 6c 74 20 3d 20 76 61 6c 75 65 2e 54 6f  esult = value.To
22040 53 74 72 69 6e 67 28 29 3b 0d 0a 0d 0a 20 20 20  String();....   
22050 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
22060 28 72 65 73 75 6c 74 2e 4c 65 6e 67 74 68 20 3d  (result.Length =
22070 3d 20 30 29 0d 0a 20 20 20 20 20 20 20 20 20 20  = 0)..          
22080 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
22090 20 22 3c 65 6d 70 74 79 3e 22 3b 0d 0a 0d 0a 20   "<empty>";.... 
220a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
220b0 65 73 75 6c 74 20 3d 20 53 74 72 69 6e 67 2e 46  esult = String.F
220c0 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
220d0 20 20 20 20 20 20 20 20 20 20 20 20 74 79 70 65              type
220e0 2e 49 73 53 75 62 63 6c 61 73 73 4f 66 28 74 79  .IsSubclassOf(ty
220f0 70 65 6f 66 28 56 61 6c 75 65 54 79 70 65 29 29  peof(ValueType))
22100 20 3f 20 22 7b 30 7d 22 20 3a 20 22 5c 22 7b 30   ? "{0}" : "\"{0
22110 7d 5c 22 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  }\"",..         
22120 20 20 20 20 20 20 20 20 20 20 20 72 65 73 75 6c             resul
22130 74 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  t);..           
22140 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
22150 20 20 72 65 74 75 72 6e 20 72 65 73 75 6c 74 3b    return result;
22160 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..   
22170 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d       #endregion.
22180 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
22190 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
221a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
221b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
221c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
221d0 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72  //....        #r
221e0 65 67 69 6f 6e 20 41 73 73 65 6d 62 6c 79 20 41  egion Assembly A
221f0 74 74 72 69 62 75 74 65 20 48 61 6e 64 6c 69 6e  ttribute Handlin
22200 67 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69  g..        publi
22210 63 20 73 74 61 74 69 63 20 73 74 72 69 6e 67 20  c static string 
22220 47 65 74 41 73 73 65 6d 62 6c 79 43 6f 6e 66 69  GetAssemblyConfi
22230 67 75 72 61 74 69 6f 6e 28 0d 0a 20 20 20 20 20  guration(..     
22240 20 20 20 20 20 20 20 41 73 73 65 6d 62 6c 79 20         Assembly 
22250 61 73 73 65 6d 62 6c 79 0d 0a 20 20 20 20 20 20  assembly..      
22260 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
22270 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
22280 69 66 20 28 61 73 73 65 6d 62 6c 79 20 21 3d 20  if (assembly != 
22290 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
222a0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
222b0 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20        try..     
222c0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
222d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
222e0 20 20 69 66 20 28 61 73 73 65 6d 62 6c 79 2e 49    if (assembly.I
222f0 73 44 65 66 69 6e 65 64 28 0d 0a 20 20 20 20 20  sDefined(..     
22300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22310 20 20 20 20 20 20 20 74 79 70 65 6f 66 28 41 73         typeof(As
22320 73 65 6d 62 6c 79 43 6f 6e 66 69 67 75 72 61 74  semblyConfigurat
22330 69 6f 6e 41 74 74 72 69 62 75 74 65 29 2c 20 66  ionAttribute), f
22340 61 6c 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20  alse))..        
22350 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
22360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22370 20 20 20 20 20 20 20 41 73 73 65 6d 62 6c 79 43         AssemblyC
22380 6f 6e 66 69 67 75 72 61 74 69 6f 6e 41 74 74 72  onfigurationAttr
22390 69 62 75 74 65 20 63 6f 6e 66 69 67 75 72 61 74  ibute configurat
223a0 69 6f 6e 20 3d 0d 0a 20 20 20 20 20 20 20 20 20  ion =..         
223b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
223c0 20 20 20 28 41 73 73 65 6d 62 6c 79 43 6f 6e 66     (AssemblyConf
223d0 69 67 75 72 61 74 69 6f 6e 41 74 74 72 69 62 75  igurationAttribu
223e0 74 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  te)..           
223f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22400 20 61 73 73 65 6d 62 6c 79 2e 47 65 74 43 75 73   assembly.GetCus
22410 74 6f 6d 41 74 74 72 69 62 75 74 65 73 28 0d 0a  tomAttributes(..
22420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22440 74 79 70 65 6f 66 28 41 73 73 65 6d 62 6c 79 43  typeof(AssemblyC
22450 6f 6e 66 69 67 75 72 61 74 69 6f 6e 41 74 74 72  onfigurationAttr
22460 69 62 75 74 65 29 2c 0d 0a 20 20 20 20 20 20 20  ibute),..       
22470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22480 20 20 20 20 20 20 20 20 20 66 61 6c 73 65 29 5b           false)[
22490 30 5d 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  0];....         
224a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
224b0 65 74 75 72 6e 20 63 6f 6e 66 69 67 75 72 61 74  eturn configurat
224c0 69 6f 6e 2e 43 6f 6e 66 69 67 75 72 61 74 69 6f  ion.Configuratio
224d0 6e 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n;..            
224e0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
224f0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
22500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 61                ca
22510 74 63 68 0d 0a 20 20 20 20 20 20 20 20 20 20 20  tch..           
22520 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
22530 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64              // d
22540 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20  o nothing...    
22550 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
22560 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
22570 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
22580 72 6e 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20  rn null;..      
22590 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f    }....        /
225a0 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
225f0 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20    public static 
22600 73 74 72 69 6e 67 20 47 65 74 41 73 73 65 6d 62  string GetAssemb
22610 6c 79 54 69 74 6c 65 28 0d 0a 20 20 20 20 20 20  lyTitle(..      
22620 20 20 20 20 20 20 41 73 73 65 6d 62 6c 79 20 61        Assembly a
22630 73 73 65 6d 62 6c 79 0d 0a 20 20 20 20 20 20 20  ssembly..       
22640 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
22650 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  {..            i
22660 66 20 28 61 73 73 65 6d 62 6c 79 20 21 3d 20 6e  f (assembly != n
22670 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
22680 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
22690 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20       try..      
226a0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
226b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
226c0 20 69 66 20 28 61 73 73 65 6d 62 6c 79 2e 49 73   if (assembly.Is
226d0 44 65 66 69 6e 65 64 28 0d 0a 20 20 20 20 20 20  Defined(..      
226e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
226f0 20 20 20 20 20 20 74 79 70 65 6f 66 28 41 73 73        typeof(Ass
22700 65 6d 62 6c 79 54 69 74 6c 65 41 74 74 72 69 62  emblyTitleAttrib
22710 75 74 65 29 2c 20 66 61 6c 73 65 29 29 0d 0a 20  ute), false)).. 
22720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22730 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
22740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 41 73                As
22750 73 65 6d 62 6c 79 54 69 74 6c 65 41 74 74 72 69  semblyTitleAttri
22760 62 75 74 65 20 74 69 74 6c 65 20 3d 0d 0a 20 20  bute title =..  
22770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22780 20 20 20 20 20 20 20 20 20 20 28 41 73 73 65 6d            (Assem
22790 62 6c 79 54 69 74 6c 65 41 74 74 72 69 62 75 74  blyTitleAttribut
227a0 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e)..            
227b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
227c0 61 73 73 65 6d 62 6c 79 2e 47 65 74 43 75 73 74  assembly.GetCust
227d0 6f 6d 41 74 74 72 69 62 75 74 65 73 28 0d 0a 20  omAttributes(.. 
227e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
227f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
22800 79 70 65 6f 66 28 41 73 73 65 6d 62 6c 79 54 69  ypeof(AssemblyTi
22810 74 6c 65 41 74 74 72 69 62 75 74 65 29 2c 20 66  tleAttribute), f
22820 61 6c 73 65 29 5b 30 5d 3b 0d 0a 0d 0a 20 20 20  alse)[0];....   
22830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22840 20 20 20 20 20 72 65 74 75 72 6e 20 74 69 74 6c       return titl
22850 65 2e 54 69 74 6c 65 3b 0d 0a 20 20 20 20 20 20  e.Title;..      
22860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
22870 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
22880 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
22890 20 20 20 20 63 61 74 63 68 0d 0a 20 20 20 20 20      catch..     
228a0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
228b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
228c0 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e    // do nothing.
228d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
228e0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
228f0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
22900 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a    return null;..
22910 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
22920 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
22930 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
22940 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22950 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22960 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22970 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22980 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67  ....        #reg
22990 69 6f 6e 20 2e 4e 45 54 20 46 72 61 6d 65 77 6f  ion .NET Framewo
229a0 72 6b 20 48 61 6e 64 6c 69 6e 67 0d 0a 20 20 20  rk Handling..   
229b0 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61       private sta
229c0 74 69 63 20 73 74 72 69 6e 67 20 47 65 74 46 72  tic string GetFr
229d0 61 6d 65 77 6f 72 6b 52 6f 6f 74 4b 65 79 4e 61  ameworkRootKeyNa
229e0 6d 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me(..           
229f0 20 62 6f 6f 6c 20 77 6f 77 36 34 0d 0a 20 20 20   bool wow64..   
22a00 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
22a10 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
22a20 20 20 20 72 65 74 75 72 6e 20 53 74 72 69 6e 67     return String
22a30 2e 46 6f 72 6d 61 74 28 22 7b 30 7d 5c 5c 4d 69  .Format("{0}\\Mi
22a40 63 72 6f 73 6f 66 74 5c 5c 2e 4e 45 54 46 72 61  crosoft\\.NETFra
22a50 6d 65 77 6f 72 6b 22 2c 0d 0a 20 20 20 20 20 20  mework",..      
22a60 20 20 20 20 20 20 20 20 20 20 47 65 74 52 6f 6f            GetRoo
22a70 74 4b 65 79 4e 61 6d 65 28 77 6f 77 36 34 29 29  tKeyName(wow64))
22a80 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  ;..        }....
22a90 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
22aa0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22ab0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22ac0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22ad0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
22ae0 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  ...        priva
22af0 74 65 20 73 74 61 74 69 63 20 73 74 72 69 6e 67  te static string
22b00 20 47 65 74 46 72 61 6d 65 77 6f 72 6b 4b 65 79   GetFrameworkKey
22b10 4e 61 6d 65 28 0d 0a 20 20 20 20 20 20 20 20 20  Name(..         
22b20 20 20 20 73 74 72 69 6e 67 20 66 72 61 6d 65 77     string framew
22b30 6f 72 6b 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20  orkName,..      
22b40 20 20 20 20 20 20 56 65 72 73 69 6f 6e 20 66 72        Version fr
22b50 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 2c 0d  ameworkVersion,.
22b60 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72  .            str
22b70 69 6e 67 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65  ing platformName
22b80 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  ,..            b
22b90 6f 6f 6c 20 77 6f 77 36 34 0d 0a 20 20 20 20 20  ool wow64..     
22ba0 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
22bb0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
22bc0 20 73 74 72 69 6e 67 20 66 6f 72 6d 61 74 20 3d   string format =
22bd0 20 21 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f   !String.IsNullO
22be0 72 45 6d 70 74 79 28 70 6c 61 74 66 6f 72 6d 4e  rEmpty(platformN
22bf0 61 6d 65 29 20 3f 0d 0a 20 20 20 20 20 20 20 20  ame) ?..        
22c00 20 20 20 20 20 20 20 20 22 7b 30 7d 5c 5c 4d 69          "{0}\\Mi
22c10 63 72 6f 73 6f 66 74 5c 5c 7b 31 7d 5c 5c 76 7b  crosoft\\{1}\\v{
22c20 32 7d 5c 5c 7b 33 7d 22 20 3a 0d 0a 20 20 20 20  2}\\{3}" :..    
22c30 20 20 20 20 20 20 20 20 20 20 20 20 22 7b 30 7d              "{0}
22c40 5c 5c 4d 69 63 72 6f 73 6f 66 74 5c 5c 7b 31 7d  \\Microsoft\\{1}
22c50 5c 5c 76 7b 32 7d 22 3b 0d 0a 0d 0a 20 20 20 20  \\v{2}";....    
22c60 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 53          return S
22c70 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 66 6f 72  tring.Format(for
22c80 6d 61 74 2c 20 47 65 74 52 6f 6f 74 4b 65 79 4e  mat, GetRootKeyN
22c90 61 6d 65 28 77 6f 77 36 34 29 2c 0d 0a 20 20 20  ame(wow64),..   
22ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 66 72 61               fra
22cb0 6d 65 77 6f 72 6b 4e 61 6d 65 2c 20 66 72 61 6d  meworkName, fram
22cc0 65 77 6f 72 6b 56 65 72 73 69 6f 6e 2c 20 70 6c  eworkVersion, pl
22cd0 61 74 66 6f 72 6d 4e 61 6d 65 29 3b 0d 0a 20 20  atformName);..  
22ce0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
22cf0 20 20 20 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 2f  ////////////////
22d30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
22d40 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74        private st
22d50 61 74 69 63 20 73 74 72 69 6e 67 20 47 65 74 49  atic string GetI
22d60 6d 61 67 65 52 75 6e 74 69 6d 65 56 65 72 73 69  mageRuntimeVersi
22d70 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  on(..           
22d80 20 73 74 72 69 6e 67 20 66 69 6c 65 4e 61 6d 65   string fileName
22d90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d  ..            ).
22da0 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
22db0 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20          try..   
22dc0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
22dd0 20 20 20 20 20 20 20 20 20 20 20 20 41 73 73 65              Asse
22de0 6d 62 6c 79 20 61 73 73 65 6d 62 6c 79 20 3d 0d  mbly assembly =.
22df0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
22e00 20 20 20 20 20 41 73 73 65 6d 62 6c 79 2e 52 65       Assembly.Re
22e10 66 6c 65 63 74 69 6f 6e 4f 6e 6c 79 4c 6f 61 64  flectionOnlyLoad
22e20 46 72 6f 6d 28 66 69 6c 65 4e 61 6d 65 29 3b 20  From(fileName); 
22e30 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a 0d 0a 20  /* throw */.... 
22e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
22e50 66 20 28 61 73 73 65 6d 62 6c 79 20 21 3d 20 6e  f (assembly != n
22e60 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
22e70 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
22e80 20 61 73 73 65 6d 62 6c 79 2e 49 6d 61 67 65 52   assembly.ImageR
22e90 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 3b 0d 0a  untimeVersion;..
22ea0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
22eb0 20 20 20 20 20 20 20 20 20 20 20 63 61 74 63 68             catch
22ec0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
22ed0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
22ee0 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d   // do nothing..
22ef0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
22f00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
22f10 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20  turn null;..    
22f20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
22f30 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
22f40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22f50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22f60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22f70 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
22f80 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74      private stat
22f90 69 63 20 73 74 72 69 6e 67 20 47 65 74 46 72 61  ic string GetFra
22fa0 6d 65 77 6f 72 6b 44 69 72 65 63 74 6f 72 79 28  meworkDirectory(
22fb0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 4d 6f  ..            Mo
22fc0 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 72 6f  ckRegistryKey ro
22fd0 6f 74 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20  otKey,..        
22fe0 20 20 20 20 56 65 72 73 69 6f 6e 20 66 72 61 6d      Version fram
22ff0 65 77 6f 72 6b 56 65 72 73 69 6f 6e 2c 0d 0a 20  eworkVersion,.. 
23000 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
23010 77 6f 77 36 34 2c 0d 0a 20 20 20 20 20 20 20 20  wow64,..        
23020 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c      bool whatIf,
23030 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
23040 6f 6c 20 76 65 72 62 6f 73 65 0d 0a 20 20 20 20  ol verbose..    
23050 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
23060 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
23070 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67    using (MockReg
23080 69 73 74 72 79 4b 65 79 20 6b 65 79 20 3d 20 52  istryKey key = R
23090 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 4f 70  egistryHelper.Op
230a0 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20  enSubKey(..     
230b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
230c0 6f 6f 74 4b 65 79 2c 20 47 65 74 46 72 61 6d 65  ootKey, GetFrame
230d0 77 6f 72 6b 52 6f 6f 74 4b 65 79 4e 61 6d 65 28  workRootKeyName(
230e0 77 6f 77 36 34 29 2c 20 66 61 6c 73 65 2c 0d 0a  wow64), false,..
230f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23100 20 20 20 20 77 68 61 74 49 66 2c 20 76 65 72 62      whatIf, verb
23110 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ose))..         
23120 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
23130 20 20 20 20 20 20 69 66 20 28 6b 65 79 20 3d 3d        if (key ==
23140 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
23150 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
23160 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20  rn null;....    
23170 20 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65              obje
23180 63 74 20 76 61 6c 75 65 20 3d 20 52 65 67 69 73  ct value = Regis
23190 74 72 79 48 65 6c 70 65 72 2e 47 65 74 56 61 6c  tryHelper.GetVal
231a0 75 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue(..           
231b0 20 20 20 20 20 20 20 20 20 6b 65 79 2c 20 22 49           key, "I
231c0 6e 73 74 61 6c 6c 52 6f 6f 74 22 2c 20 6e 75 6c  nstallRoot", nul
231d0 6c 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f  l, whatIf, verbo
231e0 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  se);....        
231f0 20 20 20 20 20 20 20 20 69 66 20 28 21 28 76 61          if (!(va
23200 6c 75 65 20 69 73 20 73 74 72 69 6e 67 29 29 0d  lue is string)).
23210 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
23220 20 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c       return null
23230 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
23240 20 20 20 20 20 72 65 74 75 72 6e 20 50 61 74 68       return Path
23250 2e 43 6f 6d 62 69 6e 65 28 0d 0a 20 20 20 20 20  .Combine(..     
23260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28                 (
23270 73 74 72 69 6e 67 29 76 61 6c 75 65 2c 20 53 74  string)value, St
23280 72 69 6e 67 2e 46 6f 72 6d 61 74 28 22 76 7b 30  ring.Format("v{0
23290 7d 22 2c 20 66 72 61 6d 65 77 6f 72 6b 56 65 72  }", frameworkVer
232a0 73 69 6f 6e 29 29 3b 0d 0a 20 20 20 20 20 20 20  sion));..       
232b0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
232c0 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72  }..        #endr
232d0 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20  egion....       
232e0 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
232f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23300 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23310 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23320 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
23330 20 20 20 20 23 72 65 67 69 6f 6e 20 50 65 72 2d      #region Per-
23340 46 72 61 6d 65 77 6f 72 6b 2f 50 6c 61 74 66 6f  Framework/Platfo
23350 72 6d 20 48 61 6e 64 6c 69 6e 67 0d 0a 20 20 20  rm Handling..   
23360 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61       private sta
23370 74 69 63 20 76 6f 69 64 20 49 6e 69 74 69 61 6c  tic void Initial
23380 69 7a 65 46 72 61 6d 65 77 6f 72 6b 4c 69 73 74  izeFrameworkList
23390 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 4d  (..            M
233a0 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 72  ockRegistryKey r
233b0 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20  ootKey,..       
233c0 20 20 20 20 20 43 6f 6e 66 69 67 75 72 61 74 69       Configurati
233d0 6f 6e 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  on configuration
233e0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  ,..            r
233f0 65 66 20 46 72 61 6d 65 77 6f 72 6b 4c 69 73 74  ef FrameworkList
23400 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 0d 0a   frameworkList..
23410 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
23420 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
23430 20 20 20 20 20 20 69 66 20 28 66 72 61 6d 65 77        if (framew
23440 6f 72 6b 4c 69 73 74 20 3d 3d 20 6e 75 6c 6c 29  orkList == null)
23450 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
23460 20 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 20    frameworkList 
23470 3d 20 6e 65 77 20 46 72 61 6d 65 77 6f 72 6b 4c  = new FrameworkL
23480 69 73 74 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  ist();....      
23490 20 20 20 20 20 20 69 66 20 28 66 72 61 6d 65 77        if (framew
234a0 6f 72 6b 4c 69 73 74 2e 52 6f 6f 74 4b 65 79 20  orkList.RootKey 
234b0 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
234c0 20 20 20 20 20 20 20 20 20 20 66 72 61 6d 65 77            framew
234d0 6f 72 6b 4c 69 73 74 2e 52 6f 6f 74 4b 65 79 20  orkList.RootKey 
234e0 3d 20 72 6f 6f 74 4b 65 79 3b 0d 0a 0d 0a 20 20  = rootKey;....  
234f0 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
23500 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23510 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23520 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23530 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
23540 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
23550 28 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 4e  (frameworkList.N
23560 61 6d 65 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  ames == null).. 
23570 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
23580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 72                fr
23590 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 4e 61 6d 65  ameworkList.Name
235a0 73 20 3d 20 6e 65 77 20 53 74 72 69 6e 67 4c 69  s = new StringLi
235b0 73 74 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  st();....       
235c0 20 20 20 20 20 20 20 20 20 69 66 20 28 28 63 6f           if ((co
235d0 6e 66 69 67 75 72 61 74 69 6f 6e 20 3d 3d 20 6e  nfiguration == n
235e0 75 6c 6c 29 20 7c 7c 20 21 63 6f 6e 66 69 67 75  ull) || !configu
235f0 72 61 74 69 6f 6e 2e 4e 6f 44 65 73 6b 74 6f 70  ration.NoDesktop
23600 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
23610 20 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b         framework
23620 4c 69 73 74 2e 4e 61 6d 65 73 2e 41 64 64 28 22  List.Names.Add("
23630 2e 4e 45 54 46 72 61 6d 65 77 6f 72 6b 22 29 3b  .NETFramework");
23640 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
23650 20 20 20 20 69 66 20 28 28 63 6f 6e 66 69 67 75      if ((configu
23660 72 61 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 20  ration == null) 
23670 7c 7c 20 21 63 6f 6e 66 69 67 75 72 61 74 69 6f  || !configuratio
23680 6e 2e 4e 6f 43 6f 6d 70 61 63 74 29 0d 0a 20 20  n.NoCompact)..  
23690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
236a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
236b0 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 4c 69       frameworkLi
236c0 73 74 2e 4e 61 6d 65 73 2e 41 64 64 28 22 2e 4e  st.Names.Add(".N
236d0 45 54 43 6f 6d 70 61 63 74 46 72 61 6d 65 77 6f  ETCompactFramewo
236e0 72 6b 22 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  rk");..         
236f0 20 20 20 20 20 20 20 20 20 20 20 66 72 61 6d 65             frame
23700 77 6f 72 6b 4c 69 73 74 2e 4e 61 6d 65 73 2e 41  workList.Names.A
23710 64 64 28 22 2e 4e 45 54 43 6f 6d 70 61 63 74 46  dd(".NETCompactF
23720 72 61 6d 65 77 6f 72 6b 22 29 3b 0d 0a 20 20 20  ramework");..   
23730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23740 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 4e   frameworkList.N
23750 61 6d 65 73 2e 41 64 64 28 22 2e 4e 45 54 43 6f  ames.Add(".NETCo
23760 6d 70 61 63 74 46 72 61 6d 65 77 6f 72 6b 22 29  mpactFramework")
23770 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
23780 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
23790 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
237a0 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
237b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
237c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
237d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
237e0 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
237f0 20 20 20 20 20 20 69 66 20 28 66 72 61 6d 65 77        if (framew
23800 6f 72 6b 4c 69 73 74 2e 56 65 72 73 69 6f 6e 73  orkList.Versions
23810 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
23820 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
23830 20 20 20 20 20 20 20 20 20 20 66 72 61 6d 65 77            framew
23840 6f 72 6b 4c 69 73 74 2e 56 65 72 73 69 6f 6e 73  orkList.Versions
23850 20 3d 20 6e 65 77 20 56 65 72 73 69 6f 6e 4d 61   = new VersionMa
23860 70 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  p();....        
23870 20 20 20 20 20 20 20 20 69 66 20 28 28 63 6f 6e          if ((con
23880 66 69 67 75 72 61 74 69 6f 6e 20 3d 3d 20 6e 75  figuration == nu
23890 6c 6c 29 20 7c 7c 20 21 63 6f 6e 66 69 67 75 72  ll) || !configur
238a0 61 74 69 6f 6e 2e 4e 6f 44 65 73 6b 74 6f 70 29  ation.NoDesktop)
238b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
238c0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
238d0 20 20 20 20 20 20 20 20 20 56 65 72 73 69 6f 6e           Version
238e0 4c 69 73 74 20 64 65 73 6b 74 6f 70 56 65 72 73  List desktopVers
238f0 69 6f 6e 4c 69 73 74 20 3d 20 6e 65 77 20 56 65  ionList = new Ve
23900 72 73 69 6f 6e 4c 69 73 74 28 29 3b 0d 0a 0d 0a  rsionList();....
23910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23920 20 20 20 20 69 66 20 28 28 63 6f 6e 66 69 67 75      if ((configu
23930 72 61 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 20  ration == null) 
23940 7c 7c 20 21 63 6f 6e 66 69 67 75 72 61 74 69 6f  || !configuratio
23950 6e 2e 4e 6f 4e 65 74 46 78 32 30 29 0d 0a 20 20  n.NoNetFx20)..  
23960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23970 20 20 20 20 20 20 64 65 73 6b 74 6f 70 56 65 72        desktopVer
23980 73 69 6f 6e 4c 69 73 74 2e 41 64 64 28 6e 65 77  sionList.Add(new
23990 20 56 65 72 73 69 6f 6e 28 32 2c 20 30 2c 20 35   Version(2, 0, 5
239a0 30 37 32 37 29 29 3b 0d 0a 0d 0a 20 20 20 20 20  0727));....     
239b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
239c0 66 20 28 28 63 6f 6e 66 69 67 75 72 61 74 69 6f  f ((configuratio
239d0 6e 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20 21 63  n == null) || !c
239e0 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 4e 6f 4e  onfiguration.NoN
239f0 65 74 46 78 34 30 29 0d 0a 20 20 20 20 20 20 20  etFx40)..       
23a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23a10 20 64 65 73 6b 74 6f 70 56 65 72 73 69 6f 6e 4c   desktopVersionL
23a20 69 73 74 2e 41 64 64 28 6e 65 77 20 56 65 72 73  ist.Add(new Vers
23a30 69 6f 6e 28 34 2c 20 30 2c 20 33 30 33 31 39 29  ion(4, 0, 30319)
23a40 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
23a50 20 20 20 20 20 20 20 20 20 20 69 66 20 28 28 63            if ((c
23a60 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 3d 3d 20  onfiguration == 
23a70 6e 75 6c 6c 29 20 7c 7c 20 21 63 6f 6e 66 69 67  null) || !config
23a80 75 72 61 74 69 6f 6e 2e 4e 6f 4e 65 74 46 78 34  uration.NoNetFx4
23a90 35 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  5)..            
23aa0 20 20 20 20 20 20 20 20 20 20 20 20 64 65 73 6b              desk
23ab0 74 6f 70 56 65 72 73 69 6f 6e 4c 69 73 74 2e 41  topVersionList.A
23ac0 64 64 28 6e 65 77 20 56 65 72 73 69 6f 6e 28 34  dd(new Version(4
23ad0 2c 20 35 2c 20 35 30 37 30 39 29 29 3b 0d 0a 0d  , 5, 50709));...
23ae0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
23af0 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 4c 69       frameworkLi
23b00 73 74 2e 56 65 72 73 69 6f 6e 73 2e 41 64 64 28  st.Versions.Add(
23b10 22 2e 4e 45 54 46 72 61 6d 65 77 6f 72 6b 22 2c  ".NETFramework",
23b20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
23b30 20 20 20 20 20 20 20 20 20 20 64 65 73 6b 74 6f            deskto
23b40 70 56 65 72 73 69 6f 6e 4c 69 73 74 29 3b 0d 0a  pVersionList);..
23b50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23b60 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
23b70 20 20 20 20 20 69 66 20 28 28 63 6f 6e 66 69 67       if ((config
23b80 75 72 61 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29  uration == null)
23b90 20 7c 7c 20 21 63 6f 6e 66 69 67 75 72 61 74 69   || !configurati
23ba0 6f 6e 2e 4e 6f 43 6f 6d 70 61 63 74 29 0d 0a 20  on.NoCompact).. 
23bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
23bc0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
23bd0 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 4c        frameworkL
23be0 69 73 74 2e 56 65 72 73 69 6f 6e 73 2e 41 64 64  ist.Versions.Add
23bf0 28 22 2e 4e 45 54 43 6f 6d 70 61 63 74 46 72 61  (".NETCompactFra
23c00 6d 65 77 6f 72 6b 22 2c 0d 0a 20 20 20 20 20 20  mework",..      
23c10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23c20 20 20 6e 65 77 20 56 65 72 73 69 6f 6e 4c 69 73    new VersionLis
23c30 74 28 6e 65 77 20 56 65 72 73 69 6f 6e 5b 5d 20  t(new Version[] 
23c40 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
23c50 20 20 20 20 20 20 20 20 20 20 20 6e 65 77 20 56             new V
23c60 65 72 73 69 6f 6e 28 32 2c 20 30 2c 20 30 2c 20  ersion(2, 0, 0, 
23c70 30 29 2c 20 6e 65 77 20 56 65 72 73 69 6f 6e 28  0), new Version(
23c80 33 2c 20 35 2c 20 30 2c 20 30 29 0d 0a 20 20 20  3, 5, 0, 0)..   
23c90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23ca0 20 7d 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20   }));..         
23cb0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
23cc0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
23cd0 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
23ce0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23cf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23d00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23d10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
23d20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 66 72            if (fr
23d30 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 50 6c 61 74  ameworkList.Plat
23d40 66 6f 72 6d 4e 61 6d 65 73 20 3d 3d 20 6e 75 6c  formNames == nul
23d50 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
23d60 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
23d70 20 20 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74     frameworkList
23d80 2e 50 6c 61 74 66 6f 72 6d 4e 61 6d 65 73 20 3d  .PlatformNames =
23d90 20 6e 65 77 20 53 74 72 69 6e 67 4c 69 73 74 28   new StringList(
23da0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
23db0 20 20 20 20 20 20 69 66 20 28 28 63 6f 6e 66 69        if ((confi
23dc0 67 75 72 61 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c  guration == null
23dd0 29 20 7c 7c 20 21 63 6f 6e 66 69 67 75 72 61 74  ) || !configurat
23de0 69 6f 6e 2e 4e 6f 44 65 73 6b 74 6f 70 29 0d 0a  ion.NoDesktop)..
23df0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23e00 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73      frameworkLis
23e10 74 2e 50 6c 61 74 66 6f 72 6d 4e 61 6d 65 73 2e  t.PlatformNames.
23e20 41 64 64 28 6e 75 6c 6c 29 3b 0d 0a 0d 0a 20 20  Add(null);....  
23e30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
23e40 20 28 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e   ((configuration
23e50 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20 21 63 6f   == null) || !co
23e60 6e 66 69 67 75 72 61 74 69 6f 6e 2e 4e 6f 43 6f  nfiguration.NoCo
23e70 6d 70 61 63 74 29 0d 0a 20 20 20 20 20 20 20 20  mpact)..        
23e80 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
23e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66                 f
23ea0 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 50 6c 61  rameworkList.Pla
23eb0 74 66 6f 72 6d 4e 61 6d 65 73 2e 41 64 64 28 22  tformNames.Add("
23ec0 50 6f 63 6b 65 74 50 43 22 29 3b 0d 0a 20 20 20  PocketPC");..   
23ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23ee0 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 50   frameworkList.P
23ef0 6c 61 74 66 6f 72 6d 4e 61 6d 65 73 2e 41 64 64  latformNames.Add
23f00 28 22 53 6d 61 72 74 70 68 6f 6e 65 22 29 3b 0d  ("Smartphone");.
23f10 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
23f20 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 4c 69       frameworkLi
23f30 73 74 2e 50 6c 61 74 66 6f 72 6d 4e 61 6d 65 73  st.PlatformNames
23f40 2e 41 64 64 28 22 57 69 6e 64 6f 77 73 43 45 22  .Add("WindowsCE"
23f50 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
23f60 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
23f70 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d     }..        }.
23f80 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
23f90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23fa0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23fb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23fc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23fd0 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72  //....        pr
23fe0 69 76 61 74 65 20 73 74 61 74 69 63 20 62 6f 6f  ivate static boo
23ff0 6c 20 48 61 76 65 46 72 61 6d 65 77 6f 72 6b 44  l HaveFrameworkD
24000 69 72 65 63 74 6f 72 79 28 0d 0a 20 20 20 20 20  irectory(..     
24010 20 20 20 20 20 20 20 4d 6f 63 6b 52 65 67 69 73         MockRegis
24020 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79 2c 0d  tryKey rootKey,.
24030 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72  .            str
24040 69 6e 67 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d  ing frameworkNam
24050 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
24060 56 65 72 73 69 6f 6e 20 66 72 61 6d 65 77 6f 72  Version framewor
24070 6b 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20  kVersion,..     
24080 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 70 6c         string pl
24090 61 74 66 6f 72 6d 4e 61 6d 65 2c 0d 0a 20 20 20  atformName,..   
240a0 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 6f           bool wo
240b0 77 36 34 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  w64,..          
240c0 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a    bool whatIf,..
240d0 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
240e0 20 76 65 72 62 6f 73 65 0d 0a 20 20 20 20 20 20   verbose..      
240f0 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
24100 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
24110 73 74 72 69 6e 67 20 6b 65 79 4e 61 6d 65 20 3d  string keyName =
24120 20 47 65 74 46 72 61 6d 65 77 6f 72 6b 4b 65 79   GetFrameworkKey
24130 4e 61 6d 65 28 0d 0a 20 20 20 20 20 20 20 20 20  Name(..         
24140 20 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b         framework
24150 4e 61 6d 65 2c 20 66 72 61 6d 65 77 6f 72 6b 56  Name, frameworkV
24160 65 72 73 69 6f 6e 2c 20 70 6c 61 74 66 6f 72 6d  ersion, platform
24170 4e 61 6d 65 2c 20 77 6f 77 36 34 29 3b 0d 0a 0d  Name, wow64);...
24180 0a 20 20 20 20 20 20 20 20 20 20 20 20 75 73 69  .            usi
24190 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73 74 72 79  ng (MockRegistry
241a0 4b 65 79 20 6b 65 79 20 3d 20 52 65 67 69 73 74  Key key = Regist
241b0 72 79 48 65 6c 70 65 72 2e 4f 70 65 6e 53 75 62  ryHelper.OpenSub
241c0 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20  Key(..          
241d0 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65            rootKe
241e0 79 2c 20 6b 65 79 4e 61 6d 65 2c 20 66 61 6c 73  y, keyName, fals
241f0 65 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f  e, whatIf, verbo
24200 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  se))..          
24210 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
24220 20 20 20 20 20 69 66 20 28 6b 65 79 20 3d 3d 20       if (key == 
24230 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
24240 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
24250 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20  n false;....    
24260 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
24270 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 20 21 3d 20  platformName != 
24280 6e 75 6c 6c 29 20 2f 2f 20 4e 4f 54 45 3a 20 53  null) // NOTE: S
24290 6b 69 70 20 6e 6f 6e 2d 64 65 73 6b 74 6f 70 2e  kip non-desktop.
242a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
242b0 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75        return tru
242c0 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
242d0 20 20 20 20 20 20 73 74 72 69 6e 67 20 64 69 72        string dir
242e0 65 63 74 6f 72 79 20 3d 20 47 65 74 46 72 61 6d  ectory = GetFram
242f0 65 77 6f 72 6b 44 69 72 65 63 74 6f 72 79 28 0d  eworkDirectory(.
24300 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
24310 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 66 72       rootKey, fr
24320 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 2c 20  ameworkVersion, 
24330 77 6f 77 36 34 2c 20 77 68 61 74 49 66 2c 20 76  wow64, whatIf, v
24340 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20  erbose);....    
24350 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
24360 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45  String.IsNullOrE
24370 6d 70 74 79 28 64 69 72 65 63 74 6f 72 79 29 29  mpty(directory))
24380 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
24390 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
243a0 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  se;....         
243b0 20 20 20 20 20 20 20 69 66 20 28 21 44 69 72 65         if (!Dire
243c0 63 74 6f 72 79 2e 45 78 69 73 74 73 28 64 69 72  ctory.Exists(dir
243d0 65 63 74 6f 72 79 29 29 0d 0a 20 20 20 20 20 20  ectory))..      
243e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
243f0 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20  turn false;.... 
24400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
24410 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64  raceOps.DebugAnd
24420 54 72 61 63 65 28 54 72 61 63 65 50 72 69 6f 72  Trace(TracePrior
24430 69 74 79 2e 4c 6f 77 65 72 2c 0d 0a 20 20 20 20  ity.Lower,..    
24440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24450 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74  debugCallback, t
24460 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74  raceCallback, St
24470 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
24480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24490 20 20 22 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72    ".NET Framewor
244a0 6b 20 7b 30 7d 20 66 6f 75 6e 64 20 76 69 61 20  k {0} found via 
244b0 64 69 72 65 63 74 6f 72 79 20 7b 31 7d 2e 22 2c  directory {1}.",
244c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
244d0 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79        ForDisplay
244e0 28 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f  (frameworkVersio
244f0 6e 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 64  n), ForDisplay(d
24500 69 72 65 63 74 6f 72 79 29 29 2c 0d 0a 20 20 20  irectory)),..   
24510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24520 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
24530 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
24540 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b      return true;
24550 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
24560 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....  
24570 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
24580 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24590 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
245a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
245b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
245c0 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
245d0 20 73 74 61 74 69 63 20 62 6f 6f 6c 20 48 61 76   static bool Hav
245e0 65 46 72 61 6d 65 77 6f 72 6b 52 65 67 69 73 74  eFrameworkRegist
245f0 72 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ry(..           
24600 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79   MockRegistryKey
24610 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20 20 20   rootKey,..     
24620 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 66 72         string fr
24630 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c 0d 0a 20 20  ameworkName,..  
24640 20 20 20 20 20 20 20 20 20 20 56 65 72 73 69 6f            Versio
24650 6e 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69  n frameworkVersi
24660 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  on,..           
24670 20 73 74 72 69 6e 67 20 70 6c 61 74 66 6f 72 6d   string platform
24680 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  Name,..         
24690 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34 2c 0d 0a     bool wow64,..
246a0 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
246b0 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20   whatIf,..      
246c0 20 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f        bool verbo
246d0 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  se..            
246e0 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
246f0 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
24700 20 6b 65 79 4e 61 6d 65 20 3d 20 47 65 74 46 72   keyName = GetFr
24710 61 6d 65 77 6f 72 6b 4b 65 79 4e 61 6d 65 28 0d  ameworkKeyName(.
24720 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
24730 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c 20   frameworkName, 
24740 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e  frameworkVersion
24750 2c 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 2c 20  , platformName, 
24760 77 6f 77 36 34 29 3b 0d 0a 0d 0a 20 20 20 20 20  wow64);....     
24770 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 4d 6f         using (Mo
24780 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 6b 65  ckRegistryKey ke
24790 79 20 3d 20 52 65 67 69 73 74 72 79 48 65 6c 70  y = RegistryHelp
247a0 65 72 2e 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a  er.OpenSubKey(..
247b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
247c0 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 6b 65 79      rootKey, key
247d0 4e 61 6d 65 2c 20 66 61 6c 73 65 2c 20 77 68 61  Name, false, wha
247e0 74 49 66 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a  tIf, verbose))..
247f0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
24800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
24810 66 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d  f (key == null).
24820 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
24830 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
24840 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
24850 20 20 20 20 20 20 69 66 20 28 70 6c 61 74 66 6f        if (platfo
24860 72 6d 4e 61 6d 65 20 21 3d 20 6e 75 6c 6c 29 20  rmName != null) 
24870 2f 2f 20 4e 4f 54 45 3a 20 53 6b 69 70 20 6e 6f  // NOTE: Skip no
24880 6e 2d 64 65 73 6b 74 6f 70 2e 0d 0a 20 20 20 20  n-desktop...    
24890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
248a0 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 0d 0a  return true;....
248b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
248c0 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e  TraceOps.DebugAn
248d0 64 54 72 61 63 65 28 54 72 61 63 65 50 72 69 6f  dTrace(TracePrio
248e0 72 69 74 79 2e 4c 6f 77 65 72 2c 0d 0a 20 20 20  rity.Lower,..   
248f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24900 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20   debugCallback, 
24910 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53  traceCallback, S
24920 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
24930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24940 20 20 20 22 2e 4e 45 54 20 46 72 61 6d 65 77 6f     ".NET Framewo
24950 72 6b 20 7b 30 7d 20 66 6f 75 6e 64 20 76 69 61  rk {0} found via
24960 20 72 65 67 69 73 74 72 79 20 7b 31 7d 2e 22 2c   registry {1}.",
24970 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
24980 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79        ForDisplay
24990 28 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f  (frameworkVersio
249a0 6e 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 6b  n), ForDisplay(k
249b0 65 79 4e 61 6d 65 29 29 2c 0d 0a 20 20 20 20 20  eyName)),..     
249c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
249d0 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
249e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
249f0 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a    return true;..
24a00 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
24a10 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
24a20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
24a30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24a40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24a50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24a60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
24a70 20 20 20 20 20 20 20 5b 4d 65 74 68 6f 64 49 6d         [MethodIm
24a80 70 6c 28 4d 65 74 68 6f 64 49 6d 70 6c 4f 70 74  pl(MethodImplOpt
24a90 69 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e 69 6e 67 29  ions.NoInlining)
24aa0 5d 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  ]..        priva
24ab0 74 65 20 73 74 61 74 69 63 20 62 6f 6f 6c 20 46  te static bool F
24ac0 6f 72 45 61 63 68 46 72 61 6d 65 77 6f 72 6b 43  orEachFrameworkC
24ad0 6f 6e 66 69 67 28 0d 0a 20 20 20 20 20 20 20 20  onfig(..        
24ae0 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79      MockRegistry
24af0 20 72 65 67 69 73 74 72 79 2c 0d 0a 20 20 20 20   registry,..    
24b00 20 20 20 20 20 20 20 20 46 72 61 6d 65 77 6f 72          Framewor
24b10 6b 4c 69 73 74 20 66 72 61 6d 65 77 6f 72 6b 4c  kList frameworkL
24b20 69 73 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ist,..          
24b30 20 20 46 72 61 6d 65 77 6f 72 6b 43 6f 6e 66 69    FrameworkConfi
24b40 67 43 61 6c 6c 62 61 63 6b 20 63 61 6c 6c 62 61  gCallback callba
24b50 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ck,..           
24b60 20 73 74 72 69 6e 67 20 76 65 72 73 69 6f 6e 2c   string version,
24b70 20 2f 2a 20 4e 4f 54 45 3a 20 4f 70 74 69 6f 6e   /* NOTE: Option
24b80 61 6c 2e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20  al. */..        
24b90 20 20 20 20 73 74 72 69 6e 67 20 69 6e 76 61 72      string invar
24ba0 69 61 6e 74 2c 0d 0a 20 20 20 20 20 20 20 20 20  iant,..         
24bb0 20 20 20 73 74 72 69 6e 67 20 6e 61 6d 65 2c 0d     string name,.
24bc0 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72  .            str
24bd0 69 6e 67 20 64 65 73 63 72 69 70 74 69 6f 6e 2c  ing description,
24be0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74  ..            st
24bf0 72 69 6e 67 20 74 79 70 65 4e 61 6d 65 2c 0d 0a  ring typeName,..
24c00 20 20 20 20 20 20 20 20 20 20 20 20 41 73 73 65              Asse
24c10 6d 62 6c 79 4e 61 6d 65 20 61 73 73 65 6d 62 6c  mblyName assembl
24c20 79 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20  yName,..        
24c30 20 20 20 20 6f 62 6a 65 63 74 20 63 6c 69 65 6e      object clien
24c40 74 44 61 74 61 2c 0d 0a 20 20 20 20 20 20 20 20  tData,..        
24c50 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34 2c 0d      bool wow64,.
24c60 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f  .            boo
24c70 6c 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67  l throwOnMissing
24c80 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  ,..            b
24c90 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20  ool whatIf,..   
24ca0 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65           bool ve
24cb0 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20 20  rbose,..        
24cc0 20 20 20 20 72 65 66 20 62 6f 6f 6c 20 73 61 76      ref bool sav
24cd0 65 64 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ed,..           
24ce0 20 72 65 66 20 73 74 72 69 6e 67 20 65 72 72 6f   ref string erro
24cf0 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29  r..            )
24d00 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
24d10 20 20 20 20 20 20 20 20 20 69 66 20 28 72 65 67           if (reg
24d20 69 73 74 72 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  istry == null)..
24d30 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
24d40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
24d50 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64 20  rror = "invalid 
24d60 72 65 67 69 73 74 72 79 22 3b 0d 0a 20 20 20 20  registry";..    
24d70 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
24d80 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20  rn false;..     
24d90 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
24da0 20 20 20 20 20 20 20 20 69 66 20 28 66 72 61 6d          if (fram
24db0 65 77 6f 72 6b 4c 69 73 74 20 3d 3d 20 6e 75 6c  eworkList == nul
24dc0 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
24dd0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
24de0 20 20 20 65 72 72 6f 72 20 3d 20 22 69 6e 76 61     error = "inva
24df0 6c 69 64 20 66 72 61 6d 65 77 6f 72 6b 20 6c 69  lid framework li
24e00 73 74 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  st";..          
24e10 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
24e20 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se;..           
24e30 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
24e40 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65    MockRegistryKe
24e50 79 20 72 6f 6f 74 4b 65 79 20 3d 20 66 72 61 6d  y rootKey = fram
24e60 65 77 6f 72 6b 4c 69 73 74 2e 52 6f 6f 74 4b 65  eworkList.RootKe
24e70 79 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  y;....          
24e80 20 20 69 66 20 28 72 6f 6f 74 4b 65 79 20 3d 3d    if (rootKey ==
24e90 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
24ea0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
24eb0 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22         error = "
24ec0 69 6e 76 61 6c 69 64 20 72 6f 6f 74 20 6b 65 79  invalid root key
24ed0 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ";..            
24ee0 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
24ef0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
24f00 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
24f10 69 66 20 28 21 4f 62 6a 65 63 74 2e 52 65 66 65  if (!Object.Refe
24f20 72 65 6e 63 65 45 71 75 61 6c 73 28 72 6f 6f 74  renceEquals(root
24f30 4b 65 79 2c 20 72 65 67 69 73 74 72 79 2e 43 75  Key, registry.Cu
24f40 72 72 65 6e 74 55 73 65 72 29 20 26 26 0d 0a 20  rrentUser) &&.. 
24f50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 21                 !
24f60 4f 62 6a 65 63 74 2e 52 65 66 65 72 65 6e 63 65  Object.Reference
24f70 45 71 75 61 6c 73 28 72 6f 6f 74 4b 65 79 2c 20  Equals(rootKey, 
24f80 72 65 67 69 73 74 72 79 2e 4c 6f 63 61 6c 4d 61  registry.LocalMa
24f90 63 68 69 6e 65 29 29 0d 0a 20 20 20 20 20 20 20  chine))..       
24fa0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
24fb0 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
24fc0 22 72 6f 6f 74 20 6b 65 79 20 6d 75 73 74 20 62  "root key must b
24fd0 65 20 70 65 72 2d 75 73 65 72 20 6f 72 20 70 65  e per-user or pe
24fe0 72 2d 6d 61 63 68 69 6e 65 22 3b 0d 0a 20 20 20  r-machine";..   
24ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
25000 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20  urn false;..    
25010 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
25020 20 20 20 20 20 20 20 20 20 69 66 20 28 66 72 61           if (fra
25030 6d 65 77 6f 72 6b 4c 69 73 74 2e 4e 61 6d 65 73  meworkList.Names
25040 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
25050 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
25060 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20            error 
25070 3d 20 22 6e 6f 20 66 72 61 6d 65 77 6f 72 6b 20  = "no framework 
25080 6e 61 6d 65 73 20 66 6f 75 6e 64 22 3b 0d 0a 20  names found";.. 
25090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
250a0 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20  eturn false;..  
250b0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
250c0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 66             if (f
250d0 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 56 65 72  rameworkList.Ver
250e0 73 69 6f 6e 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  sions == null)..
250f0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
25100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
25110 72 72 6f 72 20 3d 20 22 6e 6f 20 66 72 61 6d 65  rror = "no frame
25120 77 6f 72 6b 20 76 65 72 73 69 6f 6e 73 20 66 6f  work versions fo
25130 75 6e 64 22 3b 0d 0a 20 20 20 20 20 20 20 20 20  und";..         
25140 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
25150 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lse;..          
25160 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
25170 20 20 20 69 66 20 28 66 72 61 6d 65 77 6f 72 6b     if (framework
25180 4c 69 73 74 2e 50 6c 61 74 66 6f 72 6d 4e 61 6d  List.PlatformNam
25190 65 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  es == null)..   
251a0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
251b0 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
251c0 72 20 3d 20 22 6e 6f 20 70 6c 61 74 66 6f 72 6d  r = "no platform
251d0 20 6e 61 6d 65 73 20 66 6f 75 6e 64 22 3b 0d 0a   names found";..
251e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
251f0 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20  return false;.. 
25200 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
25210 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
25220 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 4e 61  frameworkList.Na
25230 6d 65 73 2e 43 6f 75 6e 74 20 21 3d 20 66 72 61  mes.Count != fra
25240 6d 65 77 6f 72 6b 4c 69 73 74 2e 50 6c 61 74 66  meworkList.Platf
25250 6f 72 6d 4e 61 6d 65 73 2e 43 6f 75 6e 74 29 0d  ormNames.Count).
25260 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
25270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25280 65 72 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46  error = String.F
25290 6f 72 6d 61 74 28 22 66 72 61 6d 65 77 6f 72 6b  ormat("framework
252a0 20 6e 61 6d 65 20 63 6f 75 6e 74 20 7b 30 7d 20   name count {0} 
252b0 64 6f 65 73 20 6e 6f 74 20 22 20 2b 0d 0a 20 20  does not " +..  
252c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
252d0 20 20 22 6d 61 74 63 68 20 70 6c 61 74 66 6f 72    "match platfor
252e0 6d 20 6e 61 6d 65 20 63 6f 75 6e 74 20 7b 31 7d  m name count {1}
252f0 22 2c 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74  ", frameworkList
25300 2e 4e 61 6d 65 73 2e 43 6f 75 6e 74 2c 0d 0a 20  .Names.Count,.. 
25310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25320 20 20 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74     frameworkList
25330 2e 50 6c 61 74 66 6f 72 6d 4e 61 6d 65 73 2e 43  .PlatformNames.C
25340 6f 75 6e 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  ount);....      
25350 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
25360 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20   false;..       
25370 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
25380 20 20 20 20 20 20 66 6f 72 20 28 69 6e 74 20 69        for (int i
25390 6e 64 65 78 20 3d 20 30 3b 20 69 6e 64 65 78 20  ndex = 0; index 
253a0 3c 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e  < frameworkList.
253b0 4e 61 6d 65 73 2e 43 6f 75 6e 74 3b 20 69 6e 64  Names.Count; ind
253c0 65 78 2b 2b 29 0d 0a 20 20 20 20 20 20 20 20 20  ex++)..         
253d0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
253e0 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
253f0 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54            // NOT
25400 45 3a 20 47 72 61 62 20 74 68 65 20 6e 61 6d 65  E: Grab the name
25410 20 6f 66 20 74 68 65 20 66 72 61 6d 65 77 6f 72   of the framewor
25420 6b 20 28 65 2e 67 2e 20 22 2e 4e 45 54 46 72 61  k (e.g. ".NETFra
25430 6d 65 77 6f 72 6b 22 29 0d 0a 20 20 20 20 20 20  mework")..      
25440 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
25450 20 20 20 61 6e 64 20 74 68 65 20 6e 61 6d 65 20     and the name 
25460 6f 66 20 74 68 65 20 70 6c 61 74 66 6f 72 6d 20  of the platform 
25470 28 65 2e 67 2e 20 22 57 69 6e 64 6f 77 73 43 45  (e.g. "WindowsCE
25480 22 29 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ")...           
25490 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
254a0 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
254b0 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 20 3d 20  frameworkName = 
254c0 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 4e 61  frameworkList.Na
254d0 6d 65 73 5b 69 6e 64 65 78 5d 3b 0d 0a 20 20 20  mes[index];..   
254e0 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72               str
254f0 69 6e 67 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65  ing platformName
25500 20 3d 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74   = frameworkList
25510 2e 50 6c 61 74 66 6f 72 6d 4e 61 6d 65 73 5b 69  .PlatformNames[i
25520 6e 64 65 78 5d 3b 0d 0a 0d 0a 20 20 20 20 20 20  ndex];....      
25530 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
25540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
25550 20 4e 4f 54 45 3a 20 53 6b 69 70 20 61 6c 6c 20   NOTE: Skip all 
25560 6e 6f 6e 2d 64 65 73 6b 74 6f 70 20 66 72 61 6d  non-desktop fram
25570 65 77 6f 72 6b 73 20 28 69 2e 65 2e 20 69 66 20  eworks (i.e. if 
25580 74 68 65 20 70 6c 61 74 66 6f 72 6d 0d 0a 20 20  the platform..  
25590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
255a0 20 20 20 20 20 20 20 6e 61 6d 65 20 69 73 20 6e         name is n
255b0 6f 74 20 6e 75 6c 6c 29 2e 0d 0a 20 20 20 20 20  ot null)...     
255c0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
255d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
255e0 66 20 28 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 20  f (platformName 
255f0 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  != null)..      
25600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
25610 6e 74 69 6e 75 65 3b 0d 0a 0d 0a 20 20 20 20 20  ntinue;....     
25620 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
25630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
25640 2f 20 4e 4f 54 45 3a 20 47 72 61 62 20 74 68 65  / NOTE: Grab the
25650 20 73 75 70 70 6f 72 74 65 64 20 76 65 72 73 69   supported versi
25660 6f 6e 73 20 6f 66 20 74 68 69 73 20 70 61 72 74  ons of this part
25670 69 63 75 6c 61 72 0d 0a 20 20 20 20 20 20 20 20  icular..        
25680 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
25690 20 66 72 61 6d 65 77 6f 72 6b 2e 0d 0a 20 20 20   framework...   
256a0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
256b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
256c0 20 56 65 72 73 69 6f 6e 4c 69 73 74 20 66 72 61   VersionList fra
256d0 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 4c 69 73  meworkVersionLis
256e0 74 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  t;....          
256f0 20 20 20 20 20 20 69 66 20 28 76 65 72 73 69 6f        if (versio
25700 6e 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  n != null)..    
25710 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
25720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25730 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
25740 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f             // NO
25750 54 45 3a 20 4d 61 6e 75 61 6c 20 6f 76 65 72 72  TE: Manual overr
25760 69 64 65 20 6f 66 20 74 68 65 20 2a 4f 4e 45 2a  ide of the *ONE*
25770 20 66 72 61 6d 65 77 6f 72 6b 20 76 65 72 73 69   framework versi
25780 6f 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  on..            
25790 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
257a0 20 74 6f 20 70 72 6f 63 65 73 73 2e 0d 0a 20 20   to process...  
257b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
257c0 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
257d0 20 20 20 20 20 20 20 20 20 20 66 72 61 6d 65 77            framew
257e0 6f 72 6b 56 65 72 73 69 6f 6e 4c 69 73 74 20 3d  orkVersionList =
257f0 20 6e 65 77 20 56 65 72 73 69 6f 6e 4c 69 73 74   new VersionList
25800 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ();..           
25810 20 20 20 20 20 20 20 20 20 66 72 61 6d 65 77 6f           framewo
25820 72 6b 56 65 72 73 69 6f 6e 4c 69 73 74 2e 41 64  rkVersionList.Ad
25830 64 28 6e 65 77 20 56 65 72 73 69 6f 6e 28 76 65  d(new Version(ve
25840 72 73 69 6f 6e 29 29 3b 0d 0a 20 20 20 20 20 20  rsion));..      
25850 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
25860 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73               els
25870 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..             
25880 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
25890 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21 66            if (!f
258a0 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 56 65 72  rameworkList.Ver
258b0 73 69 6f 6e 73 2e 54 72 79 47 65 74 56 61 6c 75  sions.TryGetValu
258c0 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
258d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
258e0 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c 20 6f  frameworkName, o
258f0 75 74 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73  ut frameworkVers
25900 69 6f 6e 4c 69 73 74 29 20 7c 7c 0d 0a 20 20 20  ionList) ||..   
25910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25920 20 20 20 20 20 28 66 72 61 6d 65 77 6f 72 6b 56       (frameworkV
25930 65 72 73 69 6f 6e 4c 69 73 74 20 3d 3d 20 6e 75  ersionList == nu
25940 6c 6c 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ll))..          
25950 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
25960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25970 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a       continue;..
25980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25990 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
259a0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
259b0 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 65              fore
259c0 61 63 68 20 28 56 65 72 73 69 6f 6e 20 66 72 61  ach (Version fra
259d0 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 20 69 6e  meworkVersion in
259e0 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f   frameworkVersio
259f0 6e 4c 69 73 74 29 0d 0a 20 20 20 20 20 20 20 20  nList)..        
25a00 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
25a10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
25a20 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64  raceOps.DebugAnd
25a30 54 72 61 63 65 28 54 72 61 63 65 50 72 69 6f 72  Trace(TracePrior
25a40 69 74 79 2e 4c 6f 77 65 72 2c 0d 0a 20 20 20 20  ity.Lower,..    
25a50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25a60 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63      debugCallbac
25a70 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b  k, traceCallback
25a80 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  , String.Format(
25a90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
25aa0 20 20 20 20 20 20 20 20 20 20 22 66 72 61 6d 65            "frame
25ab0 77 6f 72 6b 4e 61 6d 65 20 3d 20 7b 30 7d 2c 20  workName = {0}, 
25ac0 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e  frameworkVersion
25ad0 20 3d 20 7b 31 7d 2c 20 22 20 2b 0d 0a 20 20 20   = {1}, " +..   
25ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25af0 20 20 20 20 20 22 70 6c 61 74 66 6f 72 6d 4e 61       "platformNa
25b00 6d 65 20 3d 20 7b 32 7d 22 2c 20 46 6f 72 44 69  me = {2}", ForDi
25b10 73 70 6c 61 79 28 66 72 61 6d 65 77 6f 72 6b 4e  splay(frameworkN
25b20 61 6d 65 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  ame),..         
25b30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46                 F
25b40 6f 72 44 69 73 70 6c 61 79 28 66 72 61 6d 65 77  orDisplay(framew
25b50 6f 72 6b 56 65 72 73 69 6f 6e 29 2c 0d 0a 20 20  orkVersion),..  
25b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25b70 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79        ForDisplay
25b80 28 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 29 29 2c  (platformName)),
25b90 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
25ba0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
25bb0 20 20 20 20 20 20 20 20 69 66 20 28 21 48 61 76          if (!Hav
25bc0 65 46 72 61 6d 65 77 6f 72 6b 44 69 72 65 63 74  eFrameworkDirect
25bd0 6f 72 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ory(..          
25be0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25bf0 20 20 72 6f 6f 74 4b 65 79 2c 20 66 72 61 6d 65    rootKey, frame
25c00 77 6f 72 6b 4e 61 6d 65 2c 20 66 72 61 6d 65 77  workName, framew
25c10 6f 72 6b 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20  orkVersion,..   
25c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25c30 20 20 20 20 20 20 20 20 20 70 6c 61 74 66 6f 72           platfor
25c40 6d 4e 61 6d 65 2c 20 77 6f 77 36 34 2c 20 77 68  mName, wow64, wh
25c50 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 29 0d  atIf, verbose)).
25c60 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
25c70 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
25c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25c90 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e  TraceOps.DebugAn
25ca0 64 54 72 61 63 65 28 54 72 61 63 65 50 72 69 6f  dTrace(TracePrio
25cb0 72 69 74 79 2e 4c 6f 77 2c 0d 0a 20 20 20 20 20  rity.Low,..     
25cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25cd0 20 20 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c         debugCall
25ce0 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62  back, traceCallb
25cf0 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ack,..          
25d00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25d10 20 20 22 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72    ".NET Framewor
25d20 6b 20 64 69 72 65 63 74 6f 72 79 20 6e 6f 74 20  k directory not 
25d30 66 6f 75 6e 64 2c 20 73 6b 69 70 70 69 6e 67 2e  found, skipping.
25d40 2e 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ..",..          
25d50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25d60 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29    traceCategory)
25d70 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
25d80 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
25d90 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20  tinue;..        
25da0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
25db0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
25dc0 20 20 20 20 20 69 66 20 28 63 61 6c 6c 62 61 63       if (callbac
25dd0 6b 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  k == null)..    
25de0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25df0 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 0d      continue;...
25e00 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
25e10 20 20 20 20 20 73 74 72 69 6e 67 20 64 69 72 65       string dire
25e20 63 74 6f 72 79 20 3d 20 47 65 74 46 72 61 6d 65  ctory = GetFrame
25e30 77 6f 72 6b 44 69 72 65 63 74 6f 72 79 28 0d 0a  workDirectory(..
25e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25e50 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c          rootKey,
25e60 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f   frameworkVersio
25e70 6e 2c 20 77 6f 77 36 34 2c 20 77 68 61 74 49 66  n, wow64, whatIf
25e80 2c 20 76 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20  , verbose);.... 
25e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25ea0 20 20 20 69 66 20 28 53 74 72 69 6e 67 2e 49 73     if (String.Is
25eb0 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 64 69 72 65  NullOrEmpty(dire
25ec0 63 74 6f 72 79 29 29 0d 0a 20 20 20 20 20 20 20  ctory))..       
25ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
25ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25ef0 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73          TraceOps
25f00 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 54  .DebugAndTrace(T
25f10 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77  racePriority.Low
25f20 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
25f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
25f40 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72  ebugCallback, tr
25f50 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72  aceCallback, Str
25f60 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
25f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25f80 20 20 20 20 20 20 20 20 20 22 2e 4e 45 54 20 46           ".NET F
25f90 72 61 6d 65 77 6f 72 6b 20 7b 30 7d 20 64 69 72  ramework {0} dir
25fa0 65 63 74 6f 72 79 20 69 73 20 69 6e 76 61 6c 69  ectory is invali
25fb0 64 2c 20 22 20 2b 0d 0a 20 20 20 20 20 20 20 20  d, " +..        
25fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25fd0 20 20 20 20 22 73 6b 69 70 70 69 6e 67 2e 2e 2e      "skipping...
25fe0 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 66 72  ", ForDisplay(fr
25ff0 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 29 29  ameworkVersion))
26000 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
26010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
26020 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
26030 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
26040 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e            contin
26050 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
26060 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
26070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26080 20 20 64 69 72 65 63 74 6f 72 79 20 3d 20 50 61    directory = Pa
26090 74 68 2e 43 6f 6d 62 69 6e 65 28 64 69 72 65 63  th.Combine(direc
260a0 74 6f 72 79 2c 20 22 43 6f 6e 66 69 67 22 29 3b  tory, "Config");
260b0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
260c0 20 20 20 20 20 20 20 20 69 66 20 28 21 44 69 72          if (!Dir
260d0 65 63 74 6f 72 79 2e 45 78 69 73 74 73 28 64 69  ectory.Exists(di
260e0 72 65 63 74 6f 72 79 29 29 0d 0a 20 20 20 20 20  rectory))..     
260f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
26100 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
26110 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f            TraceO
26120 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65  ps.DebugAndTrace
26130 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c  (TracePriority.L
26140 6f 77 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ow,..           
26150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26160 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20   debugCallback, 
26170 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53  traceCallback, S
26180 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
26190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
261a0 20 20 20 20 20 20 20 20 20 20 20 22 2e 4e 45 54             ".NET
261b0 20 46 72 61 6d 65 77 6f 72 6b 20 7b 30 7d 20 64   Framework {0} d
261c0 69 72 65 63 74 6f 72 79 20 7b 31 7d 20 64 6f 65  irectory {1} doe
261d0 73 20 6e 6f 74 20 22 20 2b 0d 0a 20 20 20 20 20  s not " +..     
261e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
261f0 20 20 20 20 20 20 20 22 65 78 69 73 74 2c 20 73         "exist, s
26200 6b 69 70 70 69 6e 67 2e 2e 2e 22 2c 20 46 6f 72  kipping...", For
26210 44 69 73 70 6c 61 79 28 66 72 61 6d 65 77 6f 72  Display(framewor
26220 6b 56 65 72 73 69 6f 6e 29 2c 0d 0a 20 20 20 20  kVersion),..    
26230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26240 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c          ForDispl
26250 61 79 28 64 69 72 65 63 74 6f 72 79 29 29 2c 20  ay(directory)), 
26260 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
26270 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
26280 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69             conti
26290 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  nue;..          
262a0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
262b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
262c0 20 20 20 73 74 72 69 6e 67 20 66 69 6c 65 4e 61     string fileNa
262d0 6d 65 20 3d 20 50 61 74 68 2e 43 6f 6d 62 69 6e  me = Path.Combin
262e0 65 28 64 69 72 65 63 74 6f 72 79 2c 20 22 6d 61  e(directory, "ma
262f0 63 68 69 6e 65 2e 63 6f 6e 66 69 67 22 29 3b 0d  chine.config");.
26300 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
26310 20 20 20 20 20 20 20 69 66 20 28 21 46 69 6c 65         if (!File
26320 2e 45 78 69 73 74 73 28 66 69 6c 65 4e 61 6d 65  .Exists(fileName
26330 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
26340 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
26350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26360 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75     TraceOps.Debu
26370 67 41 6e 64 54 72 61 63 65 28 54 72 61 63 65 50  gAndTrace(TraceP
26380 72 69 6f 72 69 74 79 2e 4c 6f 77 2c 0d 0a 20 20  riority.Low,..  
26390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
263a0 20 20 20 20 20 20 20 20 20 20 64 65 62 75 67 43            debugC
263b0 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61  allback, traceCa
263c0 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46  llback, String.F
263d0 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
263e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
263f0 20 20 20 20 22 2e 4e 45 54 20 46 72 61 6d 65 77      ".NET Framew
26400 6f 72 6b 20 7b 30 7d 20 66 69 6c 65 20 7b 31 7d  ork {0} file {1}
26410 20 64 6f 65 73 20 6e 6f 74 20 65 78 69 73 74 2c   does not exist,
26420 20 22 20 2b 0d 0a 20 20 20 20 20 20 20 20 20 20   " +..          
26430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26440 20 20 22 73 6b 69 70 70 69 6e 67 2e 2e 2e 22 2c    "skipping...",
26450 20 46 6f 72 44 69 73 70 6c 61 79 28 66 72 61 6d   ForDisplay(fram
26460 65 77 6f 72 6b 56 65 72 73 69 6f 6e 29 2c 0d 0a  eworkVersion),..
26470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26480 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44              ForD
26490 69 73 70 6c 61 79 28 66 69 6c 65 4e 61 6d 65 29  isplay(fileName)
264a0 29 2c 20 74 72 61 63 65 43 61 74 65 67 6f 72 79  ), traceCategory
264b0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
264c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
264d0 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20  ntinue;..       
264e0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
264f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
26500 20 20 20 20 20 20 62 6f 6f 6c 20 6c 6f 63 61 6c        bool local
26510 53 61 76 65 64 20 3d 20 66 61 6c 73 65 3b 0d 0a  Saved = false;..
26520 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
26530 20 20 20 20 20 20 69 66 20 28 21 63 61 6c 6c 62        if (!callb
26540 61 63 6b 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ack(..          
26550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26560 20 20 66 69 6c 65 4e 61 6d 65 2c 20 69 6e 76 61    fileName, inva
26570 72 69 61 6e 74 2c 20 6e 61 6d 65 2c 20 64 65 73  riant, name, des
26580 63 72 69 70 74 69 6f 6e 2c 20 74 79 70 65 4e 61  cription, typeNa
26590 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me,..           
265a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
265b0 20 61 73 73 65 6d 62 6c 79 4e 61 6d 65 2c 20 63   assemblyName, c
265c0 6c 69 65 6e 74 44 61 74 61 2c 20 77 6f 77 36 34  lientData, wow64
265d0 2c 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67  , throwOnMissing
265e0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
265f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 77                 w
26600 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 2c 20  hatIf, verbose, 
26610 72 65 66 20 6c 6f 63 61 6c 53 61 76 65 64 2c 20  ref localSaved, 
26620 72 65 66 20 65 72 72 6f 72 29 29 0d 0a 20 20 20  ref error))..   
26630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26640 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
26650 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
26660 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20  rn false;..     
26670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
26680 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
26690 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20        else..    
266a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
266b0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
266c0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6c             if (l
266d0 6f 63 61 6c 53 61 76 65 64 20 26 26 20 21 73 61  ocalSaved && !sa
266e0 76 65 64 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ved)..          
266f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26700 20 20 73 61 76 65 64 20 3d 20 74 72 75 65 3b 0d    saved = true;.
26710 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
26720 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76             if (v
26730 65 72 62 6f 73 65 29 0d 0a 20 20 20 20 20 20 20  erbose)..       
26740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26750 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65       TraceOps.De
26760 62 75 67 41 6e 64 54 72 61 63 65 28 54 72 61 63  bugAndTrace(Trac
26770 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74  ePriority.Lowest
26780 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
26790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
267a0 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b     debugCallback
267b0 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c  , traceCallback,
267c0 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d   String.Format(.
267d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
267e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
267f0 20 22 6c 6f 63 61 6c 53 61 76 65 64 20 3d 20 7b   "localSaved = {
26800 30 7d 2c 20 73 61 76 65 64 20 3d 20 7b 31 7d 22  0}, saved = {1}"
26810 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
26820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26830 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 6c 6f     ForDisplay(lo
26840 63 61 6c 53 61 76 65 64 29 2c 20 46 6f 72 44 69  calSaved), ForDi
26850 73 70 6c 61 79 28 73 61 76 65 64 29 29 2c 0d 0a  splay(saved)),..
26860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26880 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
26890 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
268a0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
268b0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
268c0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
268d0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74          return t
268e0 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  rue;..        }.
268f0 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
26900 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26910 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26920 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26930 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26940 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 5b 4d  //....        [M
26950 65 74 68 6f 64 49 6d 70 6c 28 4d 65 74 68 6f 64  ethodImpl(Method
26960 49 6d 70 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e  ImplOptions.NoIn
26970 6c 69 6e 69 6e 67 29 5d 0d 0a 20 20 20 20 20 20  lining)]..      
26980 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63    private static
26990 20 62 6f 6f 6c 20 46 6f 72 45 61 63 68 46 72 61   bool ForEachFra
269a0 6d 65 77 6f 72 6b 52 65 67 69 73 74 72 79 28 0d  meworkRegistry(.
269b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 4d 6f 63  .            Moc
269c0 6b 52 65 67 69 73 74 72 79 20 72 65 67 69 73 74  kRegistry regist
269d0 72 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ry,..           
269e0 20 46 72 61 6d 65 77 6f 72 6b 4c 69 73 74 20 66   FrameworkList f
269f0 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2c 0d 0a 20  rameworkList,.. 
26a00 20 20 20 20 20 20 20 20 20 20 20 46 72 61 6d 65             Frame
26a10 77 6f 72 6b 52 65 67 69 73 74 72 79 43 61 6c 6c  workRegistryCall
26a20 62 61 63 6b 20 63 61 6c 6c 62 61 63 6b 2c 0d 0a  back callback,..
26a30 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
26a40 6e 67 20 76 65 72 73 69 6f 6e 2c 20 2f 2a 20 4e  ng version, /* N
26a50 4f 54 45 3a 20 4f 70 74 69 6f 6e 61 6c 2e 20 2a  OTE: Optional. *
26a60 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6f  /..            o
26a70 62 6a 65 63 74 20 63 6c 69 65 6e 74 44 61 74 61  bject clientData
26a80 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  ,..            b
26a90 6f 6f 6c 20 77 6f 77 36 34 2c 0d 0a 20 20 20 20  ool wow64,..    
26aa0 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 74 68 72          bool thr
26ab0 6f 77 4f 6e 4d 69 73 73 69 6e 67 2c 0d 0a 20 20  owOnMissing,..  
26ac0 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77            bool w
26ad0 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20  hatIf,..        
26ae0 20 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65      bool verbose
26af0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  ,..            r
26b00 65 66 20 73 74 72 69 6e 67 20 65 72 72 6f 72 0d  ef string error.
26b10 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a  .            )..
26b20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
26b30 20 20 20 20 20 20 20 69 66 20 28 72 65 67 69 73         if (regis
26b40 74 72 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  try == null)..  
26b50 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
26b60 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
26b70 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64 20 72 65  or = "invalid re
26b80 67 69 73 74 72 79 22 3b 0d 0a 20 20 20 20 20 20  gistry";..      
26b90 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
26ba0 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20   false;..       
26bb0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
26bc0 20 20 20 20 20 20 69 66 20 28 66 72 61 6d 65 77        if (framew
26bd0 6f 72 6b 4c 69 73 74 20 3d 3d 20 6e 75 6c 6c 29  orkList == null)
26be0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
26bf0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
26c00 20 65 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69   error = "invali
26c10 64 20 66 72 61 6d 65 77 6f 72 6b 20 6c 69 73 74  d framework list
26c20 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ";..            
26c30 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
26c40 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
26c50 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
26c60 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20  MockRegistryKey 
26c70 72 6f 6f 74 4b 65 79 20 3d 20 66 72 61 6d 65 77  rootKey = framew
26c80 6f 72 6b 4c 69 73 74 2e 52 6f 6f 74 4b 65 79 3b  orkList.RootKey;
26c90 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
26ca0 69 66 20 28 72 6f 6f 74 4b 65 79 20 3d 3d 20 6e  if (rootKey == n
26cb0 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
26cc0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
26cd0 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 69 6e       error = "in
26ce0 76 61 6c 69 64 20 72 6f 6f 74 20 6b 65 79 22 3b  valid root key";
26cf0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
26d00 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
26d10 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
26d20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
26d30 20 28 21 4f 62 6a 65 63 74 2e 52 65 66 65 72 65   (!Object.Refere
26d40 6e 63 65 45 71 75 61 6c 73 28 72 6f 6f 74 4b 65  nceEquals(rootKe
26d50 79 2c 20 72 65 67 69 73 74 72 79 2e 43 75 72 72  y, registry.Curr
26d60 65 6e 74 55 73 65 72 29 20 26 26 0d 0a 20 20 20  entUser) &&..   
26d70 20 20 20 20 20 20 20 20 20 20 20 20 20 21 4f 62               !Ob
26d80 6a 65 63 74 2e 52 65 66 65 72 65 6e 63 65 45 71  ject.ReferenceEq
26d90 75 61 6c 73 28 72 6f 6f 74 4b 65 79 2c 20 72 65  uals(rootKey, re
26da0 67 69 73 74 72 79 2e 4c 6f 63 61 6c 4d 61 63 68  gistry.LocalMach
26db0 69 6e 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ine))..         
26dc0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
26dd0 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 72        error = "r
26de0 6f 6f 74 20 6b 65 79 20 6d 75 73 74 20 62 65 20  oot key must be 
26df0 70 65 72 2d 75 73 65 72 20 6f 72 20 70 65 72 2d  per-user or per-
26e00 6d 61 63 68 69 6e 65 22 3b 0d 0a 20 20 20 20 20  machine";..     
26e10 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
26e20 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  n false;..      
26e30 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
26e40 20 20 20 20 20 20 20 69 66 20 28 66 72 61 6d 65         if (frame
26e50 77 6f 72 6b 4c 69 73 74 2e 4e 61 6d 65 73 20 3d  workList.Names =
26e60 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
26e70 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
26e80 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
26e90 22 6e 6f 20 66 72 61 6d 65 77 6f 72 6b 20 6e 61  "no framework na
26ea0 6d 65 73 20 66 6f 75 6e 64 22 3b 0d 0a 20 20 20  mes found";..   
26eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
26ec0 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20  urn false;..    
26ed0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
26ee0 20 20 20 20 20 20 20 20 20 69 66 20 28 66 72 61           if (fra
26ef0 6d 65 77 6f 72 6b 4c 69 73 74 2e 56 65 72 73 69  meworkList.Versi
26f00 6f 6e 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  ons == null)..  
26f10 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
26f20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
26f30 6f 72 20 3d 20 22 6e 6f 20 66 72 61 6d 65 77 6f  or = "no framewo
26f40 72 6b 20 76 65 72 73 69 6f 6e 73 20 66 6f 75 6e  rk versions foun
26f50 64 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  d";..           
26f60 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
26f70 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
26f80 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
26f90 20 69 66 20 28 66 72 61 6d 65 77 6f 72 6b 4c 69   if (frameworkLi
26fa0 73 74 2e 50 6c 61 74 66 6f 72 6d 4e 61 6d 65 73  st.PlatformNames
26fb0 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
26fc0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
26fd0 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20            error 
26fe0 3d 20 22 6e 6f 20 70 6c 61 74 66 6f 72 6d 20 6e  = "no platform n
26ff0 61 6d 65 73 20 66 6f 75 6e 64 22 3b 0d 0a 20 20  ames found";..  
27000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
27010 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20  turn false;..   
27020 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
27030 20 20 20 20 20 20 20 20 20 20 69 66 20 28 66 72            if (fr
27040 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 4e 61 6d 65  ameworkList.Name
27050 73 2e 43 6f 75 6e 74 20 21 3d 20 66 72 61 6d 65  s.Count != frame
27060 77 6f 72 6b 4c 69 73 74 2e 50 6c 61 74 66 6f 72  workList.Platfor
27070 6d 4e 61 6d 65 73 2e 43 6f 75 6e 74 29 0d 0a 20  mNames.Count).. 
27080 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
27090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72                er
270a0 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72  ror = String.For
270b0 6d 61 74 28 22 66 72 61 6d 65 77 6f 72 6b 20 6e  mat("framework n
270c0 61 6d 65 20 63 6f 75 6e 74 20 7b 30 7d 20 64 6f  ame count {0} do
270d0 65 73 20 6e 6f 74 20 22 20 2b 0d 0a 20 20 20 20  es not " +..    
270e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
270f0 22 6d 61 74 63 68 20 70 6c 61 74 66 6f 72 6d 20  "match platform 
27100 6e 61 6d 65 20 63 6f 75 6e 74 20 7b 31 7d 22 2c  name count {1}",
27110 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 4e   frameworkList.N
27120 61 6d 65 73 2e 43 6f 75 6e 74 2c 0d 0a 20 20 20  ames.Count,..   
27130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27140 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 50   frameworkList.P
27150 6c 61 74 66 6f 72 6d 4e 61 6d 65 73 2e 43 6f 75  latformNames.Cou
27160 6e 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  nt);....        
27170 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
27180 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alse;..         
27190 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
271a0 20 20 20 20 66 6f 72 20 28 69 6e 74 20 69 6e 64      for (int ind
271b0 65 78 20 3d 20 30 3b 20 69 6e 64 65 78 20 3c 20  ex = 0; index < 
271c0 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 4e 61  frameworkList.Na
271d0 6d 65 73 2e 43 6f 75 6e 74 3b 20 69 6e 64 65 78  mes.Count; index
271e0 2b 2b 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ++)..           
271f0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
27200 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
27210 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a          // NOTE:
27220 20 47 72 61 62 20 74 68 65 20 6e 61 6d 65 20 6f   Grab the name o
27230 66 20 74 68 65 20 66 72 61 6d 65 77 6f 72 6b 20  f the framework 
27240 28 65 2e 67 2e 20 22 2e 4e 45 54 46 72 61 6d 65  (e.g. ".NETFrame
27250 77 6f 72 6b 22 29 0d 0a 20 20 20 20 20 20 20 20  work")..        
27260 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
27270 20 61 6e 64 20 74 68 65 20 6e 61 6d 65 20 6f 66   and the name of
27280 20 74 68 65 20 70 6c 61 74 66 6f 72 6d 20 28 65   the platform (e
27290 2e 67 2e 20 22 57 69 6e 64 6f 77 73 43 45 22 29  .g. "WindowsCE")
272a0 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
272b0 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
272c0 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 66 72         string fr
272d0 61 6d 65 77 6f 72 6b 4e 61 6d 65 20 3d 20 66 72  ameworkName = fr
272e0 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 4e 61 6d 65  ameworkList.Name
272f0 73 5b 69 6e 64 65 78 5d 3b 0d 0a 20 20 20 20 20  s[index];..     
27300 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
27310 67 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 20 3d  g platformName =
27320 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 50   frameworkList.P
27330 6c 61 74 66 6f 72 6d 4e 61 6d 65 73 5b 69 6e 64  latformNames[ind
27340 65 78 5d 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ex];....        
27350 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
27360 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e              // N
27370 4f 54 45 3a 20 47 72 61 62 20 74 68 65 20 73 75  OTE: Grab the su
27380 70 70 6f 72 74 65 64 20 76 65 72 73 69 6f 6e 73  pported versions
27390 20 6f 66 20 74 68 69 73 20 70 61 72 74 69 63 75   of this particu
273a0 6c 61 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20  lar..           
273b0 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 66 72       //       fr
273c0 61 6d 65 77 6f 72 6b 2e 0d 0a 20 20 20 20 20 20  amework...      
273d0 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
273e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 56 65                Ve
273f0 72 73 69 6f 6e 4c 69 73 74 20 66 72 61 6d 65 77  rsionList framew
27400 6f 72 6b 56 65 72 73 69 6f 6e 4c 69 73 74 3b 0d  orkVersionList;.
27410 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
27420 20 20 20 69 66 20 28 76 65 72 73 69 6f 6e 20 21     if (version !
27430 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
27440 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
27450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27460 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
27470 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a          // NOTE:
27480 20 4d 61 6e 75 61 6c 20 6f 76 65 72 72 69 64 65   Manual override
27490 20 6f 66 20 74 68 65 20 2a 4f 4e 45 2a 20 66 72   of the *ONE* fr
274a0 61 6d 65 77 6f 72 6b 20 76 65 72 73 69 6f 6e 0d  amework version.
274b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
274c0 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 74 6f       //       to
274d0 20 70 72 6f 63 65 73 73 2e 0d 0a 20 20 20 20 20   process...     
274e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
274f0 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
27500 20 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b         framework
27510 56 65 72 73 69 6f 6e 4c 69 73 74 20 3d 20 6e 65  VersionList = ne
27520 77 20 56 65 72 73 69 6f 6e 4c 69 73 74 28 29 3b  w VersionList();
27530 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
27540 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 56        frameworkV
27550 65 72 73 69 6f 6e 4c 69 73 74 2e 41 64 64 28 6e  ersionList.Add(n
27560 65 77 20 56 65 72 73 69 6f 6e 28 76 65 72 73 69  ew Version(versi
27570 6f 6e 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  on));..         
27580 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
27590 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a            else..
275a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
275b0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
275c0 20 20 20 20 20 20 20 69 66 20 28 21 66 72 61 6d         if (!fram
275d0 65 77 6f 72 6b 4c 69 73 74 2e 56 65 72 73 69 6f  eworkList.Versio
275e0 6e 73 2e 54 72 79 47 65 74 56 61 6c 75 65 28 0d  ns.TryGetValue(.
275f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
27600 20 20 20 20 20 20 20 20 20 20 20 20 20 66 72 61               fra
27610 6d 65 77 6f 72 6b 4e 61 6d 65 2c 20 6f 75 74 20  meworkName, out 
27620 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e  frameworkVersion
27630 4c 69 73 74 29 20 7c 7c 0d 0a 20 20 20 20 20 20  List) ||..      
27640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27650 20 20 28 66 72 61 6d 65 77 6f 72 6b 56 65 72 73    (frameworkVers
27660 69 6f 6e 4c 69 73 74 20 3d 3d 20 6e 75 6c 6c 29  ionList == null)
27670 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
27680 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
27690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
276a0 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20    continue;..   
276b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
276c0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
276d0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
276e0 20 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68           foreach
276f0 20 28 56 65 72 73 69 6f 6e 20 66 72 61 6d 65 77   (Version framew
27700 6f 72 6b 56 65 72 73 69 6f 6e 20 69 6e 20 66 72  orkVersion in fr
27710 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 4c 69  ameworkVersionLi
27720 73 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  st)..           
27730 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
27740 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
27750 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61  eOps.DebugAndTra
27760 63 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 79  ce(TracePriority
27770 2e 4c 6f 77 65 72 2c 0d 0a 20 20 20 20 20 20 20  .Lower,..       
27780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27790 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20   debugCallback, 
277a0 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53  traceCallback, S
277b0 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
277c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
277d0 20 20 20 20 20 20 20 22 66 72 61 6d 65 77 6f 72         "framewor
277e0 6b 4e 61 6d 65 20 3d 20 7b 30 7d 2c 20 66 72 61  kName = {0}, fra
277f0 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 20 3d 20  meworkVersion = 
27800 7b 31 7d 2c 20 22 20 2b 0d 0a 20 20 20 20 20 20  {1}, " +..      
27810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27820 20 20 22 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 20    "platformName 
27830 3d 20 7b 32 7d 22 2c 20 46 6f 72 44 69 73 70 6c  = {2}", ForDispl
27840 61 79 28 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65  ay(frameworkName
27850 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
27860 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44              ForD
27870 69 73 70 6c 61 79 28 66 72 61 6d 65 77 6f 72 6b  isplay(framework
27880 56 65 72 73 69 6f 6e 29 2c 0d 0a 20 20 20 20 20  Version),..     
27890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
278a0 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 70 6c     ForDisplay(pl
278b0 61 74 66 6f 72 6d 4e 61 6d 65 29 29 2c 20 74 72  atformName)), tr
278c0 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  aceCategory);...
278d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
278e0 20 20 20 20 20 69 66 20 28 21 48 61 76 65 46 72       if (!HaveFr
278f0 61 6d 65 77 6f 72 6b 52 65 67 69 73 74 72 79 28  ameworkRegistry(
27900 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
27910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f                ro
27920 6f 74 4b 65 79 2c 20 66 72 61 6d 65 77 6f 72 6b  otKey, framework
27930 4e 61 6d 65 2c 20 66 72 61 6d 65 77 6f 72 6b 56  Name, frameworkV
27940 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20  ersion,..       
27950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27960 20 20 20 20 20 70 6c 61 74 66 6f 72 6d 4e 61 6d       platformNam
27970 65 2c 20 77 6f 77 36 34 2c 20 77 68 61 74 49 66  e, wow64, whatIf
27980 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a 20 20 20  , verbose))..   
27990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
279a0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
279b0 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
279c0 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61  eOps.DebugAndTra
279d0 63 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 79  ce(TracePriority
279e0 2e 4c 6f 77 2c 0d 0a 20 20 20 20 20 20 20 20 20  .Low,..         
279f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27a00 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b     debugCallback
27a10 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c  , traceCallback,
27a20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
27a30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2e                ".
27a40 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b 20 72 65  NET Framework re
27a50 67 69 73 74 72 79 20 6e 6f 74 20 66 6f 75 6e 64  gistry not found
27a60 2c 20 73 6b 69 70 70 69 6e 67 2e 2e 2e 22 2c 0d  , skipping...",.
27a70 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
27a80 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
27a90 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
27aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27ab0 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65          continue
27ac0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
27ad0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
27ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27af0 69 66 20 28 63 61 6c 6c 62 61 63 6b 20 3d 3d 20  if (callback == 
27b00 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
27b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
27b20 6f 6e 74 69 6e 75 65 3b 0d 0a 0d 0a 20 20 20 20  ontinue;....    
27b30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27b40 69 66 20 28 21 63 61 6c 6c 62 61 63 6b 28 0d 0a  if (!callback(..
27b50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27b60 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74              root
27b70 4b 65 79 2c 20 66 72 61 6d 65 77 6f 72 6b 4e 61  Key, frameworkNa
27b80 6d 65 2c 20 66 72 61 6d 65 77 6f 72 6b 56 65 72  me, frameworkVer
27b90 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20  sion,..         
27ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27bb0 20 20 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 2c     platformName,
27bc0 20 63 6c 69 65 6e 74 44 61 74 61 2c 20 77 6f 77   clientData, wow
27bd0 36 34 2c 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69  64, throwOnMissi
27be0 6e 67 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ng,..           
27bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27c00 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65   whatIf, verbose
27c10 2c 20 72 65 66 20 65 72 72 6f 72 29 29 0d 0a 20  , ref error)).. 
27c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27c30 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
27c40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
27c50 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20  turn false;..   
27c60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27c70 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
27c80 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
27c90 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
27ca0 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b      return true;
27cb0 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..   
27cc0 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d       #endregion.
27cd0 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
27ce0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27cf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27d00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27d10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27d20 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72  //....        #r
27d30 65 67 69 6f 6e 20 50 65 72 2d 56 69 73 75 61 6c  egion Per-Visual
27d40 20 53 74 75 64 69 6f 20 56 65 72 73 69 6f 6e 20   Studio Version 
27d50 48 61 6e 64 6c 69 6e 67 0d 0a 20 20 20 20 20 20  Handling..      
27d60 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63    private static
27d70 20 76 6f 69 64 20 49 6e 69 74 69 61 6c 69 7a 65   void Initialize
27d80 56 73 4c 69 73 74 28 0d 0a 20 20 20 20 20 20 20  VsList(..       
27d90 20 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72       MockRegistr
27da0 79 4b 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20  yKey rootKey,.. 
27db0 20 20 20 20 20 20 20 20 20 20 20 43 6f 6e 66 69             Confi
27dc0 67 75 72 61 74 69 6f 6e 20 63 6f 6e 66 69 67 75  guration configu
27dd0 72 61 74 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20  ration,..       
27de0 20 20 20 20 20 72 65 66 20 56 73 4c 69 73 74 20       ref VsList 
27df0 76 73 4c 69 73 74 0d 0a 20 20 20 20 20 20 20 20  vsList..        
27e00 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b      )..        {
27e10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
27e20 20 28 76 73 4c 69 73 74 20 3d 3d 20 6e 75 6c 6c   (vsList == null
27e30 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
27e40 20 20 20 76 73 4c 69 73 74 20 3d 20 6e 65 77 20     vsList = new 
27e50 56 73 4c 69 73 74 28 29 3b 0d 0a 0d 0a 20 20 20  VsList();....   
27e60 20 20 20 20 20 20 20 20 20 69 66 20 28 76 73 4c           if (vsL
27e70 69 73 74 2e 52 6f 6f 74 4b 65 79 20 3d 3d 20 6e  ist.RootKey == n
27e80 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
27e90 20 20 20 20 20 20 76 73 4c 69 73 74 2e 52 6f 6f        vsList.Roo
27ea0 74 4b 65 79 20 3d 20 72 6f 6f 74 4b 65 79 3b 0d  tKey = rootKey;.
27eb0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
27ec0 66 20 28 76 73 4c 69 73 74 2e 56 65 72 73 69 6f  f (vsList.Versio
27ed0 6e 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ns == null)..   
27ee0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
27ef0 20 20 20 20 20 20 20 20 20 20 20 20 76 73 4c 69              vsLi
27f00 73 74 2e 56 65 72 73 69 6f 6e 73 20 3d 20 6e 65  st.Versions = ne
27f10 77 20 56 65 72 73 69 6f 6e 4c 69 73 74 28 29 3b  w VersionList();
27f20 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
27f30 20 20 20 20 69 66 20 28 28 63 6f 6e 66 69 67 75      if ((configu
27f40 72 61 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 20  ration == null) 
27f50 7c 7c 20 21 63 6f 6e 66 69 67 75 72 61 74 69 6f  || !configuratio
27f60 6e 2e 4e 6f 56 73 32 30 30 35 29 0d 0a 20 20 20  n.NoVs2005)..   
27f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27f80 20 76 73 4c 69 73 74 2e 56 65 72 73 69 6f 6e 73   vsList.Versions
27f90 2e 41 64 64 28 6e 65 77 20 56 65 72 73 69 6f 6e  .Add(new Version
27fa0 28 38 2c 20 30 29 29 3b 20 2f 2f 20 32 30 30 35  (8, 0)); // 2005
27fb0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
27fc0 20 20 20 20 69 66 20 28 28 63 6f 6e 66 69 67 75      if ((configu
27fd0 72 61 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 20  ration == null) 
27fe0 7c 7c 20 21 63 6f 6e 66 69 67 75 72 61 74 69 6f  || !configuratio
27ff0 6e 2e 4e 6f 56 73 32 30 30 38 29 0d 0a 20 20 20  n.NoVs2008)..   
28000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28010 20 76 73 4c 69 73 74 2e 56 65 72 73 69 6f 6e 73   vsList.Versions
28020 2e 41 64 64 28 6e 65 77 20 56 65 72 73 69 6f 6e  .Add(new Version
28030 28 39 2c 20 30 29 29 3b 20 2f 2f 20 32 30 30 38  (9, 0)); // 2008
28040 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
28050 20 20 20 20 69 66 20 28 28 63 6f 6e 66 69 67 75      if ((configu
28060 72 61 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 20  ration == null) 
28070 7c 7c 20 21 63 6f 6e 66 69 67 75 72 61 74 69 6f  || !configuratio
28080 6e 2e 4e 6f 56 73 32 30 31 30 29 0d 0a 20 20 20  n.NoVs2010)..   
28090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
280a0 20 76 73 4c 69 73 74 2e 56 65 72 73 69 6f 6e 73   vsList.Versions
280b0 2e 41 64 64 28 6e 65 77 20 56 65 72 73 69 6f 6e  .Add(new Version
280c0 28 31 30 2c 20 30 29 29 3b 2f 2f 20 32 30 31 30  (10, 0));// 2010
280d0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
280e0 20 20 20 20 69 66 20 28 28 63 6f 6e 66 69 67 75      if ((configu
280f0 72 61 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 20  ration == null) 
28100 7c 7c 20 21 63 6f 6e 66 69 67 75 72 61 74 69 6f  || !configuratio
28110 6e 2e 4e 6f 56 73 32 30 31 32 29 0d 0a 20 20 20  n.NoVs2012)..   
28120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28130 20 76 73 4c 69 73 74 2e 56 65 72 73 69 6f 6e 73   vsList.Versions
28140 2e 41 64 64 28 6e 65 77 20 56 65 72 73 69 6f 6e  .Add(new Version
28150 28 31 31 2c 20 30 29 29 3b 2f 2f 20 32 30 31 32  (11, 0));// 2012
28160 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
28170 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....  
28180 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
28190 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
281a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
281b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
281c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
281d0 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
281e0 20 73 74 61 74 69 63 20 62 6f 6f 6c 20 48 61 76   static bool Hav
281f0 65 56 73 56 65 72 73 69 6f 6e 28 0d 0a 20 20 20  eVsVersion(..   
28200 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65 67           MockReg
28210 69 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79  istryKey rootKey
28220 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 56  ,..            V
28230 65 72 73 69 6f 6e 20 76 73 56 65 72 73 69 6f 6e  ersion vsVersion
28240 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  ,..            b
28250 6f 6f 6c 20 77 6f 77 36 34 2c 0d 0a 20 20 20 20  ool wow64,..    
28260 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61          bool wha
28270 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  tIf,..          
28280 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 0d 0a    bool verbose..
28290 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
282a0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
282b0 20 20 20 20 20 20 69 66 20 28 76 73 56 65 72 73        if (vsVers
282c0 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  ion == null)..  
282d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
282e0 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20  turn false;.... 
282f0 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
28300 67 20 6b 65 79 4e 61 6d 65 20 3d 20 47 65 74 56  g keyName = GetV
28310 73 4b 65 79 4e 61 6d 65 28 76 73 56 65 72 73 69  sKeyName(vsVersi
28320 6f 6e 2c 20 77 6f 77 36 34 29 3b 0d 0a 0d 0a 20  on, wow64);.... 
28330 20 20 20 20 20 20 20 20 20 20 20 75 73 69 6e 67             using
28340 20 28 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65   (MockRegistryKe
28350 79 20 6b 65 79 20 3d 20 52 65 67 69 73 74 72 79  y key = Registry
28360 48 65 6c 70 65 72 2e 4f 70 65 6e 53 75 62 4b 65  Helper.OpenSubKe
28370 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y(..            
28380 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c          rootKey,
28390 20 6b 65 79 4e 61 6d 65 2c 20 66 61 6c 73 65 2c   keyName, false,
283a0 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65   whatIf, verbose
283b0 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
283c0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
283d0 20 20 20 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75     if (key == nu
283e0 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
283f0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
28400 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  false;....      
28410 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74            object
28420 20 76 61 6c 75 65 20 3d 20 52 65 67 69 73 74 72   value = Registr
28430 79 48 65 6c 70 65 72 2e 47 65 74 56 61 6c 75 65  yHelper.GetValue
28440 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
28450 20 20 20 20 20 20 20 6b 65 79 2c 20 22 49 6e 73         key, "Ins
28460 74 61 6c 6c 44 69 72 22 2c 20 6e 75 6c 6c 2c 20  tallDir", null, 
28470 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29  whatIf, verbose)
28480 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
28490 20 20 20 20 20 69 66 20 28 21 28 76 61 6c 75 65       if (!(value
284a0 20 69 73 20 73 74 72 69 6e 67 29 29 0d 0a 20 20   is string))..  
284b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
284c0 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
284d0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
284e0 20 20 20 73 74 72 69 6e 67 20 64 69 72 65 63 74     string direct
284f0 6f 72 79 20 3d 20 28 73 74 72 69 6e 67 29 76 61  ory = (string)va
28500 6c 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  lue;....        
28510 20 20 20 20 20 20 20 20 69 66 20 28 53 74 72 69          if (Stri
28520 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79  ng.IsNullOrEmpty
28530 28 64 69 72 65 63 74 6f 72 79 29 29 0d 0a 20 20  (directory))..  
28540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28550 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
28560 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
28570 20 20 20 69 66 20 28 21 44 69 72 65 63 74 6f 72     if (!Director
28580 79 2e 45 78 69 73 74 73 28 64 69 72 65 63 74 6f  y.Exists(directo
28590 72 79 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ry))..          
285a0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
285b0 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20   false;....     
285c0 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
285d0 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63  Ops.DebugAndTrac
285e0 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e  e(TracePriority.
285f0 4c 6f 77 65 72 2c 0d 0a 20 20 20 20 20 20 20 20  Lower,..        
28600 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62 75              debu
28610 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65  gCallback, trace
28620 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67  Callback, String
28630 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  .Format(..      
28640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 56                "V
28650 69 73 75 61 6c 20 53 74 75 64 69 6f 20 7b 30 7d  isual Studio {0}
28660 20 66 6f 75 6e 64 20 69 6e 20 64 69 72 65 63 74   found in direct
28670 6f 72 79 20 7b 31 7d 2e 22 2c 0d 0a 20 20 20 20  ory {1}.",..    
28680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28690 46 6f 72 44 69 73 70 6c 61 79 28 76 73 56 65 72  ForDisplay(vsVer
286a0 73 69 6f 6e 29 2c 20 46 6f 72 44 69 73 70 6c 61  sion), ForDispla
286b0 79 28 64 69 72 65 63 74 6f 72 79 29 29 2c 0d 0a  y(directory)),..
286c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
286d0 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72      traceCategor
286e0 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
286f0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72         return tr
28700 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
28710 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d   }..        }...
28720 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
28730 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28740 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28750 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28760 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28770 0d 0a 0d 0a 20 20 20 20 20 20 20 20 5b 4d 65 74  ....        [Met
28780 68 6f 64 49 6d 70 6c 28 4d 65 74 68 6f 64 49 6d  hodImpl(MethodIm
28790 70 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e 6c 69  plOptions.NoInli
287a0 6e 69 6e 67 29 5d 0d 0a 20 20 20 20 20 20 20 20  ning)]..        
287b0 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 62  private static b
287c0 6f 6f 6c 20 46 6f 72 45 61 63 68 56 73 56 65 72  ool ForEachVsVer
287d0 73 69 6f 6e 52 65 67 69 73 74 72 79 28 0d 0a 20  sionRegistry(.. 
287e0 20 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52             MockR
287f0 65 67 69 73 74 72 79 20 72 65 67 69 73 74 72 79  egistry registry
28800 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 56  ,..            V
28810 73 4c 69 73 74 20 76 73 4c 69 73 74 2c 0d 0a 20  sList vsList,.. 
28820 20 20 20 20 20 20 20 20 20 20 20 56 69 73 75 61             Visua
28830 6c 53 74 75 64 69 6f 52 65 67 69 73 74 72 79 43  lStudioRegistryC
28840 61 6c 6c 62 61 63 6b 20 63 61 6c 6c 62 61 63 6b  allback callback
28850 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 50  ,..            P
28860 61 63 6b 61 67 65 20 70 61 63 6b 61 67 65 2c 0d  ackage package,.
28870 0a 20 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a  .            obj
28880 65 63 74 20 63 6c 69 65 6e 74 44 61 74 61 2c 0d  ect clientData,.
28890 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f  .            boo
288a0 6c 20 77 6f 77 36 34 2c 0d 0a 20 20 20 20 20 20  l wow64,..      
288b0 20 20 20 20 20 20 62 6f 6f 6c 20 74 68 72 6f 77        bool throw
288c0 4f 6e 4d 69 73 73 69 6e 67 2c 0d 0a 20 20 20 20  OnMissing,..    
288d0 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61          bool wha
288e0 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  tIf,..          
288f0 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 0d    bool verbose,.
28900 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66  .            ref
28910 20 73 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20   string error.. 
28920 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
28930 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
28940 20 20 20 20 20 69 66 20 28 72 65 67 69 73 74 72       if (registr
28950 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  y == null)..    
28960 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
28970 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72             error
28980 20 3d 20 22 69 6e 76 61 6c 69 64 20 72 65 67 69   = "invalid regi
28990 73 74 72 79 22 3b 0d 0a 20 20 20 20 20 20 20 20  stry";..        
289a0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
289b0 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alse;..         
289c0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
289d0 20 20 20 20 69 66 20 28 76 73 4c 69 73 74 20 3d      if (vsList =
289e0 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
289f0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
28a00 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
28a10 22 69 6e 76 61 6c 69 64 20 56 53 20 6c 69 73 74  "invalid VS list
28a20 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ";..            
28a30 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
28a40 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
28a50 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
28a60 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20  MockRegistryKey 
28a70 72 6f 6f 74 4b 65 79 20 3d 20 76 73 4c 69 73 74  rootKey = vsList
28a80 2e 52 6f 6f 74 4b 65 79 3b 0d 0a 0d 0a 20 20 20  .RootKey;....   
28a90 20 20 20 20 20 20 20 20 20 69 66 20 28 72 6f 6f           if (roo
28aa0 74 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  tKey == null).. 
28ab0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
28ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72                er
28ad0 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64 20 72  ror = "invalid r
28ae0 6f 6f 74 20 6b 65 79 22 3b 0d 0a 20 20 20 20 20  oot key";..     
28af0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
28b00 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  n false;..      
28b10 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
28b20 20 20 20 20 20 20 20 69 66 20 28 21 4f 62 6a 65         if (!Obje
28b30 63 74 2e 52 65 66 65 72 65 6e 63 65 45 71 75 61  ct.ReferenceEqua
28b40 6c 73 28 72 6f 6f 74 4b 65 79 2c 20 72 65 67 69  ls(rootKey, regi
28b50 73 74 72 79 2e 43 75 72 72 65 6e 74 55 73 65 72  stry.CurrentUser
28b60 29 20 26 26 0d 0a 20 20 20 20 20 20 20 20 20 20  ) &&..          
28b70 20 20 20 20 20 20 21 4f 62 6a 65 63 74 2e 52 65        !Object.Re
28b80 66 65 72 65 6e 63 65 45 71 75 61 6c 73 28 72 6f  ferenceEquals(ro
28b90 6f 74 4b 65 79 2c 20 72 65 67 69 73 74 72 79 2e  otKey, registry.
28ba0 4c 6f 63 61 6c 4d 61 63 68 69 6e 65 29 29 0d 0a  LocalMachine))..
28bb0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
28bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
28bd0 72 72 6f 72 20 3d 20 22 72 6f 6f 74 20 6b 65 79  rror = "root key
28be0 20 6d 75 73 74 20 62 65 20 70 65 72 2d 75 73 65   must be per-use
28bf0 72 20 6f 72 20 70 65 72 2d 6d 61 63 68 69 6e 65  r or per-machine
28c00 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ";..            
28c10 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
28c20 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
28c30 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
28c40 69 66 20 28 76 73 4c 69 73 74 2e 56 65 72 73 69  if (vsList.Versi
28c50 6f 6e 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  ons == null)..  
28c60 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
28c70 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
28c80 6f 72 20 3d 20 22 6e 6f 20 56 53 20 76 65 72 73  or = "no VS vers
28c90 69 6f 6e 73 20 66 6f 75 6e 64 22 3b 0d 0a 20 20  ions found";..  
28ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
28cb0 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20  turn false;..   
28cc0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
28cd0 20 20 20 20 20 20 20 20 20 20 66 6f 72 65 61 63            foreac
28ce0 68 20 28 56 65 72 73 69 6f 6e 20 76 73 56 65 72  h (Version vsVer
28cf0 73 69 6f 6e 20 69 6e 20 76 73 4c 69 73 74 2e 56  sion in vsList.V
28d00 65 72 73 69 6f 6e 73 29 0d 0a 20 20 20 20 20 20  ersions)..      
28d10 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
28d20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70           TraceOp
28d30 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28  s.DebugAndTrace(
28d40 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f  TracePriority.Lo
28d50 77 65 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  wer,..          
28d60 20 20 20 20 20 20 20 20 20 20 64 65 62 75 67 43            debugC
28d70 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61  allback, traceCa
28d80 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46  llback, String.F
28d90 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
28da0 20 20 20 20 20 20 20 20 20 20 20 20 22 76 73 56              "vsV
28db0 65 72 73 69 6f 6e 20 3d 20 7b 30 7d 22 2c 20 46  ersion = {0}", F
28dc0 6f 72 44 69 73 70 6c 61 79 28 76 73 56 65 72 73  orDisplay(vsVers
28dd0 69 6f 6e 29 29 2c 0d 0a 20 20 20 20 20 20 20 20  ion)),..        
28de0 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
28df0 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
28e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
28e10 66 20 28 21 48 61 76 65 56 73 56 65 72 73 69 6f  f (!HaveVsVersio
28e20 6e 28 72 6f 6f 74 4b 65 79 2c 20 76 73 56 65 72  n(rootKey, vsVer
28e30 73 69 6f 6e 2c 20 77 6f 77 36 34 2c 20 77 68 61  sion, wow64, wha
28e40 74 49 66 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a  tIf, verbose))..
28e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28e60 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
28e70 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e         TraceOps.
28e80 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 54 72  DebugAndTrace(Tr
28e90 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 2c  acePriority.Low,
28ea0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
28eb0 20 20 20 20 20 20 20 20 20 20 64 65 62 75 67 43            debugC
28ec0 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61  allback, traceCa
28ed0 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20  llback,..       
28ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28ef0 20 22 56 69 73 75 61 6c 20 53 74 75 64 69 6f 20   "Visual Studio 
28f00 76 65 72 73 69 6f 6e 20 6e 6f 74 20 66 6f 75 6e  version not foun
28f10 64 2c 20 73 6b 69 70 70 69 6e 67 2e 2e 2e 22 2c  d, skipping...",
28f20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
28f30 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
28f40 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20  ategory);....   
28f50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28f60 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20   continue;..    
28f70 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
28f80 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
28f90 20 69 66 20 28 63 61 6c 6c 62 61 63 6b 20 3d 3d   if (callback ==
28fa0 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
28fb0 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74              cont
28fc0 69 6e 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  inue;....       
28fd0 20 20 20 20 20 20 20 20 20 69 66 20 28 21 63 61           if (!ca
28fe0 6c 6c 62 61 63 6b 28 0d 0a 20 20 20 20 20 20 20  llback(..       
28ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29000 20 72 6f 6f 74 4b 65 79 2c 20 76 73 56 65 72 73   rootKey, vsVers
29010 69 6f 6e 2c 20 70 61 63 6b 61 67 65 2c 20 63 6c  ion, package, cl
29020 69 65 6e 74 44 61 74 61 2c 20 77 6f 77 36 34 2c  ientData, wow64,
29030 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
29040 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 4f            throwO
29050 6e 4d 69 73 73 69 6e 67 2c 20 77 68 61 74 49 66  nMissing, whatIf
29060 2c 20 76 65 72 62 6f 73 65 2c 20 72 65 66 20 65  , verbose, ref e
29070 72 72 6f 72 29 29 0d 0a 20 20 20 20 20 20 20 20  rror))..        
29080 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
29090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
290a0 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20  eturn false;..  
290b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
290c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
290d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
290e0 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20  turn true;..    
290f0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23      }..        #
29100 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20  endregion....   
29110 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
29120 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29130 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29140 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29150 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
29160 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20          #region 
29170 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 46 69  Configuration Fi
29180 6c 65 20 48 61 6e 64 6c 69 6e 67 0d 0a 20 20 20  le Handling..   
29190 20 20 20 20 20 5b 4d 65 74 68 6f 64 49 6d 70 6c       [MethodImpl
291a0 28 4d 65 74 68 6f 64 49 6d 70 6c 4f 70 74 69 6f  (MethodImplOptio
291b0 6e 73 2e 4e 6f 49 6e 6c 69 6e 69 6e 67 29 5d 0d  ns.NoInlining)].
291c0 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
291d0 20 73 74 61 74 69 63 20 62 6f 6f 6c 20 41 64 64   static bool Add
291e0 44 62 50 72 6f 76 69 64 65 72 46 61 63 74 6f 72  DbProviderFactor
291f0 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y(..            
29200 73 74 72 69 6e 67 20 66 69 6c 65 4e 61 6d 65 2c  string fileName,
29210 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74  ..            st
29220 72 69 6e 67 20 69 6e 76 61 72 69 61 6e 74 2c 0d  ring invariant,.
29230 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72  .            str
29240 69 6e 67 20 6e 61 6d 65 2c 0d 0a 20 20 20 20 20  ing name,..     
29250 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 64 65         string de
29260 73 63 72 69 70 74 69 6f 6e 2c 0d 0a 20 20 20 20  scription,..    
29270 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 74          string t
29280 79 70 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20  ypeName,..      
29290 20 20 20 20 20 20 41 73 73 65 6d 62 6c 79 4e 61        AssemblyNa
292a0 6d 65 20 61 73 73 65 6d 62 6c 79 4e 61 6d 65 2c  me assemblyName,
292b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
292c0 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20  ol whatIf,..    
292d0 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65 72          bool ver
292e0 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  bose,..         
292f0 20 20 20 72 65 66 20 62 6f 6f 6c 20 73 61 76 65     ref bool save
29300 64 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  d,..            
29310 72 65 66 20 73 74 72 69 6e 67 20 65 72 72 6f 72  ref string error
29320 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d  ..            ).
29330 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
29340 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 64 69 72          bool dir
29350 74 79 20 3d 20 66 61 6c 73 65 3b 0d 0a 20 20 20  ty = false;..   
29360 20 20 20 20 20 20 20 20 20 58 6d 6c 44 6f 63 75           XmlDocu
29370 6d 65 6e 74 20 64 6f 63 75 6d 65 6e 74 20 3d 20  ment document = 
29380 6e 65 77 20 58 6d 6c 44 6f 63 75 6d 65 6e 74 28  new XmlDocument(
29390 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
293a0 20 20 64 6f 63 75 6d 65 6e 74 2e 50 72 65 73 65    document.Prese
293b0 72 76 65 57 68 69 74 65 73 70 61 63 65 20 3d 20  rveWhitespace = 
293c0 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  true;..         
293d0 20 20 20 64 6f 63 75 6d 65 6e 74 2e 4c 6f 61 64     document.Load
293e0 28 66 69 6c 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20  (fileName);.... 
293f0 20 20 20 20 20 20 20 20 20 20 20 58 6d 6c 45 6c             XmlEl
29400 65 6d 65 6e 74 20 61 64 64 45 6c 65 6d 65 6e 74  ement addElement
29410 20 3d 20 64 6f 63 75 6d 65 6e 74 2e 53 65 6c 65   = document.Sele
29420 63 74 53 69 6e 67 6c 65 4e 6f 64 65 28 0d 0a 20  ctSingleNode(.. 
29430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53                 S
29440 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 58 50 61  tring.Format(XPa
29450 74 68 46 6f 72 41 64 64 45 6c 65 6d 65 6e 74 2c  thForAddElement,
29460 20 69 6e 76 61 72 69 61 6e 74 29 29 20 61 73 20   invariant)) as 
29470 58 6d 6c 45 6c 65 6d 65 6e 74 3b 0d 0a 0d 0a 20  XmlElement;.... 
29480 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 61             if (a
29490 64 64 45 6c 65 6d 65 6e 74 20 3d 3d 20 6e 75 6c  ddElement == nul
294a0 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
294b0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
294c0 20 20 20 73 74 72 69 6e 67 5b 5d 20 65 6c 65 6d     string[] elem
294d0 65 6e 74 4e 61 6d 65 73 20 3d 20 7b 0d 0a 20 20  entNames = {..  
294e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
294f0 20 20 22 73 79 73 74 65 6d 2e 64 61 74 61 22 2c    "system.data",
29500 20 22 44 62 50 72 6f 76 69 64 65 72 46 61 63 74   "DbProviderFact
29510 6f 72 69 65 73 22 0d 0a 20 20 20 20 20 20 20 20  ories"..        
29520 20 20 20 20 20 20 20 20 7d 3b 0d 0a 0d 0a 20 20          };....  
29530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 58 6d                Xm
29540 6c 45 6c 65 6d 65 6e 74 20 70 72 65 76 69 6f 75  lElement previou
29550 73 45 6c 65 6d 65 6e 74 20 3d 0d 0a 20 20 20 20  sElement =..    
29560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29570 64 6f 63 75 6d 65 6e 74 2e 44 6f 63 75 6d 65 6e  document.Documen
29580 74 45 6c 65 6d 65 6e 74 3b 20 2f 2a 20 63 6f 6e  tElement; /* con
29590 66 69 67 75 72 61 74 69 6f 6e 20 2a 2f 0d 0a 0d  figuration */...
295a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
295b0 20 66 6f 72 65 61 63 68 20 28 73 74 72 69 6e 67   foreach (string
295c0 20 65 6c 65 6d 65 6e 74 4e 61 6d 65 20 69 6e 20   elementName in 
295d0 65 6c 65 6d 65 6e 74 4e 61 6d 65 73 29 0d 0a 20  elementNames).. 
295e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
295f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
29600 20 20 20 20 20 20 61 64 64 45 6c 65 6d 65 6e 74        addElement
29610 20 3d 20 70 72 65 76 69 6f 75 73 45 6c 65 6d 65   = previousEleme
29620 6e 74 2e 53 65 6c 65 63 74 53 69 6e 67 6c 65 4e  nt.SelectSingleN
29630 6f 64 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ode(..          
29640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c                el
29650 65 6d 65 6e 74 4e 61 6d 65 29 20 61 73 20 58 6d  ementName) as Xm
29660 6c 45 6c 65 6d 65 6e 74 3b 0d 0a 0d 0a 20 20 20  lElement;....   
29670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29680 20 69 66 20 28 61 64 64 45 6c 65 6d 65 6e 74 20   if (addElement 
29690 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
296a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
296b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
296c0 20 20 20 20 20 20 20 20 20 61 64 64 45 6c 65 6d           addElem
296d0 65 6e 74 20 3d 20 64 6f 63 75 6d 65 6e 74 2e 43  ent = document.C
296e0 72 65 61 74 65 45 6c 65 6d 65 6e 74 28 0d 0a 20  reateElement(.. 
296f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29700 20 20 20 20 20 20 20 20 20 20 20 65 6c 65 6d 65             eleme
29710 6e 74 4e 61 6d 65 2c 20 53 74 72 69 6e 67 2e 45  ntName, String.E
29720 6d 70 74 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  mpty);....      
29730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29740 20 20 70 72 65 76 69 6f 75 73 45 6c 65 6d 65 6e    previousElemen
29750 74 2e 41 70 70 65 6e 64 43 68 69 6c 64 28 61 64  t.AppendChild(ad
29760 64 45 6c 65 6d 65 6e 74 29 3b 0d 0a 20 20 20 20  dElement);..    
29770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29780 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
29790 20 20 20 20 20 20 20 20 20 70 72 65 76 69 6f 75           previou
297a0 73 45 6c 65 6d 65 6e 74 20 3d 20 61 64 64 45 6c  sElement = addEl
297b0 65 6d 65 6e 74 3b 0d 0a 20 20 20 20 20 20 20 20  ement;..        
297c0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
297d0 20 20 20 20 20 20 20 20 20 20 20 20 20 61 64 64               add
297e0 45 6c 65 6d 65 6e 74 20 3d 20 64 6f 63 75 6d 65  Element = docume
297f0 6e 74 2e 43 72 65 61 74 65 45 6c 65 6d 65 6e 74  nt.CreateElement
29800 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
29810 20 20 20 20 20 20 20 22 61 64 64 22 2c 20 53 74         "add", St
29820 72 69 6e 67 2e 45 6d 70 74 79 29 3b 0d 0a 0d 0a  ring.Empty);....
29830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29840 70 72 65 76 69 6f 75 73 45 6c 65 6d 65 6e 74 2e  previousElement.
29850 41 70 70 65 6e 64 43 68 69 6c 64 28 61 64 64 45  AppendChild(addE
29860 6c 65 6d 65 6e 74 29 3b 0d 0a 0d 0a 20 20 20 20  lement);....    
29870 20 20 20 20 20 20 20 20 20 20 20 20 64 69 72 74              dirt
29880 79 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20  y = true;..     
29890 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
298a0 20 20 20 20 20 20 20 20 69 66 20 28 21 53 74 72          if (!Str
298b0 69 6e 67 2e 45 71 75 61 6c 73 28 61 64 64 45 6c  ing.Equals(addEl
298c0 65 6d 65 6e 74 2e 47 65 74 41 74 74 72 69 62 75  ement.GetAttribu
298d0 74 65 28 22 6e 61 6d 65 22 29 2c 0d 0a 20 20 20  te("name"),..   
298e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
298f0 20 6e 61 6d 65 2c 20 53 74 72 69 6e 67 43 6f 6d   name, StringCom
29900 70 61 72 69 73 6f 6e 2e 4f 72 64 69 6e 61 6c 29  parison.Ordinal)
29910 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
29920 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
29930 20 20 61 64 64 45 6c 65 6d 65 6e 74 2e 53 65 74    addElement.Set
29940 41 74 74 72 69 62 75 74 65 28 22 6e 61 6d 65 22  Attribute("name"
29950 2c 20 6e 61 6d 65 29 3b 0d 0a 20 20 20 20 20 20  , name);..      
29960 20 20 20 20 20 20 20 20 20 20 64 69 72 74 79 20            dirty 
29970 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20  = true;..       
29980 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
29990 20 20 20 20 20 20 69 66 20 28 21 53 74 72 69 6e        if (!Strin
299a0 67 2e 45 71 75 61 6c 73 28 61 64 64 45 6c 65 6d  g.Equals(addElem
299b0 65 6e 74 2e 47 65 74 41 74 74 72 69 62 75 74 65  ent.GetAttribute
299c0 28 22 69 6e 76 61 72 69 61 6e 74 22 29 2c 0d 0a  ("invariant"),..
299d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
299e0 20 20 20 20 69 6e 76 61 72 69 61 6e 74 2c 20 53      invariant, S
299f0 74 72 69 6e 67 43 6f 6d 70 61 72 69 73 6f 6e 2e  tringComparison.
29a00 4f 72 64 69 6e 61 6c 29 29 0d 0a 20 20 20 20 20  Ordinal))..     
29a10 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
29a20 20 20 20 20 20 20 20 20 20 20 61 64 64 45 6c 65            addEle
29a30 6d 65 6e 74 2e 53 65 74 41 74 74 72 69 62 75 74  ment.SetAttribut
29a40 65 28 22 69 6e 76 61 72 69 61 6e 74 22 2c 20 69  e("invariant", i
29a50 6e 76 61 72 69 61 6e 74 29 3b 0d 0a 20 20 20 20  nvariant);..    
29a60 20 20 20 20 20 20 20 20 20 20 20 20 64 69 72 74              dirt
29a70 79 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20  y = true;..     
29a80 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
29a90 20 20 20 20 20 20 20 20 69 66 20 28 21 53 74 72          if (!Str
29aa0 69 6e 67 2e 45 71 75 61 6c 73 28 61 64 64 45 6c  ing.Equals(addEl
29ab0 65 6d 65 6e 74 2e 47 65 74 41 74 74 72 69 62 75  ement.GetAttribu
29ac0 74 65 28 22 64 65 73 63 72 69 70 74 69 6f 6e 22  te("description"
29ad0 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
29ae0 20 20 20 20 20 20 20 20 64 65 73 63 72 69 70 74          descript
29af0 69 6f 6e 2c 20 53 74 72 69 6e 67 43 6f 6d 70 61  ion, StringCompa
29b00 72 69 73 6f 6e 2e 4f 72 64 69 6e 61 6c 29 29 0d  rison.Ordinal)).
29b10 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
29b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29b30 61 64 64 45 6c 65 6d 65 6e 74 2e 53 65 74 41 74  addElement.SetAt
29b40 74 72 69 62 75 74 65 28 22 64 65 73 63 72 69 70  tribute("descrip
29b50 74 69 6f 6e 22 2c 20 64 65 73 63 72 69 70 74 69  tion", descripti
29b60 6f 6e 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  on);..          
29b70 20 20 20 20 20 20 64 69 72 74 79 20 3d 20 74 72        dirty = tr
29b80 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
29b90 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
29ba0 20 20 73 74 72 69 6e 67 20 66 75 6c 6c 54 79 70    string fullTyp
29bb0 65 4e 61 6d 65 20 3d 20 53 74 72 69 6e 67 2e 46  eName = String.F
29bc0 6f 72 6d 61 74 28 22 7b 30 7d 2c 20 7b 31 7d 22  ormat("{0}, {1}"
29bd0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
29be0 20 20 20 74 79 70 65 4e 61 6d 65 2c 20 61 73 73     typeName, ass
29bf0 65 6d 62 6c 79 4e 61 6d 65 29 3b 0d 0a 0d 0a 20  emblyName);.... 
29c00 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21             if (!
29c10 53 74 72 69 6e 67 2e 45 71 75 61 6c 73 28 61 64  String.Equals(ad
29c20 64 45 6c 65 6d 65 6e 74 2e 47 65 74 41 74 74 72  dElement.GetAttr
29c30 69 62 75 74 65 28 22 74 79 70 65 22 29 2c 0d 0a  ibute("type"),..
29c40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29c50 20 20 20 20 66 75 6c 6c 54 79 70 65 4e 61 6d 65      fullTypeName
29c60 2c 20 53 74 72 69 6e 67 43 6f 6d 70 61 72 69 73  , StringComparis
29c70 6f 6e 2e 4f 72 64 69 6e 61 6c 29 29 0d 0a 20 20  on.Ordinal))..  
29c80 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
29c90 20 20 20 20 20 20 20 20 20 20 20 20 20 61 64 64               add
29ca0 45 6c 65 6d 65 6e 74 2e 53 65 74 41 74 74 72 69  Element.SetAttri
29cb0 62 75 74 65 28 22 74 79 70 65 22 2c 20 66 75 6c  bute("type", ful
29cc0 6c 54 79 70 65 4e 61 6d 65 29 3b 0d 0a 20 20 20  lTypeName);..   
29cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 64 69 72               dir
29ce0 74 79 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20  ty = true;..    
29cf0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
29d00 20 20 20 20 20 20 20 20 20 69 66 20 28 64 69 72           if (dir
29d10 74 79 20 7c 7c 20 77 68 61 74 49 66 29 0d 0a 20  ty || whatIf).. 
29d20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
29d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
29d40 20 28 76 65 72 62 6f 73 65 29 0d 0a 20 20 20 20   (verbose)..    
29d50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29d60 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e  TraceOps.DebugAn
29d70 64 54 72 61 63 65 28 54 72 61 63 65 50 72 69 6f  dTrace(TracePrio
29d80 72 69 74 79 2e 48 69 67 68 65 73 74 2c 0d 0a 20  rity.Highest,.. 
29d90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29da0 20 20 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c         debugCall
29db0 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62  back, traceCallb
29dc0 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d  ack, String.Form
29dd0 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
29de0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 61 64               "ad
29df0 64 45 6c 65 6d 65 6e 74 20 3d 20 7b 30 7d 22 2c  dElement = {0}",
29e00 20 46 6f 72 44 69 73 70 6c 61 79 28 61 64 64 45   ForDisplay(addE
29e10 6c 65 6d 65 6e 74 29 29 2c 0d 0a 20 20 20 20 20  lement)),..     
29e20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29e30 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
29e40 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
29e50 20 20 20 20 20 20 69 66 20 28 21 77 68 61 74 49        if (!whatI
29e60 66 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  f)..            
29e70 20 20 20 20 20 20 20 20 64 6f 63 75 6d 65 6e 74          document
29e80 2e 53 61 76 65 28 66 69 6c 65 4e 61 6d 65 29 3b  .Save(fileName);
29e90 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
29ea0 20 20 20 20 66 69 6c 65 73 4d 6f 64 69 66 69 65      filesModifie
29eb0 64 2b 2b 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  d++;....        
29ec0 20 20 20 20 20 20 20 20 73 61 76 65 64 20 3d 20          saved = 
29ed0 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  true;..         
29ee0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
29ef0 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b      return true;
29f00 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
29f10 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
29f20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29f30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29f40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29f50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
29f60 0d 0a 20 20 20 20 20 20 20 20 5b 4d 65 74 68 6f  ..        [Metho
29f70 64 49 6d 70 6c 28 4d 65 74 68 6f 64 49 6d 70 6c  dImpl(MethodImpl
29f80 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e 69  Options.NoInlini
29f90 6e 67 29 5d 0d 0a 20 20 20 20 20 20 20 20 70 72  ng)]..        pr
29fa0 69 76 61 74 65 20 73 74 61 74 69 63 20 62 6f 6f  ivate static boo
29fb0 6c 20 52 65 6d 6f 76 65 44 62 50 72 6f 76 69 64  l RemoveDbProvid
29fc0 65 72 46 61 63 74 6f 72 79 28 0d 0a 20 20 20 20  erFactory(..    
29fd0 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 66          string f
29fe0 69 6c 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20  ileName,..      
29ff0 20 20 20 20 20 20 73 74 72 69 6e 67 20 69 6e 76        string inv
2a000 61 72 69 61 6e 74 2c 0d 0a 20 20 20 20 20 20 20  ariant,..       
2a010 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66       bool whatIf
2a020 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  ,..            b
2a030 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 0d 0a 20 20  ool verbose,..  
2a040 20 20 20 20 20 20 20 20 20 20 72 65 66 20 62 6f            ref bo
2a050 6f 6c 20 73 61 76 65 64 2c 0d 0a 20 20 20 20 20  ol saved,..     
2a060 20 20 20 20 20 20 20 72 65 66 20 73 74 72 69 6e         ref strin
2a070 67 20 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20  g error..       
2a080 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
2a090 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  {..            b
2a0a0 6f 6f 6c 20 64 69 72 74 79 20 3d 20 66 61 6c 73  ool dirty = fals
2a0b0 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
2a0c0 58 6d 6c 44 6f 63 75 6d 65 6e 74 20 64 6f 63 75  XmlDocument docu
2a0d0 6d 65 6e 74 20 3d 20 6e 65 77 20 58 6d 6c 44 6f  ment = new XmlDo
2a0e0 63 75 6d 65 6e 74 28 29 3b 0d 0a 0d 0a 20 20 20  cument();....   
2a0f0 20 20 20 20 20 20 20 20 20 64 6f 63 75 6d 65 6e           documen
2a100 74 2e 50 72 65 73 65 72 76 65 57 68 69 74 65 73  t.PreserveWhites
2a110 70 61 63 65 20 3d 20 74 72 75 65 3b 0d 0a 20 20  pace = true;..  
2a120 20 20 20 20 20 20 20 20 20 20 64 6f 63 75 6d 65            docume
2a130 6e 74 2e 4c 6f 61 64 28 66 69 6c 65 4e 61 6d 65  nt.Load(fileName
2a140 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
2a150 20 20 58 6d 6c 45 6c 65 6d 65 6e 74 20 61 64 64    XmlElement add
2a160 45 6c 65 6d 65 6e 74 20 3d 20 64 6f 63 75 6d 65  Element = docume
2a170 6e 74 2e 53 65 6c 65 63 74 53 69 6e 67 6c 65 4e  nt.SelectSingleN
2a180 6f 64 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ode(..          
2a190 20 20 20 20 20 20 53 74 72 69 6e 67 2e 46 6f 72        String.For
2a1a0 6d 61 74 28 58 50 61 74 68 46 6f 72 41 64 64 45  mat(XPathForAddE
2a1b0 6c 65 6d 65 6e 74 2c 20 69 6e 76 61 72 69 61 6e  lement, invarian
2a1c0 74 29 29 20 61 73 20 58 6d 6c 45 6c 65 6d 65 6e  t)) as XmlElemen
2a1d0 74 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  t;....          
2a1e0 20 20 69 66 20 28 61 64 64 45 6c 65 6d 65 6e 74    if (addElement
2a1f0 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   != null)..     
2a200 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
2a210 20 20 20 20 20 20 20 20 20 20 61 64 64 45 6c 65            addEle
2a220 6d 65 6e 74 2e 50 61 72 65 6e 74 4e 6f 64 65 2e  ment.ParentNode.
2a230 52 65 6d 6f 76 65 43 68 69 6c 64 28 61 64 64 45  RemoveChild(addE
2a240 6c 65 6d 65 6e 74 29 3b 0d 0a 20 20 20 20 20 20  lement);..      
2a250 20 20 20 20 20 20 20 20 20 20 64 69 72 74 79 20            dirty 
2a260 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20  = true;..       
2a270 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
2a280 20 20 20 20 20 20 58 6d 6c 45 6c 65 6d 65 6e 74        XmlElement
2a290 20 72 65 6d 6f 76 65 45 6c 65 6d 65 6e 74 20 3d   removeElement =
2a2a0 20 64 6f 63 75 6d 65 6e 74 2e 53 65 6c 65 63 74   document.Select
2a2b0 53 69 6e 67 6c 65 4e 6f 64 65 28 0d 0a 20 20 20  SingleNode(..   
2a2c0 20 20 20 20 20 20 20 20 20 20 20 20 20 53 74 72               Str
2a2d0 69 6e 67 2e 46 6f 72 6d 61 74 28 58 50 61 74 68  ing.Format(XPath
2a2e0 46 6f 72 52 65 6d 6f 76 65 45 6c 65 6d 65 6e 74  ForRemoveElement
2a2f0 2c 20 69 6e 76 61 72 69 61 6e 74 29 29 20 61 73  , invariant)) as
2a300 20 58 6d 6c 45 6c 65 6d 65 6e 74 3b 0d 0a 0d 0a   XmlElement;....
2a310 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
2a320 72 65 6d 6f 76 65 45 6c 65 6d 65 6e 74 20 21 3d  removeElement !=
2a330 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
2a340 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
2a350 20 20 20 20 20 20 20 72 65 6d 6f 76 65 45 6c 65         removeEle
2a360 6d 65 6e 74 2e 50 61 72 65 6e 74 4e 6f 64 65 2e  ment.ParentNode.
2a370 52 65 6d 6f 76 65 43 68 69 6c 64 28 72 65 6d 6f  RemoveChild(remo
2a380 76 65 45 6c 65 6d 65 6e 74 29 3b 0d 0a 20 20 20  veElement);..   
2a390 20 20 20 20 20 20 20 20 20 20 20 20 20 64 69 72               dir
2a3a0 74 79 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20  ty = true;..    
2a3b0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
2a3c0 20 20 20 20 20 20 20 20 20 69 66 20 28 64 69 72           if (dir
2a3d0 74 79 20 7c 7c 20 77 68 61 74 49 66 29 0d 0a 20  ty || whatIf).. 
2a3e0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
2a3f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
2a400 20 28 76 65 72 62 6f 73 65 29 0d 0a 20 20 20 20   (verbose)..    
2a410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a420 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e  TraceOps.DebugAn
2a430 64 54 72 61 63 65 28 54 72 61 63 65 50 72 69 6f  dTrace(TracePrio
2a440 72 69 74 79 2e 48 69 67 68 65 73 74 2c 0d 0a 20  rity.Highest,.. 
2a450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a460 20 20 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c         debugCall
2a470 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62  back, traceCallb
2a480 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d  ack, String.Form
2a490 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
2a4a0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 61 64               "ad
2a4b0 64 45 6c 65 6d 65 6e 74 20 3d 20 7b 30 7d 2c 20  dElement = {0}, 
2a4c0 72 65 6d 6f 76 65 45 6c 65 6d 65 6e 74 20 3d 20  removeElement = 
2a4d0 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  {1}",..         
2a4e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46                 F
2a4f0 6f 72 44 69 73 70 6c 61 79 28 61 64 64 45 6c 65  orDisplay(addEle
2a500 6d 65 6e 74 29 2c 20 46 6f 72 44 69 73 70 6c 61  ment), ForDispla
2a510 79 28 72 65 6d 6f 76 65 45 6c 65 6d 65 6e 74 29  y(removeElement)
2a520 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
2a530 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
2a540 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
2a550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
2a560 66 20 28 21 77 68 61 74 49 66 29 0d 0a 20 20 20  f (!whatIf)..   
2a570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a580 20 64 6f 63 75 6d 65 6e 74 2e 53 61 76 65 28 66   document.Save(f
2a590 69 6c 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20  ileName);....   
2a5a0 20 20 20 20 20 20 20 20 20 20 20 20 20 66 69 6c               fil
2a5b0 65 73 4d 6f 64 69 66 69 65 64 2b 2b 3b 0d 0a 0d  esModified++;...
2a5c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2a5d0 20 73 61 76 65 64 20 3d 20 74 72 75 65 3b 0d 0a   saved = true;..
2a5e0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
2a5f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
2a600 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20 20  urn true;..     
2a610 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
2a620 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a630 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a640 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a650 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a660 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
2a670 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69     private stati
2a680 63 20 62 6f 6f 6c 20 50 72 6f 63 65 73 73 44 62  c bool ProcessDb
2a690 50 72 6f 76 69 64 65 72 46 61 63 74 6f 72 79 28  ProviderFactory(
2a6a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74  ..            st
2a6b0 72 69 6e 67 20 66 69 6c 65 4e 61 6d 65 2c 0d 0a  ring fileName,..
2a6c0 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
2a6d0 6e 67 20 69 6e 76 61 72 69 61 6e 74 2c 0d 0a 20  ng invariant,.. 
2a6e0 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
2a6f0 67 20 6e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20  g name,..       
2a700 20 20 20 20 20 73 74 72 69 6e 67 20 64 65 73 63       string desc
2a710 72 69 70 74 69 6f 6e 2c 0d 0a 20 20 20 20 20 20  ription,..      
2a720 20 20 20 20 20 20 73 74 72 69 6e 67 20 74 79 70        string typ
2a730 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20  eName,..        
2a740 20 20 20 20 41 73 73 65 6d 62 6c 79 4e 61 6d 65      AssemblyName
2a750 20 61 73 73 65 6d 62 6c 79 4e 61 6d 65 2c 0d 0a   assemblyName,..
2a760 20 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65              obje
2a770 63 74 20 63 6c 69 65 6e 74 44 61 74 61 2c 0d 0a  ct clientData,..
2a780 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
2a790 20 77 6f 77 36 34 2c 0d 0a 20 20 20 20 20 20 20   wow64,..       
2a7a0 20 20 20 20 20 62 6f 6f 6c 20 74 68 72 6f 77 4f       bool throwO
2a7b0 6e 4d 69 73 73 69 6e 67 2c 0d 0a 20 20 20 20 20  nMissing,..     
2a7c0 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74         bool what
2a7d0 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  If,..           
2a7e0 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 0d 0a   bool verbose,..
2a7f0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20              ref 
2a800 62 6f 6f 6c 20 73 61 76 65 64 2c 0d 0a 20 20 20  bool saved,..   
2a810 20 20 20 20 20 20 20 20 20 72 65 66 20 73 74 72           ref str
2a820 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20 20 20  ing error..     
2a830 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
2a840 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
2a850 20 41 6e 79 50 61 69 72 3c 73 74 72 69 6e 67 2c   AnyPair<string,
2a860 20 62 6f 6f 6c 3e 20 70 61 69 72 20 3d 20 63 6c   bool> pair = cl
2a870 69 65 6e 74 44 61 74 61 20 61 73 20 41 6e 79 50  ientData as AnyP
2a880 61 69 72 3c 73 74 72 69 6e 67 2c 20 62 6f 6f 6c  air<string, bool
2a890 3e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  >;....          
2a8a0 20 20 69 66 20 28 70 61 69 72 20 3d 3d 20 6e 75    if (pair == nu
2a8b0 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
2a8c0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
2a8d0 20 20 20 20 65 72 72 6f 72 20 3d 20 22 69 6e 76      error = "inv
2a8e0 61 6c 69 64 20 66 72 61 6d 65 77 6f 72 6b 20 63  alid framework c
2a8f0 6f 6e 66 69 67 20 63 61 6c 6c 62 61 63 6b 20 64  onfig callback d
2a900 61 74 61 22 3b 0d 0a 20 20 20 20 20 20 20 20 20  ata";..         
2a910 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
2a920 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lse;..          
2a930 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
2a940 20 20 20 69 66 20 28 70 61 69 72 2e 59 29 0d 0a     if (pair.Y)..
2a950 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
2a960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
2a970 65 74 75 72 6e 20 52 65 6d 6f 76 65 44 62 50 72  eturn RemoveDbPr
2a980 6f 76 69 64 65 72 46 61 63 74 6f 72 79 28 0d 0a  oviderFactory(..
2a990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a9a0 20 20 20 20 66 69 6c 65 4e 61 6d 65 2c 20 69 6e      fileName, in
2a9b0 76 61 72 69 61 6e 74 2c 20 77 68 61 74 49 66 2c  variant, whatIf,
2a9c0 20 76 65 72 62 6f 73 65 2c 20 72 65 66 20 73 61   verbose, ref sa
2a9d0 76 65 64 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ved,..          
2a9e0 20 20 20 20 20 20 20 20 20 20 72 65 66 20 65 72            ref er
2a9f0 72 6f 72 29 20 26 26 0d 0a 20 20 20 20 20 20 20  ror) &&..       
2aa00 20 20 20 20 20 20 20 20 20 41 64 64 44 62 50 72           AddDbPr
2aa10 6f 76 69 64 65 72 46 61 63 74 6f 72 79 28 0d 0a  oviderFactory(..
2aa20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2aa30 20 20 20 20 66 69 6c 65 4e 61 6d 65 2c 20 69 6e      fileName, in
2aa40 76 61 72 69 61 6e 74 2c 20 6e 61 6d 65 2c 20 64  variant, name, d
2aa50 65 73 63 72 69 70 74 69 6f 6e 2c 20 74 79 70 65  escription, type
2aa60 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  Name,..         
2aa70 20 20 20 20 20 20 20 20 20 20 20 61 73 73 65 6d             assem
2aa80 62 6c 79 4e 61 6d 65 2c 20 77 68 61 74 49 66 2c  blyName, whatIf,
2aa90 20 76 65 72 62 6f 73 65 2c 20 72 65 66 20 73 61   verbose, ref sa
2aaa0 76 65 64 2c 20 72 65 66 20 65 72 72 6f 72 29 3b  ved, ref error);
2aab0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
2aac0 0a 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73  .            els
2aad0 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  e..            {
2aae0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2aaf0 20 20 72 65 74 75 72 6e 20 52 65 6d 6f 76 65 44    return RemoveD
2ab00 62 50 72 6f 76 69 64 65 72 46 61 63 74 6f 72 79  bProviderFactory
2ab10 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
2ab20 20 20 20 20 20 20 20 66 69 6c 65 4e 61 6d 65 2c         fileName,
2ab30 20 69 6e 76 61 72 69 61 6e 74 2c 20 77 68 61 74   invariant, what
2ab40 49 66 2c 20 76 65 72 62 6f 73 65 2c 20 72 65 66  If, verbose, ref
2ab50 20 73 61 76 65 64 2c 0d 0a 20 20 20 20 20 20 20   saved,..       
2ab60 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66               ref
2ab70 20 65 72 72 6f 72 29 3b 0d 0a 20 20 20 20 20 20   error);..      
2ab80 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
2ab90 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64   }..        #end
2aba0 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20  region....      
2abb0 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
2abc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2abd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2abe0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2abf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
2ac00 20 20 20 20 20 23 72 65 67 69 6f 6e 20 41 73 73       #region Ass
2ac10 65 6d 62 6c 79 20 46 6f 6c 64 65 72 73 20 48 61  embly Folders Ha
2ac20 6e 64 6c 69 6e 67 0d 0a 20 20 20 20 20 20 20 20  ndling..        
2ac30 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 73  private static s
2ac40 74 72 69 6e 67 20 47 65 74 41 73 73 65 6d 62 6c  tring GetAssembl
2ac50 79 46 6f 6c 64 65 72 73 4b 65 79 4e 61 6d 65 28  yFoldersKeyName(
2ac60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74  ..            st
2ac70 72 69 6e 67 20 66 72 61 6d 65 77 6f 72 6b 4e 61  ring frameworkNa
2ac80 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me,..           
2ac90 20 56 65 72 73 69 6f 6e 20 66 72 61 6d 65 77 6f   Version framewo
2aca0 72 6b 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20  rkVersion,..    
2acb0 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 70          string p
2acc0 6c 61 74 66 6f 72 6d 4e 61 6d 65 2c 0d 0a 20 20  latformName,..  
2acd0 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77            bool w
2ace0 6f 77 36 34 0d 0a 20 20 20 20 20 20 20 20 20 20  ow64..          
2acf0 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a    )..        {..
2ad00 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
2ad10 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e              // N
2ad20 4f 54 45 3a 20 54 68 69 73 20 72 65 67 69 73 74  OTE: This regist
2ad30 72 79 20 6b 65 79 20 61 70 70 65 61 72 73 20 74  ry key appears t
2ad40 6f 20 61 6c 77 61 79 73 20 62 65 20 33 32 2d 62  o always be 32-b
2ad50 69 74 20 6f 6e 6c 79 0d 0a 20 20 20 20 20 20 20  it only..       
2ad60 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 28 69       //       (i
2ad70 2e 65 2e 20 70 72 6f 62 61 62 6c 79 20 62 65 63  .e. probably bec
2ad80 61 75 73 65 20 69 74 20 69 73 20 6f 6e 6c 79 20  ause it is only 
2ad90 75 73 65 64 20 62 79 20 56 69 73 75 61 6c 0d 0a  used by Visual..
2ada0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
2adb0 20 20 20 20 20 53 74 75 64 69 6f 2c 20 77 68 69       Studio, whi
2adc0 63 68 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20  ch is currently 
2add0 61 6c 77 61 79 73 20 33 32 2d 62 69 74 20 6f 6e  always 32-bit on
2ade0 6c 79 29 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  ly)...          
2adf0 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
2ae00 20 20 73 74 72 69 6e 67 20 66 6f 72 6d 61 74 20    string format 
2ae10 3d 20 21 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c  = !String.IsNull
2ae20 4f 72 45 6d 70 74 79 28 70 6c 61 74 66 6f 72 6d  OrEmpty(platform
2ae30 4e 61 6d 65 29 20 3f 0d 0a 20 20 20 20 20 20 20  Name) ?..       
2ae40 20 20 20 20 20 20 20 20 20 22 7b 30 7d 5c 5c 4d           "{0}\\M
2ae50 69 63 72 6f 73 6f 66 74 5c 5c 7b 31 7d 5c 5c 76  icrosoft\\{1}\\v
2ae60 7b 32 7d 5c 5c 7b 33 7d 5c 5c 41 73 73 65 6d 62  {2}\\{3}\\Assemb
2ae70 6c 79 46 6f 6c 64 65 72 73 45 78 22 20 3a 0d 0a  lyFoldersEx" :..
2ae80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ae90 22 7b 30 7d 5c 5c 4d 69 63 72 6f 73 6f 66 74 5c  "{0}\\Microsoft\
2aea0 5c 7b 31 7d 5c 5c 76 7b 32 7d 5c 5c 41 73 73 65  \{1}\\v{2}\\Asse
2aeb0 6d 62 6c 79 46 6f 6c 64 65 72 73 45 78 22 3b 0d  mblyFoldersEx";.
2aec0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  ...            r
2aed0 65 74 75 72 6e 20 53 74 72 69 6e 67 2e 46 6f 72  eturn String.For
2aee0 6d 61 74 28 66 6f 72 6d 61 74 2c 20 47 65 74 52  mat(format, GetR
2aef0 6f 6f 74 4b 65 79 4e 61 6d 65 28 77 6f 77 36 34  ootKeyName(wow64
2af00 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
2af10 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d      frameworkNam
2af20 65 2c 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73  e, frameworkVers
2af30 69 6f 6e 2c 20 70 6c 61 74 66 6f 72 6d 4e 61 6d  ion, platformNam
2af40 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  e);..        }..
2af50 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
2af60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2af70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2af80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2af90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2afa0 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69  /....        pri
2afb0 76 61 74 65 20 73 74 61 74 69 63 20 62 6f 6f 6c  vate static bool
2afc0 20 41 64 64 54 6f 41 73 73 65 6d 62 6c 79 46 6f   AddToAssemblyFo
2afd0 6c 64 65 72 73 28 0d 0a 20 20 20 20 20 20 20 20  lders(..        
2afe0 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79      MockRegistry
2aff0 4b 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20  Key rootKey,..  
2b000 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
2b010 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c 0d   frameworkName,.
2b020 0a 20 20 20 20 20 20 20 20 20 20 20 20 56 65 72  .            Ver
2b030 73 69 6f 6e 20 66 72 61 6d 65 77 6f 72 6b 56 65  sion frameworkVe
2b040 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20  rsion,..        
2b050 20 20 20 20 73 74 72 69 6e 67 20 70 6c 61 74 66      string platf
2b060 6f 72 6d 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20  ormName,..      
2b070 20 20 20 20 20 20 73 74 72 69 6e 67 20 73 75 62        string sub
2b080 4b 65 79 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20  KeyName,..      
2b090 20 20 20 20 20 20 73 74 72 69 6e 67 20 64 69 72        string dir
2b0a0 65 63 74 6f 72 79 2c 0d 0a 20 20 20 20 20 20 20  ectory,..       
2b0b0 20 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34 2c       bool wow64,
2b0c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
2b0d0 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20  ol whatIf,..    
2b0e0 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65 72          bool ver
2b0f0 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  bose,..         
2b100 20 20 20 72 65 66 20 73 74 72 69 6e 67 20 65 72     ref string er
2b110 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ror..           
2b120 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20   )..        {.. 
2b130 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
2b140 67 20 6b 65 79 4e 61 6d 65 20 3d 20 47 65 74 41  g keyName = GetA
2b150 73 73 65 6d 62 6c 79 46 6f 6c 64 65 72 73 4b 65  ssemblyFoldersKe
2b160 79 4e 61 6d 65 28 0d 0a 20 20 20 20 20 20 20 20  yName(..        
2b170 20 20 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72          framewor
2b180 6b 4e 61 6d 65 2c 20 66 72 61 6d 65 77 6f 72 6b  kName, framework
2b190 56 65 72 73 69 6f 6e 2c 20 70 6c 61 74 66 6f 72  Version, platfor
2b1a0 6d 4e 61 6d 65 2c 20 77 6f 77 36 34 29 3b 0d 0a  mName, wow64);..
2b1b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 75 73  ..            us
2b1c0 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73 74 72  ing (MockRegistr
2b1d0 79 4b 65 79 20 6b 65 79 20 3d 20 52 65 67 69 73  yKey key = Regis
2b1e0 74 72 79 48 65 6c 70 65 72 2e 4f 70 65 6e 53 75  tryHelper.OpenSu
2b1f0 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20  bKey(..         
2b200 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b             rootK
2b210 65 79 2c 20 6b 65 79 4e 61 6d 65 2c 20 74 72 75  ey, keyName, tru
2b220 65 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f  e, whatIf, verbo
2b230 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  se))..          
2b240 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
2b250 20 20 20 20 20 69 66 20 28 6b 65 79 20 3d 3d 20       if (key == 
2b260 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
2b270 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
2b280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72                er
2b290 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72  ror = String.For
2b2a0 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
2b2b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 63                "c
2b2c0 6f 75 6c 64 20 6e 6f 74 20 6f 70 65 6e 20 72 65  ould not open re
2b2d0 67 69 73 74 72 79 20 6b 65 79 3a 20 7b 30 7d 5c  gistry key: {0}\
2b2e0 5c 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20  \{1}",..        
2b2f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b300 72 6f 6f 74 4b 65 79 2c 20 6b 65 79 4e 61 6d 65  rootKey, keyName
2b310 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
2b320 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
2b330 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20   false;..       
2b340 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
2b350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 75 73                us
2b360 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73 74 72  ing (MockRegistr
2b370 79 4b 65 79 20 73 75 62 4b 65 79 20 3d 20 52 65  yKey subKey = Re
2b380 67 69 73 74 72 79 48 65 6c 70 65 72 2e 43 72 65  gistryHelper.Cre
2b390 61 74 65 53 75 62 4b 65 79 28 0d 0a 20 20 20 20  ateSubKey(..    
2b3a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b3b0 20 20 20 20 6b 65 79 2c 20 73 75 62 4b 65 79 4e      key, subKeyN
2b3c0 61 6d 65 2c 20 77 68 61 74 49 66 2c 20 76 65 72  ame, whatIf, ver
2b3d0 62 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20  bose))..        
2b3e0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
2b3f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
2b400 66 20 28 73 75 62 4b 65 79 20 3d 3d 20 6e 75 6c  f (subKey == nul
2b410 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
2b420 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
2b430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b440 20 20 20 65 72 72 6f 72 20 3d 20 53 74 72 69 6e     error = Strin
2b450 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
2b460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b470 20 20 20 20 20 20 20 22 63 6f 75 6c 64 20 6e 6f         "could no
2b480 74 20 63 72 65 61 74 65 20 72 65 67 69 73 74 72  t create registr
2b490 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c 7b 31 7d 22  y key: {0}\\{1}"
2b4a0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
2b4b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6b                 k
2b4c0 65 79 2c 20 73 75 62 4b 65 79 4e 61 6d 65 29 3b  ey, subKeyName);
2b4d0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2b4e0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
2b4f0 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20  rn false;..     
2b500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
2b510 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2b520 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79          Registry
2b530 48 65 6c 70 65 72 2e 53 65 74 56 61 6c 75 65 28  Helper.SetValue(
2b540 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2b550 20 20 20 20 20 20 20 20 20 20 73 75 62 4b 65 79            subKey
2b560 2c 20 6e 75 6c 6c 2c 20 64 69 72 65 63 74 6f 72  , null, director
2b570 79 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f  y, whatIf, verbo
2b580 73 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  se);..          
2b590 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
2b5a0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
2b5b0 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75        return tru
2b5c0 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d  e;..        }...
2b5d0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
2b5e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b5f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  ....        priv
2b630 61 74 65 20 73 74 61 74 69 63 20 62 6f 6f 6c 20  ate static bool 
2b640 52 65 6d 6f 76 65 46 72 6f 6d 41 73 73 65 6d 62  RemoveFromAssemb
2b650 6c 79 46 6f 6c 64 65 72 73 28 0d 0a 20 20 20 20  lyFolders(..    
2b660 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65 67 69          MockRegi
2b670 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79 2c  stryKey rootKey,
2b680 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74  ..            st
2b690 72 69 6e 67 20 66 72 61 6d 65 77 6f 72 6b 4e 61  ring frameworkNa
2b6a0 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me,..           
2b6b0 20 56 65 72 73 69 6f 6e 20 66 72 61 6d 65 77 6f   Version framewo
2b6c0 72 6b 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20  rkVersion,..    
2b6d0 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 70          string p
2b6e0 6c 61 74 66 6f 72 6d 4e 61 6d 65 2c 0d 0a 20 20  latformName,..  
2b6f0 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
2b700 20 73 75 62 4b 65 79 4e 61 6d 65 2c 0d 0a 20 20   subKeyName,..  
2b710 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77            bool w
2b720 6f 77 36 34 2c 0d 0a 20 20 20 20 20 20 20 20 20  ow64,..         
2b730 20 20 20 62 6f 6f 6c 20 74 68 72 6f 77 4f 6e 4d     bool throwOnM
2b740 69 73 73 69 6e 67 2c 0d 0a 20 20 20 20 20 20 20  issing,..       
2b750 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66       bool whatIf
2b760 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  ,..            b
2b770 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 0d 0a 20 20  ool verbose,..  
2b780 20 20 20 20 20 20 20 20 20 20 72 65 66 20 73 74            ref st
2b790 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20 20  ring error..    
2b7a0 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
2b7b0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
2b7c0 20 20 73 74 72 69 6e 67 20 6b 65 79 4e 61 6d 65    string keyName
2b7d0 20 3d 20 47 65 74 41 73 73 65 6d 62 6c 79 46 6f   = GetAssemblyFo
2b7e0 6c 64 65 72 73 4b 65 79 4e 61 6d 65 28 0d 0a 20  ldersKeyName(.. 
2b7f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66                 f
2b800 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c 20 66 72  rameworkName, fr
2b810 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 2c 20  ameworkVersion, 
2b820 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 2c 20 77 6f  platformName, wo
2b830 77 36 34 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  w64);....       
2b840 20 20 20 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b       using (Mock
2b850 52 65 67 69 73 74 72 79 4b 65 79 20 6b 65 79 20  RegistryKey key 
2b860 3d 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72  = RegistryHelper
2b870 2e 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20  .OpenSubKey(..  
2b880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b890 20 20 72 6f 6f 74 4b 65 79 2c 20 6b 65 79 4e 61    rootKey, keyNa
2b8a0 6d 65 2c 20 74 72 75 65 2c 20 77 68 61 74 49 66  me, true, whatIf
2b8b0 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a 20 20 20  , verbose))..   
2b8c0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
2b8d0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
2b8e0 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  key == null)..  
2b8f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
2b900 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2b910 20 20 20 20 20 65 72 72 6f 72 20 3d 20 53 74 72       error = Str
2b920 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
2b930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b940 20 20 20 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20       "could not 
2b950 6f 70 65 6e 20 72 65 67 69 73 74 72 79 20 6b 65  open registry ke
2b960 79 3a 20 7b 30 7d 5c 5c 7b 31 7d 22 2c 0d 0a 20  y: {0}\\{1}",.. 
2b970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b980 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20         rootKey, 
2b990 6b 65 79 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20  keyName);....   
2b9a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b9b0 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
2b9c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b9d0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
2b9e0 20 20 20 20 20 52 65 67 69 73 74 72 79 48 65 6c       RegistryHel
2b9f0 70 65 72 2e 44 65 6c 65 74 65 53 75 62 4b 65 79  per.DeleteSubKey
2ba00 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
2ba10 20 20 20 20 20 20 20 6b 65 79 2c 20 73 75 62 4b         key, subK
2ba20 65 79 4e 61 6d 65 2c 20 74 68 72 6f 77 4f 6e 4d  eyName, throwOnM
2ba30 69 73 73 69 6e 67 2c 20 77 68 61 74 49 66 2c 20  issing, whatIf, 
2ba40 76 65 72 62 6f 73 65 29 3b 0d 0a 20 20 20 20 20  verbose);..     
2ba50 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
2ba60 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74          return t
2ba70 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  rue;..        }.
2ba80 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
2ba90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2baa0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2bab0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2bac0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2bad0 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72  //....        pr
2bae0 69 76 61 74 65 20 73 74 61 74 69 63 20 62 6f 6f  ivate static boo
2baf0 6c 20 50 72 6f 63 65 73 73 41 73 73 65 6d 62 6c  l ProcessAssembl
2bb00 79 46 6f 6c 64 65 72 73 28 0d 0a 20 20 20 20 20  yFolders(..     
2bb10 20 20 20 20 20 20 20 4d 6f 63 6b 52 65 67 69 73         MockRegis
2bb20 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79 2c 0d  tryKey rootKey,.
2bb30 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72  .            str
2bb40 69 6e 67 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d  ing frameworkNam
2bb50 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
2bb60 56 65 72 73 69 6f 6e 20 66 72 61 6d 65 77 6f 72  Version framewor
2bb70 6b 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20  kVersion,..     
2bb80 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 70 6c         string pl
2bb90 61 74 66 6f 72 6d 4e 61 6d 65 2c 0d 0a 20 20 20  atformName,..   
2bba0 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20           object 
2bbb0 63 6c 69 65 6e 74 44 61 74 61 2c 0d 0a 20 20 20  clientData,..   
2bbc0 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 6f           bool wo
2bbd0 77 36 34 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  w64,..          
2bbe0 20 20 62 6f 6f 6c 20 74 68 72 6f 77 4f 6e 4d 69    bool throwOnMi
2bbf0 73 73 69 6e 67 2c 0d 0a 20 20 20 20 20 20 20 20  ssing,..        
2bc00 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c      bool whatIf,
2bc10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
2bc20 6f 6c 20 76 65 72 62 6f 73 65 2c 0d 0a 20 20 20  ol verbose,..   
2bc30 20 20 20 20 20 20 20 20 20 72 65 66 20 73 74 72           ref str
2bc40 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20 20 20  ing error..     
2bc50 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
2bc60 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
2bc70 20 41 6e 79 50 61 69 72 3c 73 74 72 69 6e 67 2c   AnyPair<string,
2bc80 20 62 6f 6f 6c 3e 20 70 61 69 72 20 3d 20 63 6c   bool> pair = cl
2bc90 69 65 6e 74 44 61 74 61 20 61 73 20 41 6e 79 50  ientData as AnyP
2bca0 61 69 72 3c 73 74 72 69 6e 67 2c 20 62 6f 6f 6c  air<string, bool
2bcb0 3e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  >;....          
2bcc0 20 20 69 66 20 28 70 61 69 72 20 3d 3d 20 6e 75    if (pair == nu
2bcd0 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
2bce0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
2bcf0 20 20 20 20 65 72 72 6f 72 20 3d 20 22 69 6e 76      error = "inv
2bd00 61 6c 69 64 20 66 72 61 6d 65 77 6f 72 6b 20 63  alid framework c
2bd10 61 6c 6c 62 61 63 6b 20 64 61 74 61 22 3b 0d 0a  allback data";..
2bd20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bd30 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20  return false;.. 
2bd40 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
2bd50 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
2bd60 70 61 69 72 2e 59 29 0d 0a 20 20 20 20 20 20 20  pair.Y)..       
2bd70 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
2bd80 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 52          return R
2bd90 65 6d 6f 76 65 46 72 6f 6d 41 73 73 65 6d 62 6c  emoveFromAssembl
2bda0 79 46 6f 6c 64 65 72 73 28 0d 0a 20 20 20 20 20  yFolders(..     
2bdb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
2bdc0 6f 6f 74 4b 65 79 2c 20 66 72 61 6d 65 77 6f 72  ootKey, framewor
2bdd0 6b 4e 61 6d 65 2c 20 66 72 61 6d 65 77 6f 72 6b  kName, framework
2bde0 56 65 72 73 69 6f 6e 2c 20 70 6c 61 74 66 6f 72  Version, platfor
2bdf0 6d 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20  mName,..        
2be00 20 20 20 20 20 20 20 20 20 20 20 20 4c 65 67 61              Lega
2be10 63 79 50 72 6f 6a 65 63 74 4e 61 6d 65 2c 20 77  cyProjectName, w
2be20 6f 77 36 34 2c 20 66 61 6c 73 65 2c 20 77 68 61  ow64, false, wha
2be30 74 49 66 2c 20 76 65 72 62 6f 73 65 2c 0d 0a 20  tIf, verbose,.. 
2be40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2be50 20 20 20 72 65 66 20 65 72 72 6f 72 29 20 26 26     ref error) &&
2be60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2be70 20 20 41 64 64 54 6f 41 73 73 65 6d 62 6c 79 46    AddToAssemblyF
2be80 6f 6c 64 65 72 73 28 0d 0a 20 20 20 20 20 20 20  olders(..       
2be90 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f               roo
2bea0 74 4b 65 79 2c 20 66 72 61 6d 65 77 6f 72 6b 4e  tKey, frameworkN
2beb0 61 6d 65 2c 20 66 72 61 6d 65 77 6f 72 6b 56 65  ame, frameworkVe
2bec0 72 73 69 6f 6e 2c 20 70 6c 61 74 66 6f 72 6d 4e  rsion, platformN
2bed0 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ame,..          
2bee0 20 20 20 20 20 20 20 20 20 20 50 72 6f 6a 65 63            Projec
2bef0 74 4e 61 6d 65 2c 20 70 61 69 72 2e 58 2c 20 77  tName, pair.X, w
2bf00 6f 77 36 34 2c 20 77 68 61 74 49 66 2c 20 76 65  ow64, whatIf, ve
2bf10 72 62 6f 73 65 2c 20 72 65 66 20 65 72 72 6f 72  rbose, ref error
2bf20 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
2bf30 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 65  }..            e
2bf40 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  lse..           
2bf50 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
2bf60 20 20 20 20 72 65 74 75 72 6e 20 52 65 6d 6f 76      return Remov
2bf70 65 46 72 6f 6d 41 73 73 65 6d 62 6c 79 46 6f 6c  eFromAssemblyFol
2bf80 64 65 72 73 28 0d 0a 20 20 20 20 20 20 20 20 20  ders(..         
2bf90 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b             rootK
2bfa0 65 79 2c 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d  ey, frameworkNam
2bfb0 65 2c 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73  e, frameworkVers
2bfc0 69 6f 6e 2c 20 70 6c 61 74 66 6f 72 6d 4e 61 6d  ion, platformNam
2bfd0 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
2bfe0 20 20 20 20 20 20 20 20 50 72 6f 6a 65 63 74 4e          ProjectN
2bff0 61 6d 65 2c 20 77 6f 77 36 34 2c 20 74 68 72 6f  ame, wow64, thro
2c000 77 4f 6e 4d 69 73 73 69 6e 67 2c 20 77 68 61 74  wOnMissing, what
2c010 49 66 2c 20 76 65 72 62 6f 73 65 2c 0d 0a 20 20  If, verbose,..  
2c020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c030 20 20 72 65 66 20 65 72 72 6f 72 29 3b 0d 0a 20    ref error);.. 
2c040 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
2c050 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
2c060 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20   #endregion.... 
2c070 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
2c080 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c090 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c0a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c0b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
2c0c0 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f  ..        #regio
2c0d0 6e 20 56 69 73 75 61 6c 20 53 74 75 64 69 6f 20  n Visual Studio 
2c0e0 48 61 6e 64 6c 69 6e 67 0d 0a 20 20 20 20 20 20  Handling..      
2c0f0 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63    private static
2c100 20 73 74 72 69 6e 67 20 47 65 74 56 73 52 6f 6f   string GetVsRoo
2c110 74 4b 65 79 4e 61 6d 65 28 0d 0a 20 20 20 20 20  tKeyName(..     
2c120 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36         bool wow6
2c130 34 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29  4..            )
2c140 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
2c150 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
2c160 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 22 7b  String.Format("{
2c170 30 7d 5c 5c 4d 69 63 72 6f 73 6f 66 74 5c 5c 56  0}\\Microsoft\\V
2c180 69 73 75 61 6c 53 74 75 64 69 6f 22 2c 0d 0a 20  isualStudio",.. 
2c190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 47                 G
2c1a0 65 74 52 6f 6f 74 4b 65 79 4e 61 6d 65 28 77 6f  etRootKeyName(wo
2c1b0 77 36 34 29 29 3b 0d 0a 20 20 20 20 20 20 20 20  w64));..        
2c1c0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  }....        ///
2c1d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c1e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c1f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c200 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c210 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
2c220 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 73  private static s
2c230 74 72 69 6e 67 20 47 65 74 56 73 4b 65 79 4e 61  tring GetVsKeyNa
2c240 6d 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me(..           
2c250 20 56 65 72 73 69 6f 6e 20 76 73 56 65 72 73 69   Version vsVersi
2c260 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  on,..           
2c270 20 62 6f 6f 6c 20 77 6f 77 36 34 0d 0a 20 20 20   bool wow64..   
2c280 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
2c290 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
2c2a0 20 20 20 69 66 20 28 76 73 56 65 72 73 69 6f 6e     if (vsVersion
2c2b0 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
2c2c0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
2c2d0 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20  n null;....     
2c2e0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 74         return St
2c2f0 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
2c300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 7b                "{
2c310 30 7d 5c 5c 7b 31 7d 22 2c 20 47 65 74 56 73 52  0}\\{1}", GetVsR
2c320 6f 6f 74 4b 65 79 4e 61 6d 65 28 77 6f 77 36 34  ootKeyName(wow64
2c330 29 2c 20 76 73 56 65 72 73 69 6f 6e 29 3b 0d 0a  ), vsVersion);..
2c340 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
2c350 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
2c360 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c370 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c380 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c390 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
2c3a0 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20          #region 
2c3b0 56 69 73 75 61 6c 20 53 74 75 64 69 6f 20 44 61  Visual Studio Da
2c3c0 74 61 20 53 6f 75 72 63 65 20 48 61 6e 64 6c 69  ta Source Handli
2c3d0 6e 67 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  ng..        priv
2c3e0 61 74 65 20 73 74 61 74 69 63 20 62 6f 6f 6c 20  ate static bool 
2c3f0 41 64 64 56 73 44 61 74 61 53 6f 75 72 63 65 28  AddVsDataSource(
2c400 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 4d 6f  ..            Mo
2c410 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 72 6f  ckRegistryKey ro
2c420 6f 74 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20  otKey,..        
2c430 20 20 20 20 56 65 72 73 69 6f 6e 20 76 73 56 65      Version vsVe
2c440 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20  rsion,..        
2c450 20 20 20 20 50 61 63 6b 61 67 65 20 70 61 63 6b      Package pack
2c460 61 67 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  age,..          
2c470 20 20 62 6f 6f 6c 20 77 6f 77 36 34 2c 0d 0a 20    bool wow64,.. 
2c480 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
2c490 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20  whatIf,..       
2c4a0 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73       bool verbos
2c4b0 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
2c4c0 72 65 66 20 73 74 72 69 6e 67 20 65 72 72 6f 72  ref string error
2c4d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d  ..            ).
2c4e0 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
2c4f0 20 20 20 20 20 20 20 20 69 66 20 28 76 73 56 65          if (vsVe
2c500 72 73 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  rsion == null)..
2c510 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
2c520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
2c530 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64 20  rror = "invalid 
2c540 56 53 20 76 65 72 73 69 6f 6e 22 3b 0d 0a 20 20  VS version";..  
2c550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
2c560 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20  turn false;..   
2c570 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
2c580 20 20 20 20 20 20 20 20 20 20 69 66 20 28 70 61            if (pa
2c590 63 6b 61 67 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  ckage == null)..
2c5a0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
2c5b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
2c5c0 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64 20  rror = "invalid 
2c5d0 56 53 20 70 61 63 6b 61 67 65 22 3b 0d 0a 20 20  VS package";..  
2c5e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
2c5f0 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20  turn false;..   
2c600 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
2c610 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
2c620 20 6b 65 79 4e 61 6d 65 20 3d 20 47 65 74 56 73   keyName = GetVs
2c630 4b 65 79 4e 61 6d 65 28 76 73 56 65 72 73 69 6f  KeyName(vsVersio
2c640 6e 2c 20 77 6f 77 36 34 29 3b 0d 0a 0d 0a 20 20  n, wow64);....  
2c650 20 20 20 20 20 20 20 20 20 20 75 73 69 6e 67 20            using 
2c660 28 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79  (MockRegistryKey
2c670 20 6b 65 79 20 3d 20 52 65 67 69 73 74 72 79 48   key = RegistryH
2c680 65 6c 70 65 72 2e 4f 70 65 6e 53 75 62 4b 65 79  elper.OpenSubKey
2c690 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
2c6a0 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20         rootKey, 
2c6b0 6b 65 79 4e 61 6d 65 2c 20 66 61 6c 73 65 2c 20  keyName, false, 
2c6c0 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29  whatIf, verbose)
2c6d0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
2c6e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2c6f0 20 20 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75 6c    if (key == nul
2c700 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
2c710 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
2c720 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72             error
2c730 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74   = String.Format
2c740 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
2c750 20 20 20 20 20 20 20 20 20 20 20 22 63 6f 75 6c             "coul
2c760 64 20 6e 6f 74 20 6f 70 65 6e 20 72 65 67 69 73  d not open regis
2c770 74 72 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c 7b 31  try key: {0}\\{1
2c780 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }",..           
2c790 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f               roo
2c7a0 74 4b 65 79 2c 20 6b 65 79 4e 61 6d 65 29 3b 0d  tKey, keyName);.
2c7b0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
2c7c0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
2c7d0 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lse;..          
2c7e0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
2c7f0 20 20 20 20 20 20 20 20 20 20 20 75 73 69 6e 67             using
2c800 20 28 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65   (MockRegistryKe
2c810 79 20 73 75 62 4b 65 79 20 3d 20 52 65 67 69 73  y subKey = Regis
2c820 74 72 79 48 65 6c 70 65 72 2e 4f 70 65 6e 53 75  tryHelper.OpenSu
2c830 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20  bKey(..         
2c840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6b                 k
2c850 65 79 2c 20 22 44 61 74 61 53 6f 75 72 63 65 73  ey, "DataSources
2c860 22 2c 20 74 72 75 65 2c 20 77 68 61 74 49 66 2c  ", true, whatIf,
2c870 20 76 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 20   verbose))..    
2c880 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
2c890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c8a0 20 20 20 69 66 20 28 73 75 62 4b 65 79 20 3d 3d     if (subKey ==
2c8b0 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
2c8c0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
2c8d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c8e0 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 53         error = S
2c8f0 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
2c900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c910 20 20 20 20 20 20 20 20 20 20 20 22 63 6f 75 6c             "coul
2c920 64 20 6e 6f 74 20 6f 70 65 6e 20 72 65 67 69 73  d not open regis
2c930 74 72 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c 44 61  try key: {0}\\Da
2c940 74 61 53 6f 75 72 63 65 73 22 2c 0d 0a 20 20 20  taSources",..   
2c950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c960 20 20 20 20 20 20 20 20 20 6b 65 79 29 3b 0d 0a           key);..
2c970 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2c980 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
2c990 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20   false;..       
2c9a0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
2c9b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2c9c0 20 20 20 20 20 20 75 73 69 6e 67 20 28 4d 6f 63        using (Moc
2c9d0 6b 52 65 67 69 73 74 72 79 4b 65 79 20 64 61 74  kRegistryKey dat
2c9e0 61 53 6f 75 72 63 65 4b 65 79 20 3d 0d 0a 20 20  aSourceKey =..  
2c9f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ca00 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74            Regist
2ca10 72 79 48 65 6c 70 65 72 2e 43 72 65 61 74 65 53  ryHelper.CreateS
2ca20 75 62 4b 65 79 28 73 75 62 4b 65 79 2c 0d 0a 20  ubKey(subKey,.. 
2ca30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ca40 20 20 20 20 20 20 20 20 20 20 20 70 61 63 6b 61             packa
2ca50 67 65 2e 44 61 74 61 53 6f 75 72 63 65 49 64 2e  ge.DataSourceId.
2ca60 54 6f 53 74 72 69 6e 67 28 56 73 49 64 46 6f 72  ToString(VsIdFor
2ca70 6d 61 74 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  mat),..         
2ca80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ca90 20 20 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f     whatIf, verbo
2caa0 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  se))..          
2cab0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
2cac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cad0 20 20 20 20 20 69 66 20 28 64 61 74 61 53 6f 75       if (dataSou
2cae0 72 63 65 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d  rceKey == null).
2caf0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2cb00 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
2cb10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cb20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
2cb30 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
2cb40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cb50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cb60 22 63 6f 75 6c 64 20 6e 6f 74 20 63 72 65 61 74  "could not creat
2cb70 65 20 72 65 67 69 73 74 72 79 20 6b 65 79 3a 20  e registry key: 
2cb80 7b 30 7d 5c 5c 7b 31 7d 22 2c 20 6b 65 79 2c 0d  {0}\\{1}", key,.
2cb90 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2cba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cbb0 20 70 61 63 6b 61 67 65 2e 44 61 74 61 53 6f 75   package.DataSou
2cbc0 72 63 65 49 64 2e 54 6f 53 74 72 69 6e 67 28 56  rceId.ToString(V
2cbd0 73 49 64 46 6f 72 6d 61 74 29 29 3b 0d 0a 0d 0a  sIdFormat));....
2cbe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cbf0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
2cc00 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20  rn false;..     
2cc10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cc20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
2cc30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cc40 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 53  RegistryHelper.S
2cc50 65 74 56 61 6c 75 65 28 0d 0a 20 20 20 20 20 20  etValue(..      
2cc60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cc70 20 20 20 20 20 20 64 61 74 61 53 6f 75 72 63 65        dataSource
2cc80 4b 65 79 2c 20 6e 75 6c 6c 2c 20 53 74 72 69 6e  Key, null, Strin
2cc90 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
2cca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ccb0 20 20 20 20 20 20 20 22 7b 30 7d 20 44 61 74 61         "{0} Data
2ccc0 62 61 73 65 20 46 69 6c 65 22 2c 20 50 72 6f 6a  base File", Proj
2ccd0 65 63 74 4e 61 6d 65 29 2c 20 77 68 61 74 49 66  ectName), whatIf
2cce0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
2ccf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 76                 v
2cd00 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20  erbose);....    
2cd10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cd20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
2cd30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cd40 2f 2f 20 4e 4f 54 45 3a 20 54 68 69 73 20 76 61  // NOTE: This va
2cd50 6c 75 65 20 69 73 20 6e 65 77 20 61 73 20 6f 66  lue is new as of
2cd60 20 31 2e 30 2e 38 33 2e 30 2e 0d 0a 20 20 20 20   1.0.83.0...    
2cd70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cd80 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
2cd90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cda0 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 53  RegistryHelper.S
2cdb0 65 74 56 61 6c 75 65 28 0d 0a 20 20 20 20 20 20  etValue(..      
2cdc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cdd0 20 20 20 20 20 20 64 61 74 61 53 6f 75 72 63 65        dataSource
2cde0 4b 65 79 2c 20 22 44 65 66 61 75 6c 74 50 72 6f  Key, "DefaultPro
2cdf0 76 69 64 65 72 22 2c 0d 0a 20 20 20 20 20 20 20  vider",..       
2ce00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ce10 20 20 20 20 20 70 61 63 6b 61 67 65 2e 44 61 74       package.Dat
2ce20 61 50 72 6f 76 69 64 65 72 49 64 2e 54 6f 53 74  aProviderId.ToSt
2ce30 72 69 6e 67 28 56 73 49 64 46 6f 72 6d 61 74 29  ring(VsIdFormat)
2ce40 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
2ce50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 77                 w
2ce60 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 3b  hatIf, verbose);
2ce70 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2ce80 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69              Regi
2ce90 73 74 72 79 48 65 6c 70 65 72 2e 43 72 65 61 74  stryHelper.Creat
2cea0 65 53 75 62 4b 65 79 28 64 61 74 61 53 6f 75 72  eSubKey(dataSour
2ceb0 63 65 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20  ceKey,..        
2cec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ced0 20 20 20 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61      String.Forma
2cee0 74 28 22 53 75 70 70 6f 72 74 69 6e 67 50 72 6f  t("SupportingPro
2cef0 76 69 64 65 72 73 5c 5c 7b 30 7d 22 2c 0d 0a 20  viders\\{0}",.. 
2cf00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cf10 20 20 20 20 20 20 20 20 20 20 20 70 61 63 6b 61             packa
2cf20 67 65 2e 44 61 74 61 50 72 6f 76 69 64 65 72 49  ge.DataProviderI
2cf30 64 2e 54 6f 53 74 72 69 6e 67 28 56 73 49 64 46  d.ToString(VsIdF
2cf40 6f 72 6d 61 74 29 29 2c 0d 0a 20 20 20 20 20 20  ormat)),..      
2cf50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cf60 20 20 20 20 20 20 77 68 61 74 49 66 2c 20 76 65        whatIf, ve
2cf70 72 62 6f 73 65 29 3b 0d 0a 20 20 20 20 20 20 20  rbose);..       
2cf80 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
2cf90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cfa0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
2cfb0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2cfc0 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20  return true;..  
2cfd0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
2cfe0 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
2cff0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d000 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d010 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d020 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
2d030 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74        private st
2d040 61 74 69 63 20 62 6f 6f 6c 20 52 65 6d 6f 76 65  atic bool Remove
2d050 56 73 44 61 74 61 53 6f 75 72 63 65 28 0d 0a 20  VsDataSource(.. 
2d060 20 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52             MockR
2d070 65 67 69 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b  egistryKey rootK
2d080 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ey,..           
2d090 20 56 65 72 73 69 6f 6e 20 76 73 56 65 72 73 69   Version vsVersi
2d0a0 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  on,..           
2d0b0 20 50 61 63 6b 61 67 65 20 70 61 63 6b 61 67 65   Package package
2d0c0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  ,..            b
2d0d0 6f 6f 6c 20 77 6f 77 36 34 2c 0d 0a 20 20 20 20  ool wow64,..    
2d0e0 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61          bool wha
2d0f0 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  tIf,..          
2d100 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 0d    bool verbose,.
2d110 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66  .            ref
2d120 20 73 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20   string error.. 
2d130 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
2d140 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
2d150 20 20 20 20 20 69 66 20 28 76 73 56 65 72 73 69       if (vsVersi
2d160 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  on == null)..   
2d170 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
2d180 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
2d190 72 20 3d 20 22 69 6e 76 61 6c 69 64 20 56 53 20  r = "invalid VS 
2d1a0 76 65 72 73 69 6f 6e 22 3b 0d 0a 20 20 20 20 20  version";..     
2d1b0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
2d1c0 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  n false;..      
2d1d0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
2d1e0 20 20 20 20 20 20 20 69 66 20 28 70 61 63 6b 61         if (packa
2d1f0 67 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ge == null)..   
2d200 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
2d210 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
2d220 72 20 3d 20 22 69 6e 76 61 6c 69 64 20 56 53 20  r = "invalid VS 
2d230 70 61 63 6b 61 67 65 22 3b 0d 0a 20 20 20 20 20  package";..     
2d240 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
2d250 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  n false;..      
2d260 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
2d270 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6b 65         string ke
2d280 79 4e 61 6d 65 20 3d 20 47 65 74 56 73 4b 65 79  yName = GetVsKey
2d290 4e 61 6d 65 28 76 73 56 65 72 73 69 6f 6e 2c 20  Name(vsVersion, 
2d2a0 77 6f 77 36 34 29 3b 0d 0a 0d 0a 20 20 20 20 20  wow64);....     
2d2b0 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 4d 6f         using (Mo
2d2c0 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 6b 65  ckRegistryKey ke
2d2d0 79 20 3d 20 52 65 67 69 73 74 72 79 48 65 6c 70  y = RegistryHelp
2d2e0 65 72 2e 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a  er.OpenSubKey(..
2d2f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d300 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 6b 65 79      rootKey, key
2d310 4e 61 6d 65 2c 20 66 61 6c 73 65 2c 20 77 68 61  Name, false, wha
2d320 74 49 66 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a  tIf, verbose))..
2d330 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
2d340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
2d350 66 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d  f (key == null).
2d360 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2d370 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
2d380 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
2d390 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
2d3a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d3b0 20 20 20 20 20 20 20 20 22 63 6f 75 6c 64 20 6e          "could n
2d3c0 6f 74 20 6f 70 65 6e 20 72 65 67 69 73 74 72 79  ot open registry
2d3d0 20 6b 65 79 3a 20 7b 30 7d 5c 5c 7b 31 7d 22 2c   key: {0}\\{1}",
2d3e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2d3f0 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65            rootKe
2d400 79 2c 20 6b 65 79 4e 61 6d 65 29 3b 0d 0a 0d 0a  y, keyName);....
2d410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d420 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
2d430 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
2d440 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
2d450 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 4d          using (M
2d460 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 73  ockRegistryKey s
2d470 75 62 4b 65 79 20 3d 20 52 65 67 69 73 74 72 79  ubKey = Registry
2d480 48 65 6c 70 65 72 2e 4f 70 65 6e 53 75 62 4b 65  Helper.OpenSubKe
2d490 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y(..            
2d4a0 20 20 20 20 20 20 20 20 20 20 20 20 6b 65 79 2c              key,
2d4b0 20 22 44 61 74 61 53 6f 75 72 63 65 73 22 2c 20   "DataSources", 
2d4c0 74 72 75 65 2c 20 77 68 61 74 49 66 2c 20 76 65  true, whatIf, ve
2d4d0 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 20  rbose))..       
2d4e0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
2d4f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d500 69 66 20 28 73 75 62 4b 65 79 20 3d 3d 20 6e 75  if (subKey == nu
2d510 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
2d520 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
2d530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d540 20 20 20 20 65 72 72 6f 72 20 3d 20 53 74 72 69      error = Stri
2d550 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ng.Format(..    
2d560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d570 20 20 20 20 20 20 20 20 22 63 6f 75 6c 64 20 6e          "could n
2d580 6f 74 20 6f 70 65 6e 20 72 65 67 69 73 74 72 79  ot open registry
2d590 20 6b 65 79 3a 20 7b 30 7d 5c 5c 44 61 74 61 53   key: {0}\\DataS
2d5a0 6f 75 72 63 65 73 22 2c 0d 0a 20 20 20 20 20 20  ources",..      
2d5b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d5c0 20 20 20 20 20 20 6b 65 79 29 3b 0d 0a 0d 0a 20        key);.... 
2d5d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d5e0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
2d5f0 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lse;..          
2d600 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
2d610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d620 20 20 20 52 65 67 69 73 74 72 79 48 65 6c 70 65     RegistryHelpe
2d630 72 2e 44 65 6c 65 74 65 53 75 62 4b 65 79 54 72  r.DeleteSubKeyTr
2d640 65 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ee(..           
2d650 20 20 20 20 20 20 20 20 20 20 20 20 20 73 75 62               sub
2d660 4b 65 79 2c 20 70 61 63 6b 61 67 65 2e 44 61 74  Key, package.Dat
2d670 61 53 6f 75 72 63 65 49 64 2e 54 6f 53 74 72 69  aSourceId.ToStri
2d680 6e 67 28 56 73 49 64 46 6f 72 6d 61 74 29 2c 0d  ng(VsIdFormat),.
2d690 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2d6a0 20 20 20 20 20 20 20 20 20 77 68 61 74 49 66 2c           whatIf,
2d6b0 20 76 65 72 62 6f 73 65 29 3b 0d 0a 20 20 20 20   verbose);..    
2d6c0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
2d6d0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
2d6e0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
2d6f0 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20  rn true;..      
2d700 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f    }....        /
2d710 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d720 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d730 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d740 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d750 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
2d760 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63    private static
2d770 20 62 6f 6f 6c 20 50 72 6f 63 65 73 73 56 73 44   bool ProcessVsD
2d780 61 74 61 53 6f 75 72 63 65 28 0d 0a 20 20 20 20  ataSource(..    
2d790 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65 67 69          MockRegi
2d7a0 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79 2c  stryKey rootKey,
2d7b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 56 65  ..            Ve
2d7c0 72 73 69 6f 6e 20 76 73 56 65 72 73 69 6f 6e 2c  rsion vsVersion,
2d7d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 50 61  ..            Pa
2d7e0 63 6b 61 67 65 20 70 61 63 6b 61 67 65 2c 0d 0a  ckage package,..
2d7f0 20 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65              obje
2d800 63 74 20 63 6c 69 65 6e 74 44 61 74 61 2c 0d 0a  ct clientData,..
2d810 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
2d820 20 77 6f 77 36 34 2c 0d 0a 20 20 20 20 20 20 20   wow64,..       
2d830 20 20 20 20 20 62 6f 6f 6c 20 74 68 72 6f 77 4f       bool throwO
2d840 6e 4d 69 73 73 69 6e 67 2c 0d 0a 20 20 20 20 20  nMissing,..     
2d850 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74         bool what
2d860 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  If,..           
2d870 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 0d 0a   bool verbose,..
2d880 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20              ref 
2d890 73 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20  string error..  
2d8a0 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
2d8b0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
2d8c0 20 20 20 20 69 66 20 28 70 61 63 6b 61 67 65 20      if (package 
2d8d0 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
2d8e0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
2d8f0 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
2d900 20 22 69 6e 76 61 6c 69 64 20 56 53 20 70 61 63   "invalid VS pac
2d910 6b 61 67 65 22 3b 0d 0a 20 20 20 20 20 20 20 20  kage";..        
2d920 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
2d930 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alse;..         
2d940 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
2d950 20 20 20 20 41 6e 79 50 61 69 72 3c 73 74 72 69      AnyPair<stri
2d960 6e 67 2c 20 62 6f 6f 6c 3e 20 70 61 69 72 20 3d  ng, bool> pair =
2d970 20 63 6c 69 65 6e 74 44 61 74 61 20 61 73 20 41   clientData as A
2d980 6e 79 50 61 69 72 3c 73 74 72 69 6e 67 2c 20 62  nyPair<string, b
2d990 6f 6f 6c 3e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ool>;....       
2d9a0 20 20 20 20 20 69 66 20 28 70 61 69 72 20 3d 3d       if (pair ==
2d9b0 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
2d9c0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
2d9d0 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22         error = "
2d9e0 69 6e 76 61 6c 69 64 20 56 53 20 63 61 6c 6c 62  invalid VS callb
2d9f0 61 63 6b 20 64 61 74 61 22 3b 0d 0a 20 20 20 20  ack data";..    
2da00 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
2da10 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20  rn false;..     
2da20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
2da30 20 20 20 20 20 20 20 20 69 66 20 28 70 61 69 72          if (pair
2da40 2e 59 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  .Y)..           
2da50 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
2da60 20 20 20 20 72 65 74 75 72 6e 20 41 64 64 56 73      return AddVs
2da70 44 61 74 61 53 6f 75 72 63 65 28 0d 0a 20 20 20  DataSource(..   
2da80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2da90 20 72 6f 6f 74 4b 65 79 2c 20 76 73 56 65 72 73   rootKey, vsVers
2daa0 69 6f 6e 2c 20 70 61 63 6b 61 67 65 2c 20 77 6f  ion, package, wo
2dab0 77 36 34 2c 20 77 68 61 74 49 66 2c 20 76 65 72  w64, whatIf, ver
2dac0 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  bose,..         
2dad0 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20 65             ref e
2dae0 72 72 6f 72 29 3b 0d 0a 20 20 20 20 20 20 20 20  rror);..        
2daf0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
2db00 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20     else..       
2db10 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
2db20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 52          return R
2db30 65 6d 6f 76 65 56 73 44 61 74 61 53 6f 75 72 63  emoveVsDataSourc
2db40 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
2db50 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c          rootKey,
2db60 20 76 73 56 65 72 73 69 6f 6e 2c 20 70 61 63 6b   vsVersion, pack
2db70 61 67 65 2c 20 77 6f 77 36 34 2c 20 77 68 61 74  age, wow64, what
2db80 49 66 2c 20 76 65 72 62 6f 73 65 2c 0d 0a 20 20  If, verbose,..  
2db90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2dba0 20 20 72 65 66 20 65 72 72 6f 72 29 3b 0d 0a 20    ref error);.. 
2dbb0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
2dbc0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
2dbd0 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20   #endregion.... 
2dbe0 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
2dbf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2dc00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2dc10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2dc20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
2dc30 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f  ..        #regio
2dc40 6e 20 56 69 73 75 61 6c 20 53 74 75 64 69 6f 20  n Visual Studio 
2dc50 44 61 74 61 20 50 72 6f 76 69 64 65 72 20 48 61  Data Provider Ha
2dc60 6e 64 6c 69 6e 67 0d 0a 20 20 20 20 20 20 20 20  ndling..        
2dc70 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 62  private static b
2dc80 6f 6f 6c 20 41 64 64 56 73 44 61 74 61 50 72 6f  ool AddVsDataPro
2dc90 76 69 64 65 72 28 0d 0a 20 20 20 20 20 20 20 20  vider(..        
2dca0 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79      MockRegistry
2dcb0 4b 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20  Key rootKey,..  
2dcc0 20 20 20 20 20 20 20 20 20 20 56 65 72 73 69 6f            Versio
2dcd0 6e 20 76 73 56 65 72 73 69 6f 6e 2c 0d 0a 20 20  n vsVersion,..  
2dce0 20 20 20 20 20 20 20 20 20 20 50 61 63 6b 61 67            Packag
2dcf0 65 20 70 61 63 6b 61 67 65 2c 0d 0a 20 20 20 20  e package,..    
2dd00 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 66          string f
2dd10 69 6c 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20  ileName,..      
2dd20 20 20 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34        bool wow64
2dd30 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  ,..            b
2dd40 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20  ool whatIf,..   
2dd50 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65           bool ve
2dd60 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20 20  rbose,..        
2dd70 20 20 20 20 72 65 66 20 73 74 72 69 6e 67 20 65      ref string e
2dd80 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20  rror..          
2dd90 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a    )..        {..
2dda0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
2ddb0 76 73 56 65 72 73 69 6f 6e 20 3d 3d 20 6e 75 6c  vsVersion == nul
2ddc0 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
2ddd0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
2dde0 20 20 20 65 72 72 6f 72 20 3d 20 22 69 6e 76 61     error = "inva
2ddf0 6c 69 64 20 56 53 20 76 65 72 73 69 6f 6e 22 3b  lid VS version";
2de00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2de10 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
2de20 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
2de30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
2de40 20 28 70 61 63 6b 61 67 65 20 3d 3d 20 6e 75 6c   (package == nul
2de50 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
2de60 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
2de70 20 20 20 65 72 72 6f 72 20 3d 20 22 69 6e 76 61     error = "inva
2de80 6c 69 64 20 56 53 20 70 61 63 6b 61 67 65 22 3b  lid VS package";
2de90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2dea0 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
2deb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
2dec0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74  ..            st
2ded0 72 69 6e 67 20 6b 65 79 4e 61 6d 65 20 3d 20 47  ring keyName = G
2dee0 65 74 56 73 4b 65 79 4e 61 6d 65 28 76 73 56 65  etVsKeyName(vsVe
2def0 72 73 69 6f 6e 2c 20 77 6f 77 36 34 29 3b 0d 0a  rsion, wow64);..
2df00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 75 73  ..            us
2df10 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73 74 72  ing (MockRegistr
2df20 79 4b 65 79 20 6b 65 79 20 3d 20 52 65 67 69 73  yKey key = Regis
2df30 74 72 79 48 65 6c 70 65 72 2e 4f 70 65 6e 53 75  tryHelper.OpenSu
2df40 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20  bKey(..         
2df50 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b             rootK
2df60 65 79 2c 20 6b 65 79 4e 61 6d 65 2c 20 66 61 6c  ey, keyName, fal
2df70 73 65 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62  se, whatIf, verb
2df80 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ose))..         
2df90 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
2dfa0 20 20 20 20 20 20 69 66 20 28 6b 65 79 20 3d 3d        if (key ==
2dfb0 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
2dfc0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
2dfd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
2dfe0 72 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f  rror = String.Fo
2dff0 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
2e000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
2e010 63 6f 75 6c 64 20 6e 6f 74 20 6f 70 65 6e 20 72  could not open r
2e020 65 67 69 73 74 72 79 20 6b 65 79 3a 20 7b 30 7d  egistry key: {0}
2e030 5c 5c 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20  \\{1}",..       
2e040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e050 20 72 6f 6f 74 4b 65 79 2c 20 6b 65 79 4e 61 6d   rootKey, keyNam
2e060 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e);....         
2e070 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
2e080 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  n false;..      
2e090 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
2e0a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 75                 u
2e0b0 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73 74  sing (MockRegist
2e0c0 72 79 4b 65 79 20 73 75 62 4b 65 79 20 3d 20 52  ryKey subKey = R
2e0d0 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 4f 70  egistryHelper.Op
2e0e0 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20  enSubKey(..     
2e0f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e100 20 20 20 6b 65 79 2c 20 22 44 61 74 61 50 72 6f     key, "DataPro
2e110 76 69 64 65 72 73 22 2c 20 74 72 75 65 2c 20 77  viders", true, w
2e120 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 29  hatIf, verbose))
2e130 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2e140 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
2e150 20 20 20 20 20 20 20 20 20 69 66 20 28 73 75 62           if (sub
2e160 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  Key == null)..  
2e170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e180 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
2e190 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
2e1a0 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d  or = String.Form
2e1b0 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
2e1c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e1d0 20 22 63 6f 75 6c 64 20 6e 6f 74 20 6f 70 65 6e   "could not open
2e1e0 20 72 65 67 69 73 74 72 79 20 6b 65 79 3a 20 7b   registry key: {
2e1f0 30 7d 5c 5c 44 61 74 61 50 72 6f 76 69 64 65 72  0}\\DataProvider
2e200 73 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s",..           
2e210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e220 20 6b 65 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20   key);....      
2e230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e240 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
2e250 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2e260 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
2e270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 75 73                us
2e280 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73 74 72  ing (MockRegistr
2e290 79 4b 65 79 20 64 61 74 61 50 72 6f 76 69 64 65  yKey dataProvide
2e2a0 72 4b 65 79 20 3d 0d 0a 20 20 20 20 20 20 20 20  rKey =..        
2e2b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e2c0 20 20 20 20 52 65 67 69 73 74 72 79 48 65 6c 70      RegistryHelp
2e2d0 65 72 2e 43 72 65 61 74 65 53 75 62 4b 65 79 28  er.CreateSubKey(
2e2e0 73 75 62 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20  subKey,..       
2e2f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e300 20 20 20 20 20 70 61 63 6b 61 67 65 2e 44 61 74       package.Dat
2e310 61 50 72 6f 76 69 64 65 72 49 64 2e 54 6f 53 74  aProviderId.ToSt
2e320 72 69 6e 67 28 56 73 49 64 46 6f 72 6d 61 74 29  ring(VsIdFormat)
2e330 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
2e340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 77                 w
2e350 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 29  hatIf, verbose))
2e360 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2e370 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
2e380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e390 20 69 66 20 28 64 61 74 61 50 72 6f 76 69 64 65   if (dataProvide
2e3a0 72 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  rKey == null).. 
2e3b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e3c0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
2e3d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e3e0 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 53 74        error = St
2e3f0 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
2e400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 63                "c
2e420 6f 75 6c 64 20 6e 6f 74 20 63 72 65 61 74 65 20  ould not create 
2e430 72 65 67 69 73 74 72 79 20 6b 65 79 3a 20 7b 30  registry key: {0
2e440 7d 5c 5c 7b 31 7d 22 2c 20 6b 65 79 2c 0d 0a 20  }\\{1}", key,.. 
2e450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70                 p
2e470 61 63 6b 61 67 65 2e 44 61 74 61 50 72 6f 76 69  ackage.DataProvi
2e480 64 65 72 49 64 2e 54 6f 53 74 72 69 6e 67 28 56  derId.ToString(V
2e490 73 49 64 46 6f 72 6d 61 74 29 29 3b 0d 0a 0d 0a  sIdFormat));....
2e4a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e4b0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
2e4c0 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20  rn false;..     
2e4d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e4e0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
2e4f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e500 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 53  RegistryHelper.S
2e510 65 74 56 61 6c 75 65 28 0d 0a 20 20 20 20 20 20  etValue(..      
2e520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e530 20 20 20 20 20 20 64 61 74 61 50 72 6f 76 69 64        dataProvid
2e540 65 72 4b 65 79 2c 20 6e 75 6c 6c 2c 20 44 65 73  erKey, null, Des
2e550 63 72 69 70 74 69 6f 6e 2c 20 77 68 61 74 49 66  cription, whatIf
2e560 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
2e570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 76                 v
2e580 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20  erbose);....    
2e590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e5a0 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
2e5b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e5c0 2f 2f 20 4e 4f 54 45 3a 20 54 68 69 73 20 76 61  // NOTE: This va
2e5d0 6c 75 65 20 69 73 20 6e 65 77 20 61 73 20 6f 66  lue is new as of
2e5e0 20 31 2e 30 2e 38 33 2e 30 2e 0d 0a 20 20 20 20   1.0.83.0...    
2e5f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e600 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
2e610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e620 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 53  RegistryHelper.S
2e630 65 74 56 61 6c 75 65 28 0d 0a 20 20 20 20 20 20  etValue(..      
2e640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e650 20 20 20 20 20 20 64 61 74 61 50 72 6f 76 69 64        dataProvid
2e660 65 72 4b 65 79 2c 20 22 41 73 73 65 6d 62 6c 79  erKey, "Assembly
2e670 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
2e680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e690 70 61 63 6b 61 67 65 2e 41 73 73 65 6d 62 6c 79  package.Assembly
2e6a0 4e 61 6d 65 2e 54 6f 53 74 72 69 6e 67 28 29 2c  Name.ToString(),
2e6b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2e6c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 77 68                wh
2e6d0 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 3b 0d  atIf, verbose);.
2e6e0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
2e6f0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
2e700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e710 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20         // NOTE: 
2e720 54 68 69 73 20 76 61 6c 75 65 20 69 73 20 6e 65  This value is ne
2e730 77 20 61 73 20 6f 66 20 31 2e 30 2e 38 33 2e 30  w as of 1.0.83.0
2e740 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
2e750 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
2e760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e770 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79 48         RegistryH
2e780 65 6c 70 65 72 2e 53 65 74 56 61 6c 75 65 28 0d  elper.SetValue(.
2e790 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2e7a0 20 20 20 20 20 20 20 20 20 20 20 20 20 64 61 74               dat
2e7b0 61 50 72 6f 76 69 64 65 72 4b 65 79 2c 20 22 41  aProviderKey, "A
2e7c0 73 73 6f 63 69 61 74 65 64 53 6f 75 72 63 65 22  ssociatedSource"
2e7d0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
2e7e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70                 p
2e7f0 61 63 6b 61 67 65 2e 44 61 74 61 53 6f 75 72 63  ackage.DataSourc
2e800 65 49 64 2e 54 6f 53 74 72 69 6e 67 28 56 73 49  eId.ToString(VsI
2e810 64 46 6f 72 6d 61 74 29 2c 0d 0a 20 20 20 20 20  dFormat),..     
2e820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e830 20 20 20 20 20 20 20 77 68 61 74 49 66 2c 20 76         whatIf, v
2e840 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20  erbose);....    
2e850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e860 20 20 20 20 52 65 67 69 73 74 72 79 48 65 6c 70      RegistryHelp
2e870 65 72 2e 53 65 74 56 61 6c 75 65 28 0d 0a 20 20  er.SetValue(..  
2e880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e890 20 20 20 20 20 20 20 20 20 20 64 61 74 61 50 72            dataPr
2e8a0 6f 76 69 64 65 72 4b 65 79 2c 20 22 49 6e 76 61  oviderKey, "Inva
2e8b0 72 69 61 6e 74 4e 61 6d 65 22 2c 20 49 6e 76 61  riantName", Inva
2e8c0 72 69 61 6e 74 4e 61 6d 65 2c 0d 0a 20 20 20 20  riantName,..    
2e8d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e8e0 20 20 20 20 20 20 20 20 77 68 61 74 49 66 2c 20          whatIf, 
2e8f0 76 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20  verbose);....   
2e900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e910 20 20 20 20 20 52 65 67 69 73 74 72 79 48 65 6c       RegistryHel
2e920 70 65 72 2e 53 65 74 56 61 6c 75 65 28 0d 0a 20  per.SetValue(.. 
2e930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e940 20 20 20 20 20 20 20 20 20 20 20 64 61 74 61 50             dataP
2e950 72 6f 76 69 64 65 72 4b 65 79 2c 20 22 54 65 63  roviderKey, "Tec
2e960 68 6e 6f 6c 6f 67 79 22 2c 0d 0a 20 20 20 20 20  hnology",..     
2e970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e980 20 20 20 20 20 20 20 70 61 63 6b 61 67 65 2e 41         package.A
2e990 64 6f 4e 65 74 54 65 63 68 6e 6f 6c 6f 67 79 49  doNetTechnologyI
2e9a0 64 2e 54 6f 53 74 72 69 6e 67 28 56 73 49 64 46  d.ToString(VsIdF
2e9b0 6f 72 6d 61 74 29 2c 0d 0a 20 20 20 20 20 20 20  ormat),..       
2e9c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e9d0 20 20 20 20 20 77 68 61 74 49 66 2c 20 76 65 72       whatIf, ver
2e9e0 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  bose);....      
2e9f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ea00 20 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72    RegistryHelper
2ea10 2e 53 65 74 56 61 6c 75 65 28 0d 0a 20 20 20 20  .SetValue(..    
2ea20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ea30 20 20 20 20 20 20 20 20 64 61 74 61 50 72 6f 76          dataProv
2ea40 69 64 65 72 4b 65 79 2c 20 22 43 6f 64 65 42 61  iderKey, "CodeBa
2ea50 73 65 22 2c 20 66 69 6c 65 4e 61 6d 65 2c 20 77  se", fileName, w
2ea60 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20  hatIf,..        
2ea70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ea80 20 20 20 20 76 65 72 62 6f 73 65 29 3b 0d 0a 0d      verbose);...
2ea90 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2eaa0 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72           Registr
2eab0 79 48 65 6c 70 65 72 2e 53 65 74 56 61 6c 75 65  yHelper.SetValue
2eac0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
2ead0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
2eae0 61 74 61 50 72 6f 76 69 64 65 72 4b 65 79 2c 20  ataProviderKey, 
2eaf0 22 46 61 63 74 6f 72 79 53 65 72 76 69 63 65 22  "FactoryService"
2eb00 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
2eb10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70                 p
2eb20 61 63 6b 61 67 65 2e 53 65 72 76 69 63 65 49 64  ackage.ServiceId
2eb30 2e 54 6f 53 74 72 69 6e 67 28 56 73 49 64 46 6f  .ToString(VsIdFo
2eb40 72 6d 61 74 29 2c 20 77 68 61 74 49 66 2c 0d 0a  rmat), whatIf,..
2eb50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2eb60 20 20 20 20 20 20 20 20 20 20 20 20 76 65 72 62              verb
2eb70 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ose);....       
2eb80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2eb90 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e   RegistryHelper.
2eba0 43 72 65 61 74 65 53 75 62 4b 65 79 28 64 61 74  CreateSubKey(dat
2ebb0 61 50 72 6f 76 69 64 65 72 4b 65 79 2c 0d 0a 20  aProviderKey,.. 
2ebc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ebd0 20 20 20 20 20 20 20 20 20 20 20 22 53 75 70 70             "Supp
2ebe0 6f 72 74 65 64 4f 62 6a 65 63 74 73 5c 5c 44 61  ortedObjects\\Da
2ebf0 74 61 43 6f 6e 6e 65 63 74 69 6f 6e 55 49 43 6f  taConnectionUICo
2ec00 6e 74 72 6f 6c 22 2c 0d 0a 20 20 20 20 20 20 20  ntrol",..       
2ec10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ec20 20 20 20 20 20 77 68 61 74 49 66 2c 20 76 65 72       whatIf, ver
2ec30 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  bose);....      
2ec40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ec50 20 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72    RegistryHelper
2ec60 2e 43 72 65 61 74 65 53 75 62 4b 65 79 28 64 61  .CreateSubKey(da
2ec70 74 61 50 72 6f 76 69 64 65 72 4b 65 79 2c 0d 0a  taProviderKey,..
2ec80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ec90 20 20 20 20 20 20 20 20 20 20 20 20 22 53 75 70              "Sup
2eca0 70 6f 72 74 65 64 4f 62 6a 65 63 74 73 5c 5c 44  portedObjects\\D
2ecb0 61 74 61 43 6f 6e 6e 65 63 74 69 6f 6e 50 72 6f  ataConnectionPro
2ecc0 70 65 72 74 69 65 73 22 2c 0d 0a 20 20 20 20 20  perties",..     
2ecd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ece0 20 20 20 20 20 20 20 77 68 61 74 49 66 2c 20 76         whatIf, v
2ecf0 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20  erbose);....    
2ed00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ed10 20 20 20 20 52 65 67 69 73 74 72 79 48 65 6c 70      RegistryHelp
2ed20 65 72 2e 43 72 65 61 74 65 53 75 62 4b 65 79 28  er.CreateSubKey(
2ed30 64 61 74 61 50 72 6f 76 69 64 65 72 4b 65 79 2c  dataProviderKey,
2ed40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2ed50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 53                "S
2ed60 75 70 70 6f 72 74 65 64 4f 62 6a 65 63 74 73 5c  upportedObjects\
2ed70 5c 44 61 74 61 43 6f 6e 6e 65 63 74 69 6f 6e 53  \DataConnectionS
2ed80 75 70 70 6f 72 74 22 2c 20 77 68 61 74 49 66 2c  upport", whatIf,
2ed90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2eda0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 76 65                ve
2edb0 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20  rbose);....     
2edc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2edd0 20 20 20 52 65 67 69 73 74 72 79 48 65 6c 70 65     RegistryHelpe
2ede0 72 2e 43 72 65 61 74 65 53 75 62 4b 65 79 28 64  r.CreateSubKey(d
2edf0 61 74 61 50 72 6f 76 69 64 65 72 4b 65 79 2c 0d  ataProviderKey,.
2ee00 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2ee10 20 20 20 20 20 20 20 20 20 20 20 20 20 22 53 75               "Su
2ee20 70 70 6f 72 74 65 64 4f 62 6a 65 63 74 73 5c 5c  pportedObjects\\
2ee30 44 61 74 61 4f 62 6a 65 63 74 53 75 70 70 6f 72  DataObjectSuppor
2ee40 74 22 2c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20  t", whatIf,..   
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 20 20 76 65 72 62 6f 73 65           verbose
2ee70 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
2ee80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65                Re
2ee90 67 69 73 74 72 79 48 65 6c 70 65 72 2e 43 72 65  gistryHelper.Cre
2eea0 61 74 65 53 75 62 4b 65 79 28 64 61 74 61 50 72  ateSubKey(dataPr
2eeb0 6f 76 69 64 65 72 4b 65 79 2c 0d 0a 20 20 20 20  oviderKey,..    
2eec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2eed0 20 20 20 20 20 20 20 20 22 53 75 70 70 6f 72 74          "Support
2eee0 65 64 4f 62 6a 65 63 74 73 5c 5c 44 61 74 61 56  edObjects\\DataV
2eef0 69 65 77 53 75 70 70 6f 72 74 22 2c 20 77 68 61  iewSupport", wha
2ef00 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  tIf,..          
2ef10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ef20 20 20 76 65 72 62 6f 73 65 29 3b 0d 0a 20 20 20    verbose);..   
2ef30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ef40 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
2ef50 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
2ef60 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
2ef70 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b      return true;
2ef80 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
2ef90 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
2efa0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2efb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2efc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2efd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
2efe0 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
2eff0 65 20 73 74 61 74 69 63 20 62 6f 6f 6c 20 52 65  e static bool Re
2f000 6d 6f 76 65 56 73 44 61 74 61 50 72 6f 76 69 64  moveVsDataProvid
2f010 65 72 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  er(..           
2f020 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79   MockRegistryKey
2f030 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20 20 20   rootKey,..     
2f040 20 20 20 20 20 20 20 56 65 72 73 69 6f 6e 20 76         Version v
2f050 73 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20  sVersion,..     
2f060 20 20 20 20 20 20 20 50 61 63 6b 61 67 65 20 70         Package p
2f070 61 63 6b 61 67 65 2c 0d 0a 20 20 20 20 20 20 20  ackage,..       
2f080 20 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34 2c       bool wow64,
2f090 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
2f0a0 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20  ol whatIf,..    
2f0b0 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65 72          bool ver
2f0c0 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  bose,..         
2f0d0 20 20 20 72 65 66 20 73 74 72 69 6e 67 20 65 72     ref string er
2f0e0 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ror..           
2f0f0 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20   )..        {.. 
2f100 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76             if (v
2f110 73 56 65 72 73 69 6f 6e 20 3d 3d 20 6e 75 6c 6c  sVersion == null
2f120 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
2f130 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2f140 20 20 65 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c    error = "inval
2f150 69 64 20 56 53 20 76 65 72 73 69 6f 6e 22 3b 0d  id VS version";.
2f160 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2f170 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
2f180 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
2f190 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72  .            str
2f1a0 69 6e 67 20 6b 65 79 4e 61 6d 65 20 3d 20 47 65  ing keyName = Ge
2f1b0 74 56 73 4b 65 79 4e 61 6d 65 28 76 73 56 65 72  tVsKeyName(vsVer
2f1c0 73 69 6f 6e 2c 20 77 6f 77 36 34 29 3b 0d 0a 0d  sion, wow64);...
2f1d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 75 73 69  .            usi
2f1e0 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73 74 72 79  ng (MockRegistry
2f1f0 4b 65 79 20 6b 65 79 20 3d 20 52 65 67 69 73 74  Key key = Regist
2f200 72 79 48 65 6c 70 65 72 2e 4f 70 65 6e 53 75 62  ryHelper.OpenSub
2f210 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20  Key(..          
2f220 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65            rootKe
2f230 79 2c 20 6b 65 79 4e 61 6d 65 2c 20 66 61 6c 73  y, keyName, fals
2f240 65 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f  e, whatIf, verbo
2f250 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  se))..          
2f260 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
2f270 20 20 20 20 20 69 66 20 28 6b 65 79 20 3d 3d 20       if (key == 
2f280 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
2f290 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
2f2a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72                er
2f2b0 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72  ror = String.For
2f2c0 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
2f2d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 63                "c
2f2e0 6f 75 6c 64 20 6e 6f 74 20 6f 70 65 6e 20 72 65  ould not open re
2f2f0 67 69 73 74 72 79 20 6b 65 79 3a 20 7b 30 7d 5c  gistry key: {0}\
2f300 5c 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20  \{1}",..        
2f310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f320 72 6f 6f 74 4b 65 79 2c 20 6b 65 79 4e 61 6d 65  rootKey, keyName
2f330 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
2f340 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
2f350 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20   false;..       
2f360 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
2f370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 75 73                us
2f380 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73 74 72  ing (MockRegistr
2f390 79 4b 65 79 20 73 75 62 4b 65 79 20 3d 20 52 65  yKey subKey = Re
2f3a0 67 69 73 74 72 79 48 65 6c 70 65 72 2e 4f 70 65  gistryHelper.Ope
2f3b0 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20  nSubKey(..      
2f3c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f3d0 20 20 6b 65 79 2c 20 22 44 61 74 61 50 72 6f 76    key, "DataProv
2f3e0 69 64 65 72 73 22 2c 20 74 72 75 65 2c 20 77 68  iders", true, wh
2f3f0 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 29 0d  atIf, verbose)).
2f400 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2f410 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
2f420 20 20 20 20 20 20 20 20 69 66 20 28 73 75 62 4b          if (subK
2f430 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ey == null)..   
2f440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f450 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
2f460 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
2f470 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  r = String.Forma
2f480 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
2f490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f4a0 22 63 6f 75 6c 64 20 6e 6f 74 20 6f 70 65 6e 20  "could not open 
2f4b0 72 65 67 69 73 74 72 79 20 6b 65 79 3a 20 7b 30  registry key: {0
2f4c0 7d 5c 5c 44 61 74 61 50 72 6f 76 69 64 65 72 73  }\\DataProviders
2f4d0 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
2f4e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f4f0 6b 65 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  key);....       
2f500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f510 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
2f520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f530 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
2f540 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67               Reg
2f550 69 73 74 72 79 48 65 6c 70 65 72 2e 44 65 6c 65  istryHelper.Dele
2f560 74 65 53 75 62 4b 65 79 54 72 65 65 28 0d 0a 20  teSubKeyTree(.. 
2f570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f580 20 20 20 20 20 20 20 73 75 62 4b 65 79 2c 20 70         subKey, p
2f590 61 63 6b 61 67 65 2e 44 61 74 61 50 72 6f 76 69  ackage.DataProvi
2f5a0 64 65 72 49 64 2e 54 6f 53 74 72 69 6e 67 28 56  derId.ToString(V
2f5b0 73 49 64 46 6f 72 6d 61 74 29 2c 0d 0a 20 20 20  sIdFormat),..   
2f5c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f5d0 20 20 20 20 20 77 68 61 74 49 66 2c 20 76 65 72       whatIf, ver
2f5e0 62 6f 73 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  bose);..        
2f5f0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
2f600 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
2f610 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74          return t
2f620 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  rue;..        }.
2f630 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
2f640 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f650 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f660 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f670 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f680 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72  //....        pr
2f690 69 76 61 74 65 20 73 74 61 74 69 63 20 62 6f 6f  ivate static boo
2f6a0 6c 20 50 72 6f 63 65 73 73 56 73 44 61 74 61 50  l ProcessVsDataP
2f6b0 72 6f 76 69 64 65 72 28 0d 0a 20 20 20 20 20 20  rovider(..      
2f6c0 20 20 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 74        MockRegist
2f6d0 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a  ryKey rootKey,..
2f6e0 20 20 20 20 20 20 20 20 20 20 20 20 56 65 72 73              Vers
2f6f0 69 6f 6e 20 76 73 56 65 72 73 69 6f 6e 2c 0d 0a  ion vsVersion,..
2f700 20 20 20 20 20 20 20 20 20 20 20 20 50 61 63 6b              Pack
2f710 61 67 65 20 70 61 63 6b 61 67 65 2c 0d 0a 20 20  age package,..  
2f720 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74            object
2f730 20 63 6c 69 65 6e 74 44 61 74 61 2c 0d 0a 20 20   clientData,..  
2f740 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77            bool w
2f750 6f 77 36 34 2c 0d 0a 20 20 20 20 20 20 20 20 20  ow64,..         
2f760 20 20 20 62 6f 6f 6c 20 74 68 72 6f 77 4f 6e 4d     bool throwOnM
2f770 69 73 73 69 6e 67 2c 0d 0a 20 20 20 20 20 20 20  issing,..       
2f780 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66       bool whatIf
2f790 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  ,..            b
2f7a0 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 0d 0a 20 20  ool verbose,..  
2f7b0 20 20 20 20 20 20 20 20 20 20 72 65 66 20 73 74            ref st
2f7c0 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20 20  ring error..    
2f7d0 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
2f7e0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
2f7f0 20 20 41 6e 79 50 61 69 72 3c 73 74 72 69 6e 67    AnyPair<string
2f800 2c 20 62 6f 6f 6c 3e 20 70 61 69 72 20 3d 20 63  , bool> pair = c
2f810 6c 69 65 6e 74 44 61 74 61 20 61 73 20 41 6e 79  lientData as Any
2f820 50 61 69 72 3c 73 74 72 69 6e 67 2c 20 62 6f 6f  Pair<string, boo
2f830 6c 3e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  l>;....         
2f840 20 20 20 69 66 20 28 70 61 69 72 20 3d 3d 20 6e     if (pair == n
2f850 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
2f860 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
2f870 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 69 6e       error = "in
2f880 76 61 6c 69 64 20 56 53 20 63 61 6c 6c 62 61 63  valid VS callbac
2f890 6b 20 64 61 74 61 22 3b 0d 0a 20 20 20 20 20 20  k data";..      
2f8a0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
2f8b0 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20   false;..       
2f8c0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
2f8d0 20 20 20 20 20 20 69 66 20 28 70 61 69 72 2e 59        if (pair.Y
2f8e0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
2f8f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2f900 20 20 72 65 74 75 72 6e 20 41 64 64 56 73 44 61    return AddVsDa
2f910 74 61 50 72 6f 76 69 64 65 72 28 0d 0a 20 20 20  taProvider(..   
2f920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f930 20 72 6f 6f 74 4b 65 79 2c 20 76 73 56 65 72 73   rootKey, vsVers
2f940 69 6f 6e 2c 20 70 61 63 6b 61 67 65 2c 20 70 61  ion, package, pa
2f950 69 72 2e 58 2c 20 77 6f 77 36 34 2c 20 77 68 61  ir.X, wow64, wha
2f960 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  tIf,..          
2f970 20 20 20 20 20 20 20 20 20 20 76 65 72 62 6f 73            verbos
2f980 65 2c 20 72 65 66 20 65 72 72 6f 72 29 3b 0d 0a  e, ref error);..
2f990 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
2f9a0 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d             else.
2f9b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
2f9c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f9d0 72 65 74 75 72 6e 20 52 65 6d 6f 76 65 56 73 44  return RemoveVsD
2f9e0 61 74 61 50 72 6f 76 69 64 65 72 28 0d 0a 20 20  ataProvider(..  
2f9f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fa00 20 20 72 6f 6f 74 4b 65 79 2c 20 76 73 56 65 72    rootKey, vsVer
2fa10 73 69 6f 6e 2c 20 70 61 63 6b 61 67 65 2c 20 77  sion, package, w
2fa20 6f 77 36 34 2c 20 77 68 61 74 49 66 2c 20 76 65  ow64, whatIf, ve
2fa30 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20 20  rbose,..        
2fa40 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20              ref 
2fa50 65 72 72 6f 72 29 3b 0d 0a 20 20 20 20 20 20 20  error);..       
2fa60 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
2fa70 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72  }..        #endr
2fa80 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20  egion....       
2fa90 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
2faa0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2fab0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2fac0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2fad0 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
2fae0 20 20 20 20 23 72 65 67 69 6f 6e 20 56 69 73 75      #region Visu
2faf0 61 6c 20 53 74 75 64 69 6f 20 50 61 63 6b 61 67  al Studio Packag
2fb00 65 20 48 61 6e 64 6c 69 6e 67 0d 0a 20 20 20 20  e Handling..    
2fb10 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74      private stat
2fb20 69 63 20 76 6f 69 64 20 49 6e 69 74 69 61 6c 69  ic void Initiali
2fb30 7a 65 56 73 50 61 63 6b 61 67 65 28 0d 0a 20 20  zeVsPackage(..  
2fb40 20 20 20 20 20 20 20 20 20 20 41 73 73 65 6d 62            Assemb
2fb50 6c 79 4e 61 6d 65 20 61 73 73 65 6d 62 6c 79 4e  lyName assemblyN
2fb60 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ame,..          
2fb70 20 20 72 65 66 20 50 61 63 6b 61 67 65 20 70 61    ref Package pa
2fb80 63 6b 61 67 65 0d 0a 20 20 20 20 20 20 20 20 20  ckage..         
2fb90 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d     )..        {.
2fba0 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
2fbb0 28 70 61 63 6b 61 67 65 20 3d 3d 20 6e 75 6c 6c  (package == null
2fbc0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
2fbd0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2fbe0 20 20 70 61 63 6b 61 67 65 20 3d 20 6e 65 77 20    package = new 
2fbf0 50 61 63 6b 61 67 65 28 29 3b 0d 0a 0d 0a 20 20  Package();....  
2fc00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 61                pa
2fc10 63 6b 61 67 65 2e 41 73 73 65 6d 62 6c 79 4e 61  ckage.AssemblyNa
2fc20 6d 65 20 3d 20 61 73 73 65 6d 62 6c 79 4e 61 6d  me = assemblyNam
2fc30 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
2fc40 20 20 20 20 20 20 70 61 63 6b 61 67 65 2e 41 64        package.Ad
2fc50 6f 4e 65 74 54 65 63 68 6e 6f 6c 6f 67 79 49 64  oNetTechnologyId
2fc60 20 3d 20 6e 65 77 20 47 75 69 64 28 0d 0a 20 20   = new Guid(..  
2fc70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fc80 20 20 22 37 37 41 42 39 41 39 44 2d 37 38 42 39    "77AB9A9D-78B9
2fc90 2d 34 42 41 37 2d 39 31 41 43 2d 38 37 33 46 35  -4BA7-91AC-873F5
2fca0 33 33 38 46 31 44 32 22 29 3b 0d 0a 0d 0a 20 20  338F1D2");....  
2fcb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 61                pa
2fcc0 63 6b 61 67 65 2e 50 61 63 6b 61 67 65 49 64 20  ckage.PackageId 
2fcd0 3d 20 6e 65 77 20 47 75 69 64 28 0d 0a 20 20 20  = new Guid(..   
2fce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fcf0 20 22 44 43 42 45 36 43 38 44 2d 30 45 35 37 2d   "DCBE6C8D-0E57-
2fd00 34 30 39 39 2d 41 31 38 33 2d 39 38 46 46 37 34  4099-A183-98FF74
2fd10 43 36 34 44 39 43 22 29 3b 0d 0a 0d 0a 20 20 20  C64D9C");....   
2fd20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 61 63               pac
2fd30 6b 61 67 65 2e 53 65 72 76 69 63 65 49 64 20 3d  kage.ServiceId =
2fd40 20 6e 65 77 20 47 75 69 64 28 0d 0a 20 20 20 20   new Guid(..    
2fd50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fd60 22 44 43 42 45 36 43 38 44 2d 30 45 35 37 2d 34  "DCBE6C8D-0E57-4
2fd70 30 39 39 2d 41 31 38 33 2d 39 38 46 46 37 34 43  099-A183-98FF74C
2fd80 36 34 44 39 44 22 29 3b 0d 0a 0d 0a 20 20 20 20  64D9D");....    
2fd90 20 20 20 20 20 20 20 20 20 20 20 20 70 61 63 6b              pack
2fda0 61 67 65 2e 44 61 74 61 53 6f 75 72 63 65 49 64  age.DataSourceId
2fdb0 20 3d 20 6e 65 77 20 47 75 69 64 28 0d 0a 20 20   = new Guid(..  
2fdc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fdd0 20 20 22 30 45 42 41 41 42 36 45 2d 43 41 38 30    "0EBAAB6E-CA80
2fde0 2d 34 42 34 41 2d 38 44 44 46 2d 43 42 45 36 42  -4B4A-8DDF-CBE6B
2fdf0 46 30 35 38 43 37 31 22 29 3b 0d 0a 0d 0a 20 20  F058C71");....  
2fe00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 61                pa
2fe10 63 6b 61 67 65 2e 44 61 74 61 50 72 6f 76 69 64  ckage.DataProvid
2fe20 65 72 49 64 20 3d 20 6e 65 77 20 47 75 69 64 28  erId = new Guid(
2fe30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2fe40 20 20 20 20 20 20 22 30 45 42 41 41 42 36 45 2d        "0EBAAB6E-
2fe50 43 41 38 30 2d 34 42 34 41 2d 38 44 44 46 2d 43  CA80-4B4A-8DDF-C
2fe60 42 45 36 42 46 30 35 38 43 37 30 22 29 3b 0d 0a  BE6BF058C70");..
2fe70 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
2fe80 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
2fe90 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
2fea0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2feb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2fec0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2fed0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
2fee0 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
2fef0 74 61 74 69 63 20 62 6f 6f 6c 20 41 64 64 56 73  tatic bool AddVs
2ff00 50 61 63 6b 61 67 65 28 0d 0a 20 20 20 20 20 20  Package(..      
2ff10 20 20 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 74        MockRegist
2ff20 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a  ryKey rootKey,..
2ff30 20 20 20 20 20 20 20 20 20 20 20 20 56 65 72 73              Vers
2ff40 69 6f 6e 20 76 73 56 65 72 73 69 6f 6e 2c 0d 0a  ion vsVersion,..
2ff50 20 20 20 20 20 20 20 20 20 20 20 20 50 61 63 6b              Pack
2ff60 61 67 65 20 70 61 63 6b 61 67 65 2c 0d 0a 20 20  age package,..  
2ff70 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
2ff80 20 66 69 6c 65 4e 61 6d 65 2c 0d 0a 20 20 20 20   fileName,..    
2ff90 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 6f 77          bool wow
2ffa0 36 34 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  64,..           
2ffb0 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20   bool whatIf,.. 
2ffc0 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
2ffd0 76 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20  verbose,..      
2ffe0 20 20 20 20 20 20 72 65 66 20 73 74 72 69 6e 67        ref string
2fff0 20 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20   error..        
30000 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b      )..        {
30010 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
30020 20 28 76 73 56 65 72 73 69 6f 6e 20 3d 3d 20 6e   (vsVersion == n
30030 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
30040 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
30050 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 69 6e       error = "in
30060 76 61 6c 69 64 20 56 53 20 76 65 72 73 69 6f 6e  valid VS version
30070 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ";..            
30080 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
30090 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
300a0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
300b0 69 66 20 28 70 61 63 6b 61 67 65 20 3d 3d 20 6e  if (package == n
300c0 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
300d0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
300e0 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 69 6e       error = "in
300f0 76 61 6c 69 64 20 56 53 20 70 61 63 6b 61 67 65  valid VS package
30100 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ";..            
30110 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
30120 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
30130 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
30140 73 74 72 69 6e 67 20 6b 65 79 4e 61 6d 65 20 3d  string keyName =
30150 20 47 65 74 56 73 4b 65 79 4e 61 6d 65 28 76 73   GetVsKeyName(vs
30160 56 65 72 73 69 6f 6e 2c 20 77 6f 77 36 34 29 3b  Version, wow64);
30170 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
30180 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73  using (MockRegis
30190 74 72 79 4b 65 79 20 6b 65 79 20 3d 20 52 65 67  tryKey key = Reg
301a0 69 73 74 72 79 48 65 6c 70 65 72 2e 4f 70 65 6e  istryHelper.Open
301b0 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20  SubKey(..       
301c0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f               roo
301d0 74 4b 65 79 2c 20 6b 65 79 4e 61 6d 65 2c 20 66  tKey, keyName, f
301e0 61 6c 73 65 2c 20 77 68 61 74 49 66 2c 20 76 65  alse, whatIf, ve
301f0 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 20  rbose))..       
30200 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
30210 20 20 20 20 20 20 20 20 69 66 20 28 6b 65 79 20          if (key 
30220 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
30230 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
30240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30250 20 65 72 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e   error = String.
30260 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
30270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30280 20 22 63 6f 75 6c 64 20 6e 6f 74 20 6f 70 65 6e   "could not open
30290 20 72 65 67 69 73 74 72 79 20 6b 65 79 3a 20 7b   registry key: {
302a0 30 7d 5c 5c 7b 31 7d 22 2c 0d 0a 20 20 20 20 20  0}\\{1}",..     
302b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
302c0 20 20 20 72 6f 6f 74 4b 65 79 2c 20 6b 65 79 4e     rootKey, keyN
302d0 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ame);....       
302e0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
302f0 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20  urn false;..    
30300 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
30310 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
30320 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69   using (MockRegi
30330 73 74 72 79 4b 65 79 20 73 75 62 4b 65 79 20 3d  stryKey subKey =
30340 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e   RegistryHelper.
30350 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20  OpenSubKey(..   
30360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30370 20 20 20 20 20 6b 65 79 2c 20 22 50 61 63 6b 61       key, "Packa
30380 67 65 73 22 2c 20 74 72 75 65 2c 20 77 68 61 74  ges", true, what
30390 49 66 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a 20  If, verbose)).. 
303a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
303b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
303c0 20 20 20 20 20 20 69 66 20 28 73 75 62 4b 65 79        if (subKey
303d0 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
303e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
303f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
30400 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20            error 
30410 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  = String.Format(
30420 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
30430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 63                "c
30440 6f 75 6c 64 20 6e 6f 74 20 6f 70 65 6e 20 72 65  ould not open re
30450 67 69 73 74 72 79 20 6b 65 79 3a 20 7b 30 7d 5c  gistry key: {0}\
30460 5c 50 61 63 6b 61 67 65 73 22 2c 0d 0a 20 20 20  \Packages",..   
30470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30480 20 20 20 20 20 20 20 20 20 6b 65 79 29 3b 0d 0a           key);..
30490 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
304a0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
304b0 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20   false;..       
304c0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
304d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
304e0 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
304f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
30500 20 4e 4f 54 45 3a 20 2a 57 41 52 4e 49 4e 47 2a   NOTE: *WARNING*
30510 20 43 68 61 6e 67 69 6e 67 20 61 6e 79 20 6f 66   Changing any of
30520 20 74 68 65 73 65 20 76 61 6c 75 65 73 20 77 69   these values wi
30530 6c 6c 20 6c 69 6b 65 6c 79 0d 0a 20 20 20 20 20  ll likely..     
30540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
30550 2f 20 20 20 20 20 20 20 72 65 71 75 69 72 65 20  /       require 
30560 61 20 6e 65 77 20 22 70 61 63 6b 61 67 65 20 6c  a new "package l
30570 6f 61 64 20 6b 65 79 22 20 28 50 4c 4b 29 20 74  oad key" (PLK) t
30580 6f 20 62 65 0d 0a 20 20 20 20 20 20 20 20 20 20  o be..          
30590 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
305a0 20 20 20 67 65 6e 65 72 61 74 65 64 20 69 6e 20     generated in 
305b0 6f 72 64 65 72 20 74 6f 20 70 72 6f 70 65 72 6c  order to properl
305c0 79 20 73 75 70 70 6f 72 74 20 6c 6f 61 64 69 6e  y support loadin
305d0 67 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 20  g the..         
305e0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
305f0 20 20 20 20 70 61 63 6b 61 67 65 20 69 6e 74 6f      package into
30600 20 56 69 73 75 61 6c 20 53 74 75 64 69 6f 20 32   Visual Studio 2
30610 30 30 38 20 61 6e 64 20 65 61 72 6c 69 65 72 20  008 and earlier 
30620 77 69 74 68 6f 75 74 0d 0a 20 20 20 20 20 20 20  without..       
30630 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
30640 20 20 20 20 20 20 74 68 65 20 6d 61 74 63 68 69        the matchi
30650 6e 67 20 56 69 73 75 61 6c 20 53 74 75 64 69 6f  ng Visual Studio
30660 20 53 44 4b 20 62 65 69 6e 67 20 69 6e 73 74 61   SDK being insta
30670 6c 6c 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 20  lled...         
30680 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
30690 20 20 20 20 50 6c 65 61 73 65 20 72 65 66 65 72      Please refer
306a0 20 74 6f 20 74 68 65 20 22 53 51 4c 69 74 65 2e   to the "SQLite.
306b0 44 65 73 69 67 6e 65 72 5c 70 6c 6b 2e 74 78 74  Designer\plk.txt
306c0 22 20 66 69 6c 65 0d 0a 20 20 20 20 20 20 20 20  " file..        
306d0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
306e0 20 20 20 20 20 66 6f 72 20 74 68 65 20 65 78 69       for the exi
306f0 73 74 69 6e 67 20 6f 66 66 69 63 69 61 6c 20 76  sting official v
30700 61 6c 75 65 73 20 61 6e 64 20 75 70 64 61 74 65  alues and update
30710 20 74 68 65 6d 20 69 66 0d 0a 20 20 20 20 20 20   them if..      
30720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
30730 20 20 20 20 20 20 20 6e 65 63 65 73 73 61 72 79         necessary
30740 2e 20 20 41 6c 73 6f 2c 20 74 68 65 20 6e 65 77  .  Also, the new
30750 6c 79 20 67 65 6e 65 72 61 74 65 64 20 70 61 63  ly generated pac
30760 6b 61 67 65 20 6c 6f 61 64 0d 0a 20 20 20 20 20  kage load..     
30770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
30780 2f 20 20 20 20 20 20 20 6b 65 79 20 69 74 73 65  /       key itse
30790 6c 66 2c 20 77 68 69 63 68 20 69 73 20 61 20 31  lf, which is a 1
307a0 32 38 20 63 68 61 72 61 63 74 65 72 20 61 6c 70  28 character alp
307b0 68 61 6e 75 6d 65 72 69 63 0d 0a 20 20 20 20 20  hanumeric..     
307c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
307d0 2f 20 20 20 20 20 20 20 73 74 72 69 6e 67 2c 20  /       string, 
307e0 6d 75 73 74 20 62 65 20 70 6c 61 63 65 64 20 69  must be placed i
307f0 6e 20 74 68 65 20 72 65 73 6f 75 72 63 65 20 73  n the resource s
30800 74 72 69 6e 67 20 6e 61 6d 65 64 0d 0a 20 20 20  tring named..   
30810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30820 20 2f 2f 20 20 20 20 20 20 20 22 34 30 30 22 20   //       "400" 
30830 69 6e 20 74 68 65 20 22 53 51 4c 69 74 65 2e 44  in the "SQLite.D
30840 65 73 69 67 6e 65 72 5c 56 53 50 61 63 6b 61 67  esigner\VSPackag
30850 65 2e 72 65 73 78 22 20 66 69 6c 65 0d 0a 20 20  e.resx" file..  
30860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30870 20 20 2f 2f 20 20 20 20 20 20 20 61 6e 64 20 74    //       and t
30880 68 65 6e 20 74 68 65 20 64 65 73 69 67 6e 65 72  hen the designer
30890 20 61 73 73 65 6d 62 6c 79 20 69 74 73 65 6c 66   assembly itself
308a0 20 6d 75 73 74 20 62 65 0d 0a 20 20 20 20 20 20   must be..      
308b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
308c0 20 20 20 20 20 20 20 72 65 63 6f 6d 70 69 6c 65         recompile
308d0 64 2e 20 20 41 73 20 6f 66 20 74 68 69 73 20 77  d.  As of this w
308e0 72 69 74 69 6e 67 20 28 69 6e 20 46 65 62 72 75  riting (in Febru
308f0 61 72 79 20 32 30 31 32 29 2c 0d 0a 20 20 20 20  ary 2012),..    
30900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30910 2f 2f 20 20 20 20 20 20 20 74 68 65 20 66 6f 6c  //       the fol
30920 6c 6f 77 69 6e 67 20 55 52 4c 20 69 73 20 74 68  lowing URL is th
30930 65 20 70 72 6f 70 65 72 20 70 6c 61 63 65 20 74  e proper place t
30940 6f 20 67 65 6e 65 72 61 74 65 0d 0a 20 20 20 20  o generate..    
30950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30960 2f 2f 20 20 20 20 20 20 20 70 61 63 6b 61 67 65  //       package
30970 20 6c 6f 61 64 20 6b 65 79 73 3a 0d 0a 20 20 20   load keys:..   
30980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30990 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
309a0 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
309b0 20 20 68 74 74 70 3a 2f 2f 6d 73 64 6e 2e 6d 69    http://msdn.mi
309c0 63 72 6f 73 6f 66 74 2e 63 6f 6d 2f 65 6e 2d 75  crosoft.com/en-u
309d0 73 2f 76 73 74 75 64 69 6f 2f 63 63 36 35 35 37  s/vstudio/cc6557
309e0 39 35 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  95..            
309f0 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
30a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30a10 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73  using (MockRegis
30a20 74 72 79 4b 65 79 20 70 61 63 6b 61 67 65 4b 65  tryKey packageKe
30a30 79 20 3d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  y =..           
30a40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30a50 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e   RegistryHelper.
30a60 43 72 65 61 74 65 53 75 62 4b 65 79 28 73 75 62  CreateSubKey(sub
30a70 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  Key,..          
30a80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30a90 20 20 70 61 63 6b 61 67 65 2e 50 61 63 6b 61 67    package.Packag
30aa0 65 49 64 2e 54 6f 53 74 72 69 6e 67 28 56 73 49  eId.ToString(VsI
30ab0 64 46 6f 72 6d 61 74 29 2c 20 77 68 61 74 49 66  dFormat), whatIf
30ac0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
30ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 76                 v
30ae0 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20 20  erbose))..      
30af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
30b00 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
30b10 20 20 20 20 20 20 20 20 20 69 66 20 28 70 61 63           if (pac
30b20 6b 61 67 65 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29  kageKey == null)
30b30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
30b40 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
30b50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30b60 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
30b70 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d   String.Format(.
30b80 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
30b90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30ba0 20 22 63 6f 75 6c 64 20 6e 6f 74 20 63 72 65 61   "could not crea
30bb0 74 65 20 72 65 67 69 73 74 72 79 20 6b 65 79 3a  te registry key:
30bc0 20 7b 30 7d 5c 5c 7b 31 7d 22 2c 0d 0a 20 20 20   {0}\\{1}",..   
30bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30be0 20 20 20 20 20 20 20 20 20 20 20 20 20 6b 65 79               key
30bf0 2c 20 70 61 63 6b 61 67 65 2e 50 61 63 6b 61 67  , package.Packag
30c00 65 49 64 2e 54 6f 53 74 72 69 6e 67 28 56 73 49  eId.ToString(VsI
30c10 64 46 6f 72 6d 61 74 29 29 3b 0d 0a 0d 0a 20 20  dFormat));....  
30c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30c30 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
30c40 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20   false;..       
30c50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30c60 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
30c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65                Re
30c80 67 69 73 74 72 79 48 65 6c 70 65 72 2e 53 65 74  gistryHelper.Set
30c90 56 61 6c 75 65 28 70 61 63 6b 61 67 65 4b 65 79  Value(packageKey
30ca0 2c 20 6e 75 6c 6c 2c 0d 0a 20 20 20 20 20 20 20  , null,..       
30cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30cc0 20 20 20 20 20 53 74 72 69 6e 67 2e 46 6f 72 6d       String.Form
30cd0 61 74 28 22 7b 30 7d 20 44 65 73 69 67 6e 65 72  at("{0} Designer
30ce0 20 50 61 63 6b 61 67 65 22 2c 20 50 72 6f 6a 65   Package", Proje
30cf0 63 74 4e 61 6d 65 29 2c 0d 0a 20 20 20 20 20 20  ctName),..      
30d00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30d10 20 20 20 20 20 20 77 68 61 74 49 66 2c 20 76 65        whatIf, ve
30d20 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20  rbose);....     
30d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30d40 20 20 20 52 65 67 69 73 74 72 79 48 65 6c 70 65     RegistryHelpe
30d50 72 2e 53 65 74 56 61 6c 75 65 28 70 61 63 6b 61  r.SetValue(packa
30d60 67 65 4b 65 79 2c 20 22 43 6c 61 73 73 22 2c 0d  geKey, "Class",.
30d70 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
30d80 20 20 20 20 20 20 20 20 20 20 20 20 20 22 53 51               "SQ
30d90 4c 69 74 65 2e 44 65 73 69 67 6e 65 72 2e 53 51  Lite.Designer.SQ
30da0 4c 69 74 65 50 61 63 6b 61 67 65 22 2c 20 77 68  LitePackage", wh
30db0 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 3b 0d  atIf, verbose);.
30dc0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
30dd0 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73             Regis
30de0 74 72 79 48 65 6c 70 65 72 2e 53 65 74 56 61 6c  tryHelper.SetVal
30df0 75 65 28 70 61 63 6b 61 67 65 4b 65 79 2c 20 22  ue(packageKey, "
30e00 43 6f 64 65 42 61 73 65 22 2c 0d 0a 20 20 20 20  CodeBase",..    
30e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30e20 20 20 20 20 20 20 20 20 66 69 6c 65 4e 61 6d 65          fileName
30e30 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73  , whatIf, verbos
30e40 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e);....         
30e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52                 R
30e60 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 53 65  egistryHelper.Se
30e70 74 56 61 6c 75 65 28 70 61 63 6b 61 67 65 4b 65  tValue(packageKe
30e80 79 2c 20 22 49 44 22 2c 20 34 30 30 2c 20 77 68  y, "ID", 400, wh
30e90 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20  atIf,..         
30ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30eb0 20 20 20 76 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a     verbose);....
30ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30ed0 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 64          string d
30ee0 69 72 65 63 74 6f 72 79 20 3d 20 47 65 74 53 79  irectory = GetSy
30ef0 73 74 65 6d 44 69 72 65 63 74 6f 72 79 28 77 6f  stemDirectory(wo
30f00 77 36 34 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  w64);....       
30f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30f20 20 69 66 20 28 64 69 72 65 63 74 6f 72 79 20 3d   if (directory =
30f30 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
30f40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30f50 20 20 20 20 20 64 69 72 65 63 74 6f 72 79 20 3d       directory =
30f60 20 53 74 72 69 6e 67 2e 45 6d 70 74 79 3b 0d 0a   String.Empty;..
30f70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
30f80 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74            Regist
30f90 72 79 48 65 6c 70 65 72 2e 53 65 74 56 61 6c 75  ryHelper.SetValu
30fa0 65 28 70 61 63 6b 61 67 65 4b 65 79 2c 20 22 49  e(packageKey, "I
30fb0 6e 70 72 6f 63 53 65 72 76 65 72 33 32 22 2c 0d  nprocServer32",.
30fc0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
30fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 50 61 74               Pat
30fe0 68 2e 43 6f 6d 62 69 6e 65 28 64 69 72 65 63 74  h.Combine(direct
30ff0 6f 72 79 2c 20 22 6d 73 63 6f 72 65 65 2e 64 6c  ory, "mscoree.dl
31000 6c 22 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  l"),..          
31010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31020 20 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73    whatIf, verbos
31030 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e);....         
31040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52                 R
31050 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 53 65  egistryHelper.Se
31060 74 56 61 6c 75 65 28 70 61 63 6b 61 67 65 4b 65  tValue(packageKe
31070 79 2c 20 22 43 6f 6d 70 61 6e 79 4e 61 6d 65 22  y, "CompanyName"
31080 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
31090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
310a0 68 74 74 70 3a 2f 2f 73 79 73 74 65 6d 2e 64 61  http://system.da
310b0 74 61 2e 73 71 6c 69 74 65 2e 6f 72 67 2f 22 2c  ta.sqlite.org/",
310c0 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65   whatIf, verbose
310d0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
310e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65                Re
310f0 67 69 73 74 72 79 48 65 6c 70 65 72 2e 53 65 74  gistryHelper.Set
31100 56 61 6c 75 65 28 70 61 63 6b 61 67 65 4b 65 79  Value(packageKey
31110 2c 20 22 4d 69 6e 45 64 69 74 69 6f 6e 22 2c 0d  , "MinEdition",.
31120 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
31130 20 20 20 20 20 20 20 20 20 20 20 20 20 22 73 74               "st
31140 61 6e 64 61 72 64 22 2c 20 77 68 61 74 49 66 2c  andard", whatIf,
31150 20 76 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20   verbose);....  
31160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31170 20 20 20 20 20 20 52 65 67 69 73 74 72 79 48 65        RegistryHe
31180 6c 70 65 72 2e 53 65 74 56 61 6c 75 65 28 70 61  lper.SetValue(pa
31190 63 6b 61 67 65 4b 65 79 2c 20 22 50 72 6f 64 75  ckageKey, "Produ
311a0 63 74 4e 61 6d 65 22 2c 0d 0a 20 20 20 20 20 20  ctName",..      
311b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
311c0 20 20 20 20 20 20 53 74 72 69 6e 67 2e 46 6f 72        String.For
311d0 6d 61 74 28 22 7b 30 7d 20 44 65 73 69 67 6e 65  mat("{0} Designe
311e0 72 20 50 61 63 6b 61 67 65 22 2c 20 50 72 6f 6a  r Package", Proj
311f0 65 63 74 4e 61 6d 65 29 2c 0d 0a 20 20 20 20 20  ectName),..     
31200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31210 20 20 20 20 20 20 20 77 68 61 74 49 66 2c 20 76         whatIf, v
31220 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20  erbose);....    
31230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31240 20 20 20 20 52 65 67 69 73 74 72 79 48 65 6c 70      RegistryHelp
31250 65 72 2e 53 65 74 56 61 6c 75 65 28 70 61 63 6b  er.SetValue(pack
31260 61 67 65 4b 65 79 2c 20 22 50 72 6f 64 75 63 74  ageKey, "Product
31270 56 65 72 73 69 6f 6e 22 2c 0d 0a 20 20 20 20 20  Version",..     
31280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31290 20 20 20 20 20 20 20 22 31 2e 30 22 2c 20 77 68         "1.0", wh
312a0 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 3b 0d  atIf, verbose);.
312b0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
312c0 20 20 20 20 20 20 20 20 20 20 20 75 73 69 6e 67             using
312d0 20 28 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65   (MockRegistryKe
312e0 79 20 74 6f 6f 6c 62 6f 78 4b 65 79 20 3d 0d 0a  y toolboxKey =..
312f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31310 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 43  RegistryHelper.C
31320 72 65 61 74 65 53 75 62 4b 65 79 28 70 61 63 6b  reateSubKey(pack
31330 61 67 65 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20  ageKey,..       
31340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31350 20 20 20 20 20 20 20 20 20 22 54 6f 6f 6c 62 6f           "Toolbo
31360 78 22 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62  x", whatIf, verb
31370 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ose))..         
31380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
31390 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
313a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
313b0 20 28 74 6f 6f 6c 62 6f 78 4b 65 79 20 3d 3d 20   (toolboxKey == 
313c0 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
313d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
313e0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
313f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31400 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 53 74        error = St
31410 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
31420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31440 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20 63 72 65    "could not cre
31450 61 74 65 20 72 65 67 69 73 74 72 79 20 6b 65 79  ate registry key
31460 3a 20 22 20 2b 0d 0a 20 20 20 20 20 20 20 20 20  : " +..         
31470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31480 20 20 20 20 20 20 20 20 20 20 20 22 7b 30 7d 5c             "{0}\
31490 5c 54 6f 6f 6c 62 6f 78 22 2c 20 70 61 63 6b 61  \Toolbox", packa
314a0 67 65 4b 65 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  geKey);....     
314b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
314c0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
314d0 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  n false;..      
314e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
314f0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
31500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31510 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79 48         RegistryH
31520 65 6c 70 65 72 2e 53 65 74 56 61 6c 75 65 28 0d  elper.SetValue(.
31530 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
31540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31550 20 74 6f 6f 6c 62 6f 78 4b 65 79 2c 20 22 44 65   toolboxKey, "De
31560 66 61 75 6c 74 20 49 74 65 6d 73 22 2c 20 33 2c  fault Items", 3,
31570 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20   whatIf,..      
31580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31590 20 20 20 20 20 20 20 20 20 20 76 65 72 62 6f 73            verbos
315a0 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e);..           
315b0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
315c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
315d0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
315e0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
315f0 20 20 20 20 20 20 20 20 20 20 20 20 75 73 69 6e              usin
31600 67 20 28 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b  g (MockRegistryK
31610 65 79 20 73 75 62 4b 65 79 20 3d 20 52 65 67 69  ey subKey = Regi
31620 73 74 72 79 48 65 6c 70 65 72 2e 4f 70 65 6e 53  stryHelper.OpenS
31630 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20  ubKey(..        
31640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31650 6b 65 79 2c 20 22 4d 65 6e 75 73 22 2c 20 74 72  key, "Menus", tr
31660 75 65 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62  ue, whatIf, verb
31670 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ose))..         
31680 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
31690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
316a0 20 28 73 75 62 4b 65 79 20 3d 3d 20 6e 75 6c 6c   (subKey == null
316b0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
316c0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
316d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
316e0 20 20 65 72 72 6f 72 20 3d 20 53 74 72 69 6e 67    error = String
316f0 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  .Format(..      
31700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31710 20 20 20 20 20 20 22 63 6f 75 6c 64 20 6e 6f 74        "could not
31720 20 6f 70 65 6e 20 72 65 67 69 73 74 72 79 20 6b   open registry k
31730 65 79 3a 20 7b 30 7d 5c 5c 4d 65 6e 75 73 22 2c  ey: {0}\\Menus",
31740 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
31750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6b 65                ke
31760 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
31770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
31780 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20  eturn false;..  
31790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
317a0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
317b0 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73             Regis
317c0 74 72 79 48 65 6c 70 65 72 2e 53 65 74 56 61 6c  tryHelper.SetVal
317d0 75 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue(..           
317e0 20 20 20 20 20 20 20 20 20 20 20 20 20 73 75 62               sub
317f0 4b 65 79 2c 20 70 61 63 6b 61 67 65 2e 50 61 63  Key, package.Pac
31800 6b 61 67 65 49 64 2e 54 6f 53 74 72 69 6e 67 28  kageId.ToString(
31810 56 73 49 64 46 6f 72 6d 61 74 29 2c 0d 0a 20 20  VsIdFormat),..  
31820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31830 20 20 20 20 20 20 22 2c 20 31 30 30 30 2c 20 33        ", 1000, 3
31840 22 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f  ", whatIf, verbo
31850 73 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  se);..          
31860 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
31870 20 20 20 20 20 20 20 20 20 20 20 75 73 69 6e 67             using
31880 20 28 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65   (MockRegistryKe
31890 79 20 73 75 62 4b 65 79 20 3d 20 52 65 67 69 73  y subKey = Regis
318a0 74 72 79 48 65 6c 70 65 72 2e 4f 70 65 6e 53 75  tryHelper.OpenSu
318b0 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20  bKey(..         
318c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6b                 k
318d0 65 79 2c 20 22 53 65 72 76 69 63 65 73 22 2c 20  ey, "Services", 
318e0 74 72 75 65 2c 20 77 68 61 74 49 66 2c 20 76 65  true, whatIf, ve
318f0 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 20  rbose))..       
31900 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
31910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31920 69 66 20 28 73 75 62 4b 65 79 20 3d 3d 20 6e 75  if (subKey == nu
31930 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
31940 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
31950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31960 20 20 20 20 65 72 72 6f 72 20 3d 20 53 74 72 69      error = Stri
31970 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ng.Format(..    
31980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31990 20 20 20 20 20 20 20 20 22 63 6f 75 6c 64 20 6e          "could n
319a0 6f 74 20 6f 70 65 6e 20 72 65 67 69 73 74 72 79  ot open registry
319b0 20 6b 65 79 3a 20 7b 30 7d 5c 5c 53 65 72 76 69   key: {0}\\Servi
319c0 63 65 73 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  ces",..         
319d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
319e0 20 20 20 6b 65 79 29 3b 0d 0a 0d 0a 20 20 20 20     key);....    
319f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31a00 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
31a10 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
31a20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
31a30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31a40 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73  using (MockRegis
31a50 74 72 79 4b 65 79 20 73 65 72 76 69 63 65 4b 65  tryKey serviceKe
31a60 79 20 3d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  y =..           
31a70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31a80 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e   RegistryHelper.
31a90 43 72 65 61 74 65 53 75 62 4b 65 79 28 73 75 62  CreateSubKey(sub
31aa0 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  Key,..          
31ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31ac0 20 20 70 61 63 6b 61 67 65 2e 53 65 72 76 69 63    package.Servic
31ad0 65 49 64 2e 54 6f 53 74 72 69 6e 67 28 56 73 49  eId.ToString(VsI
31ae0 64 46 6f 72 6d 61 74 29 2c 20 77 68 61 74 49 66  dFormat), whatIf
31af0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
31b00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 76                 v
31b10 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20 20  erbose))..      
31b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
31b30 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
31b40 20 20 20 20 20 20 20 20 20 69 66 20 28 73 65 72           if (ser
31b50 76 69 63 65 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29  viceKey == null)
31b60 0d 0a 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 7b 0d 0a 20 20 20            {..   
31b80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31b90 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
31ba0 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d   String.Format(.
31bb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
31bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31bd0 20 22 63 6f 75 6c 64 20 6e 6f 74 20 63 72 65 61   "could not crea
31be0 74 65 20 72 65 67 69 73 74 72 79 20 6b 65 79 3a  te registry key:
31bf0 20 7b 30 7d 5c 5c 7b 31 7d 22 2c 0d 0a 20 20 20   {0}\\{1}",..   
31c00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31c10 20 20 20 20 20 20 20 20 20 20 20 20 20 6b 65 79               key
31c20 2c 20 70 61 63 6b 61 67 65 2e 53 65 72 76 69 63  , package.Servic
31c30 65 49 64 2e 54 6f 53 74 72 69 6e 67 28 56 73 49  eId.ToString(VsI
31c40 64 46 6f 72 6d 61 74 29 29 3b 0d 0a 0d 0a 20 20  dFormat));....  
31c50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31c60 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
31c70 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20   false;..       
31c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31c90 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
31ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65                Re
31cb0 67 69 73 74 72 79 48 65 6c 70 65 72 2e 53 65 74  gistryHelper.Set
31cc0 56 61 6c 75 65 28 73 65 72 76 69 63 65 4b 65 79  Value(serviceKey
31cd0 2c 20 6e 75 6c 6c 2c 0d 0a 20 20 20 20 20 20 20  , null,..       
31ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31cf0 20 20 20 20 20 70 61 63 6b 61 67 65 2e 50 61 63       package.Pac
31d00 6b 61 67 65 49 64 2e 54 6f 53 74 72 69 6e 67 28  kageId.ToString(
31d10 56 73 49 64 46 6f 72 6d 61 74 29 2c 20 77 68 61  VsIdFormat), wha
31d20 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  tIf,..          
31d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31d40 20 20 76 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20    verbose);.... 
31d50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31d60 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79 48         RegistryH
31d70 65 6c 70 65 72 2e 53 65 74 56 61 6c 75 65 28 73  elper.SetValue(s
31d80 65 72 76 69 63 65 4b 65 79 2c 20 22 4e 61 6d 65  erviceKey, "Name
31d90 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
31da0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31db0 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 22 7b  String.Format("{
31dc0 30 7d 20 44 65 73 69 67 6e 65 72 20 53 65 72 76  0} Designer Serv
31dd0 69 63 65 22 2c 20 50 72 6f 6a 65 63 74 4e 61 6d  ice", ProjectNam
31de0 65 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e),..           
31df0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31e00 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65   whatIf, verbose
31e10 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
31e20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
31e30 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
31e40 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
31e50 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
31e60 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20  n true;..       
31e70 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f   }....        //
31e80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31e90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31ea0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31eb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31ec0 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
31ed0 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
31ee0 62 6f 6f 6c 20 52 65 6d 6f 76 65 56 73 50 61 63  bool RemoveVsPac
31ef0 6b 61 67 65 28 0d 0a 20 20 20 20 20 20 20 20 20  kage(..         
31f00 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b     MockRegistryK
31f10 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20  ey rootKey,..   
31f20 20 20 20 20 20 20 20 20 20 56 65 72 73 69 6f 6e           Version
31f30 20 76 73 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20   vsVersion,..   
31f40 20 20 20 20 20 20 20 20 20 50 61 63 6b 61 67 65           Package
31f50 20 70 61 63 6b 61 67 65 2c 0d 0a 20 20 20 20 20   package,..     
31f60 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36         bool wow6
31f70 34 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  4,..            
31f80 62 6f 6f 6c 20 74 68 72 6f 77 4f 6e 4d 69 73 73  bool throwOnMiss
31f90 69 6e 67 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ing,..          
31fa0 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a    bool whatIf,..
31fb0 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
31fc0 20 76 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20   verbose,..     
31fd0 20 20 20 20 20 20 20 72 65 66 20 73 74 72 69 6e         ref strin
31fe0 67 20 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20  g error..       
31ff0 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
32000 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  {..            i
32010 66 20 28 76 73 56 65 72 73 69 6f 6e 20 3d 3d 20  f (vsVersion == 
32020 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
32030 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
32040 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 69        error = "i
32050 6e 76 61 6c 69 64 20 56 53 20 76 65 72 73 69 6f  nvalid VS versio
32060 6e 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n";..           
32070 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
32080 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
32090 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
320a0 20 69 66 20 28 70 61 63 6b 61 67 65 20 3d 3d 20   if (package == 
320b0 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
320c0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
320d0 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 69        error = "i
320e0 6e 76 61 6c 69 64 20 56 53 20 70 61 63 6b 61 67  nvalid VS packag
320f0 65 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e";..           
32100 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
32110 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
32120 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
32130 20 73 74 72 69 6e 67 20 6b 65 79 4e 61 6d 65 20   string keyName 
32140 3d 20 47 65 74 56 73 4b 65 79 4e 61 6d 65 28 76  = GetVsKeyName(v
32150 73 56 65 72 73 69 6f 6e 2c 20 77 6f 77 36 34 29  sVersion, wow64)
32160 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
32170 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69   using (MockRegi
32180 73 74 72 79 4b 65 79 20 6b 65 79 20 3d 20 52 65  stryKey key = Re
32190 67 69 73 74 72 79 48 65 6c 70 65 72 2e 4f 70 65  gistryHelper.Ope
321a0 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20  nSubKey(..      
321b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f                ro
321c0 6f 74 4b 65 79 2c 20 6b 65 79 4e 61 6d 65 2c 20  otKey, keyName, 
321d0 66 61 6c 73 65 2c 20 77 68 61 74 49 66 2c 20 76  false, whatIf, v
321e0 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20 20  erbose))..      
321f0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
32200 20 20 20 20 20 20 20 20 20 69 66 20 28 6b 65 79           if (key
32210 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
32220 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
32230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32240 20 20 65 72 72 6f 72 20 3d 20 53 74 72 69 6e 67    error = String
32250 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  .Format(..      
32260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32270 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20 6f 70 65    "could not ope
32280 6e 20 72 65 67 69 73 74 72 79 20 6b 65 79 3a 20  n registry key: 
32290 7b 30 7d 5c 5c 7b 31 7d 22 2c 0d 0a 20 20 20 20  {0}\\{1}",..    
322a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
322b0 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 6b 65 79      rootKey, key
322c0 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  Name);....      
322d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
322e0 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20  turn false;..   
322f0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
32300 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
32310 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67    using (MockReg
32320 69 73 74 72 79 4b 65 79 20 73 75 62 4b 65 79 20  istryKey subKey 
32330 3d 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72  = RegistryHelper
32340 2e 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20  .OpenSubKey(..  
32350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32360 20 20 20 20 20 20 6b 65 79 2c 20 22 50 61 63 6b        key, "Pack
32370 61 67 65 73 22 2c 20 74 72 75 65 2c 20 77 68 61  ages", true, wha
32380 74 49 66 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a  tIf, verbose))..
32390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
323a0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
323b0 20 20 20 20 20 20 20 69 66 20 28 73 75 62 4b 65         if (subKe
323c0 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  y == null)..    
323d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
323e0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
323f0 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72             error
32400 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74   = String.Format
32410 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
32420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
32430 63 6f 75 6c 64 20 6e 6f 74 20 6f 70 65 6e 20 72  could not open r
32440 65 67 69 73 74 72 79 20 6b 65 79 3a 20 7b 30 7d  egistry key: {0}
32450 5c 5c 50 61 63 6b 61 67 65 73 22 2c 0d 0a 20 20  \\Packages",..  
32460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32470 20 20 20 20 20 20 20 20 20 20 6b 65 79 29 3b 0d            key);.
32480 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
32490 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
324a0 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  n false;..      
324b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
324c0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
324d0 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79 48         RegistryH
324e0 65 6c 70 65 72 2e 44 65 6c 65 74 65 53 75 62 4b  elper.DeleteSubK
324f0 65 79 54 72 65 65 28 0d 0a 20 20 20 20 20 20 20  eyTree(..       
32500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32510 20 73 75 62 4b 65 79 2c 20 70 61 63 6b 61 67 65   subKey, package
32520 2e 50 61 63 6b 61 67 65 49 64 2e 54 6f 53 74 72  .PackageId.ToStr
32530 69 6e 67 28 56 73 49 64 46 6f 72 6d 61 74 29 2c  ing(VsIdFormat),
32540 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
32550 20 20 20 20 20 20 20 20 20 20 77 68 61 74 49 66            whatIf
32560 2c 20 76 65 72 62 6f 73 65 29 3b 0d 0a 20 20 20  , verbose);..   
32570 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
32580 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
32590 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67    using (MockReg
325a0 69 73 74 72 79 4b 65 79 20 73 75 62 4b 65 79 20  istryKey subKey 
325b0 3d 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72  = RegistryHelper
325c0 2e 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20  .OpenSubKey(..  
325d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
325e0 20 20 20 20 20 20 6b 65 79 2c 20 22 4d 65 6e 75        key, "Menu
325f0 73 22 2c 20 74 72 75 65 2c 20 77 68 61 74 49 66  s", true, whatIf
32600 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a 20 20 20  , verbose))..   
32610 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
32620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32630 20 20 20 20 69 66 20 28 73 75 62 4b 65 79 20 3d      if (subKey =
32640 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
32650 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
32660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32670 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
32680 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
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 20 20 20 20 22 63 6f 75              "cou
326b0 6c 64 20 6e 6f 74 20 6f 70 65 6e 20 72 65 67 69  ld not open regi
326c0 73 74 72 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c 4d  stry key: {0}\\M
326d0 65 6e 75 73 22 2c 0d 0a 20 20 20 20 20 20 20 20  enus",..        
326e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
326f0 20 20 20 20 6b 65 79 29 3b 0d 0a 0d 0a 20 20 20      key);....   
32700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32710 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
32720 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
32730 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
32740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32750 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e   RegistryHelper.
32760 44 65 6c 65 74 65 56 61 6c 75 65 28 0d 0a 20 20  DeleteValue(..  
32770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32780 20 20 20 20 20 20 73 75 62 4b 65 79 2c 20 70 61        subKey, pa
32790 63 6b 61 67 65 2e 50 61 63 6b 61 67 65 49 64 2e  ckage.PackageId.
327a0 54 6f 53 74 72 69 6e 67 28 56 73 49 64 46 6f 72  ToString(VsIdFor
327b0 6d 61 74 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  mat),..         
327c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
327d0 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 2c 20 77  hrowOnMissing, w
327e0 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 3b  hatIf, verbose);
327f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
32800 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
32810 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 4d 6f         using (Mo
32820 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 73 75  ckRegistryKey su
32830 62 4b 65 79 20 3d 20 52 65 67 69 73 74 72 79 48  bKey = RegistryH
32840 65 6c 70 65 72 2e 4f 70 65 6e 53 75 62 4b 65 79  elper.OpenSubKey
32850 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
32860 20 20 20 20 20 20 20 20 20 20 20 6b 65 79 2c 20             key, 
32870 22 53 65 72 76 69 63 65 73 22 2c 20 74 72 75 65  "Services", true
32880 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73  , whatIf, verbos
32890 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e))..           
328a0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
328b0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
328c0 73 75 62 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d  subKey == null).
328d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
328e0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
328f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32900 65 72 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46  error = String.F
32910 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
32920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32930 20 20 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20 6f      "could not o
32940 70 65 6e 20 72 65 67 69 73 74 72 79 20 6b 65 79  pen registry key
32950 3a 20 7b 30 7d 5c 5c 53 65 72 76 69 63 65 73 22  : {0}\\Services"
32960 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
32970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6b                 k
32980 65 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ey);....        
32990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
329a0 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20  return false;.. 
329b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
329c0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
329d0 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69              Regi
329e0 73 74 72 79 48 65 6c 70 65 72 2e 44 65 6c 65 74  stryHelper.Delet
329f0 65 53 75 62 4b 65 79 54 72 65 65 28 0d 0a 20 20  eSubKeyTree(..  
32a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32a10 20 20 20 20 20 20 73 75 62 4b 65 79 2c 20 70 61        subKey, pa
32a20 63 6b 61 67 65 2e 53 65 72 76 69 63 65 49 64 2e  ckage.ServiceId.
32a30 54 6f 53 74 72 69 6e 67 28 56 73 49 64 46 6f 72  ToString(VsIdFor
32a40 6d 61 74 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  mat),..         
32a50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 77                 w
32a60 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 3b  hatIf, verbose);
32a70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
32a80 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
32a90 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
32aa0 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a    return true;..
32ab0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
32ac0 20 20 20 20 20 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 2f 2f 2f 2f  ////////////////
32af0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32b00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
32b10 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
32b20 73 74 61 74 69 63 20 62 6f 6f 6c 20 50 72 6f 63  static bool Proc
32b30 65 73 73 56 73 50 61 63 6b 61 67 65 28 0d 0a 20  essVsPackage(.. 
32b40 20 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52             MockR
32b50 65 67 69 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b  egistryKey rootK
32b60 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ey,..           
32b70 20 56 65 72 73 69 6f 6e 20 76 73 56 65 72 73 69   Version vsVersi
32b80 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  on,..           
32b90 20 50 61 63 6b 61 67 65 20 70 61 63 6b 61 67 65   Package package
32ba0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6f  ,..            o
32bb0 62 6a 65 63 74 20 63 6c 69 65 6e 74 44 61 74 61  bject clientData
32bc0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  ,..            b
32bd0 6f 6f 6c 20 77 6f 77 36 34 2c 0d 0a 20 20 20 20  ool wow64,..    
32be0 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 74 68 72          bool thr
32bf0 6f 77 4f 6e 4d 69 73 73 69 6e 67 2c 0d 0a 20 20  owOnMissing,..  
32c00 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77            bool w
32c10 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20  hatIf,..        
32c20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65      bool verbose
32c30 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  ,..            r
32c40 65 66 20 73 74 72 69 6e 67 20 65 72 72 6f 72 0d  ef string error.
32c50 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a  .            )..
32c60 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
32c70 20 20 20 20 20 20 20 41 6e 79 50 61 69 72 3c 73         AnyPair<s
32c80 74 72 69 6e 67 2c 20 62 6f 6f 6c 3e 20 70 61 69  tring, bool> pai
32c90 72 20 3d 20 63 6c 69 65 6e 74 44 61 74 61 20 61  r = clientData a
32ca0 73 20 41 6e 79 50 61 69 72 3c 73 74 72 69 6e 67  s AnyPair<string
32cb0 2c 20 62 6f 6f 6c 3e 3b 0d 0a 0d 0a 20 20 20 20  , bool>;....    
32cc0 20 20 20 20 20 20 20 20 69 66 20 28 70 61 69 72          if (pair
32cd0 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
32ce0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
32cf0 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20            error 
32d00 3d 20 22 69 6e 76 61 6c 69 64 20 56 53 20 63 61  = "invalid VS ca
32d10 6c 6c 62 61 63 6b 20 64 61 74 61 22 3b 0d 0a 20  llback data";.. 
32d20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
32d30 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20  eturn false;..  
32d40 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
32d50 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 70             if (p
32d60 61 69 72 2e 59 29 0d 0a 20 20 20 20 20 20 20 20  air.Y)..        
32d70 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
32d80 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 41 64         return Ad
32d90 64 56 73 50 61 63 6b 61 67 65 28 0d 0a 20 20 20  dVsPackage(..   
32da0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32db0 20 72 6f 6f 74 4b 65 79 2c 20 76 73 56 65 72 73   rootKey, vsVers
32dc0 69 6f 6e 2c 20 70 61 63 6b 61 67 65 2c 20 70 61  ion, package, pa
32dd0 69 72 2e 58 2c 20 77 6f 77 36 34 2c 20 77 68 61  ir.X, wow64, wha
32de0 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  tIf,..          
32df0 20 20 20 20 20 20 20 20 20 20 76 65 72 62 6f 73            verbos
32e00 65 2c 20 72 65 66 20 65 72 72 6f 72 29 3b 0d 0a  e, ref error);..
32e10 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
32e20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d             else.
32e30 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
32e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32e50 72 65 74 75 72 6e 20 52 65 6d 6f 76 65 56 73 50  return RemoveVsP
32e60 61 63 6b 61 67 65 28 0d 0a 20 20 20 20 20 20 20  ackage(..       
32e70 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f               roo
32e80 74 4b 65 79 2c 20 76 73 56 65 72 73 69 6f 6e 2c  tKey, vsVersion,
32e90 20 70 61 63 6b 61 67 65 2c 20 77 6f 77 36 34 2c   package, wow64,
32ea0 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 2c   throwOnMissing,
32eb0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
32ec0 20 20 20 20 20 20 77 68 61 74 49 66 2c 20 76 65        whatIf, ve
32ed0 72 62 6f 73 65 2c 20 72 65 66 20 65 72 72 6f 72  rbose, ref error
32ee0 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
32ef0 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  }..        }..  
32f00 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
32f10 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65  ..        #endre
32f20 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20  gion....        
32f30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32f40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32f50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32f60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32f70 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
32f80 20 20 20 23 72 65 67 69 6f 6e 20 41 70 70 6c 69     #region Appli
32f90 63 61 74 69 6f 6e 20 45 6e 74 72 79 20 50 6f 69  cation Entry Poi
32fa0 6e 74 0d 0a 20 20 20 20 20 20 20 20 5b 4d 65 74  nt..        [Met
32fb0 68 6f 64 49 6d 70 6c 28 4d 65 74 68 6f 64 49 6d  hodImpl(MethodIm
32fc0 70 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e 6c 69  plOptions.NoInli
32fd0 6e 69 6e 67 29 5d 0d 0a 20 20 20 20 20 20 20 20  ning)]..        
32fe0 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 69  private static i
32ff0 6e 74 20 4d 61 69 6e 28 0d 0a 20 20 20 20 20 20  nt Main(..      
33000 20 20 20 20 20 20 73 74 72 69 6e 67 5b 5d 20 61        string[] a
33010 72 67 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20  rgs..           
33020 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20   )..        {.. 
33030 20 20 20 20 20 20 20 20 20 20 20 74 72 79 0d 0a             try..
33040 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
33050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43                 C
33060 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 63 6f 6e  onfiguration con
33070 66 69 67 75 72 61 74 69 6f 6e 20 3d 20 6e 75 6c  figuration = nul
33080 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l;..            
33090 20 20 20 20 73 74 72 69 6e 67 20 65 72 72 6f 72      string error
330a0 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20   = null;....    
330b0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
330c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
330d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
330e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
330f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
33100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23                 #
33110 72 65 67 69 6f 6e 20 44 65 62 75 67 67 65 72 20  region Debugger 
33120 48 6f 6f 6b 0d 0a 20 20 20 20 20 20 20 20 20 20  Hook..          
33130 20 20 20 20 20 20 69 66 20 28 45 6e 76 69 72 6f        if (Enviro
33140 6e 6d 65 6e 74 2e 47 65 74 45 6e 76 69 72 6f 6e  nment.GetEnviron
33150 6d 65 6e 74 56 61 72 69 61 62 6c 65 28 22 42 72  mentVariable("Br
33160 65 61 6b 22 29 20 21 3d 20 6e 75 6c 6c 29 0d 0a  eak") != null)..
33170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33180 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
33190 20 20 20 20 20 20 20 43 6f 6e 73 6f 6c 65 2e 57         Console.W
331a0 72 69 74 65 4c 69 6e 65 28 0d 0a 20 20 20 20 20  riteLine(..     
331b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
331c0 20 20 20 22 41 74 74 61 63 68 20 61 20 64 65 62     "Attach a deb
331d0 75 67 67 65 72 20 74 6f 20 70 72 6f 63 65 73 73  ugger to process
331e0 20 7b 30 7d 20 61 6e 64 20 22 20 2b 0d 0a 20 20   {0} and " +..  
331f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33200 20 20 20 20 20 20 22 70 72 65 73 73 20 61 6e 79        "press any
33210 20 6b 65 79 20 74 6f 20 63 6f 6e 74 69 6e 75 65   key to continue
33220 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  .",..           
33230 20 20 20 20 20 20 20 20 20 20 20 20 20 50 72 6f               Pro
33240 63 65 73 73 2e 47 65 74 43 75 72 72 65 6e 74 50  cess.GetCurrentP
33250 72 6f 63 65 73 73 28 29 2e 49 64 29 3b 0d 0a 0d  rocess().Id);...
33260 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
33270 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20       try..      
33280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
33290 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
332a0 20 20 20 20 20 20 20 20 20 43 6f 6e 73 6f 6c 65           Console
332b0 2e 52 65 61 64 4b 65 79 28 74 72 75 65 29 3b 20  .ReadKey(true); 
332c0 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a 20 20 20  /* throw */..   
332d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
332e0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
332f0 20 20 20 20 20 20 20 20 63 61 74 63 68 20 28 49          catch (I
33300 6e 76 61 6c 69 64 4f 70 65 72 61 74 69 6f 6e 45  nvalidOperationE
33310 78 63 65 70 74 69 6f 6e 29 20 2f 2f 20 43 6f 6e  xception) // Con
33320 73 6f 6c 65 2e 52 65 61 64 4b 65 79 0d 0a 20 20  sole.ReadKey..  
33330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33340 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
33350 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
33360 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20  do nothing...   
33370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33380 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
33390 20 20 20 20 20 20 20 20 20 20 44 65 62 75 67 67            Debugg
333a0 65 72 2e 42 72 65 61 6b 28 29 3b 0d 0a 20 20 20  er.Break();..   
333b0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
333c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
333d0 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20  #endregion....  
333e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
333f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33400 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33410 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33420 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
33430 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
33440 20 23 72 65 67 69 6f 6e 20 43 6f 6d 6d 61 6e 64   #region Command
33450 20 4c 69 6e 65 20 50 72 6f 63 65 73 73 69 6e 67   Line Processing
33460 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
33470 20 20 69 66 20 28 21 43 6f 6e 66 69 67 75 72 61    if (!Configura
33480 74 69 6f 6e 2e 46 72 6f 6d 41 72 67 73 28 0d 0a  tion.FromArgs(..
33490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
334a0 20 20 20 20 20 20 20 20 61 72 67 73 2c 20 74 72          args, tr
334b0 75 65 2c 20 72 65 66 20 63 6f 6e 66 69 67 75 72  ue, ref configur
334c0 61 74 69 6f 6e 2c 20 72 65 66 20 65 72 72 6f 72  ation, ref error
334d0 29 20 7c 7c 0d 0a 20 20 20 20 20 20 20 20 20 20  ) ||..          
334e0 20 20 20 20 20 20 20 20 20 20 21 43 6f 6e 66 69            !Confi
334f0 67 75 72 61 74 69 6f 6e 2e 50 72 6f 63 65 73 73  guration.Process
33500 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
33510 20 20 20 20 20 20 20 20 20 20 20 61 72 67 73 2c             args,
33520 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2c 20   configuration, 
33530 74 72 75 65 2c 20 72 65 66 20 65 72 72 6f 72 29  true, ref error)
33540 20 7c 7c 0d 0a 20 20 20 20 20 20 20 20 20 20 20   ||..           
33550 20 20 20 20 20 20 20 20 20 21 43 6f 6e 66 69 67           !Config
33560 75 72 61 74 69 6f 6e 2e 43 68 65 63 6b 52 75 6e  uration.CheckRun
33570 74 69 6d 65 56 65 72 73 69 6f 6e 28 0d 0a 20 20  timeVersion(..  
33580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33590 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74        configurat
335a0 69 6f 6e 2c 20 74 72 75 65 2c 20 72 65 66 20 65  ion, true, ref e
335b0 72 72 6f 72 29 29 0d 0a 20 20 20 20 20 20 20 20  rror))..        
335c0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
335d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
335e0 72 61 63 65 4f 70 73 2e 53 68 6f 77 4d 65 73 73  raceOps.ShowMess
335f0 61 67 65 28 54 72 61 63 65 50 72 69 6f 72 69 74  age(TracePriorit
33600 79 2e 48 69 67 68 65 73 74 2c 0d 0a 20 20 20 20  y.Highest,..    
33610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33620 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63      debugCallbac
33630 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b  k, traceCallback
33640 2c 20 74 68 69 73 41 73 73 65 6d 62 6c 79 2c 0d  , thisAssembly,.
33650 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
33660 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 2c 20           error, 
33670 74 72 61 63 65 43 61 74 65 67 6f 72 79 2c 20 4d  traceCategory, M
33680 65 73 73 61 67 65 42 6f 78 42 75 74 74 6f 6e 73  essageBoxButtons
33690 2e 4f 4b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  .OK,..          
336a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4d 65                Me
336b0 73 73 61 67 65 42 6f 78 49 63 6f 6e 2e 45 72 72  ssageBoxIcon.Err
336c0 6f 72 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  or);....        
336d0 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
336e0 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61  eOps.DebugAndTra
336f0 63 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 79  ce(TracePriority
33700 2e 4d 65 64 69 75 6d 48 69 67 68 2c 0d 0a 20 20  .MediumHigh,..  
33710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33720 20 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62        debugCallb
33730 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61  ack, traceCallba
33740 63 6b 2c 20 22 46 61 69 6c 75 72 65 2e 22 2c 0d  ck, "Failure.",.
33750 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
33760 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
33770 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
33780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33790 72 65 74 75 72 6e 20 31 3b 20 2f 2a 20 46 41 49  return 1; /* FAI
337a0 4c 55 52 45 20 2a 2f 0d 0a 20 20 20 20 20 20 20  LURE */..       
337b0 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
337c0 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64              #end
337d0 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20  region....      
337e0 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
337f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33800 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33810 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33820 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
33830 20 20 20 20 20 20 20 20 20 20 20 20 20 75 73 69               usi
33840 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73 74 72 79  ng (MockRegistry
33850 20 72 65 67 69 73 74 72 79 20 3d 20 6e 65 77 20   registry = new 
33860 4d 6f 63 6b 52 65 67 69 73 74 72 79 28 0d 0a 20  MockRegistry(.. 
33870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33880 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61         configura
33890 74 69 6f 6e 2e 57 68 61 74 49 66 2c 20 66 61 6c  tion.WhatIf, fal
338a0 73 65 2c 20 66 61 6c 73 65 29 29 0d 0a 20 20 20  se, false))..   
338b0 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
338c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
338d0 20 20 20 20 23 72 65 67 69 6f 6e 20 43 6f 72 65      #region Core
338e0 20 41 73 73 65 6d 62 6c 79 20 4e 61 6d 65 20 43   Assembly Name C
338f0 68 65 63 6b 0d 0a 20 20 20 20 20 20 20 20 20 20  heck..          
33900 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
33910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33920 20 20 2f 2f 20 4e 4f 54 45 3a 20 44 6f 20 74 68    // NOTE: Do th
33930 69 73 20 66 69 72 73 74 2c 20 62 65 66 6f 72 65  is first, before
33940 20 6d 61 6b 69 6e 67 20 61 6e 79 20 63 68 61 6e   making any chan
33950 67 65 73 20 74 6f 20 74 68 65 0d 0a 20 20 20 20  ges to the..    
33960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33970 2f 2f 20 20 20 20 20 20 20 73 79 73 74 65 6d 2c  //       system,
33980 20 62 65 63 61 75 73 65 20 69 74 20 77 69 6c 6c   because it will
33990 20 74 68 72 6f 77 20 61 6e 20 65 78 63 65 70 74   throw an except
339a0 69 6f 6e 20 69 66 20 74 68 65 0d 0a 20 20 20 20  ion if the..    
339b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
339c0 2f 2f 20 20 20 20 20 20 20 66 69 6c 65 20 6e 61  //       file na
339d0 6d 65 20 64 6f 65 73 20 6e 6f 74 20 72 65 70 72  me does not repr
339e0 65 73 65 6e 74 20 61 20 76 61 6c 69 64 20 6d 61  esent a valid ma
339f0 6e 61 67 65 64 0d 0a 20 20 20 20 20 20 20 20 20  naged..         
33a00 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
33a10 20 20 20 20 61 73 73 65 6d 62 6c 79 2e 0d 0a 20      assembly... 
33a20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33a30 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
33a40 20 20 20 20 20 20 20 20 20 20 20 41 73 73 65 6d             Assem
33a50 62 6c 79 4e 61 6d 65 20 63 6f 72 65 41 73 73 65  blyName coreAsse
33a60 6d 62 6c 79 4e 61 6d 65 20 3d 0d 0a 20 20 20 20  mblyName =..    
33a70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33a80 20 20 20 20 41 73 73 65 6d 62 6c 79 4e 61 6d 65      AssemblyName
33a90 2e 47 65 74 41 73 73 65 6d 62 6c 79 4e 61 6d 65  .GetAssemblyName
33aa0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
33ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
33ac0 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 43 6f 72  onfiguration.Cor
33ad0 65 46 69 6c 65 4e 61 6d 65 29 3b 20 2f 2a 20 74  eFileName); /* t
33ae0 68 72 6f 77 20 2a 2f 0d 0a 0d 0a 20 20 20 20 20  hrow */....     
33af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 41                 A
33b00 73 73 65 6d 62 6c 79 4e 61 6d 65 20 64 65 73 69  ssemblyName desi
33b10 67 6e 65 72 41 73 73 65 6d 62 6c 79 4e 61 6d 65  gnerAssemblyName
33b20 20 3d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   =..            
33b30 20 20 20 20 20 20 20 20 20 20 20 20 41 73 73 65              Asse
33b40 6d 62 6c 79 4e 61 6d 65 2e 47 65 74 41 73 73 65  mblyName.GetAsse
33b50 6d 62 6c 79 4e 61 6d 65 28 0d 0a 20 20 20 20 20  mblyName(..     
33b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33b70 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61         configura
33b80 74 69 6f 6e 2e 44 65 73 69 67 6e 65 72 46 69 6c  tion.DesignerFil
33b90 65 4e 61 6d 65 29 3b 20 2f 2a 20 74 68 72 6f 77  eName); /* throw
33ba0 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   */..           
33bb0 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67           #endreg
33bc0 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ion....         
33bd0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
33be0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33bf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33c00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33c10 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
33c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 72                #r
33c30 65 67 69 6f 6e 20 53 79 73 74 65 6d 20 44 69 72  egion System Dir
33c40 65 63 74 6f 72 79 20 43 68 65 63 6b 0d 0a 20 20  ectory Check..  
33c50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33c60 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
33c70 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54            // NOT
33c80 45 3a 20 47 65 74 74 69 6e 67 20 74 68 65 20 73  E: Getting the s
33c90 79 73 74 65 6d 20 64 69 72 65 63 74 6f 72 79 20  ystem directory 
33ca0 76 61 6c 75 65 20 68 65 72 65 20 73 65 72 76 65  value here serve
33cb0 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  s..             
33cc0 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
33cd0 74 77 6f 20 70 75 72 70 6f 73 65 73 3a 0d 0a 20  two purposes:.. 
33ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33cf0 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
33d00 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
33d10 20 20 20 20 31 2e 20 49 74 20 65 6e 61 62 6c 65      1. It enable
33d20 73 20 75 73 20 74 6f 20 6c 6f 67 20 74 68 65 20  s us to log the 
33d30 73 79 73 74 65 6d 20 64 69 72 65 63 74 6f 72 79  system directory
33d40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
33d50 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 20        //        
33d60 20 20 76 61 6c 75 65 20 76 65 72 79 20 65 61 72    value very ear
33d70 6c 79 20 69 6e 20 74 68 65 20 69 6e 73 74 61 6c  ly in the instal
33d80 6c 61 74 69 6f 6e 20 70 72 6f 63 65 73 73 0d 0a  lation process..
33d90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33da0 20 20 20 20 2f 2f 20 20 20 20 20 20 20 20 20 20      //          
33db0 28 69 2e 65 2e 20 65 76 65 6e 20 74 68 6f 75 67  (i.e. even thoug
33dc0 68 20 74 68 65 20 76 61 6c 75 65 20 69 74 73 65  h the value itse
33dd0 6c 66 20 69 73 20 6e 6f 74 0d 0a 20 20 20 20 20  lf is not..     
33de0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
33df0 2f 20 20 20 20 20 20 20 20 20 20 6e 65 65 64 65  /          neede
33e00 64 20 75 6e 74 69 6c 20 6d 75 63 68 20 6c 61 74  d until much lat
33e10 65 72 29 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  er)...          
33e20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
33e30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33e40 20 20 2f 2f 20 20 20 20 20 20 20 32 2e 20 53 69    //       2. Si
33e50 6e 63 65 20 74 68 65 20 76 61 6c 75 65 20 69 73  nce the value is
33e60 20 63 61 63 68 65 64 2c 20 69 74 20 70 72 65 76   cached, it prev
33e70 65 6e 74 73 20 61 6e 0d 0a 20 20 20 20 20 20 20  ents an..       
33e80 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
33e90 20 20 20 20 20 20 20 20 20 65 78 63 65 70 74 69           excepti
33ea0 6f 6e 20 66 72 6f 6d 20 62 65 69 6e 67 20 74 68  on from being th
33eb0 72 6f 77 6e 20 6d 75 63 68 20 6c 61 74 65 72 20  rown much later 
33ec0 64 75 72 69 6e 67 0d 0a 20 20 20 20 20 20 20 20  during..        
33ed0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
33ee0 20 20 20 20 20 20 20 20 74 68 65 20 69 6e 73 74          the inst
33ef0 61 6c 6c 20 77 68 65 6e 20 74 68 65 20 76 61 6c  all when the val
33f00 75 65 20 69 73 20 71 75 65 72 69 65 64 20 61 67  ue is queried ag
33f10 61 69 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ain..           
33f20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
33f30 20 20 20 20 20 28 69 2e 65 2e 20 77 69 74 68 20       (i.e. with 
33f40 74 68 65 20 73 61 6d 65 20 76 61 6c 75 65 20 66  the same value f
33f50 6f 72 20 74 68 65 20 22 77 6f 77 36 34 22 0d 0a  or the "wow64"..
33f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33f70 20 20 20 20 2f 2f 20 20 20 20 20 20 20 20 20 20      //          
33f80 70 61 72 61 6d 65 74 65 72 29 2e 0d 0a 20 20 20  parameter)...   
33f90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33fa0 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
33fb0 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70           TraceOp
33fc0 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28  s.DebugAndTrace(
33fd0 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4d 65  TracePriority.Me
33fe0 64 69 75 6d 4c 6f 77 2c 0d 0a 20 20 20 20 20 20  diumLow,..      
33ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34000 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c    debugCallback,
34010 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20   traceCallback, 
34020 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
34030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34040 20 20 20 20 20 20 20 20 22 53 79 73 74 65 6d 20          "System 
34050 64 69 72 65 63 74 6f 72 79 20 69 73 20 7b 30 7d  directory is {0}
34060 2e 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 0d  .", ForDisplay(.
34070 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
34080 20 20 20 20 20 20 20 20 20 47 65 74 53 79 73 74           GetSyst
34090 65 6d 44 69 72 65 63 74 6f 72 79 28 63 6f 6e 66  emDirectory(conf
340a0 69 67 75 72 61 74 69 6f 6e 2e 57 6f 77 36 34 29  iguration.Wow64)
340b0 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  )),..           
340c0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
340d0 63 65 43 61 74 65 67 6f 72 79 29 3b 20 2f 2a 20  ceCategory); /* 
340e0 74 68 72 6f 77 20 2a 2f 0d 0a 20 20 20 20 20 20  throw */..      
340f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 65                #e
34100 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20  ndregion....    
34110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34120 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34130 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34140 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34150 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
34160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34170 20 20 20 23 72 65 67 69 6f 6e 20 2e 4e 45 54 20     #region .NET 
34180 46 72 61 6d 65 77 6f 72 6b 20 2f 20 56 69 73 75  Framework / Visu
34190 61 6c 20 53 74 75 64 69 6f 20 44 61 74 61 0d 0a  al Studio Data..
341a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
341b0 20 20 20 20 50 61 63 6b 61 67 65 20 70 61 63 6b      Package pack
341c0 61 67 65 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20  age = null;..   
341d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
341e0 20 46 72 61 6d 65 77 6f 72 6b 4c 69 73 74 20 66   FrameworkList f
341f0 72 61 6d 65 77 6f 72 6b 4c 69 73 74 20 3d 20 6e  rameworkList = n
34200 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ull;..          
34210 20 20 20 20 20 20 20 20 20 20 56 73 4c 69 73 74            VsList
34220 20 76 73 4c 69 73 74 20 3d 20 6e 75 6c 6c 3b 0d   vsList = null;.
34230 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
34240 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
34250 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34260 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34270 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34280 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
34290 20 20 20 20 20 20 20 20 20 20 49 6e 69 74 69 61            Initia
342a0 6c 69 7a 65 56 73 50 61 63 6b 61 67 65 28 64 65  lizeVsPackage(de
342b0 73 69 67 6e 65 72 41 73 73 65 6d 62 6c 79 4e 61  signerAssemblyNa
342c0 6d 65 2c 20 72 65 66 20 70 61 63 6b 61 67 65 29  me, ref package)
342d0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
342e0 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
342f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34300 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34310 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34320 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
34330 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 69 74              Init
34340 69 61 6c 69 7a 65 46 72 61 6d 65 77 6f 72 6b 4c  ializeFrameworkL
34350 69 73 74 28 72 65 67 69 73 74 72 79 2e 4c 6f 63  ist(registry.Loc
34360 61 6c 4d 61 63 68 69 6e 65 2c 0d 0a 20 20 20 20  alMachine,..    
34370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34380 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f      configuratio
34390 6e 2c 20 72 65 66 20 66 72 61 6d 65 77 6f 72 6b  n, ref framework
343a0 4c 69 73 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  List);....      
343b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 49 6e                In
343c0 69 74 69 61 6c 69 7a 65 56 73 4c 69 73 74 28 72  itializeVsList(r
343d0 65 67 69 73 74 72 79 2e 4c 6f 63 61 6c 4d 61 63  egistry.LocalMac
343e0 68 69 6e 65 2c 20 63 6f 6e 66 69 67 75 72 61 74  hine, configurat
343f0 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ion,..          
34400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
34410 66 20 76 73 4c 69 73 74 29 3b 0d 0a 20 20 20 20  f vsList);..    
34420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34430 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20  #endregion....  
34440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34450 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
34460 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34470 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34480 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
34490 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
344a0 20 20 20 20 20 23 72 65 67 69 6f 6e 20 53 68 61       #region Sha
344b0 72 65 64 20 43 6c 69 65 6e 74 20 44 61 74 61 20  red Client Data 
344c0 43 72 65 61 74 69 6f 6e 0d 0a 20 20 20 20 20 20  Creation..      
344d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6f 62                ob
344e0 6a 65 63 74 20 64 69 72 65 63 74 6f 72 79 44 61  ject directoryDa
344f0 74 61 20 3d 20 6e 65 77 20 41 6e 79 50 61 69 72  ta = new AnyPair
34500 3c 73 74 72 69 6e 67 2c 20 62 6f 6f 6c 3e 28 0d  <string, bool>(.
34510 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
34520 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75           configu
34530 72 61 74 69 6f 6e 2e 44 69 72 65 63 74 6f 72 79  ration.Directory
34540 2c 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e  , configuration.
34550 49 6e 73 74 61 6c 6c 29 3b 0d 0a 0d 0a 20 20 20  Install);....   
34560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34570 20 6f 62 6a 65 63 74 20 66 69 6c 65 4e 61 6d 65   object fileName
34580 44 61 74 61 20 3d 20 6e 65 77 20 41 6e 79 50 61  Data = new AnyPa
34590 69 72 3c 73 74 72 69 6e 67 2c 20 62 6f 6f 6c 3e  ir<string, bool>
345a0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
345b0 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69             confi
345c0 67 75 72 61 74 69 6f 6e 2e 44 65 73 69 67 6e 65  guration.Designe
345d0 72 46 69 6c 65 4e 61 6d 65 2c 20 63 6f 6e 66 69  rFileName, confi
345e0 67 75 72 61 74 69 6f 6e 2e 49 6e 73 74 61 6c 6c  guration.Install
345f0 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
34600 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
34610 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  on....          
34620 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
34630 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34640 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34650 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34660 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
34670 20 20 20 20 20 20 20 20 20 20 20 20 20 23 72 65               #re
34680 67 69 6f 6e 20 2e 4e 45 54 20 47 41 43 20 49 6e  gion .NET GAC In
34690 73 74 61 6c 6c 2f 52 65 6d 6f 76 65 0d 0a 20 20  stall/Remove..  
346a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
346b0 20 20 69 66 20 28 63 6f 6e 66 69 67 75 72 61 74    if (configurat
346c0 69 6f 6e 2e 48 61 73 46 6c 61 67 73 28 49 6e 73  ion.HasFlags(Ins
346d0 74 61 6c 6c 46 6c 61 67 73 2e 47 41 43 2c 20 74  tallFlags.GAC, t
346e0 72 75 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20  rue))..         
346f0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
34700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34710 20 20 20 20 20 20 50 75 62 6c 69 73 68 20 70 75        Publish pu
34720 62 6c 69 73 68 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d  blish = null;...
34730 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
34740 20 20 20 20 20 20 20 20 20 69 66 20 28 21 63 6f           if (!co
34750 6e 66 69 67 75 72 61 74 69 6f 6e 2e 57 68 61 74  nfiguration.What
34760 49 66 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  If)..           
34770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34780 20 70 75 62 6c 69 73 68 20 3d 20 6e 65 77 20 50   publish = new P
34790 75 62 6c 69 73 68 28 29 3b 0d 0a 0d 0a 20 20 20  ublish();....   
347a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
347b0 20 20 20 20 20 69 66 20 28 63 6f 6e 66 69 67 75       if (configu
347c0 72 61 74 69 6f 6e 2e 49 6e 73 74 61 6c 6c 29 0d  ration.Install).
347d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
347e0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
347f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34800 20 20 20 20 20 20 20 20 69 66 20 28 21 63 6f 6e          if (!con
34810 66 69 67 75 72 61 74 69 6f 6e 2e 57 68 61 74 49  figuration.WhatI
34820 66 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  f)..            
34830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34840 20 20 20 20 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d      /* throw */.
34850 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
34860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34870 20 70 75 62 6c 69 73 68 2e 47 61 63 49 6e 73 74   publish.GacInst
34880 61 6c 6c 28 63 6f 6e 66 69 67 75 72 61 74 69 6f  all(configuratio
34890 6e 2e 43 6f 72 65 46 69 6c 65 4e 61 6d 65 29 3b  n.CoreFileName);
348a0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
348b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
348c0 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e  TraceOps.DebugAn
348d0 64 54 72 61 63 65 28 54 72 61 63 65 50 72 69 6f  dTrace(TracePrio
348e0 72 69 74 79 2e 48 69 67 68 65 73 74 2c 0d 0a 20  rity.Highest,.. 
348f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
34910 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72  ebugCallback, tr
34920 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72  aceCallback, Str
34930 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
34940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34950 20 20 20 20 20 20 20 20 20 20 20 20 20 22 47 61               "Ga
34960 63 49 6e 73 74 61 6c 6c 3a 20 61 73 73 65 6d 62  cInstall: assemb
34970 6c 79 50 61 74 68 20 3d 20 7b 30 7d 22 2c 0d 0a  lyPath = {0}",..
34980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
349a0 46 6f 72 44 69 73 70 6c 61 79 28 63 6f 6e 66 69  ForDisplay(confi
349b0 67 75 72 61 74 69 6f 6e 2e 43 6f 72 65 46 69 6c  guration.CoreFil
349c0 65 4e 61 6d 65 29 29 2c 0d 0a 20 20 20 20 20 20  eName)),..      
349d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
349e0 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
349f0 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20  ategory);....   
34a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34a10 20 20 20 20 20 20 20 20 20 69 66 20 28 21 63 6f           if (!co
34a20 6e 66 69 67 75 72 61 74 69 6f 6e 2e 57 68 61 74  nfiguration.What
34a30 49 66 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  If)..           
34a40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34a50 20 20 20 20 20 2f 2a 20 74 68 72 6f 77 20 2a 2f       /* throw */
34a60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
34a70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34a80 20 20 70 75 62 6c 69 73 68 2e 47 61 63 49 6e 73    publish.GacIns
34a90 74 61 6c 6c 28 63 6f 6e 66 69 67 75 72 61 74 69  tall(configurati
34aa0 6f 6e 2e 4c 69 6e 71 46 69 6c 65 4e 61 6d 65 29  on.LinqFileName)
34ab0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
34ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34ad0 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41   TraceOps.DebugA
34ae0 6e 64 54 72 61 63 65 28 54 72 61 63 65 50 72 69  ndTrace(TracePri
34af0 6f 72 69 74 79 2e 48 69 67 68 65 73 74 2c 0d 0a  ority.Highest,..
34b00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34b20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74  debugCallback, t
34b30 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74  raceCallback, St
34b40 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
34b50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 47                "G
34b70 61 63 49 6e 73 74 61 6c 6c 3a 20 61 73 73 65 6d  acInstall: assem
34b80 62 6c 79 50 61 74 68 20 3d 20 7b 30 7d 22 2c 0d  blyPath = {0}",.
34b90 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
34ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34bb0 20 46 6f 72 44 69 73 70 6c 61 79 28 63 6f 6e 66   ForDisplay(conf
34bc0 69 67 75 72 61 74 69 6f 6e 2e 4c 69 6e 71 46 69  iguration.LinqFi
34bd0 6c 65 4e 61 6d 65 29 29 2c 0d 0a 20 20 20 20 20  leName)),..     
34be0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34bf0 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
34c00 43 61 74 65 67 6f 72 79 29 3b 0d 0a 20 20 20 20  Category);..    
34c10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34c20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
34c30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
34c40 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  lse..           
34c50 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
34c60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34c70 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
34c80 21 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 57  !configuration.W
34c90 68 61 74 49 66 29 0d 0a 20 20 20 20 20 20 20 20  hatIf)..        
34ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34cb0 20 20 20 20 20 20 20 20 2f 2a 20 74 68 72 6f 77          /* throw
34cc0 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   */..           
34cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34ce0 20 20 20 20 20 70 75 62 6c 69 73 68 2e 47 61 63       publish.Gac
34cf0 52 65 6d 6f 76 65 28 63 6f 6e 66 69 67 75 72 61  Remove(configura
34d00 74 69 6f 6e 2e 4c 69 6e 71 46 69 6c 65 4e 61 6d  tion.LinqFileNam
34d10 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e);....         
34d20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34d30 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75     TraceOps.Debu
34d40 67 41 6e 64 54 72 61 63 65 28 54 72 61 63 65 50  gAndTrace(TraceP
34d50 72 69 6f 72 69 74 79 2e 48 69 67 68 65 73 74 2c  riority.Highest,
34d60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
34d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34d80 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c    debugCallback,
34d90 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20   traceCallback, 
34da0 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
34db0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34dd0 22 47 61 63 52 65 6d 6f 76 65 3a 20 61 73 73 65  "GacRemove: asse
34de0 6d 62 6c 79 50 61 74 68 20 3d 20 7b 30 7d 22 2c  mblyPath = {0}",
34df0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
34e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34e10 20 20 46 6f 72 44 69 73 70 6c 61 79 28 63 6f 6e    ForDisplay(con
34e20 66 69 67 75 72 61 74 69 6f 6e 2e 4c 69 6e 71 46  figuration.LinqF
34e30 69 6c 65 4e 61 6d 65 29 29 2c 0d 0a 20 20 20 20  ileName)),..    
34e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34e50 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
34e60 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
34e70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34e80 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21             if (!
34e90 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 57 68  configuration.Wh
34ea0 61 74 49 66 29 0d 0a 20 20 20 20 20 20 20 20 20  atIf)..         
34eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34ec0 20 20 20 20 20 20 20 2f 2a 20 74 68 72 6f 77 20         /* throw 
34ed0 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  */..            
34ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34ef0 20 20 20 20 70 75 62 6c 69 73 68 2e 47 61 63 52      publish.GacR
34f00 65 6d 6f 76 65 28 63 6f 6e 66 69 67 75 72 61 74  emove(configurat
34f10 69 6f 6e 2e 43 6f 72 65 46 69 6c 65 4e 61 6d 65  ion.CoreFileName
34f20 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
34f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34f40 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67    TraceOps.Debug
34f50 41 6e 64 54 72 61 63 65 28 54 72 61 63 65 50 72  AndTrace(TracePr
34f60 69 6f 72 69 74 79 2e 48 69 67 68 65 73 74 2c 0d  iority.Highest,.
34f70 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
34f80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34f90 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20   debugCallback, 
34fa0 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53  traceCallback, S
34fb0 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
34fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
34fe0 47 61 63 52 65 6d 6f 76 65 3a 20 61 73 73 65 6d  GacRemove: assem
34ff0 62 6c 79 50 61 74 68 20 3d 20 7b 30 7d 22 2c 0d  blyPath = {0}",.
35000 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
35010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35020 20 46 6f 72 44 69 73 70 6c 61 79 28 63 6f 6e 66   ForDisplay(conf
35030 69 67 75 72 61 74 69 6f 6e 2e 43 6f 72 65 46 69  iguration.CoreFi
35040 6c 65 4e 61 6d 65 29 29 2c 0d 0a 20 20 20 20 20  leName)),..     
35050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35060 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
35070 43 61 74 65 67 6f 72 79 29 3b 0d 0a 20 20 20 20  Category);..    
35080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35090 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
350a0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
350b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
350c0 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a    #endregion....
350d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
350e0 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
350f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35100 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35110 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
35120 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
35130 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 2e         #region .
35140 4e 45 54 20 41 73 73 65 6d 62 6c 79 46 6f 6c 64  NET AssemblyFold
35150 65 72 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ers..           
35160 20 20 20 20 20 20 20 20 20 69 66 20 28 63 6f 6e           if (con
35170 66 69 67 75 72 61 74 69 6f 6e 2e 48 61 73 46 6c  figuration.HasFl
35180 61 67 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ags(..          
35190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
351a0 20 20 49 6e 73 74 61 6c 6c 46 6c 61 67 73 2e 41    InstallFlags.A
351b0 73 73 65 6d 62 6c 79 46 6f 6c 64 65 72 73 2c 20  ssemblyFolders, 
351c0 74 72 75 65 29 29 0d 0a 20 20 20 20 20 20 20 20  true))..        
351d0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
351e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
351f0 20 20 20 20 20 20 20 69 66 20 28 21 46 6f 72 45         if (!ForE
35200 61 63 68 46 72 61 6d 65 77 6f 72 6b 52 65 67 69  achFrameworkRegi
35210 73 74 72 79 28 72 65 67 69 73 74 72 79 2c 0d 0a  stry(registry,..
35220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35240 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2c 20 50  frameworkList, P
35250 72 6f 63 65 73 73 41 73 73 65 6d 62 6c 79 46 6f  rocessAssemblyFo
35260 6c 64 65 72 73 2c 0d 0a 20 20 20 20 20 20 20 20  lders,..        
35270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35280 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72          configur
35290 61 74 69 6f 6e 2e 52 65 67 69 73 74 72 79 56 65  ation.RegistryVe
352a0 72 73 69 6f 6e 2c 20 64 69 72 65 63 74 6f 72 79  rsion, directory
352b0 44 61 74 61 2c 0d 0a 20 20 20 20 20 20 20 20 20  Data,..         
352c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
352d0 20 20 20 20 20 20 20 4e 65 74 46 78 49 73 33 32         NetFxIs32
352e0 42 69 74 4f 6e 6c 79 20 7c 7c 20 63 6f 6e 66 69  BitOnly || confi
352f0 67 75 72 61 74 69 6f 6e 2e 57 6f 77 36 34 2c 0d  guration.Wow64,.
35300 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
35310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35320 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 54   configuration.T
35330 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 2c 0d 0a  hrowOnMissing,..
35340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35360 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 57 68  configuration.Wh
35370 61 74 49 66 2c 20 63 6f 6e 66 69 67 75 72 61 74  atIf, configurat
35380 69 6f 6e 2e 56 65 72 62 6f 73 65 2c 0d 0a 20 20  ion.Verbose,..  
35390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
353a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
353b0 66 20 65 72 72 6f 72 29 29 0d 0a 20 20 20 20 20  f error))..     
353c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
353d0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
353e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
353f0 20 20 54 72 61 63 65 4f 70 73 2e 53 68 6f 77 4d    TraceOps.ShowM
35400 65 73 73 61 67 65 28 54 72 61 63 65 50 72 69 6f  essage(TracePrio
35410 72 69 74 79 2e 48 69 67 68 65 73 74 2c 0d 0a 20  rity.Highest,.. 
35420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
35440 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72  ebugCallback, tr
35450 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 74 68 69  aceCallback, thi
35460 73 41 73 73 65 6d 62 6c 79 2c 0d 0a 20 20 20 20  sAssembly,..    
35470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35480 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
35490 72 2c 20 74 72 61 63 65 43 61 74 65 67 6f 72 79  r, traceCategory
354a0 2c 20 4d 65 73 73 61 67 65 42 6f 78 42 75 74 74  , MessageBoxButt
354b0 6f 6e 73 2e 4f 4b 2c 0d 0a 20 20 20 20 20 20 20  ons.OK,..       
354c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
354d0 20 20 20 20 20 20 20 20 20 4d 65 73 73 61 67 65           Message
354e0 42 6f 78 49 63 6f 6e 2e 45 72 72 6f 72 29 3b 0d  BoxIcon.Error);.
354f0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
35500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
35510 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64  raceOps.DebugAnd
35520 54 72 61 63 65 28 54 72 61 63 65 50 72 69 6f 72  Trace(TracePrior
35530 69 74 79 2e 4d 65 64 69 75 6d 48 69 67 68 2c 0d  ity.MediumHigh,.
35540 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
35550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35560 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20   debugCallback, 
35570 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 22  traceCallback, "
35580 46 61 69 6c 75 72 65 2e 22 2c 0d 0a 20 20 20 20  Failure.",..    
35590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
355a0 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
355b0 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
355c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
355d0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
355e0 6e 20 31 3b 20 2f 2a 20 46 41 49 4c 55 52 45 20  n 1; /* FAILURE 
355f0 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  */..            
35600 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
35610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35620 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
35630 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65            #endre
35640 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20  gion....        
35650 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
35660 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35670 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35680 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35690 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
356a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23                 #
356b0 72 65 67 69 6f 6e 20 2e 4e 45 54 20 44 62 50 72  region .NET DbPr
356c0 6f 76 69 64 65 72 46 61 63 74 6f 72 79 0d 0a 20  oviderFactory.. 
356d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
356e0 20 20 20 69 66 20 28 63 6f 6e 66 69 67 75 72 61     if (configura
356f0 74 69 6f 6e 2e 48 61 73 46 6c 61 67 73 28 0d 0a  tion.HasFlags(..
35700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35710 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 73 74              Inst
35720 61 6c 6c 46 6c 61 67 73 2e 44 62 50 72 6f 76 69  allFlags.DbProvi
35730 64 65 72 46 61 63 74 6f 72 79 2c 20 74 72 75 65  derFactory, true
35740 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
35750 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
35760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35770 20 20 20 62 6f 6f 6c 20 73 61 76 65 64 20 3d 20     bool saved = 
35780 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  false;....      
35790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
357a0 20 20 69 66 20 28 21 46 6f 72 45 61 63 68 46 72    if (!ForEachFr
357b0 61 6d 65 77 6f 72 6b 43 6f 6e 66 69 67 28 72 65  ameworkConfig(re
357c0 67 69 73 74 72 79 2c 0d 0a 20 20 20 20 20 20 20  gistry,..       
357d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
357e0 20 20 20 20 20 20 20 20 20 66 72 61 6d 65 77 6f           framewo
357f0 72 6b 4c 69 73 74 2c 20 50 72 6f 63 65 73 73 44  rkList, ProcessD
35800 62 50 72 6f 76 69 64 65 72 46 61 63 74 6f 72 79  bProviderFactory
35810 2c 0d 0a 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 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e     configuration
35840 2e 43 6f 6e 66 69 67 56 65 72 73 69 6f 6e 2c 20  .ConfigVersion, 
35850 49 6e 76 61 72 69 61 6e 74 4e 61 6d 65 2c 0d 0a  InvariantName,..
35860 20 20 20 20 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 50 72 6f 76 69 64 65 72 4e 61 6d 65 2c 20 44 65  ProviderName, De
35890 73 63 72 69 70 74 69 6f 6e 2c 20 46 61 63 74 6f  scription, Facto
358a0 72 79 54 79 70 65 4e 61 6d 65 2c 0d 0a 20 20 20  ryTypeName,..   
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 63 6f 72               cor
358d0 65 41 73 73 65 6d 62 6c 79 4e 61 6d 65 2c 20 64  eAssemblyName, d
358e0 69 72 65 63 74 6f 72 79 44 61 74 61 2c 0d 0a 20  irectoryData,.. 
358f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4e                 N
35910 65 74 46 78 49 73 33 32 42 69 74 4f 6e 6c 79 20  etFxIs32BitOnly 
35920 7c 7c 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  || configuration
35930 2e 57 6f 77 36 34 2c 0d 0a 20 20 20 20 20 20 20  .Wow64,..       
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 63 6f 6e 66 69 67 75           configu
35960 72 61 74 69 6f 6e 2e 54 68 72 6f 77 4f 6e 4d 69  ration.ThrowOnMi
35970 73 73 69 6e 67 2c 0d 0a 20 20 20 20 20 20 20 20  ssing,..        
35980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35990 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72          configur
359a0 61 74 69 6f 6e 2e 57 68 61 74 49 66 2c 20 63 6f  ation.WhatIf, co
359b0 6e 66 69 67 75 72 61 74 69 6f 6e 2e 56 65 72 62  nfiguration.Verb
359c0 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ose,..          
359d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
359e0 20 20 20 20 20 20 72 65 66 20 73 61 76 65 64 2c        ref saved,
359f0 20 72 65 66 20 65 72 72 6f 72 29 29 0d 0a 20 20   ref error))..  
35a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35a10 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
35a20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35a30 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 53 68       TraceOps.Sh
35a40 6f 77 4d 65 73 73 61 67 65 28 54 72 61 63 65 50  owMessage(TraceP
35a50 72 69 6f 72 69 74 79 2e 48 69 67 68 65 73 74 2c  riority.Highest,
35a60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
35a70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35a80 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c    debugCallback,
35a90 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20   traceCallback, 
35aa0 74 68 69 73 41 73 73 65 6d 62 6c 79 2c 0d 0a 20  thisAssembly,.. 
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 20 20 20 65                 e
35ad0 72 72 6f 72 2c 20 74 72 61 63 65 43 61 74 65 67  rror, traceCateg
35ae0 6f 72 79 2c 20 4d 65 73 73 61 67 65 42 6f 78 42  ory, MessageBoxB
35af0 75 74 74 6f 6e 73 2e 4f 4b 2c 0d 0a 20 20 20 20  uttons.OK,..    
35b00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35b10 20 20 20 20 20 20 20 20 20 20 20 20 4d 65 73 73              Mess
35b20 61 67 65 42 6f 78 49 63 6f 6e 2e 45 72 72 6f 72  ageBoxIcon.Error
35b30 29 3b 0d 0a 0d 0a 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 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67    TraceOps.Debug
35b60 41 6e 64 54 72 61 63 65 28 54 72 61 63 65 50 72  AndTrace(TracePr
35b70 69 6f 72 69 74 79 2e 4d 65 64 69 75 6d 48 69 67  iority.MediumHig
35b80 68 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  h,..            
35b90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35ba0 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63      debugCallbac
35bb0 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b  k, traceCallback
35bc0 2c 20 22 46 61 69 6c 75 72 65 2e 22 2c 0d 0a 20  , "Failure.",.. 
35bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35be0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
35bf0 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
35c00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
35c10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
35c20 74 75 72 6e 20 31 3b 20 2f 2a 20 46 41 49 4c 55  turn 1; /* FAILU
35c30 52 45 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20  RE */..         
35c40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
35c50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
35c60 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
35c70 20 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e               #en
35c80 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
35c90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
35ca0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35cb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35cc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35cd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
35ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35cf0 20 20 23 72 65 67 69 6f 6e 20 56 53 20 50 61 63    #region VS Pac
35d00 6b 61 67 65 0d 0a 20 20 20 20 20 20 20 20 20 20  kage..          
35d10 20 20 20 20 20 20 20 20 20 20 69 66 20 28 63 6f            if (co
35d20 6e 66 69 67 75 72 61 74 69 6f 6e 2e 48 61 73 46  nfiguration.HasF
35d30 6c 61 67 73 28 0d 0a 20 20 20 20 20 20 20 20 20  lags(..         
35d40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35d50 20 20 20 49 6e 73 74 61 6c 6c 46 6c 61 67 73 2e     InstallFlags.
35d60 56 73 50 61 63 6b 61 67 65 2c 20 74 72 75 65 29  VsPackage, true)
35d70 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
35d80 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
35d90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35da0 20 20 69 66 20 28 21 46 6f 72 45 61 63 68 56 73    if (!ForEachVs
35db0 56 65 72 73 69 6f 6e 52 65 67 69 73 74 72 79 28  VersionRegistry(
35dc0 72 65 67 69 73 74 72 79 2c 0d 0a 20 20 20 20 20  registry,..     
35dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35de0 20 20 20 20 20 20 20 20 20 20 20 76 73 4c 69 73             vsLis
35df0 74 2c 20 50 72 6f 63 65 73 73 56 73 50 61 63 6b  t, ProcessVsPack
35e00 61 67 65 2c 20 70 61 63 6b 61 67 65 2c 0d 0a 20  age, package,.. 
35e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35e20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66                 f
35e30 69 6c 65 4e 61 6d 65 44 61 74 61 2c 0d 0a 20 20  ileNameData,..  
35e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 56 73                Vs
35e60 49 73 33 32 42 69 74 4f 6e 6c 79 20 7c 7c 20 63  Is32BitOnly || c
35e70 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 57 6f 77  onfiguration.Wow
35e80 36 34 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  64,..           
35e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35ea0 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69       configurati
35eb0 6f 6e 2e 54 68 72 6f 77 4f 6e 4d 69 73 73 69 6e  on.ThrowOnMissin
35ec0 67 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  g,..            
35ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35ee0 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f      configuratio
35ef0 6e 2e 57 68 61 74 49 66 2c 20 63 6f 6e 66 69 67  n.WhatIf, config
35f00 75 72 61 74 69 6f 6e 2e 56 65 72 62 6f 73 65 2c  uration.Verbose,
35f10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
35f20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35f30 20 20 72 65 66 20 65 72 72 6f 72 29 29 0d 0a 20    ref error)).. 
35f40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35f50 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
35f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35f70 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 53        TraceOps.S
35f80 68 6f 77 4d 65 73 73 61 67 65 28 54 72 61 63 65  howMessage(Trace
35f90 50 72 69 6f 72 69 74 79 2e 48 69 67 68 65 73 74  Priority.Highest
35fa0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
35fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35fc0 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b     debugCallback
35fd0 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c  , traceCallback,
35fe0 20 74 68 69 73 41 73 73 65 6d 62 6c 79 2c 0d 0a   thisAssembly,..
35ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36010 65 72 72 6f 72 2c 20 74 72 61 63 65 43 61 74 65  error, traceCate
36020 67 6f 72 79 2c 20 4d 65 73 73 61 67 65 42 6f 78  gory, MessageBox
36030 42 75 74 74 6f 6e 73 2e 4f 4b 2c 0d 0a 20 20 20  Buttons.OK,..   
36040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36050 20 20 20 20 20 20 20 20 20 20 20 20 20 4d 65 73               Mes
36060 73 61 67 65 42 6f 78 49 63 6f 6e 2e 45 72 72 6f  sageBoxIcon.Erro
36070 72 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  r);....         
36080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36090 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75     TraceOps.Debu
360a0 67 41 6e 64 54 72 61 63 65 28 54 72 61 63 65 50  gAndTrace(TraceP
360b0 72 69 6f 72 69 74 79 2e 4d 65 64 69 75 6d 48 69  riority.MediumHi
360c0 67 68 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  gh,..           
360d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
360e0 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61       debugCallba
360f0 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63  ck, traceCallbac
36100 6b 2c 20 22 46 61 69 6c 75 72 65 2e 22 2c 0d 0a  k, "Failure.",..
36110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36130 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
36140 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
36150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
36160 65 74 75 72 6e 20 31 3b 20 2f 2a 20 46 41 49 4c  eturn 1; /* FAIL
36170 55 52 45 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20  URE */..        
36180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36190 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
361a0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
361b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 65                #e
361c0 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20  ndregion....    
361d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
361e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
361f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36200 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36210 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
36220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36230 20 20 20 23 72 65 67 69 6f 6e 20 56 53 20 44 61     #region VS Da
36240 74 61 53 6f 75 72 63 65 0d 0a 20 20 20 20 20 20  taSource..      
36250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
36260 20 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e   (configuration.
36270 48 61 73 46 6c 61 67 73 28 0d 0a 20 20 20 20 20  HasFlags(..     
36280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36290 20 20 20 20 20 20 20 49 6e 73 74 61 6c 6c 46 6c         InstallFl
362a0 61 67 73 2e 56 73 44 61 74 61 53 6f 75 72 63 65  ags.VsDataSource
362b0 2c 20 74 72 75 65 29 29 0d 0a 20 20 20 20 20 20  , true))..      
362c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
362d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
362e0 20 20 20 20 20 20 20 20 20 69 66 20 28 21 46 6f           if (!Fo
362f0 72 45 61 63 68 56 73 56 65 72 73 69 6f 6e 52 65  rEachVsVersionRe
36300 67 69 73 74 72 79 28 72 65 67 69 73 74 72 79 2c  gistry(registry,
36310 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
36320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36330 20 20 76 73 4c 69 73 74 2c 20 50 72 6f 63 65 73    vsList, Proces
36340 73 56 73 44 61 74 61 53 6f 75 72 63 65 2c 20 70  sVsDataSource, p
36350 61 63 6b 61 67 65 2c 0d 0a 20 20 20 20 20 20 20  ackage,..       
36360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36370 20 20 20 20 20 20 20 20 20 66 69 6c 65 4e 61 6d           fileNam
36380 65 44 61 74 61 2c 0d 0a 20 20 20 20 20 20 20 20  eData,..        
36390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
363a0 20 20 20 20 20 20 20 20 56 73 49 73 33 32 42 69          VsIs32Bi
363b0 74 4f 6e 6c 79 20 7c 7c 20 63 6f 6e 66 69 67 75  tOnly || configu
363c0 72 61 74 69 6f 6e 2e 57 6f 77 36 34 2c 0d 0a 20  ration.Wow64,.. 
363d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
363e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
363f0 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 54 68 72  onfiguration.Thr
36400 6f 77 4f 6e 4d 69 73 73 69 6e 67 2c 0d 0a 20 20  owOnMissing,..  
36410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
36430 6e 66 69 67 75 72 61 74 69 6f 6e 2e 57 68 61 74  nfiguration.What
36440 49 66 2c 20 63 6f 6e 66 69 67 75 72 61 74 69 6f  If, configuratio
36450 6e 2e 56 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20  n.Verbose,..    
36460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36470 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20              ref 
36480 65 72 72 6f 72 29 29 0d 0a 20 20 20 20 20 20 20  error))..       
36490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
364a0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
364b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
364c0 54 72 61 63 65 4f 70 73 2e 53 68 6f 77 4d 65 73  TraceOps.ShowMes
364d0 73 61 67 65 28 54 72 61 63 65 50 72 69 6f 72 69  sage(TracePriori
364e0 74 79 2e 48 69 67 68 65 73 74 2c 0d 0a 20 20 20  ty.Highest,..   
364f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36500 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62               deb
36510 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63  ugCallback, trac
36520 65 43 61 6c 6c 62 61 63 6b 2c 20 74 68 69 73 41  eCallback, thisA
36530 73 73 65 6d 62 6c 79 2c 0d 0a 20 20 20 20 20 20  ssembly,..      
36540 20 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 65 72 72 6f 72 2c            error,
36560 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 2c 20   traceCategory, 
36570 4d 65 73 73 61 67 65 42 6f 78 42 75 74 74 6f 6e  MessageBoxButton
36580 73 2e 4f 4b 2c 0d 0a 20 20 20 20 20 20 20 20 20  s.OK,..         
36590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
365a0 20 20 20 20 20 20 20 4d 65 73 73 61 67 65 42 6f         MessageBo
365b0 78 49 63 6f 6e 2e 45 72 72 6f 72 29 3b 0d 0a 0d  xIcon.Error);...
365c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
365d0 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61               Tra
365e0 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72  ceOps.DebugAndTr
365f0 61 63 65 28 54 72 61 63 65 50 72 69 6f 72 69 74  ace(TracePriorit
36600 79 2e 4d 65 64 69 75 6d 48 69 67 68 2c 0d 0a 20  y.MediumHigh,.. 
36610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
36630 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72  ebugCallback, tr
36640 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 22 46 61  aceCallback, "Fa
36650 69 6c 75 72 65 2e 22 2c 0d 0a 20 20 20 20 20 20  ilure.",..      
36660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36670 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
36680 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20  ategory);....   
36690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
366a0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
366b0 31 3b 20 2f 2a 20 46 41 49 4c 55 52 45 20 2a 2f  1; /* FAILURE */
366c0 0d 0a 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 7d 0d 0a 20 20 20            }..   
366e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
366f0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
36700 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
36710 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  on....          
36720 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
36730 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36740 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36750 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36760 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
36770 20 20 20 20 20 20 20 20 20 20 20 20 20 23 72 65               #re
36780 67 69 6f 6e 20 56 53 20 44 61 74 61 50 72 6f 76  gion VS DataProv
36790 69 64 65 72 0d 0a 20 20 20 20 20 20 20 20 20 20  ider..          
367a0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 63 6f            if (co
367b0 6e 66 69 67 75 72 61 74 69 6f 6e 2e 48 61 73 46  nfiguration.HasF
367c0 6c 61 67 73 28 0d 0a 20 20 20 20 20 20 20 20 20  lags(..         
367d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
367e0 20 20 20 49 6e 73 74 61 6c 6c 46 6c 61 67 73 2e     InstallFlags.
367f0 56 73 44 61 74 61 50 72 6f 76 69 64 65 72 2c 20  VsDataProvider, 
36800 74 72 75 65 29 29 0d 0a 20 20 20 20 20 20 20 20  true))..        
36810 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
36820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36830 20 20 20 20 20 20 20 69 66 20 28 21 46 6f 72 45         if (!ForE
36840 61 63 68 56 73 56 65 72 73 69 6f 6e 52 65 67 69  achVsVersionRegi
36850 73 74 72 79 28 72 65 67 69 73 74 72 79 2c 0d 0a  stry(registry,..
36860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36880 76 73 4c 69 73 74 2c 20 50 72 6f 63 65 73 73 56  vsList, ProcessV
36890 73 44 61 74 61 50 72 6f 76 69 64 65 72 2c 20 70  sDataProvider, p
368a0 61 63 6b 61 67 65 2c 0d 0a 20 20 20 20 20 20 20  ackage,..       
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 66 69 6c 65 4e 61 6d           fileNam
368d0 65 44 61 74 61 2c 0d 0a 20 20 20 20 20 20 20 20  eData,..        
368e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
368f0 20 20 20 20 20 20 20 20 56 73 49 73 33 32 42 69          VsIs32Bi
36900 74 4f 6e 6c 79 20 7c 7c 20 63 6f 6e 66 69 67 75  tOnly || configu
36910 72 61 74 69 6f 6e 2e 57 6f 77 36 34 2c 0d 0a 20  ration.Wow64,.. 
36920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
36940 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 54 68 72  onfiguration.Thr
36950 6f 77 4f 6e 4d 69 73 73 69 6e 67 2c 0d 0a 20 20  owOnMissing,..  
36960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
36980 6e 66 69 67 75 72 61 74 69 6f 6e 2e 57 68 61 74  nfiguration.What
36990 49 66 2c 20 63 6f 6e 66 69 67 75 72 61 74 69 6f  If, configuratio
369a0 6e 2e 56 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20  n.Verbose,..    
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 20 20 20 20 20 72 65 66 20              ref 
369d0 65 72 72 6f 72 29 29 0d 0a 20 20 20 20 20 20 20  error))..       
369e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
369f0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
36a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36a10 54 72 61 63 65 4f 70 73 2e 53 68 6f 77 4d 65 73  TraceOps.ShowMes
36a20 73 61 67 65 28 54 72 61 63 65 50 72 69 6f 72 69  sage(TracePriori
36a30 74 79 2e 48 69 67 68 65 73 74 2c 0d 0a 20 20 20  ty.Highest,..   
36a40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36a50 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62               deb
36a60 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63  ugCallback, trac
36a70 65 43 61 6c 6c 62 61 63 6b 2c 20 74 68 69 73 41  eCallback, thisA
36a80 73 73 65 6d 62 6c 79 2c 0d 0a 20 20 20 20 20 20  ssembly,..      
36a90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36aa0 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 2c            error,
36ab0 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 2c 20   traceCategory, 
36ac0 4d 65 73 73 61 67 65 42 6f 78 42 75 74 74 6f 6e  MessageBoxButton
36ad0 73 2e 4f 4b 2c 0d 0a 20 20 20 20 20 20 20 20 20  s.OK,..         
36ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36af0 20 20 20 20 20 20 20 4d 65 73 73 61 67 65 42 6f         MessageBo
36b00 78 49 63 6f 6e 2e 45 72 72 6f 72 29 3b 0d 0a 0d  xIcon.Error);...
36b10 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
36b20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61               Tra
36b30 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72  ceOps.DebugAndTr
36b40 61 63 65 28 54 72 61 63 65 50 72 69 6f 72 69 74  ace(TracePriorit
36b50 79 2e 4d 65 64 69 75 6d 48 69 67 68 2c 0d 0a 20  y.MediumHigh,.. 
36b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36b70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
36b80 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72  ebugCallback, tr
36b90 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 22 46 61  aceCallback, "Fa
36ba0 69 6c 75 72 65 2e 22 2c 0d 0a 20 20 20 20 20 20  ilure.",..      
36bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36bc0 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
36bd0 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20  ategory);....   
36be0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36bf0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
36c00 31 3b 20 2f 2a 20 46 41 49 4c 55 52 45 20 2a 2f  1; /* FAILURE */
36c10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
36c20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
36c30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36c40 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
36c50 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
36c60 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  on....          
36c70 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
36c80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36c90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36ca0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36cb0 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
36cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 23 72 65               #re
36cd0 67 69 6f 6e 20 4c 6f 67 20 53 75 6d 6d 61 72 79  gion Log Summary
36ce0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
36cf0 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44        TraceOps.D
36d00 65 62 75 67 41 6e 64 54 72 61 63 65 28 54 72 61  ebugAndTrace(Tra
36d10 63 65 50 72 69 6f 72 69 74 79 2e 4d 65 64 69 75  cePriority.Mediu
36d20 6d 48 69 67 68 2c 0d 0a 20 20 20 20 20 20 20 20  mHigh,..        
36d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36d40 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74  debugCallback, t
36d50 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74  raceCallback, St
36d60 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
36d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36d80 20 20 20 20 20 20 22 73 75 62 4b 65 79 73 43 72        "subKeysCr
36d90 65 61 74 65 64 20 3d 20 7b 30 7d 2c 20 73 75 62  eated = {0}, sub
36da0 4b 65 79 73 44 65 6c 65 74 65 64 20 3d 20 7b 31  KeysDeleted = {1
36db0 7d 2c 20 22 20 2b 0d 0a 20 20 20 20 20 20 20 20  }, " +..        
36dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36dd0 22 6b 65 79 56 61 6c 75 65 73 53 65 74 20 3d 20  "keyValuesSet = 
36de0 7b 32 7d 2c 20 6b 65 79 56 61 6c 75 65 73 44 65  {2}, keyValuesDe
36df0 6c 65 74 65 64 20 3d 20 7b 33 7d 22 2c 0d 0a 20  leted = {3}",.. 
36e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36e10 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61         ForDispla
36e20 79 28 52 65 67 69 73 74 72 79 48 65 6c 70 65 72  y(RegistryHelper
36e30 2e 53 75 62 4b 65 79 73 43 72 65 61 74 65 64 29  .SubKeysCreated)
36e40 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
36e50 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69             ForDi
36e60 73 70 6c 61 79 28 52 65 67 69 73 74 72 79 48 65  splay(RegistryHe
36e70 6c 70 65 72 2e 53 75 62 4b 65 79 73 44 65 6c 65  lper.SubKeysDele
36e80 74 65 64 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  ted),..         
36e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46                 F
36ea0 6f 72 44 69 73 70 6c 61 79 28 52 65 67 69 73 74  orDisplay(Regist
36eb0 72 79 48 65 6c 70 65 72 2e 4b 65 79 56 61 6c 75  ryHelper.KeyValu
36ec0 65 73 53 65 74 29 2c 0d 0a 20 20 20 20 20 20 20  esSet),..       
36ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36ee0 20 46 6f 72 44 69 73 70 6c 61 79 28 52 65 67 69   ForDisplay(Regi
36ef0 73 74 72 79 48 65 6c 70 65 72 2e 4b 65 79 56 61  stryHelper.KeyVa
36f00 6c 75 65 73 44 65 6c 65 74 65 64 29 29 2c 0d 0a  luesDeleted)),..
36f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36f20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74          traceCat
36f30 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  egory);....     
36f40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
36f50 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64  raceOps.DebugAnd
36f60 54 72 61 63 65 28 54 72 61 63 65 50 72 69 6f 72  Trace(TracePrior
36f70 69 74 79 2e 4d 65 64 69 75 6d 48 69 67 68 2c 0d  ity.MediumHigh,.
36f80 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
36f90 20 20 20 20 20 20 20 20 20 64 65 62 75 67 43 61           debugCa
36fa0 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c  llback, traceCal
36fb0 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f  lback, String.Fo
36fc0 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
36fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
36fe0 66 69 6c 65 73 43 72 65 61 74 65 64 20 3d 20 7b  filesCreated = {
36ff0 30 7d 2c 20 66 69 6c 65 73 4d 6f 64 69 66 69 65  0}, filesModifie
37000 64 20 3d 20 7b 31 7d 2c 20 22 20 2b 0d 0a 20 20  d = {1}, " +..  
37010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37020 20 20 20 20 20 20 22 66 69 6c 65 73 44 65 6c 65        "filesDele
37030 74 65 64 20 3d 20 7b 32 7d 22 2c 20 46 6f 72 44  ted = {2}", ForD
37040 69 73 70 6c 61 79 28 66 69 6c 65 73 43 72 65 61  isplay(filesCrea
37050 74 65 64 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  ted),..         
37060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46                 F
37070 6f 72 44 69 73 70 6c 61 79 28 66 69 6c 65 73 4d  orDisplay(filesM
37080 6f 64 69 66 69 65 64 29 2c 20 46 6f 72 44 69 73  odified), ForDis
37090 70 6c 61 79 28 66 69 6c 65 73 44 65 6c 65 74 65  play(filesDelete
370a0 64 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  d)),..          
370b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
370c0 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 20  aceCategory);.. 
370d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
370e0 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
370f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
37100 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
37110 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37120 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37130 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37140 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
37150 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73          TraceOps
37160 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 54  .DebugAndTrace(T
37170 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4d 65 64  racePriority.Med
37180 69 75 6d 48 69 67 68 2c 0d 0a 20 20 20 20 20 20  iumHigh,..      
37190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
371a0 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c    debugCallback,
371b0 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20   traceCallback, 
371c0 22 53 75 63 63 65 73 73 2e 22 2c 0d 0a 20 20 20  "Success.",..   
371d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
371e0 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f       traceCatego
371f0 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
37200 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
37210 72 6e 20 30 3b 20 2f 2a 20 53 55 43 43 45 53 53  rn 0; /* SUCCESS
37220 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   */..           
37230 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
37240 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
37250 20 20 20 63 61 74 63 68 20 28 45 78 63 65 70 74     catch (Except
37260 69 6f 6e 20 65 29 0d 0a 20 20 20 20 20 20 20 20  ion e)..        
37270 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
37280 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e         TraceOps.
37290 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 54 72  DebugAndTrace(Tr
372a0 61 63 65 50 72 69 6f 72 69 74 79 2e 48 69 67 68  acePriority.High
372b0 65 73 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  est,..          
372c0 20 20 20 20 20 20 20 20 20 20 64 65 62 75 67 43            debugC
372d0 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61  allback, traceCa
372e0 6c 6c 62 61 63 6b 2c 20 65 2c 20 74 72 61 63 65  llback, e, trace
372f0 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
37300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
37310 72 6f 77 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  row;..          
37320 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a    }..        }..
37330 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
37340 6f 6e 0d 0a 20 20 20 20 7d 0d 0a 20 20 20 20 23  on..    }..    #
37350 65 6e 64 72 65 67 69 6f 6e 0d 0a 7d 0d 0a        endregion..}..