System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact c2e0298b727ebb7ee94e29df55df258fa71c23ca:


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 75 73 69 6e 67 20 53 79 73  ices;..using Sys
0150: 74 65 6d 2e 54 68 72 65 61 64 69 6e 67 3b 0d 0a  tem.Threading;..
0160: 75 73 69 6e 67 20 53 79 73 74 65 6d 2e 57 69 6e  using System.Win
0170: 64 6f 77 73 2e 46 6f 72 6d 73 3b 0d 0a 75 73 69  dows.Forms;..usi
0180: 6e 67 20 53 79 73 74 65 6d 2e 58 6d 6c 3b 0d 0a  ng System.Xml;..
0190: 75 73 69 6e 67 20 4d 69 63 72 6f 73 6f 66 74 2e  using Microsoft.
01a0: 57 69 6e 33 32 3b 0d 0a 0d 0a 6e 61 6d 65 73 70  Win32;....namesp
01b0: 61 63 65 20 53 79 73 74 65 6d 2e 44 61 74 61 2e  ace System.Data.
01c0: 53 51 4c 69 74 65 0d 0a 7b 0d 0a 20 20 20 20 23  SQLite..{..    #
01d0: 72 65 67 69 6f 6e 20 50 75 62 6c 69 63 20 44 65  region Public De
01e0: 6c 65 67 61 74 65 73 0d 0a 20 20 20 20 69 6e 74  legates..    int
01f0: 65 72 6e 61 6c 20 64 65 6c 65 67 61 74 65 20 76  ernal delegate v
0200: 6f 69 64 20 54 72 61 63 65 43 61 6c 6c 62 61 63  oid TraceCallbac
0210: 6b 28 0d 0a 20 20 20 20 20 20 20 20 73 74 72 69  k(..        stri
0220: 6e 67 20 6d 65 73 73 61 67 65 2c 0d 0a 20 20 20  ng message,..   
0230: 20 20 20 20 20 73 74 72 69 6e 67 20 63 61 74 65       string cate
0240: 67 6f 72 79 0d 0a 20 20 20 20 29 3b 0d 0a 0d 0a  gory..    );....
0250: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
0260: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0270: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0280: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0290: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
02a0: 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
02b0: 64 65 6c 65 67 61 74 65 20 62 6f 6f 6c 20 46 72  delegate bool Fr
02c0: 61 6d 65 77 6f 72 6b 43 6f 6e 66 69 67 43 61 6c  ameworkConfigCal
02d0: 6c 62 61 63 6b 28 0d 0a 20 20 20 20 20 20 20 20  lback(..        
02e0: 73 74 72 69 6e 67 20 66 69 6c 65 4e 61 6d 65 2c  string fileName,
02f0: 0d 0a 20 20 20 20 20 20 20 20 73 74 72 69 6e 67  ..        string
0300: 20 69 6e 76 61 72 69 61 6e 74 2c 0d 0a 20 20 20   invariant,..   
0310: 20 20 20 20 20 73 74 72 69 6e 67 20 6e 61 6d 65       string name
0320: 2c 0d 0a 20 20 20 20 20 20 20 20 73 74 72 69 6e  ,..        strin
0330: 67 20 64 65 73 63 72 69 70 74 69 6f 6e 2c 0d 0a  g description,..
0340: 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 74          string t
0350: 79 70 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20  ypeName,..      
0360: 20 20 41 73 73 65 6d 62 6c 79 4e 61 6d 65 20 61    AssemblyName a
0370: 73 73 65 6d 62 6c 79 4e 61 6d 65 2c 0d 0a 20 20  ssemblyName,..  
0380: 20 20 20 20 20 20 6f 62 6a 65 63 74 20 63 6c 69        object cli
0390: 65 6e 74 44 61 74 61 2c 0d 0a 20 20 20 20 20 20  entData,..      
03a0: 20 20 62 6f 6f 6c 20 77 6f 77 36 34 2c 0d 0a 20    bool wow64,.. 
03b0: 20 20 20 20 20 20 20 62 6f 6f 6c 20 74 68 72 6f         bool thro
03c0: 77 4f 6e 4d 69 73 73 69 6e 67 2c 0d 0a 20 20 20  wOnMissing,..   
03d0: 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66       bool whatIf
03e0: 2c 0d 0a 20 20 20 20 20 20 20 20 62 6f 6f 6c 20  ,..        bool 
03f0: 76 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20  verbose,..      
0400: 20 20 72 65 66 20 62 6f 6f 6c 20 73 61 76 65 64    ref bool saved
0410: 2c 0d 0a 20 20 20 20 20 20 20 20 72 65 66 20 73  ,..        ref s
0420: 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20  tring error..   
0430: 20 29 3b 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f   );....    /////
0440: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0450: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0460: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0470: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0480: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 69 6e  //////....    in
0490: 74 65 72 6e 61 6c 20 64 65 6c 65 67 61 74 65 20  ternal delegate 
04a0: 62 6f 6f 6c 20 46 72 61 6d 65 77 6f 72 6b 52 65  bool FrameworkRe
04b0: 67 69 73 74 72 79 43 61 6c 6c 62 61 63 6b 28 0d  gistryCallback(.
04c0: 0a 20 20 20 20 20 20 20 20 49 6e 73 74 61 6c 6c  .        Install
04d0: 65 72 2e 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b  er.MockRegistryK
04e0: 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20  ey rootKey,..   
04f0: 20 20 20 20 20 73 74 72 69 6e 67 20 66 72 61 6d       string fram
0500: 65 77 6f 72 6b 4e 61 6d 65 2c 0d 0a 20 20 20 20  eworkName,..    
0510: 20 20 20 20 56 65 72 73 69 6f 6e 20 66 72 61 6d      Version fram
0520: 65 77 6f 72 6b 56 65 72 73 69 6f 6e 2c 0d 0a 20  eworkVersion,.. 
0530: 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 70 6c         string pl
0540: 61 74 66 6f 72 6d 4e 61 6d 65 2c 0d 0a 20 20 20  atformName,..   
0550: 20 20 20 20 20 6f 62 6a 65 63 74 20 63 6c 69 65       object clie
0560: 6e 74 44 61 74 61 2c 0d 0a 20 20 20 20 20 20 20  ntData,..       
0570: 20 62 6f 6f 6c 20 77 6f 77 36 34 2c 0d 0a 20 20   bool wow64,..  
0580: 20 20 20 20 20 20 62 6f 6f 6c 20 74 68 72 6f 77        bool throw
0590: 4f 6e 4d 69 73 73 69 6e 67 2c 0d 0a 20 20 20 20  OnMissing,..    
05a0: 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c      bool whatIf,
05b0: 0d 0a 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76  ..        bool v
05c0: 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20  erbose,..       
05d0: 20 72 65 66 20 73 74 72 69 6e 67 20 65 72 72 6f   ref string erro
05e0: 72 0d 0a 20 20 20 20 29 3b 0d 0a 0d 0a 20 20 20  r..    );....   
05f0: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
0600: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0610: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0620: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0630: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
0640: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 64 65 6c      internal del
0650: 65 67 61 74 65 20 62 6f 6f 6c 20 56 69 73 75 61  egate bool Visua
0660: 6c 53 74 75 64 69 6f 52 65 67 69 73 74 72 79 43  lStudioRegistryC
0670: 61 6c 6c 62 61 63 6b 28 0d 0a 20 20 20 20 20 20  allback(..      
0680: 20 20 49 6e 73 74 61 6c 6c 65 72 2e 4d 6f 63 6b    Installer.Mock
0690: 52 65 67 69 73 74 72 79 4b 65 79 20 72 6f 6f 74  RegistryKey root
06a0: 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 56 65  Key,..        Ve
06b0: 72 73 69 6f 6e 20 76 73 56 65 72 73 69 6f 6e 2c  rsion vsVersion,
06c0: 0d 0a 20 20 20 20 20 20 20 20 49 6e 73 74 61 6c  ..        Instal
06d0: 6c 65 72 2e 50 61 63 6b 61 67 65 20 70 61 63 6b  ler.Package pack
06e0: 61 67 65 2c 0d 0a 20 20 20 20 20 20 20 20 6f 62  age,..        ob
06f0: 6a 65 63 74 20 63 6c 69 65 6e 74 44 61 74 61 2c  ject clientData,
0700: 0d 0a 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77  ..        bool w
0710: 6f 77 36 34 2c 0d 0a 20 20 20 20 20 20 20 20 62  ow64,..        b
0720: 6f 6f 6c 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69  ool throwOnMissi
0730: 6e 67 2c 0d 0a 20 20 20 20 20 20 20 20 62 6f 6f  ng,..        boo
0740: 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20  l whatIf,..     
0750: 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c     bool verbose,
0760: 0d 0a 20 20 20 20 20 20 20 20 72 65 66 20 73 74  ..        ref st
0770: 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20 20  ring error..    
0780: 29 3b 0d 0a 20 20 20 20 23 65 6e 64 72 65 67 69  );..    #endregi
0790: 6f 6e 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f  on....    //////
07a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
07b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
07c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
07d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
07e0: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 23 72 65  /////....    #re
07f0: 67 69 6f 6e 20 50 75 62 6c 69 63 20 45 6e 75 6d  gion Public Enum
0800: 65 72 61 74 69 6f 6e 73 0d 0a 20 20 20 20 5b 46  erations..    [F
0810: 6c 61 67 73 28 29 5d 0d 0a 20 20 20 20 70 75 62  lags()]..    pub
0820: 6c 69 63 20 65 6e 75 6d 20 49 6e 73 74 61 6c 6c  lic enum Install
0830: 46 6c 61 67 73 0d 0a 20 20 20 20 7b 0d 0a 20 20  Flags..    {..  
0840: 20 20 20 20 20 20 4e 6f 6e 65 20 3d 20 30 78 30        None = 0x0
0850: 2c 0d 0a 20 20 20 20 20 20 20 20 47 41 43 20 3d  ,..        GAC =
0860: 20 30 78 31 2c 0d 0a 20 20 20 20 20 20 20 20 41   0x1,..        A
0870: 73 73 65 6d 62 6c 79 46 6f 6c 64 65 72 73 20 3d  ssemblyFolders =
0880: 20 30 78 32 2c 0d 0a 20 20 20 20 20 20 20 20 44   0x2,..        D
0890: 62 50 72 6f 76 69 64 65 72 46 61 63 74 6f 72 79  bProviderFactory
08a0: 20 3d 20 30 78 34 2c 0d 0a 20 20 20 20 20 20 20   = 0x4,..       
08b0: 20 56 73 50 61 63 6b 61 67 65 20 3d 20 30 78 38   VsPackage = 0x8
08c0: 2c 0d 0a 20 20 20 20 20 20 20 20 56 73 44 61 74  ,..        VsDat
08d0: 61 53 6f 75 72 63 65 20 3d 20 30 78 31 30 2c 0d  aSource = 0x10,.
08e0: 0a 20 20 20 20 20 20 20 20 56 73 44 61 74 61 50  .        VsDataP
08f0: 72 6f 76 69 64 65 72 20 3d 20 30 78 32 30 2c 0d  rovider = 0x20,.
0900: 0a 20 20 20 20 20 20 20 20 46 72 61 6d 65 77 6f  .        Framewo
0910: 72 6b 20 3d 20 47 41 43 20 7c 20 41 73 73 65 6d  rk = GAC | Assem
0920: 62 6c 79 46 6f 6c 64 65 72 73 20 7c 20 44 62 50  blyFolders | DbP
0930: 72 6f 76 69 64 65 72 46 61 63 74 6f 72 79 2c 0d  roviderFactory,.
0940: 0a 20 20 20 20 20 20 20 20 56 73 20 3d 20 56 73  .        Vs = Vs
0950: 50 61 63 6b 61 67 65 20 7c 20 56 73 44 61 74 61  Package | VsData
0960: 53 6f 75 72 63 65 20 7c 20 56 73 44 61 74 61 50  Source | VsDataP
0970: 72 6f 76 69 64 65 72 2c 0d 0a 20 20 20 20 20 20  rovider,..      
0980: 20 20 41 6c 6c 20 3d 20 46 72 61 6d 65 77 6f 72    All = Framewor
0990: 6b 20 7c 20 56 73 2c 0d 0a 20 20 20 20 20 20 20  k | Vs,..       
09a0: 20 41 6c 6c 45 78 63 65 70 74 47 41 43 20 3d 20   AllExceptGAC = 
09b0: 41 6c 6c 20 26 20 7e 47 41 43 2c 0d 0a 20 20 20  All & ~GAC,..   
09c0: 20 20 20 20 20 44 65 66 61 75 6c 74 20 3d 20 41       Default = A
09d0: 6c 6c 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  ll..    }....   
09e0: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
09f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0a00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0a10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0a20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
0a30: 20 20 20 20 5b 46 6c 61 67 73 28 29 5d 0d 0a 20      [Flags()].. 
0a40: 20 20 20 70 75 62 6c 69 63 20 65 6e 75 6d 20 54     public enum T
0a50: 72 61 63 65 50 72 69 6f 72 69 74 79 0d 0a 20 20  racePriority..  
0a60: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 4e 6f 6e    {..        Non
0a70: 65 20 3d 20 30 78 30 2c 0d 0a 20 20 20 20 20 20  e = 0x0,..      
0a80: 20 20 4c 6f 77 65 73 74 20 3d 20 30 78 31 2c 0d    Lowest = 0x1,.
0a90: 0a 20 20 20 20 20 20 20 20 4c 6f 77 65 72 20 3d  .        Lower =
0aa0: 20 30 78 32 2c 0d 0a 20 20 20 20 20 20 20 20 4c   0x2,..        L
0ab0: 6f 77 20 3d 20 30 78 34 2c 0d 0a 20 20 20 20 20  ow = 0x4,..     
0ac0: 20 20 20 4d 65 64 69 75 6d 4c 6f 77 20 3d 20 30     MediumLow = 0
0ad0: 78 38 2c 0d 0a 20 20 20 20 20 20 20 20 4d 65 64  x8,..        Med
0ae0: 69 75 6d 20 3d 20 30 78 31 30 2c 0d 0a 20 20 20  ium = 0x10,..   
0af0: 20 20 20 20 20 4d 65 64 69 75 6d 48 69 67 68 20       MediumHigh 
0b00: 3d 20 30 78 32 30 2c 0d 0a 20 20 20 20 20 20 20  = 0x20,..       
0b10: 20 48 69 67 68 20 3d 20 30 78 34 30 2c 0d 0a 20   High = 0x40,.. 
0b20: 20 20 20 20 20 20 20 48 69 67 68 65 72 20 3d 20         Higher = 
0b30: 30 78 38 30 2c 0d 0a 20 20 20 20 20 20 20 20 48  0x80,..        H
0b40: 69 67 68 65 73 74 20 3d 20 30 78 31 30 30 2c 0d  ighest = 0x100,.
0b50: 0a 20 20 20 20 20 20 20 20 44 65 66 61 75 6c 74  .        Default
0b60: 20 3d 20 4d 65 64 69 75 6d 0d 0a 20 20 20 20 7d   = Medium..    }
0b70: 0d 0a 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e  ..    #endregion
0b80: 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f  ....    ////////
0b90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0ba0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0bb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0bc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0bd0: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 23 72 65 67 69  ///....    #regi
0be0: 6f 6e 20 49 6e 73 74 61 6c 6c 65 72 20 43 6c 61  on Installer Cla
0bf0: 73 73 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ss..    internal
0c00: 20 73 74 61 74 69 63 20 63 6c 61 73 73 20 49 6e   static class In
0c10: 73 74 61 6c 6c 65 72 0d 0a 20 20 20 20 7b 0d 0a  staller..    {..
0c20: 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20          #region 
0c30: 50 72 69 76 61 74 65 20 48 65 6c 70 65 72 20 43  Private Helper C
0c40: 6c 61 73 73 65 73 0d 0a 20 20 20 20 20 20 20 20  lasses..        
0c50: 23 72 65 67 69 6f 6e 20 41 6e 79 50 61 69 72 20  #region AnyPair 
0c60: 43 6c 61 73 73 0d 0a 20 20 20 20 20 20 20 20 70  Class..        p
0c70: 72 69 76 61 74 65 20 73 65 61 6c 65 64 20 63 6c  rivate sealed cl
0c80: 61 73 73 20 41 6e 79 50 61 69 72 3c 54 31 2c 20  ass AnyPair<T1, 
0c90: 54 32 3e 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  T2>..        {..
0ca0: 20 20 20 20 20 20 20 20 20 20 20 20 23 72 65 67              #reg
0cb0: 69 6f 6e 20 50 75 62 6c 69 63 20 43 6f 6e 73 74  ion Public Const
0cc0: 72 75 63 74 6f 72 73 0d 0a 20 20 20 20 20 20 20  ructors..       
0cd0: 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
0ce0: 20 20 20 20 20 2f 2f 20 57 41 52 4e 49 4e 47 3a       // WARNING:
0cf0: 20 54 68 69 73 20 63 6f 6e 73 74 72 75 63 74 6f   This constructo
0d00: 72 20 70 72 6f 64 75 63 65 73 20 61 6e 20 69 6d  r produces an im
0d10: 6d 75 74 61 62 6c 65 20 22 65 6d 70 74 79 22 20  mutable "empty" 
0d20: 70 61 69 72 0d 0a 20 20 20 20 20 20 20 20 20 20  pair..          
0d30: 20 20 2f 2f 20 20 20 20 20 20 20 20 20 20 6f 62    //          ob
0d40: 6a 65 63 74 2e 0d 0a 20 20 20 20 20 20 20 20 20  ject...         
0d50: 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
0d60: 20 20 20 70 75 62 6c 69 63 20 41 6e 79 50 61 69     public AnyPai
0d70: 72 28 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  r()..           
0d80: 20 20 20 20 20 3a 20 62 61 73 65 28 29 0d 0a 20       : base().. 
0d90: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
0da0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
0db0: 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20   do nothing...  
0dc0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
0dd0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
0de0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0df0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0e00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0e10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
0e20: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
0e30: 62 6c 69 63 20 41 6e 79 50 61 69 72 28 54 31 20  blic AnyPair(T1 
0e40: 78 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  x)..            
0e50: 20 20 20 20 3a 20 74 68 69 73 28 29 0d 0a 20 20      : this()..  
0e60: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
0e70: 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69               thi
0e80: 73 2e 78 20 3d 20 78 3b 0d 0a 20 20 20 20 20 20  s.x = x;..      
0e90: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
0ea0: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
0eb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0ec0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0ed0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0ee0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
0ef0: 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
0f00: 20 41 6e 79 50 61 69 72 28 54 31 20 78 2c 20 54   AnyPair(T1 x, T
0f10: 32 20 79 29 0d 0a 20 20 20 20 20 20 20 20 20 20  2 y)..          
0f20: 20 20 20 20 20 20 3a 20 74 68 69 73 28 78 29 0d        : this(x).
0f30: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
0f40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0f50: 74 68 69 73 2e 79 20 3d 20 79 3b 0d 0a 20 20 20  this.y = y;..   
0f60: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
0f70: 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
0f80: 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  on....          
0f90: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
0fa0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0fb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0fc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0fd0: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
0fe0: 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 75 62       #region Pub
0ff0: 6c 69 63 20 50 72 6f 70 65 72 74 69 65 73 0d 0a  lic Properties..
1000: 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
1010: 61 74 65 20 54 31 20 78 3b 0d 0a 20 20 20 20 20  ate T1 x;..     
1020: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 54 31         public T1
1030: 20 58 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   X..            
1040: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
1050: 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20     get { return 
1060: 78 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  x; }..          
1070: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
1080: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
1090: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10c0: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
10d0: 20 20 20 20 20 20 70 72 69 76 61 74 65 20 54 32        private T2
10e0: 20 79 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20   y;..           
10f0: 20 70 75 62 6c 69 63 20 54 32 20 59 0d 0a 20 20   public T2 Y..  
1100: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
1110: 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74               get
1120: 20 7b 20 72 65 74 75 72 6e 20 79 3b 20 7d 0d 0a   { return y; }..
1130: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
1140: 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 72             #endr
1150: 65 67 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20 7d  egion..        }
1160: 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65  ..        #endre
1170: 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20  gion....        
1180: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1190: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11c0: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
11d0: 20 20 20 23 72 65 67 69 6f 6e 20 54 72 61 63 65     #region Trace
11e0: 4f 70 73 20 43 6c 61 73 73 0d 0a 20 20 20 20 20  Ops Class..     
11f0: 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69     private stati
1200: 63 20 63 6c 61 73 73 20 54 72 61 63 65 4f 70 73  c class TraceOps
1210: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
1220: 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e           #region
1230: 20 50 72 69 76 61 74 65 20 43 6f 6e 73 74 61 6e   Private Constan
1240: 74 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ts..            
1250: 70 72 69 76 61 74 65 20 63 6f 6e 73 74 20 73 74  private const st
1260: 72 69 6e 67 20 44 65 66 61 75 6c 74 44 65 62 75  ring DefaultDebu
1270: 67 46 6f 72 6d 61 74 20 3d 20 22 23 7b 30 7d 20  gFormat = "#{0} 
1280: 40 20 7b 31 7d 3a 20 7b 32 7d 22 3b 0d 0a 20 20  @ {1}: {2}";..  
1290: 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
12a0: 65 20 63 6f 6e 73 74 20 73 74 72 69 6e 67 20 44  e const string D
12b0: 65 66 61 75 6c 74 54 72 61 63 65 46 6f 72 6d 61  efaultTraceForma
12c0: 74 20 3d 20 22 23 7b 30 7d 20 40 20 7b 31 7d 3a  t = "#{0} @ {1}:
12d0: 20 7b 32 7d 22 3b 0d 0a 0d 0a 20 20 20 20 20 20   {2}";....      
12e0: 20 20 20 20 20 20 70 72 69 76 61 74 65 20 63 6f        private co
12f0: 6e 73 74 20 73 74 72 69 6e 67 20 49 73 6f 38 36  nst string Iso86
1300: 30 31 44 61 74 65 54 69 6d 65 4f 75 74 70 75 74  01DateTimeOutput
1310: 46 6f 72 6d 61 74 20 3d 0d 0a 20 20 20 20 20 20  Format =..      
1320: 20 20 20 20 20 20 20 20 20 20 22 79 79 79 79 2e            "yyyy.
1330: 4d 4d 2e 64 64 54 48 48 3a 6d 6d 3a 73 73 2e 66  MM.ddTHH:mm:ss.f
1340: 66 66 66 66 66 66 22 3b 0d 0a 20 20 20 20 20 20  ffffff";..      
1350: 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
1360: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1370: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1380: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1390: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13b0: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
13c0: 20 20 20 23 72 65 67 69 6f 6e 20 50 72 69 76 61     #region Priva
13d0: 74 65 20 53 74 61 74 69 63 20 44 61 74 61 0d 0a  te Static Data..
13e0: 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
13f0: 61 74 65 20 73 74 61 74 69 63 20 6f 62 6a 65 63  ate static objec
1400: 74 20 73 79 6e 63 52 6f 6f 74 20 3d 20 6e 65 77  t syncRoot = new
1410: 20 6f 62 6a 65 63 74 28 29 3b 0d 0a 20 20 20 20   object();..    
1420: 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
1430: 73 74 61 74 69 63 20 6c 6f 6e 67 20 6e 65 78 74  static long next
1440: 44 65 62 75 67 49 64 3b 0d 0a 20 20 20 20 20 20  DebugId;..      
1450: 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74        private st
1460: 61 74 69 63 20 6c 6f 6e 67 20 6e 65 78 74 54 72  atic long nextTr
1470: 61 63 65 49 64 3b 0d 0a 20 20 20 20 20 20 20 20  aceId;..        
1480: 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74      private stat
1490: 69 63 20 49 4c 69 73 74 3c 54 72 61 63 65 4c 69  ic IList<TraceLi
14a0: 73 74 65 6e 65 72 3e 20 64 65 62 75 67 4c 69 73  stener> debugLis
14b0: 74 65 6e 65 72 73 3b 0d 0a 20 20 20 20 20 20 20  teners;..       
14c0: 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61       private sta
14d0: 74 69 63 20 54 72 61 63 65 50 72 69 6f 72 69 74  tic TracePriorit
14e0: 79 20 64 65 62 75 67 50 72 69 6f 72 69 74 79 20  y debugPriority 
14f0: 3d 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e  = TracePriority.
1500: 44 65 66 61 75 6c 74 3b 0d 0a 20 20 20 20 20 20  Default;..      
1510: 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74        private st
1520: 61 74 69 63 20 54 72 61 63 65 50 72 69 6f 72 69  atic TracePriori
1530: 74 79 20 74 72 61 63 65 50 72 69 6f 72 69 74 79  ty tracePriority
1540: 20 3d 20 54 72 61 63 65 50 72 69 6f 72 69 74 79   = TracePriority
1550: 2e 44 65 66 61 75 6c 74 3b 0d 0a 20 20 20 20 20  .Default;..     
1560: 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
1570: 74 61 74 69 63 20 73 74 72 69 6e 67 20 64 65 62  tatic string deb
1580: 75 67 46 6f 72 6d 61 74 20 3d 20 44 65 66 61 75  ugFormat = Defau
1590: 6c 74 44 65 62 75 67 46 6f 72 6d 61 74 3b 0d 0a  ltDebugFormat;..
15a0: 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
15b0: 61 74 65 20 73 74 61 74 69 63 20 73 74 72 69 6e  ate static strin
15c0: 67 20 74 72 61 63 65 46 6f 72 6d 61 74 20 3d 20  g traceFormat = 
15d0: 44 65 66 61 75 6c 74 54 72 61 63 65 46 6f 72 6d  DefaultTraceForm
15e0: 61 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at;..           
15f0: 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20   #endregion.... 
1600: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
1610: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1620: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1630: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1640: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
1650: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 72  ..            #r
1660: 65 67 69 6f 6e 20 50 75 62 6c 69 63 20 53 74 61  egion Public Sta
1670: 74 69 63 20 50 72 6f 70 65 72 74 69 65 73 0d 0a  tic Properties..
1680: 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
1690: 69 63 20 73 74 61 74 69 63 20 54 72 61 63 65 50  ic static TraceP
16a0: 72 69 6f 72 69 74 79 20 44 65 62 75 67 50 72 69  riority DebugPri
16b0: 6f 72 69 74 79 0d 0a 20 20 20 20 20 20 20 20 20  ority..         
16c0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
16d0: 20 20 20 20 20 20 67 65 74 20 7b 20 6c 6f 63 6b        get { lock
16e0: 20 28 73 79 6e 63 52 6f 6f 74 29 20 7b 20 72 65   (syncRoot) { re
16f0: 74 75 72 6e 20 64 65 62 75 67 50 72 69 6f 72 69  turn debugPriori
1700: 74 79 3b 20 7d 20 7d 0d 0a 20 20 20 20 20 20 20  ty; } }..       
1710: 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 6c           set { l
1720: 6f 63 6b 20 28 73 79 6e 63 52 6f 6f 74 29 20 7b  ock (syncRoot) {
1730: 20 64 65 62 75 67 50 72 69 6f 72 69 74 79 20 3d   debugPriority =
1740: 20 76 61 6c 75 65 3b 20 7d 20 7d 0d 0a 20 20 20   value; } }..   
1750: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
1760: 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
1770: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1780: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1790: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
17b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
17c0: 6c 69 63 20 73 74 61 74 69 63 20 54 72 61 63 65  lic static Trace
17d0: 50 72 69 6f 72 69 74 79 20 54 72 61 63 65 50 72  Priority TracePr
17e0: 69 6f 72 69 74 79 0d 0a 20 20 20 20 20 20 20 20  iority..        
17f0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
1800: 20 20 20 20 20 20 20 67 65 74 20 7b 20 6c 6f 63         get { loc
1810: 6b 20 28 73 79 6e 63 52 6f 6f 74 29 20 7b 20 72  k (syncRoot) { r
1820: 65 74 75 72 6e 20 74 72 61 63 65 50 72 69 6f 72  eturn tracePrior
1830: 69 74 79 3b 20 7d 20 7d 0d 0a 20 20 20 20 20 20  ity; } }..      
1840: 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20            set { 
1850: 6c 6f 63 6b 20 28 73 79 6e 63 52 6f 6f 74 29 20  lock (syncRoot) 
1860: 7b 20 74 72 61 63 65 50 72 69 6f 72 69 74 79 20  { tracePriority 
1870: 3d 20 76 61 6c 75 65 3b 20 7d 20 7d 0d 0a 20 20  = value; } }..  
1880: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
1890: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
18a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
18e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
18f0: 62 6c 69 63 20 73 74 61 74 69 63 20 73 74 72 69  blic static stri
1900: 6e 67 20 44 65 62 75 67 46 6f 72 6d 61 74 0d 0a  ng DebugFormat..
1910: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
1920: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67                 g
1930: 65 74 20 7b 20 6c 6f 63 6b 20 28 73 79 6e 63 52  et { lock (syncR
1940: 6f 6f 74 29 20 7b 20 72 65 74 75 72 6e 20 64 65  oot) { return de
1950: 62 75 67 46 6f 72 6d 61 74 3b 20 7d 20 7d 0d 0a  bugFormat; } }..
1960: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1970: 73 65 74 20 7b 20 6c 6f 63 6b 20 28 73 79 6e 63  set { lock (sync
1980: 52 6f 6f 74 29 20 7b 20 64 65 62 75 67 46 6f 72  Root) { debugFor
1990: 6d 61 74 20 3d 20 76 61 6c 75 65 3b 20 7d 20 7d  mat = value; } }
19a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
19b0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
19c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a00: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
1a10: 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20    public static 
1a20: 73 74 72 69 6e 67 20 54 72 61 63 65 46 6f 72 6d  string TraceForm
1a30: 61 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  at..            
1a40: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
1a50: 20 20 20 67 65 74 20 7b 20 6c 6f 63 6b 20 28 73     get { lock (s
1a60: 79 6e 63 52 6f 6f 74 29 20 7b 20 72 65 74 75 72  yncRoot) { retur
1a70: 6e 20 74 72 61 63 65 46 6f 72 6d 61 74 3b 20 7d  n traceFormat; }
1a80: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
1a90: 20 20 20 20 73 65 74 20 7b 20 6c 6f 63 6b 20 28      set { lock (
1aa0: 73 79 6e 63 52 6f 6f 74 29 20 7b 20 74 72 61 63  syncRoot) { trac
1ab0: 65 46 6f 72 6d 61 74 20 3d 20 76 61 6c 75 65 3b  eFormat = value;
1ac0: 20 7d 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20   } }..          
1ad0: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
1ae0: 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20   #endregion.... 
1af0: 20 20 20 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 0d 0a  //////////////..
1b40: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 72  ..            #r
1b50: 65 67 69 6f 6e 20 49 6e 74 65 72 61 63 74 69 76  egion Interactiv
1b60: 65 20 53 75 70 70 6f 72 74 20 4d 65 74 68 6f 64  e Support Method
1b70: 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b  s..            [
1b80: 4d 65 74 68 6f 64 49 6d 70 6c 28 4d 65 74 68 6f  MethodImpl(Metho
1b90: 64 49 6d 70 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49  dImplOptions.NoI
1ba0: 6e 6c 69 6e 69 6e 67 29 5d 0d 0a 20 20 20 20 20  nlining)]..     
1bb0: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74         public st
1bc0: 61 74 69 63 20 44 69 61 6c 6f 67 52 65 73 75 6c  atic DialogResul
1bd0: 74 20 53 68 6f 77 4d 65 73 73 61 67 65 28 0d 0a  t ShowMessage(..
1be0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bf0: 54 72 61 63 65 50 72 69 6f 72 69 74 79 20 74 72  TracePriority tr
1c00: 61 63 65 50 72 69 6f 72 69 74 79 2c 0d 0a 20 20  acePriority,..  
1c10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
1c20: 61 63 65 43 61 6c 6c 62 61 63 6b 20 64 65 62 75  aceCallback debu
1c30: 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20  gCallback,..    
1c40: 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
1c50: 65 43 61 6c 6c 62 61 63 6b 20 74 72 61 63 65 43  eCallback traceC
1c60: 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20  allback,..      
1c70: 20 20 20 20 20 20 20 20 20 20 41 73 73 65 6d 62            Assemb
1c80: 6c 79 20 61 73 73 65 6d 62 6c 79 2c 0d 0a 20 20  ly assembly,..  
1c90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
1ca0: 72 69 6e 67 20 6d 65 73 73 61 67 65 2c 0d 0a 20  ring message,.. 
1cb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
1cc0: 74 72 69 6e 67 20 63 61 74 65 67 6f 72 79 2c 0d  tring category,.
1cd0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1ce0: 20 4d 65 73 73 61 67 65 42 6f 78 42 75 74 74 6f   MessageBoxButto
1cf0: 6e 73 20 62 75 74 74 6f 6e 73 2c 0d 0a 20 20 20  ns buttons,..   
1d00: 20 20 20 20 20 20 20 20 20 20 20 20 20 4d 65 73               Mes
1d10: 73 61 67 65 42 6f 78 49 63 6f 6e 20 69 63 6f 6e  sageBoxIcon icon
1d20: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1d30: 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20    )..           
1d40: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
1d50: 20 20 20 20 44 69 61 6c 6f 67 52 65 73 75 6c 74      DialogResult
1d60: 20 72 65 73 75 6c 74 20 3d 20 44 69 61 6c 6f 67   result = Dialog
1d70: 52 65 73 75 6c 74 2e 4f 4b 3b 0d 0a 0d 0a 20 20  Result.OK;....  
1d80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 44 65                De
1d90: 62 75 67 41 6e 64 54 72 61 63 65 28 74 72 61 63  bugAndTrace(trac
1da0: 65 50 72 69 6f 72 69 74 79 2c 0d 0a 20 20 20 20  ePriority,..    
1db0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dc0: 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74  debugCallback, t
1dd0: 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 6d 65  raceCallback, me
1de0: 73 73 61 67 65 2c 20 63 61 74 65 67 6f 72 79 29  ssage, category)
1df0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
1e00: 20 20 20 20 20 69 66 20 28 53 79 73 74 65 6d 49       if (SystemI
1e10: 6e 66 6f 72 6d 61 74 69 6f 6e 2e 55 73 65 72 49  nformation.UserI
1e20: 6e 74 65 72 61 63 74 69 76 65 29 0d 0a 20 20 20  nteractive)..   
1e30: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
1e40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e50: 20 20 20 20 73 74 72 69 6e 67 20 74 69 74 6c 65      string title
1e60: 20 3d 20 47 65 74 41 73 73 65 6d 62 6c 79 54 69   = GetAssemblyTi
1e70: 74 6c 65 28 61 73 73 65 6d 62 6c 79 29 3b 0d 0a  tle(assembly);..
1e80: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1e90: 20 20 20 20 20 20 69 66 20 28 74 69 74 6c 65 20        if (title 
1ea0: 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
1eb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ec0: 20 20 74 69 74 6c 65 20 3d 20 41 70 70 6c 69 63    title = Applic
1ed0: 61 74 69 6f 6e 2e 50 72 6f 64 75 63 74 4e 61 6d  ation.ProductNam
1ee0: 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
1ef0: 20 20 20 20 20 20 20 20 20 20 72 65 73 75 6c 74            result
1f00: 20 3d 20 4d 65 73 73 61 67 65 42 6f 78 2e 53 68   = MessageBox.Sh
1f10: 6f 77 28 6d 65 73 73 61 67 65 2c 20 74 69 74 6c  ow(message, titl
1f20: 65 2c 20 62 75 74 74 6f 6e 73 2c 20 69 63 6f 6e  e, buttons, icon
1f30: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
1f40: 20 20 20 20 20 20 20 20 20 20 44 65 62 75 67 41            DebugA
1f50: 6e 64 54 72 61 63 65 28 74 72 61 63 65 50 72 69  ndTrace(tracePri
1f60: 6f 72 69 74 79 2c 0d 0a 20 20 20 20 20 20 20 20  ority,..        
1f70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f80: 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74  debugCallback, t
1f90: 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74  raceCallback, St
1fa0: 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
1fb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fc0: 20 20 20 20 20 20 22 55 73 65 72 20 63 68 6f 69        "User choi
1fd0: 63 65 20 6f 66 20 7b 30 7d 2e 22 2c 20 46 6f 72  ce of {0}.", For
1fe0: 44 69 73 70 6c 61 79 28 72 65 73 75 6c 74 29 29  Display(result))
1ff0: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
2000: 20 20 20 20 20 20 20 20 20 20 20 63 61 74 65 67             categ
2010: 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
2020: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
2030: 75 72 6e 20 72 65 73 75 6c 74 3b 0d 0a 20 20 20  urn result;..   
2040: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
2050: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2060: 20 20 44 65 62 75 67 41 6e 64 54 72 61 63 65 28    DebugAndTrace(
2070: 74 72 61 63 65 50 72 69 6f 72 69 74 79 2c 0d 0a  tracePriority,..
2080: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2090: 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63      debugCallbac
20a0: 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b  k, traceCallback
20b0: 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  , String.Format(
20c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
20d0: 20 20 20 20 20 20 22 44 65 66 61 75 6c 74 20 63        "Default c
20e0: 68 6f 69 63 65 20 6f 66 20 7b 30 7d 2e 22 2c 20  hoice of {0}.", 
20f0: 46 6f 72 44 69 73 70 6c 61 79 28 72 65 73 75 6c  ForDisplay(resul
2100: 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  t)),..          
2110: 20 20 20 20 20 20 20 20 20 20 63 61 74 65 67 6f            catego
2120: 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
2130: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 72          return r
2140: 65 73 75 6c 74 3b 0d 0a 20 20 20 20 20 20 20 20  esult;..        
2150: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
2160: 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
2170: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
2180: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2190: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21c0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
21d0: 23 72 65 67 69 6f 6e 20 54 72 61 63 69 6e 67 20  #region Tracing 
21e0: 53 75 70 70 6f 72 74 20 4d 65 74 68 6f 64 73 0d  Support Methods.
21f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
2200: 6c 69 63 20 73 74 61 74 69 63 20 76 6f 69 64 20  lic static void 
2210: 53 65 74 75 70 44 65 62 75 67 4c 69 73 74 65 6e  SetupDebugListen
2220: 65 72 73 28 29 0d 0a 20 20 20 20 20 20 20 20 20  ers()..         
2230: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
2240: 20 20 20 20 20 20 69 66 20 28 64 65 62 75 67 4c        if (debugL
2250: 69 73 74 65 6e 65 72 73 20 3d 3d 20 6e 75 6c 6c  isteners == null
2260: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
2270: 20 20 20 20 20 20 20 64 65 62 75 67 4c 69 73 74         debugList
2280: 65 6e 65 72 73 20 3d 20 6e 65 77 20 4c 69 73 74  eners = new List
2290: 3c 54 72 61 63 65 4c 69 73 74 65 6e 65 72 3e 28  <TraceListener>(
22a0: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
22b0: 20 20 20 20 20 20 64 65 62 75 67 4c 69 73 74 65        debugListe
22c0: 6e 65 72 73 2e 41 64 64 28 6e 65 77 20 43 6f 6e  ners.Add(new Con
22d0: 73 6f 6c 65 54 72 61 63 65 4c 69 73 74 65 6e 65  soleTraceListene
22e0: 72 28 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  r());..         
22f0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
2300: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
2310: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2320: 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20  ///////....     
2350: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74         public st
2360: 61 74 69 63 20 6c 6f 6e 67 20 4e 65 78 74 44 65  atic long NextDe
2370: 62 75 67 49 64 28 29 0d 0a 20 20 20 20 20 20 20  bugId()..       
2380: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
2390: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 49          return I
23a0: 6e 74 65 72 6c 6f 63 6b 65 64 2e 49 6e 63 72 65  nterlocked.Incre
23b0: 6d 65 6e 74 28 72 65 66 20 6e 65 78 74 44 65 62  ment(ref nextDeb
23c0: 75 67 49 64 29 3b 0d 0a 20 20 20 20 20 20 20 20  ugId);..        
23d0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
23e0: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
23f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2400: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2410: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2420: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
2430: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73          public s
2440: 74 61 74 69 63 20 6c 6f 6e 67 20 4e 65 78 74 54  tatic long NextT
2450: 72 61 63 65 49 64 28 29 0d 0a 20 20 20 20 20 20  raceId()..      
2460: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
2470: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
2480: 49 6e 74 65 72 6c 6f 63 6b 65 64 2e 49 6e 63 72  Interlocked.Incr
2490: 65 6d 65 6e 74 28 72 65 66 20 6e 65 78 74 54 72  ement(ref nextTr
24a0: 61 63 65 49 64 29 3b 0d 0a 20 20 20 20 20 20 20  aceId);..       
24b0: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
24c0: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
24d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2500: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
2510: 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
2520: 73 74 61 74 69 63 20 73 74 72 69 6e 67 20 54 69  static string Ti
2530: 6d 65 53 74 61 6d 70 28 44 61 74 65 54 69 6d 65  meStamp(DateTime
2540: 20 64 61 74 65 54 69 6d 65 29 0d 0a 20 20 20 20   dateTime)..    
2550: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
2560: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
2570: 6e 20 64 61 74 65 54 69 6d 65 2e 54 6f 53 74 72  n dateTime.ToStr
2580: 69 6e 67 28 49 73 6f 38 36 30 31 44 61 74 65 54  ing(Iso8601DateT
2590: 69 6d 65 4f 75 74 70 75 74 46 6f 72 6d 61 74 29  imeOutputFormat)
25a0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
25b0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
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 2f 2f 2f 2f 2f 2f  ////////////////
2600: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
2610: 20 20 20 5b 4d 65 74 68 6f 64 49 6d 70 6c 28 4d     [MethodImpl(M
2620: 65 74 68 6f 64 49 6d 70 6c 4f 70 74 69 6f 6e 73  ethodImplOptions
2630: 2e 4e 6f 49 6e 6c 69 6e 69 6e 67 29 5d 0d 0a 20  .NoInlining)].. 
2640: 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
2650: 74 65 20 73 74 61 74 69 63 20 73 74 72 69 6e 67  te static string
2660: 20 47 65 74 4d 65 74 68 6f 64 4e 61 6d 65 28 0d   GetMethodName(.
2670: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2680: 20 53 74 61 63 6b 54 72 61 63 65 20 73 74 61 63   StackTrace stac
2690: 6b 54 72 61 63 65 2c 0d 0a 20 20 20 20 20 20 20  kTrace,..       
26a0: 20 20 20 20 20 20 20 20 20 69 6e 74 20 6c 65 76           int lev
26b0: 65 6c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  el..            
26c0: 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20      )..         
26d0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
26e0: 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20        try..     
26f0: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
2700: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2710: 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
2720: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54            // NOT
2730: 45 3a 20 49 66 20 61 20 76 61 6c 69 64 20 73 74  E: If a valid st
2740: 61 63 6b 20 74 72 61 63 65 20 77 61 73 20 6e 6f  ack trace was no
2750: 74 20 73 75 70 70 6c 69 65 64 20 62 79 20 74 68  t supplied by th
2760: 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..             
2770: 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
2780: 63 61 6c 6c 65 72 2c 20 63 72 65 61 74 65 20 6f  caller, create o
2790: 6e 65 20 6e 6f 77 20 62 61 73 65 64 20 6f 6e 20  ne now based on 
27a0: 74 68 65 20 63 75 72 72 65 6e 74 0d 0a 20 20 20  the current..   
27b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27c0: 20 2f 2f 20 20 20 20 20 20 20 65 78 65 63 75 74   //       execut
27d0: 69 6f 6e 20 73 74 61 63 6b 2e 0d 0a 20 20 20 20  ion stack...    
27e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27f0: 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
2800: 20 20 20 20 20 20 20 20 69 66 20 28 73 74 61 63          if (stac
2810: 6b 54 72 61 63 65 20 3d 3d 20 6e 75 6c 6c 29 0d  kTrace == null).
2820: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2830: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
2840: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2850: 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
2860: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e              // N
2870: 4f 54 45 3a 20 47 72 61 62 20 74 68 65 20 63 75  OTE: Grab the cu
2880: 72 72 65 6e 74 20 65 78 65 63 75 74 69 6f 6e 20  rrent execution 
2890: 73 74 61 63 6b 2e 0d 0a 20 20 20 20 20 20 20 20  stack...        
28a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28b0: 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
28c0: 20 20 20 20 20 20 20 20 20 20 20 20 73 74 61 63              stac
28d0: 6b 54 72 61 63 65 20 3d 20 6e 65 77 20 53 74 61  kTrace = new Sta
28e0: 63 6b 54 72 61 63 65 28 29 3b 0d 0a 0d 0a 20 20  ckTrace();....  
28f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2900: 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
2910: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2920: 20 20 2f 2f 20 4e 4f 54 45 3a 20 41 6c 77 61 79    // NOTE: Alway
2930: 73 20 73 6b 69 70 20 74 68 69 73 20 63 61 6c 6c  s skip this call
2940: 20 66 72 61 6d 65 20 77 68 65 6e 20 77 65 20 63   frame when we c
2950: 61 70 74 75 72 65 0d 0a 20 20 20 20 20 20 20 20  apture..        
2960: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2970: 2f 2f 20 20 20 20 20 20 20 74 68 65 20 73 74 61  //       the sta
2980: 63 6b 20 74 72 61 63 65 2e 0d 0a 20 20 20 20 20  ck trace...     
2990: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29a0: 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
29b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6c                 l
29c0: 65 76 65 6c 2b 2b 3b 0d 0a 20 20 20 20 20 20 20  evel++;..       
29d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
29e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
29f0: 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
2a00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
2a10: 20 4e 4f 54 45 3a 20 47 65 74 20 74 68 65 20 73   NOTE: Get the s
2a20: 70 65 63 69 66 69 65 64 20 73 74 61 63 6b 20 66  pecified stack f
2a30: 72 61 6d 65 20 28 61 6c 77 61 79 73 20 61 64 64  rame (always add
2a40: 20 6f 6e 65 20 74 6f 0d 0a 20 20 20 20 20 20 20   one to..       
2a50: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
2a60: 20 20 20 20 20 20 73 6b 69 70 20 74 68 69 73 20        skip this 
2a70: 6d 65 74 68 6f 64 29 2e 0d 0a 20 20 20 20 20 20  method)...      
2a80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
2a90: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2aa0: 20 20 20 20 20 20 53 74 61 63 6b 46 72 61 6d 65        StackFrame
2ab0: 20 73 74 61 63 6b 46 72 61 6d 65 20 3d 20 73 74   stackFrame = st
2ac0: 61 63 6b 54 72 61 63 65 2e 47 65 74 46 72 61 6d  ackTrace.GetFram
2ad0: 65 28 6c 65 76 65 6c 29 3b 0d 0a 0d 0a 20 20 20  e(level);....   
2ae0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2af0: 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
2b00: 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45           // NOTE
2b10: 3a 20 47 65 74 20 74 68 65 20 6d 65 74 68 6f 64  : Get the method
2b20: 20 66 6f 72 20 74 68 65 20 73 74 61 63 6b 20 66   for the stack f
2b30: 72 61 6d 65 2e 0d 0a 20 20 20 20 20 20 20 20 20  rame...         
2b40: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
2b50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b60: 20 20 20 4d 65 74 68 6f 64 42 61 73 65 20 6d 65     MethodBase me
2b70: 74 68 6f 64 42 61 73 65 20 3d 20 73 74 61 63 6b  thodBase = stack
2b80: 46 72 61 6d 65 2e 47 65 74 4d 65 74 68 6f 64 28  Frame.GetMethod(
2b90: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
2ba0: 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
2bb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bc0: 20 20 2f 2f 20 4e 4f 54 45 3a 20 47 65 74 20 74    // NOTE: Get t
2bd0: 68 65 20 74 79 70 65 20 66 6f 72 20 74 68 65 20  he type for the 
2be0: 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20  method...       
2bf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
2c00: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2c10: 20 20 20 20 20 54 79 70 65 20 74 79 70 65 20 3d       Type type =
2c20: 20 6d 65 74 68 6f 64 42 61 73 65 2e 44 65 63 6c   methodBase.Decl
2c30: 61 72 69 6e 67 54 79 70 65 3b 0d 0a 0d 0a 20 20  aringType;....  
2c40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c50: 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
2c60: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54            // NOT
2c70: 45 3a 20 47 65 74 20 74 68 65 20 6e 61 6d 65 20  E: Get the name 
2c80: 6f 66 20 74 68 65 20 6d 65 74 68 6f 64 2e 0d 0a  of the method...
2c90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ca0: 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
2cb0: 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
2cc0: 6e 67 20 6e 61 6d 65 20 3d 20 6d 65 74 68 6f 64  ng name = method
2cd0: 42 61 73 65 2e 4e 61 6d 65 3b 0d 0a 0d 0a 20 20  Base.Name;....  
2ce0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cf0: 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
2d00: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54            // NOT
2d10: 45 3a 20 52 65 74 75 72 6e 20 74 68 65 20 70 72  E: Return the pr
2d20: 6f 70 65 72 6c 79 20 66 6f 72 6d 61 74 74 65 64  operly formatted
2d30: 20 72 65 73 75 6c 74 2e 0d 0a 20 20 20 20 20 20   result...      
2d40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
2d50: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2d60: 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 74 72        return Str
2d70: 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
2d80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d90: 20 20 20 20 20 22 7b 30 7d 7b 31 7d 7b 32 7d 22       "{0}{1}{2}"
2da0: 2c 20 74 79 70 65 2e 4e 61 6d 65 2c 20 54 79 70  , type.Name, Typ
2db0: 65 2e 44 65 6c 69 6d 69 74 65 72 2c 20 6e 61 6d  e.Delimiter, nam
2dc0: 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e);..           
2dd0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
2de0: 20 20 20 20 20 20 20 20 63 61 74 63 68 0d 0a 20          catch.. 
2df0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
2e00: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2e10: 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68        // do noth
2e20: 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  ing...          
2e30: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
2e40: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
2e50: 6e 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20  n null;..       
2e60: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
2e70: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
2e80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20  /////////....   
2ec0: 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
2ed0: 73 74 61 74 69 63 20 76 6f 69 64 20 44 65 62 75  static void Debu
2ee0: 67 43 6f 72 65 28 0d 0a 20 20 20 20 20 20 20 20  gCore(..        
2ef0: 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6d          string m
2f00: 65 73 73 61 67 65 2c 0d 0a 20 20 20 20 20 20 20  essage,..       
2f10: 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
2f20: 63 61 74 65 67 6f 72 79 0d 0a 20 20 20 20 20 20  category..      
2f30: 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
2f40: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
2f50: 20 20 20 20 20 20 20 20 20 20 20 20 6c 6f 63 6b              lock
2f60: 20 28 73 79 6e 63 52 6f 6f 74 29 0d 0a 20 20 20   (syncRoot)..   
2f70: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
2f80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f90: 20 20 20 20 69 66 20 28 64 65 62 75 67 4c 69 73      if (debugLis
2fa0: 74 65 6e 65 72 73 20 21 3d 20 6e 75 6c 6c 29 0d  teners != null).
2fb0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2fc0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
2fd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fe0: 66 6f 72 65 61 63 68 20 28 54 72 61 63 65 4c 69  foreach (TraceLi
2ff0: 73 74 65 6e 65 72 20 6c 69 73 74 65 6e 65 72 20  stener listener 
3000: 69 6e 20 64 65 62 75 67 4c 69 73 74 65 6e 65 72  in debugListener
3010: 73 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  s)..            
3020: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
3030: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3040: 20 20 20 20 20 20 20 20 20 20 20 6c 69 73 74 65             liste
3050: 6e 65 72 2e 57 72 69 74 65 4c 69 6e 65 28 6d 65  ner.WriteLine(me
3060: 73 73 61 67 65 2c 20 63 61 74 65 67 6f 72 79 29  ssage, category)
3070: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
3080: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6c                 l
3090: 69 73 74 65 6e 65 72 2e 46 6c 75 73 68 28 29 3b  istener.Flush();
30a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
30b0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
30c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30d0: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
30e0: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
30f0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
3100: 20 20 20 20 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 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
3150: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74         public st
3160: 61 74 69 63 20 76 6f 69 64 20 54 72 61 63 65 43  atic void TraceC
3170: 6f 72 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ore(..          
3180: 20 20 20 20 20 20 73 74 72 69 6e 67 20 6d 65 73        string mes
3190: 73 61 67 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  sage,..         
31a0: 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 63 61         string ca
31b0: 74 65 67 6f 72 79 0d 0a 20 20 20 20 20 20 20 20  tegory..        
31c0: 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
31d0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
31e0: 20 20 20 20 20 20 20 20 20 20 6c 6f 63 6b 20 28            lock (
31f0: 73 79 6e 63 52 6f 6f 74 29 0d 0a 20 20 20 20 20  syncRoot)..     
3200: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
3210: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3220: 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
3230: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54            // NOT
3240: 45 3a 20 57 72 69 74 65 20 74 68 65 20 6d 65 73  E: Write the mes
3250: 73 61 67 65 20 74 6f 20 61 6c 6c 20 74 68 65 20  sage to all the 
3260: 61 63 74 69 76 65 20 74 72 61 63 65 0d 0a 20 20  active trace..  
3270: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3280: 20 20 2f 2f 20 20 20 20 20 20 20 6c 69 73 74 65    //       liste
3290: 6e 65 72 73 2e 0d 0a 20 20 20 20 20 20 20 20 20  ners...         
32a0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
32b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32c0: 20 20 20 54 72 61 63 65 2e 57 72 69 74 65 4c 69     Trace.WriteLi
32d0: 6e 65 28 6d 65 73 73 61 67 65 2c 20 63 61 74 65  ne(message, cate
32e0: 67 6f 72 79 29 3b 0d 0a 20 20 20 20 20 20 20 20  gory);..        
32f0: 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
3300: 65 2e 46 6c 75 73 68 28 29 3b 0d 0a 20 20 20 20  e.Flush();..    
3310: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
3320: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
3330: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
3340: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3350: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3360: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3370: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
3380: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b  ...            [
3390: 4d 65 74 68 6f 64 49 6d 70 6c 28 4d 65 74 68 6f  MethodImpl(Metho
33a0: 64 49 6d 70 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49  dImplOptions.NoI
33b0: 6e 6c 69 6e 69 6e 67 29 5d 0d 0a 20 20 20 20 20  nlining)]..     
33c0: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74         public st
33d0: 61 74 69 63 20 73 74 72 69 6e 67 20 44 65 62 75  atic string Debu
33e0: 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 20 20 20  gAndTrace(..    
33f0: 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
3400: 65 50 72 69 6f 72 69 74 79 20 74 72 61 63 65 50  ePriority traceP
3410: 72 69 6f 72 69 74 79 2c 0d 0a 20 20 20 20 20 20  riority,..      
3420: 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 43            TraceC
3430: 61 6c 6c 62 61 63 6b 20 64 65 62 75 67 43 61 6c  allback debugCal
3440: 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20  lback,..        
3450: 20 20 20 20 20 20 20 20 54 72 61 63 65 43 61 6c          TraceCal
3460: 6c 62 61 63 6b 20 74 72 61 63 65 43 61 6c 6c 62  lback traceCallb
3470: 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ack,..          
3480: 20 20 20 20 20 20 45 78 63 65 70 74 69 6f 6e 20        Exception 
3490: 65 78 63 65 70 74 69 6f 6e 2c 0d 0a 20 20 20 20  exception,..    
34a0: 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
34b0: 6e 67 20 63 61 74 65 67 6f 72 79 0d 0a 20 20 20  ng category..   
34c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a               )..
34d0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
34e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
34f0: 66 20 28 65 78 63 65 70 74 69 6f 6e 20 21 3d 20  f (exception != 
3500: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
3510: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
3520: 6e 20 44 65 62 75 67 41 6e 64 54 72 61 63 65 28  n DebugAndTrace(
3530: 74 72 61 63 65 50 72 69 6f 72 69 74 79 2c 20 64  tracePriority, d
3540: 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20  ebugCallback,.. 
3550: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3560: 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c         traceCall
3570: 62 61 63 6b 2c 20 6e 65 77 20 53 74 61 63 6b 54  back, new StackT
3580: 72 61 63 65 28 65 78 63 65 70 74 69 6f 6e 2c 20  race(exception, 
3590: 74 72 75 65 29 2c 20 30 2c 0d 0a 20 20 20 20 20  true), 0,..     
35a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35b0: 20 20 20 65 78 63 65 70 74 69 6f 6e 2e 54 6f 53     exception.ToS
35c0: 74 72 69 6e 67 28 29 2c 20 63 61 74 65 67 6f 72  tring(), categor
35d0: 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
35e0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 75         return nu
35f0: 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll;..           
3600: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
3610: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
3620: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3630: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3640: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3650: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
3660: 20 20 20 20 20 5b 4d 65 74 68 6f 64 49 6d 70 6c       [MethodImpl
3670: 28 4d 65 74 68 6f 64 49 6d 70 6c 4f 70 74 69 6f  (MethodImplOptio
3680: 6e 73 2e 4e 6f 49 6e 6c 69 6e 69 6e 67 29 5d 0d  ns.NoInlining)].
3690: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
36a0: 6c 69 63 20 73 74 61 74 69 63 20 73 74 72 69 6e  lic static strin
36b0: 67 20 44 65 62 75 67 41 6e 64 54 72 61 63 65 28  g DebugAndTrace(
36c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
36d0: 20 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 20    TracePriority 
36e0: 74 72 61 63 65 50 72 69 6f 72 69 74 79 2c 0d 0a  tracePriority,..
36f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3700: 54 72 61 63 65 43 61 6c 6c 62 61 63 6b 20 64 65  TraceCallback de
3710: 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20  bugCallback,..  
3720: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
3730: 61 63 65 43 61 6c 6c 62 61 63 6b 20 74 72 61 63  aceCallback trac
3740: 65 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20  eCallback,..    
3750: 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
3760: 6e 67 20 6d 65 73 73 61 67 65 2c 0d 0a 20 20 20  ng message,..   
3770: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72               str
3780: 69 6e 67 20 63 61 74 65 67 6f 72 79 0d 0a 20 20  ing category..  
3790: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d                ).
37a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
37b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37c0: 72 65 74 75 72 6e 20 44 65 62 75 67 41 6e 64 54  return DebugAndT
37d0: 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20  race(..         
37e0: 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
37f0: 50 72 69 6f 72 69 74 79 2c 20 64 65 62 75 67 43  Priority, debugC
3800: 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61  allback, traceCa
3810: 6c 6c 62 61 63 6b 2c 20 6e 75 6c 6c 2c 20 31 2c  llback, null, 1,
3820: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
3830: 20 20 20 20 20 20 6d 65 73 73 61 67 65 2c 20 63        message, c
3840: 61 74 65 67 6f 72 79 29 3b 0d 0a 20 20 20 20 20  ategory);..     
3850: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
3860: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
3870: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3880: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3890: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
38a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
38b0: 20 20 20 20 20 20 20 20 20 20 20 5b 4d 65 74 68             [Meth
38c0: 6f 64 49 6d 70 6c 28 4d 65 74 68 6f 64 49 6d 70  odImpl(MethodImp
38d0: 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e  lOptions.NoInlin
38e0: 69 6e 67 29 5d 0d 0a 20 20 20 20 20 20 20 20 20  ing)]..         
38f0: 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69     private stati
3900: 63 20 73 74 72 69 6e 67 20 44 65 62 75 67 41 6e  c string DebugAn
3910: 64 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20  dTrace(..       
3920: 20 20 20 20 20 20 20 20 20 54 72 61 63 65 50 72           TracePr
3930: 69 6f 72 69 74 79 20 74 72 61 63 65 50 72 69 6f  iority tracePrio
3940: 72 69 74 79 2c 0d 0a 20 20 20 20 20 20 20 20 20  rity,..         
3950: 20 20 20 20 20 20 20 54 72 61 63 65 43 61 6c 6c         TraceCall
3960: 62 61 63 6b 20 64 65 62 75 67 43 61 6c 6c 62 61  back debugCallba
3970: 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ck,..           
3980: 20 20 20 20 20 54 72 61 63 65 43 61 6c 6c 62 61       TraceCallba
3990: 63 6b 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b  ck traceCallback
39a0: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
39b0: 20 20 20 53 74 61 63 6b 54 72 61 63 65 20 73 74     StackTrace st
39c0: 61 63 6b 54 72 61 63 65 2c 0d 0a 20 20 20 20 20  ackTrace,..     
39d0: 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 6c             int l
39e0: 65 76 65 6c 2c 0d 0a 20 20 20 20 20 20 20 20 20  evel,..         
39f0: 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6d 65         string me
3a00: 73 73 61 67 65 2c 0d 0a 20 20 20 20 20 20 20 20  ssage,..        
3a10: 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 63          string c
3a20: 61 74 65 67 6f 72 79 0d 0a 20 20 20 20 20 20 20  ategory..       
3a30: 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
3a40: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
3a50: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
3a60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
3a70: 2f 20 4e 4f 54 45 3a 20 41 6c 77 61 79 73 20 73  / NOTE: Always s
3a80: 6b 69 70 20 74 68 69 73 20 63 61 6c 6c 20 66 72  kip this call fr
3a90: 61 6d 65 20 69 66 20 74 68 65 20 73 74 61 63 6b  ame if the stack
3aa0: 20 74 72 61 63 65 20 69 73 0d 0a 20 20 20 20 20   trace is..     
3ab0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
3ac0: 20 20 20 20 67 6f 69 6e 67 20 74 6f 20 62 65 20      going to be 
3ad0: 63 61 70 74 75 72 65 64 20 62 79 20 47 65 74 4d  captured by GetM
3ae0: 65 74 68 6f 64 4e 61 6d 65 2e 0d 0a 20 20 20 20  ethodName...    
3af0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
3b00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3b10: 69 66 20 28 73 74 61 63 6b 54 72 61 63 65 20 3d  if (stackTrace =
3b20: 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
3b30: 20 20 20 20 20 20 20 20 20 20 20 20 20 6c 65 76               lev
3b40: 65 6c 2b 2b 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  el++;....       
3b50: 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
3b60: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
3b70: 4e 4f 54 45 3a 20 46 6f 72 6d 61 74 20 74 68 65  NOTE: Format the
3b80: 20 6d 65 73 73 61 67 65 20 66 6f 72 20 64 69 73   message for dis
3b90: 70 6c 61 79 20 28 6f 6e 63 65 29 2e 0d 0a 20 20  play (once)...  
3ba0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
3bb0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
3bc0: 20 20 73 74 72 69 6e 67 20 66 6f 72 6d 61 74 74    string formatt
3bd0: 65 64 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d  ed = String.Form
3be0: 61 74 28 22 7b 30 7d 3a 20 7b 31 7d 22 2c 0d 0a  at("{0}: {1}",..
3bf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3c00: 20 20 20 20 47 65 74 4d 65 74 68 6f 64 4e 61 6d      GetMethodNam
3c10: 65 28 73 74 61 63 6b 54 72 61 63 65 2c 20 6c 65  e(stackTrace, le
3c20: 76 65 6c 29 2c 20 6d 65 73 73 61 67 65 29 3b 0d  vel), message);.
3c30: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
3c40: 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
3c50: 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20         // NOTE: 
3c60: 49 66 20 74 68 65 20 64 65 62 75 67 20 63 61 6c  If the debug cal
3c70: 6c 62 61 63 6b 20 69 73 20 69 6e 76 61 6c 69 64  lback is invalid
3c80: 20 6f 72 20 74 68 65 20 74 72 61 63 65 20 70 72   or the trace pr
3c90: 69 6f 72 69 74 79 0d 0a 20 20 20 20 20 20 20 20  iority..        
3ca0: 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
3cb0: 20 6f 66 20 74 68 69 73 20 6d 65 73 73 61 67 65   of this message
3cc0: 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20 77 68   is less than wh
3cd0: 61 74 20 77 65 20 63 75 72 72 65 6e 74 6c 79 20  at we currently 
3ce0: 77 61 6e 74 20 74 6f 0d 0a 20 20 20 20 20 20 20  want to..       
3cf0: 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
3d00: 20 20 64 65 62 75 67 2c 20 73 6b 69 70 20 69 74    debug, skip it
3d10: 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
3d20: 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
3d30: 20 20 20 20 20 20 20 69 66 20 28 28 64 65 62 75         if ((debu
3d40: 67 43 61 6c 6c 62 61 63 6b 20 21 3d 20 6e 75 6c  gCallback != nul
3d50: 6c 29 20 26 26 0d 0a 20 20 20 20 20 20 20 20 20  l) &&..         
3d60: 20 20 20 20 20 20 20 20 20 20 20 28 74 72 61 63             (trac
3d70: 65 50 72 69 6f 72 69 74 79 20 3e 3d 20 44 65 62  ePriority >= Deb
3d80: 75 67 50 72 69 6f 72 69 74 79 29 29 0d 0a 20 20  ugPriority))..  
3d90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
3da0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
3db0: 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
3dc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
3dd0: 4e 4f 54 45 3a 20 49 6e 76 6f 6b 65 20 74 68 65  NOTE: Invoke the
3de0: 20 64 65 62 75 67 20 63 61 6c 6c 62 61 63 6b 20   debug callback 
3df0: 77 69 74 68 20 74 68 65 20 66 6f 72 6d 61 74 74  with the formatt
3e00: 65 64 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ed..            
3e10: 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
3e20: 20 6d 65 73 73 61 67 65 20 61 6e 64 20 74 68 65   message and the
3e30: 20 63 61 74 65 67 6f 72 79 20 73 70 65 63 69 66   category specif
3e40: 69 65 64 20 62 79 20 74 68 65 0d 0a 20 20 20 20  ied by the..    
3e50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3e60: 2f 2f 20 20 20 20 20 20 20 63 61 6c 6c 65 72 2e  //       caller.
3e70: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
3e80: 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
3e90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65                de
3ea0: 62 75 67 43 61 6c 6c 62 61 63 6b 28 66 6f 72 6d  bugCallback(form
3eb0: 61 74 74 65 64 2c 20 63 61 74 65 67 6f 72 79 29  atted, category)
3ec0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
3ed0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
3ee0: 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
3ef0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e              // N
3f00: 4f 54 45 3a 20 49 66 20 74 68 65 20 74 72 61 63  OTE: If the trac
3f10: 65 20 63 61 6c 6c 62 61 63 6b 20 69 73 20 69 6e  e callback is in
3f20: 76 61 6c 69 64 20 6f 72 20 74 68 65 20 74 72 61  valid or the tra
3f30: 63 65 20 70 72 69 6f 72 69 74 79 0d 0a 20 20 20  ce priority..   
3f40: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
3f50: 20 20 20 20 20 20 6f 66 20 74 68 69 73 20 6d 65        of this me
3f60: 73 73 61 67 65 20 69 73 20 6c 65 73 73 20 74 68  ssage is less th
3f70: 61 6e 20 77 68 61 74 20 77 65 20 63 75 72 72 65  an what we curre
3f80: 6e 74 6c 79 20 77 61 6e 74 20 74 6f 0d 0a 20 20  ntly want to..  
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 74 72 61 63 65 2c 20 73 6b         trace, sk
3fb0: 69 70 20 69 74 2e 0d 0a 20 20 20 20 20 20 20 20  ip it...        
3fc0: 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
3fd0: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
3fe0: 28 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 20 21  (traceCallback !
3ff0: 3d 20 6e 75 6c 6c 29 20 26 26 0d 0a 20 20 20 20  = null) &&..    
4000: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4010: 28 74 72 61 63 65 50 72 69 6f 72 69 74 79 20 3e  (tracePriority >
4020: 3d 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 29  = TracePriority)
4030: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
4040: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
4050: 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
4060: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4070: 20 20 2f 2f 20 4e 4f 54 45 3a 20 49 6e 76 6f 6b    // NOTE: Invok
4080: 65 20 74 68 65 20 74 72 61 63 65 20 63 61 6c 6c  e the trace call
4090: 62 61 63 6b 20 77 69 74 68 20 74 68 65 20 66 6f  back with the fo
40a0: 72 6d 61 74 74 65 64 0d 0a 20 20 20 20 20 20 20  rmatted..       
40b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
40c0: 20 20 20 20 20 20 6d 65 73 73 61 67 65 20 61 6e        message an
40d0: 64 20 74 68 65 20 63 61 74 65 67 6f 72 79 20 73  d the category s
40e0: 70 65 63 69 66 69 65 64 20 62 79 20 74 68 65 0d  pecified by the.
40f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
4100: 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 63 61       //       ca
4110: 6c 6c 65 72 2e 0d 0a 20 20 20 20 20 20 20 20 20  ller...         
4120: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
4130: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4140: 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b     traceCallback
4150: 28 66 6f 72 6d 61 74 74 65 64 2c 20 63 61 74 65  (formatted, cate
4160: 67 6f 72 79 29 3b 0d 0a 20 20 20 20 20 20 20 20  gory);..        
4170: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
4180: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
4190: 75 72 6e 20 6d 65 73 73 61 67 65 3b 0d 0a 20 20  urn message;..  
41a0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
41b0: 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67           #endreg
41c0: 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  ion..        }..
41d0: 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
41e0: 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  on....        //
41f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4200: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4210: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4220: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4230: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
4240: 20 23 72 65 67 69 6f 6e 20 4d 6f 63 6b 52 65 67   #region MockReg
4250: 69 73 74 72 79 20 43 6c 61 73 73 0d 0a 20 20 20  istry Class..   
4260: 20 20 20 20 20 70 72 69 76 61 74 65 20 73 65 61       private sea
4270: 6c 65 64 20 63 6c 61 73 73 20 4d 6f 63 6b 52 65  led class MockRe
4280: 67 69 73 74 72 79 20 3a 20 49 44 69 73 70 6f 73  gistry : IDispos
4290: 61 62 6c 65 0d 0a 20 20 20 20 20 20 20 20 7b 0d  able..        {.
42a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 72 65  .            #re
42b0: 67 69 6f 6e 20 50 75 62 6c 69 63 20 43 6f 6e 73  gion Public Cons
42c0: 74 72 75 63 74 6f 72 73 0d 0a 20 20 20 20 20 20  tructors..      
42d0: 20 20 20 20 20 20 70 75 62 6c 69 63 20 4d 6f 63        public Moc
42e0: 6b 52 65 67 69 73 74 72 79 28 29 0d 0a 20 20 20  kRegistry()..   
42f0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
4300: 20 20 20 20 20 20 20 20 20 20 20 20 77 68 61 74              what
4310: 49 66 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20  If = true;..    
4320: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 61 64              read
4330: 4f 6e 6c 79 20 3d 20 74 72 75 65 3b 0d 0a 20 20  Only = true;..  
4340: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 61                sa
4350: 66 65 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20  fe = true;..    
4360: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
4370: 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
4380: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4390: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
43a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
43b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
43c0: 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
43d0: 69 63 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 28  ic MockRegistry(
43e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
43f0: 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 0d 0a 20    bool whatIf.. 
4400: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29                 )
4410: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
4420: 20 20 3a 20 74 68 69 73 28 29 0d 0a 20 20 20 20    : this()..    
4430: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
4440: 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e             this.
4450: 77 68 61 74 49 66 20 3d 20 77 68 61 74 49 66 3b  whatIf = whatIf;
4460: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
4470: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
4480: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4490: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
44a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
44b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
44c0: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
44d0: 20 20 70 75 62 6c 69 63 20 4d 6f 63 6b 52 65 67    public MockReg
44e0: 69 73 74 72 79 28 0d 0a 20 20 20 20 20 20 20 20  istry(..        
44f0: 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61          bool wha
4500: 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  tIf,..          
4510: 20 20 20 20 20 20 62 6f 6f 6c 20 72 65 61 64 4f        bool readO
4520: 6e 6c 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20  nly..           
4530: 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
4540: 20 20 20 20 20 20 20 20 3a 20 74 68 69 73 28 77          : this(w
4550: 68 61 74 49 66 29 0d 0a 20 20 20 20 20 20 20 20  hatIf)..        
4560: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
4570: 20 20 20 20 20 20 20 74 68 69 73 2e 72 65 61 64         this.read
4580: 4f 6e 6c 79 20 3d 20 72 65 61 64 4f 6e 6c 79 3b  Only = readOnly;
4590: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
45a0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
45d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
45e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
45f0: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
4600: 20 20 70 75 62 6c 69 63 20 4d 6f 63 6b 52 65 67    public MockReg
4610: 69 73 74 72 79 28 0d 0a 20 20 20 20 20 20 20 20  istry(..        
4620: 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61          bool wha
4630: 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  tIf,..          
4640: 20 20 20 20 20 20 62 6f 6f 6c 20 72 65 61 64 4f        bool readO
4650: 6e 6c 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  nly,..          
4660: 20 20 20 20 20 20 62 6f 6f 6c 20 73 61 66 65 0d        bool safe.
4670: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
4680: 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   )..            
4690: 20 20 20 20 3a 20 74 68 69 73 28 77 68 61 74 49      : this(whatI
46a0: 66 2c 20 72 65 61 64 4f 6e 6c 79 29 0d 0a 20 20  f, readOnly)..  
46b0: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
46c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69               thi
46d0: 73 2e 73 61 66 65 20 3d 20 73 61 66 65 3b 0d 0a  s.safe = safe;..
46e0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
46f0: 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 72             #endr
4700: 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20  egion....       
4710: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
4720: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4730: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4740: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4750: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
4760: 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20          #region 
4770: 50 75 62 6c 69 63 20 50 72 6f 70 65 72 74 69 65  Public Propertie
4780: 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  s..            p
4790: 72 69 76 61 74 65 20 62 6f 6f 6c 20 77 68 61 74  rivate bool what
47a0: 49 66 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  If;..           
47b0: 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 57 68 61   public bool Wha
47c0: 74 49 66 0d 0a 20 20 20 20 20 20 20 20 20 20 20  tIf..           
47d0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
47e0: 20 20 20 20 67 65 74 20 7b 20 43 68 65 63 6b 44      get { CheckD
47f0: 69 73 70 6f 73 65 64 28 29 3b 20 72 65 74 75 72  isposed(); retur
4800: 6e 20 77 68 61 74 49 66 3b 20 7d 0d 0a 20 20 20  n whatIf; }..   
4810: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74               set
4820: 20 7b 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64   { CheckDisposed
4830: 28 29 3b 20 77 68 61 74 49 66 20 3d 20 76 61 6c  (); whatIf = val
4840: 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  ue; }..         
4850: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
4860: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
4870: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4880: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4890: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
48a0: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
48b0: 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 62         private b
48c0: 6f 6f 6c 20 72 65 61 64 4f 6e 6c 79 3b 0d 0a 20  ool readOnly;.. 
48d0: 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
48e0: 63 20 62 6f 6f 6c 20 52 65 61 64 4f 6e 6c 79 0d  c bool ReadOnly.
48f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
4900: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4910: 67 65 74 20 7b 20 43 68 65 63 6b 44 69 73 70 6f  get { CheckDispo
4920: 73 65 64 28 29 3b 20 72 65 74 75 72 6e 20 72 65  sed(); return re
4930: 61 64 4f 6e 6c 79 3b 20 7d 0d 0a 20 20 20 20 20  adOnly; }..     
4940: 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b             set {
4950: 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29   CheckDisposed()
4960: 3b 20 72 65 61 64 4f 6e 6c 79 20 3d 20 76 61 6c  ; readOnly = val
4970: 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  ue; }..         
4980: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
4990: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
49a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
49b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
49c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
49d0: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
49e0: 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 62         private b
49f0: 6f 6f 6c 20 73 61 66 65 3b 0d 0a 20 20 20 20 20  ool safe;..     
4a00: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f         public bo
4a10: 6f 6c 20 53 61 66 65 0d 0a 20 20 20 20 20 20 20  ol Safe..       
4a20: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
4a30: 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 43 68          get { Ch
4a40: 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 20 72  eckDisposed(); r
4a50: 65 74 75 72 6e 20 73 61 66 65 3b 20 7d 0d 0a 20  eturn safe; }.. 
4a60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
4a70: 65 74 20 7b 20 43 68 65 63 6b 44 69 73 70 6f 73  et { CheckDispos
4a80: 65 64 28 29 3b 20 73 61 66 65 20 3d 20 76 61 6c  ed(); safe = val
4a90: 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  ue; }..         
4aa0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
4ab0: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
4ac0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4ad0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4ae0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4af0: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
4b00: 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 4d         private M
4b10: 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 63  ockRegistryKey c
4b20: 6c 61 73 73 65 73 52 6f 6f 74 3b 0d 0a 20 20 20  lassesRoot;..   
4b30: 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
4b40: 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20  MockRegistryKey 
4b50: 43 6c 61 73 73 65 73 52 6f 6f 74 0d 0a 20 20 20  ClassesRoot..   
4b60: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
4b70: 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74 0d              get.
4b80: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
4b90: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
4ba0: 20 20 20 20 20 20 20 20 43 68 65 63 6b 44 69 73          CheckDis
4bb0: 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20 20 20 20  posed();....    
4bc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4bd0: 69 66 20 28 63 6c 61 73 73 65 73 52 6f 6f 74 20  if (classesRoot 
4be0: 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
4bf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4c00: 20 20 63 6c 61 73 73 65 73 52 6f 6f 74 20 3d 20    classesRoot = 
4c10: 6e 65 77 20 4d 6f 63 6b 52 65 67 69 73 74 72 79  new MockRegistry
4c20: 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20  Key(..          
4c30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4c40: 20 20 52 65 67 69 73 74 72 79 2e 43 6c 61 73 73    Registry.Class
4c50: 65 73 52 6f 6f 74 2c 20 77 68 61 74 49 66 2c 20  esRoot, whatIf, 
4c60: 72 65 61 64 4f 6e 6c 79 2c 20 73 61 66 65 29 3b  readOnly, safe);
4c70: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
4c80: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 63          return c
4c90: 6c 61 73 73 65 73 52 6f 6f 74 3b 0d 0a 20 20 20  lassesRoot;..   
4ca0: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
4cb0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
4cc0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
4cd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4ce0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4cf0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4d00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4d10: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
4d20: 70 72 69 76 61 74 65 20 4d 6f 63 6b 52 65 67 69  private MockRegi
4d30: 73 74 72 79 4b 65 79 20 63 75 72 72 65 6e 74 43  stryKey currentC
4d40: 6f 6e 66 69 67 3b 0d 0a 20 20 20 20 20 20 20 20  onfig;..        
4d50: 20 20 20 20 70 75 62 6c 69 63 20 4d 6f 63 6b 52      public MockR
4d60: 65 67 69 73 74 72 79 4b 65 79 20 43 75 72 72 65  egistryKey Curre
4d70: 6e 74 43 6f 6e 66 69 67 0d 0a 20 20 20 20 20 20  ntConfig..      
4d80: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
4d90: 20 20 20 20 20 20 20 20 20 67 65 74 0d 0a 20 20           get..  
4da0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
4db0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
4dc0: 20 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73       CheckDispos
4dd0: 65 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ed();....       
4de0: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
4df0: 28 63 75 72 72 65 6e 74 43 6f 6e 66 69 67 20 3d  (currentConfig =
4e00: 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
4e10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4e20: 20 63 75 72 72 65 6e 74 43 6f 6e 66 69 67 20 3d   currentConfig =
4e30: 20 6e 65 77 20 4d 6f 63 6b 52 65 67 69 73 74 72   new MockRegistr
4e40: 79 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20  yKey(..         
4e50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4e60: 20 20 20 52 65 67 69 73 74 72 79 2e 43 75 72 72     Registry.Curr
4e70: 65 6e 74 43 6f 6e 66 69 67 2c 20 77 68 61 74 49  entConfig, whatI
4e80: 66 2c 20 72 65 61 64 4f 6e 6c 79 2c 20 73 61 66  f, readOnly, saf
4e90: 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e);....         
4ea0: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
4eb0: 6e 20 63 75 72 72 65 6e 74 43 6f 6e 66 69 67 3b  n currentConfig;
4ec0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
4ed0: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
4ee0: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
4ef0: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
4f00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
4f40: 20 20 20 20 20 70 72 69 76 61 74 65 20 4d 6f 63       private Moc
4f50: 6b 52 65 67 69 73 74 72 79 4b 65 79 20 63 75 72  kRegistryKey cur
4f60: 72 65 6e 74 55 73 65 72 3b 0d 0a 20 20 20 20 20  rentUser;..     
4f70: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 4d 6f         public Mo
4f80: 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 43 75  ckRegistryKey Cu
4f90: 72 72 65 6e 74 55 73 65 72 0d 0a 20 20 20 20 20  rrentUser..     
4fa0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
4fb0: 20 20 20 20 20 20 20 20 20 20 67 65 74 0d 0a 20            get.. 
4fc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
4fd0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
4fe0: 20 20 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f        CheckDispo
4ff0: 73 65 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  sed();....      
5000: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
5010: 20 28 63 75 72 72 65 6e 74 55 73 65 72 20 3d 3d   (currentUser ==
5020: 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
5030: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5040: 63 75 72 72 65 6e 74 55 73 65 72 20 3d 20 6e 65  currentUser = ne
5050: 77 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65  w MockRegistryKe
5060: 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y(..            
5070: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5080: 52 65 67 69 73 74 72 79 2e 43 75 72 72 65 6e 74  Registry.Current
5090: 55 73 65 72 2c 20 77 68 61 74 49 66 2c 20 72 65  User, whatIf, re
50a0: 61 64 4f 6e 6c 79 2c 20 73 61 66 65 29 3b 0d 0a  adOnly, safe);..
50b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
50c0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 63 75 72        return cur
50d0: 72 65 6e 74 55 73 65 72 3b 0d 0a 20 20 20 20 20  rentUser;..     
50e0: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
50f0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
5100: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
5110: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5120: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5130: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5140: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
5150: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
5160: 69 76 61 74 65 20 4d 6f 63 6b 52 65 67 69 73 74  ivate MockRegist
5170: 72 79 4b 65 79 20 64 79 6e 44 61 74 61 3b 0d 0a  ryKey dynData;..
5180: 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
5190: 69 63 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b  ic MockRegistryK
51a0: 65 79 20 44 79 6e 44 61 74 61 0d 0a 20 20 20 20  ey DynData..    
51b0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
51c0: 20 20 20 20 20 20 20 20 20 20 20 67 65 74 0d 0a             get..
51d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
51e0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
51f0: 20 20 20 20 20 20 20 43 68 65 63 6b 44 69 73 70         CheckDisp
5200: 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20  osed();....     
5210: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
5220: 66 20 28 64 79 6e 44 61 74 61 20 3d 3d 20 6e 75  f (dynData == nu
5230: 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
5240: 20 20 20 20 20 20 20 20 20 20 20 20 20 64 79 6e               dyn
5250: 44 61 74 61 20 3d 20 6e 65 77 20 4d 6f 63 6b 52  Data = new MockR
5260: 65 67 69 73 74 72 79 4b 65 79 28 0d 0a 20 20 20  egistryKey(..   
5270: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5280: 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72           Registr
5290: 79 2e 44 79 6e 44 61 74 61 2c 20 77 68 61 74 49  y.DynData, whatI
52a0: 66 2c 20 72 65 61 64 4f 6e 6c 79 2c 20 73 61 66  f, readOnly, saf
52b0: 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e);....         
52c0: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
52d0: 6e 20 64 79 6e 44 61 74 61 3b 0d 0a 20 20 20 20  n dynData;..    
52e0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
52f0: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
5300: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
5310: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5320: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5330: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5340: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
5350: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
5360: 72 69 76 61 74 65 20 4d 6f 63 6b 52 65 67 69 73  rivate MockRegis
5370: 74 72 79 4b 65 79 20 6c 6f 63 61 6c 4d 61 63 68  tryKey localMach
5380: 69 6e 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ine;..          
5390: 20 20 70 75 62 6c 69 63 20 4d 6f 63 6b 52 65 67    public MockReg
53a0: 69 73 74 72 79 4b 65 79 20 4c 6f 63 61 6c 4d 61  istryKey LocalMa
53b0: 63 68 69 6e 65 0d 0a 20 20 20 20 20 20 20 20 20  chine..         
53c0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
53d0: 20 20 20 20 20 20 67 65 74 0d 0a 20 20 20 20 20        get..     
53e0: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
53f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5400: 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28    CheckDisposed(
5410: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
5420: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6c 6f            if (lo
5430: 63 61 6c 4d 61 63 68 69 6e 65 20 3d 3d 20 6e 75  calMachine == nu
5440: 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
5450: 20 20 20 20 20 20 20 20 20 20 20 20 20 6c 6f 63               loc
5460: 61 6c 4d 61 63 68 69 6e 65 20 3d 20 6e 65 77 20  alMachine = new 
5470: 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 28  MockRegistryKey(
5480: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
5490: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65                Re
54a0: 67 69 73 74 72 79 2e 4c 6f 63 61 6c 4d 61 63 68  gistry.LocalMach
54b0: 69 6e 65 2c 20 77 68 61 74 49 66 2c 20 72 65 61  ine, whatIf, rea
54c0: 64 4f 6e 6c 79 2c 20 73 61 66 65 29 3b 0d 0a 0d  dOnly, safe);...
54d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
54e0: 20 20 20 20 20 72 65 74 75 72 6e 20 6c 6f 63 61       return loca
54f0: 6c 4d 61 63 68 69 6e 65 3b 0d 0a 20 20 20 20 20  lMachine;..     
5500: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
5510: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
5520: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
5530: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5540: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5550: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5560: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
5570: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
5580: 69 76 61 74 65 20 4d 6f 63 6b 52 65 67 69 73 74  ivate MockRegist
5590: 72 79 4b 65 79 20 70 65 72 66 6f 72 6d 61 6e 63  ryKey performanc
55a0: 65 44 61 74 61 3b 0d 0a 20 20 20 20 20 20 20 20  eData;..        
55b0: 20 20 20 20 70 75 62 6c 69 63 20 4d 6f 63 6b 52      public MockR
55c0: 65 67 69 73 74 72 79 4b 65 79 20 50 65 72 66 6f  egistryKey Perfo
55d0: 72 6d 61 6e 63 65 44 61 74 61 0d 0a 20 20 20 20  rmanceData..    
55e0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
55f0: 20 20 20 20 20 20 20 20 20 20 20 67 65 74 0d 0a             get..
5600: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5610: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
5620: 20 20 20 20 20 20 20 43 68 65 63 6b 44 69 73 70         CheckDisp
5630: 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20  osed();....     
5640: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
5650: 66 20 28 70 65 72 66 6f 72 6d 61 6e 63 65 44 61  f (performanceDa
5660: 74 61 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ta == null)..   
5670: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5680: 20 20 20 20 20 70 65 72 66 6f 72 6d 61 6e 63 65       performance
5690: 44 61 74 61 20 3d 20 6e 65 77 20 4d 6f 63 6b 52  Data = new MockR
56a0: 65 67 69 73 74 72 79 4b 65 79 28 0d 0a 20 20 20  egistryKey(..   
56b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
56c0: 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72           Registr
56d0: 79 2e 50 65 72 66 6f 72 6d 61 6e 63 65 44 61 74  y.PerformanceDat
56e0: 61 2c 20 77 68 61 74 49 66 2c 20 72 65 61 64 4f  a, whatIf, readO
56f0: 6e 6c 79 2c 20 73 61 66 65 29 3b 0d 0a 0d 0a 20  nly, safe);.... 
5700: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5710: 20 20 20 72 65 74 75 72 6e 20 70 65 72 66 6f 72     return perfor
5720: 6d 61 6e 63 65 44 61 74 61 3b 0d 0a 20 20 20 20  manceData;..    
5730: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
5740: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
5750: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
5760: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5770: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5780: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5790: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
57a0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
57b0: 72 69 76 61 74 65 20 4d 6f 63 6b 52 65 67 69 73  rivate MockRegis
57c0: 74 72 79 4b 65 79 20 75 73 65 72 73 3b 0d 0a 20  tryKey users;.. 
57d0: 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
57e0: 63 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65  c MockRegistryKe
57f0: 79 20 55 73 65 72 73 0d 0a 20 20 20 20 20 20 20  y Users..       
5800: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
5810: 20 20 20 20 20 20 20 20 67 65 74 0d 0a 20 20 20          get..   
5820: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
5830: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5840: 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65      CheckDispose
5850: 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  d();....        
5860: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
5870: 75 73 65 72 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  users == null)..
5880: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5890: 20 20 20 20 20 20 20 20 75 73 65 72 73 20 3d 20          users = 
58a0: 6e 65 77 20 4d 6f 63 6b 52 65 67 69 73 74 72 79  new MockRegistry
58b0: 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20  Key(..          
58c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
58d0: 20 20 52 65 67 69 73 74 72 79 2e 55 73 65 72 73    Registry.Users
58e0: 2c 20 77 68 61 74 49 66 2c 20 72 65 61 64 4f 6e  , whatIf, readOn
58f0: 6c 79 2c 20 73 61 66 65 29 3b 0d 0a 0d 0a 20 20  ly, safe);....  
5900: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5910: 20 20 72 65 74 75 72 6e 20 75 73 65 72 73 3b 0d    return users;.
5920: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
5930: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
5940: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  }..            #
5950: 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20  endregion....   
5960: 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
5970: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5980: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5990: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
59a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
59b0: 20 20 20 20 20 20 20 20 20 20 20 20 23 72 65 67              #reg
59c0: 69 6f 6e 20 50 75 62 6c 69 63 20 22 52 65 67 69  ion Public "Regi
59d0: 73 74 72 79 22 20 4d 65 74 68 6f 64 73 0d 0a 20  stry" Methods.. 
59e0: 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
59f0: 63 20 6f 62 6a 65 63 74 20 47 65 74 56 61 6c 75  c object GetValu
5a00: 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
5a10: 20 20 20 20 73 74 72 69 6e 67 20 6b 65 79 4e 61      string keyNa
5a20: 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me,..           
5a30: 20 20 20 20 20 73 74 72 69 6e 67 20 76 61 6c 75       string valu
5a40: 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20  eName,..        
5a50: 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 64          object d
5a60: 65 66 61 75 6c 74 56 61 6c 75 65 0d 0a 20 20 20  efaultValue..   
5a70: 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a               )..
5a80: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
5a90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43                 C
5aa0: 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d  heckDisposed();.
5ab0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
5ac0: 20 20 20 72 65 74 75 72 6e 20 52 65 67 69 73 74     return Regist
5ad0: 72 79 2e 47 65 74 56 61 6c 75 65 28 6b 65 79 4e  ry.GetValue(keyN
5ae0: 61 6d 65 2c 20 76 61 6c 75 65 4e 61 6d 65 2c 20  ame, valueName, 
5af0: 64 65 66 61 75 6c 74 56 61 6c 75 65 29 3b 0d 0a  defaultValue);..
5b00: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
5b10: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
5b20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5b30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5b40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5b50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5b60: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
5b70: 70 75 62 6c 69 63 20 76 6f 69 64 20 53 65 74 56  public void SetV
5b80: 61 6c 75 65 28 0d 0a 20 20 20 20 20 20 20 20 20  alue(..         
5b90: 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6b 65         string ke
5ba0: 79 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20  yName,..        
5bb0: 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 76          string v
5bc0: 61 6c 75 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20  alueName,..     
5bd0: 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63             objec
5be0: 74 20 76 61 6c 75 65 0d 0a 20 20 20 20 20 20 20  t value..       
5bf0: 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
5c00: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
5c10: 20 20 20 20 20 20 20 20 20 20 20 43 68 65 63 6b             Check
5c20: 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 20 20 20  Disposed();..   
5c30: 20 20 20 20 20 20 20 20 20 20 20 20 20 43 68 65               Che
5c40: 63 6b 52 65 61 64 4f 6e 6c 79 28 29 3b 0d 0a 0d  ckReadOnly();...
5c50: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
5c60: 20 69 66 20 28 21 77 68 61 74 49 66 29 0d 0a 20   if (!whatIf).. 
5c70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5c80: 20 20 20 52 65 67 69 73 74 72 79 2e 53 65 74 56     Registry.SetV
5c90: 61 6c 75 65 28 6b 65 79 4e 61 6d 65 2c 20 76 61  alue(keyName, va
5ca0: 6c 75 65 4e 61 6d 65 2c 20 76 61 6c 75 65 29 3b  lueName, value);
5cb0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
5cc0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
5cd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5ce0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5cf0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5d00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5d10: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
5d20: 20 20 70 75 62 6c 69 63 20 76 6f 69 64 20 53 65    public void Se
5d30: 74 56 61 6c 75 65 28 0d 0a 20 20 20 20 20 20 20  tValue(..       
5d40: 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
5d50: 6b 65 79 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20  keyName,..      
5d60: 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
5d70: 20 76 61 6c 75 65 4e 61 6d 65 2c 0d 0a 20 20 20   valueName,..   
5d80: 20 20 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a               obj
5d90: 65 63 74 20 76 61 6c 75 65 2c 0d 0a 20 20 20 20  ect value,..    
5da0: 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69              Regi
5db0: 73 74 72 79 56 61 6c 75 65 4b 69 6e 64 20 76 61  stryValueKind va
5dc0: 6c 75 65 4b 69 6e 64 0d 0a 20 20 20 20 20 20 20  lueKind..       
5dd0: 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
5de0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
5df0: 20 20 20 20 20 20 20 20 20 20 20 43 68 65 63 6b             Check
5e00: 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 20 20 20  Disposed();..   
5e10: 20 20 20 20 20 20 20 20 20 20 20 20 20 43 68 65               Che
5e20: 63 6b 52 65 61 64 4f 6e 6c 79 28 29 3b 0d 0a 0d  ckReadOnly();...
5e30: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
5e40: 20 69 66 20 28 21 77 68 61 74 49 66 29 0d 0a 20   if (!whatIf).. 
5e50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5e60: 20 20 20 52 65 67 69 73 74 72 79 2e 53 65 74 56     Registry.SetV
5e70: 61 6c 75 65 28 6b 65 79 4e 61 6d 65 2c 20 76 61  alue(keyName, va
5e80: 6c 75 65 4e 61 6d 65 2c 20 76 61 6c 75 65 2c 20  lueName, value, 
5e90: 76 61 6c 75 65 4b 69 6e 64 29 3b 0d 0a 20 20 20  valueKind);..   
5ea0: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
5eb0: 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
5ec0: 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  on....          
5ed0: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
5ee0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5ef0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5f00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5f10: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
5f20: 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 72 69       #region Pri
5f30: 76 61 74 65 20 4d 65 74 68 6f 64 73 0d 0a 20 20  vate Methods..  
5f40: 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
5f50: 65 20 76 6f 69 64 20 43 68 65 63 6b 52 65 61 64  e void CheckRead
5f60: 4f 6e 6c 79 28 29 0d 0a 20 20 20 20 20 20 20 20  Only()..        
5f70: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
5f80: 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
5f90: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f             // NO
5fa0: 54 45 3a 20 49 6e 20 22 72 65 61 64 2d 6f 6e 6c  TE: In "read-onl
5fb0: 79 22 20 6d 6f 64 65 2c 20 77 65 20 64 69 73 61  y" mode, we disa
5fc0: 6c 6c 6f 77 20 61 6c 6c 20 77 72 69 74 65 20 61  llow all write a
5fd0: 63 63 65 73 73 2e 0d 0a 20 20 20 20 20 20 20 20  ccess...        
5fe0: 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
5ff0: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
6000: 21 72 65 61 64 4f 6e 6c 79 29 0d 0a 20 20 20 20  !readOnly)..    
6010: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6020: 72 65 74 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20  return;....     
6030: 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77             throw
6040: 20 6e 65 77 20 49 6e 76 61 6c 69 64 4f 70 65 72   new InvalidOper
6050: 61 74 69 6f 6e 45 78 63 65 70 74 69 6f 6e 28 29  ationException()
6060: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
6070: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 65  ..            #e
6080: 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20  ndregion....    
6090: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
60a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
60b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
60c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
60d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
60e0: 20 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69             #regi
60f0: 6f 6e 20 49 44 69 73 70 6f 73 61 62 6c 65 20 22  on IDisposable "
6100: 50 61 74 74 65 72 6e 22 20 4d 65 6d 62 65 72 73  Pattern" Members
6110: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
6120: 69 76 61 74 65 20 62 6f 6f 6c 20 64 69 73 70 6f  ivate bool dispo
6130: 73 65 64 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  sed;..          
6140: 20 20 70 72 69 76 61 74 65 20 76 6f 69 64 20 43    private void C
6150: 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 20 2f  heckDisposed() /
6160: 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a 20 20 20 20  * throw */..    
6170: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
6180: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21             if (!
6190: 64 69 73 70 6f 73 65 64 29 0d 0a 20 20 20 20 20  disposed)..     
61a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
61b0: 65 74 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20  eturn;....      
61c0: 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20            throw 
61d0: 6e 65 77 20 4f 62 6a 65 63 74 44 69 73 70 6f 73  new ObjectDispos
61e0: 65 64 45 78 63 65 70 74 69 6f 6e 28 0d 0a 20 20  edException(..  
61f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6200: 20 20 74 79 70 65 6f 66 28 4d 6f 63 6b 52 65 67    typeof(MockReg
6210: 69 73 74 72 79 29 2e 4e 61 6d 65 29 3b 0d 0a 20  istry).Name);.. 
6220: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
6230: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
6240: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6250: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6260: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6270: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
6280: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
6290: 72 69 76 61 74 65 20 2f 2a 20 70 72 6f 74 65 63  rivate /* protec
62a0: 74 65 64 20 76 69 72 74 75 61 6c 20 2a 2f 20 76  ted virtual */ v
62b0: 6f 69 64 20 44 69 73 70 6f 73 65 28 0d 0a 20 20  oid Dispose(..  
62c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f                bo
62d0: 6f 6c 20 64 69 73 70 6f 73 69 6e 67 0d 0a 20 20  ol disposing..  
62e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d                ).
62f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
6300: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6310: 69 66 20 28 21 64 69 73 70 6f 73 65 64 29 0d 0a  if (!disposed)..
6320: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6330: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
6340: 20 20 20 20 20 20 20 69 66 20 28 64 69 73 70 6f         if (dispo
6350: 73 69 6e 67 29 0d 0a 20 20 20 20 20 20 20 20 20  sing)..         
6360: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
6370: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6380: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
6390: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
63a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 20 20 20 20  //////////..    
63b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
63c0: 20 20 20 20 2f 2f 20 64 69 73 70 6f 73 65 20 6d      // dispose m
63d0: 61 6e 61 67 65 64 20 72 65 73 6f 75 72 63 65 73  anaged resources
63e0: 20 68 65 72 65 2e 2e 2e 0d 0a 20 20 20 20 20 20   here.....      
63f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6400: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
6410: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6420: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
6430: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6440: 20 20 69 66 20 28 63 6c 61 73 73 65 73 52 6f 6f    if (classesRoo
6450: 74 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  t != null)..    
6460: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6470: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
6480: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6490: 20 20 20 63 6c 61 73 73 65 73 52 6f 6f 74 2e 43     classesRoot.C
64a0: 6c 6f 73 65 28 29 3b 0d 0a 20 20 20 20 20 20 20  lose();..       
64b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
64c0: 20 20 20 20 20 63 6c 61 73 73 65 73 52 6f 6f 74       classesRoot
64d0: 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20   = null;..      
64e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
64f0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
6500: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
6510: 66 20 28 63 75 72 72 65 6e 74 43 6f 6e 66 69 67  f (currentConfig
6520: 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   != null)..     
6530: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6540: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
6550: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6560: 20 20 63 75 72 72 65 6e 74 43 6f 6e 66 69 67 2e    currentConfig.
6570: 43 6c 6f 73 65 28 29 3b 0d 0a 20 20 20 20 20 20  Close();..      
6580: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6590: 20 20 20 20 20 20 63 75 72 72 65 6e 74 43 6f 6e        currentCon
65a0: 66 69 67 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20  fig = null;..   
65b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
65c0: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
65d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
65e0: 20 20 69 66 20 28 63 75 72 72 65 6e 74 55 73 65    if (currentUse
65f0: 72 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  r != null)..    
6600: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6610: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
6620: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6630: 20 20 20 63 75 72 72 65 6e 74 55 73 65 72 2e 43     currentUser.C
6640: 6c 6f 73 65 28 29 3b 0d 0a 20 20 20 20 20 20 20  lose();..       
6650: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6660: 20 20 20 20 20 63 75 72 72 65 6e 74 55 73 65 72       currentUser
6670: 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20   = null;..      
6680: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6690: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
66a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
66b0: 66 20 28 64 79 6e 44 61 74 61 20 21 3d 20 6e 75  f (dynData != nu
66c0: 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
66d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
66e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
66f0: 20 20 20 20 20 20 20 20 20 20 20 20 64 79 6e 44              dynD
6700: 61 74 61 2e 43 6c 6f 73 65 28 29 3b 0d 0a 20 20  ata.Close();..  
6710: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6720: 20 20 20 20 20 20 20 20 20 20 64 79 6e 44 61 74            dynDat
6730: 61 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20  a = null;..     
6740: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6750: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
6760: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6770: 69 66 20 28 6c 6f 63 61 6c 4d 61 63 68 69 6e 65  if (localMachine
6780: 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   != null)..     
6790: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
67a0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
67b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
67c0: 20 20 6c 6f 63 61 6c 4d 61 63 68 69 6e 65 2e 43    localMachine.C
67d0: 6c 6f 73 65 28 29 3b 0d 0a 20 20 20 20 20 20 20  lose();..       
67e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
67f0: 20 20 20 20 20 6c 6f 63 61 6c 4d 61 63 68 69 6e       localMachin
6800: 65 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20  e = null;..     
6810: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6820: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
6830: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6840: 69 66 20 28 70 65 72 66 6f 72 6d 61 6e 63 65 44  if (performanceD
6850: 61 74 61 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20  ata != null)..  
6860: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6870: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
6880: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6890: 20 20 20 20 20 70 65 72 66 6f 72 6d 61 6e 63 65       performance
68a0: 44 61 74 61 2e 43 6c 6f 73 65 28 29 3b 0d 0a 20  Data.Close();.. 
68b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
68c0: 20 20 20 20 20 20 20 20 20 20 20 70 65 72 66 6f             perfo
68d0: 72 6d 61 6e 63 65 44 61 74 61 20 3d 20 6e 75 6c  rmanceData = nul
68e0: 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l;..            
68f0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
6900: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
6910: 20 20 20 20 20 20 20 20 20 69 66 20 28 75 73 65           if (use
6920: 72 73 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  rs != null)..   
6930: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6940: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
6950: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6960: 20 20 20 20 75 73 65 72 73 2e 43 6c 6f 73 65 28      users.Close(
6970: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
6980: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6990: 75 73 65 72 73 20 3d 20 6e 75 6c 6c 3b 0d 0a 20  users = null;.. 
69a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
69b0: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
69c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
69d0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
69e0: 20 20 20 20 20 20 20 2f 2f 2f 2f 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 0d 0a 20  /////////////.. 
6a10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6a20: 20 20 20 2f 2f 20 72 65 6c 65 61 73 65 20 75 6e     // release un
6a30: 6d 61 6e 61 67 65 64 20 72 65 73 6f 75 72 63 65  managed resource
6a40: 73 20 68 65 72 65 2e 2e 2e 0d 0a 20 20 20 20 20  s here.....     
6a50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
6a60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6a70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6a80: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
6a90: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
6aa0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
6ab0: 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 54 68       // NOTE: Th
6ac0: 69 73 20 6f 62 6a 65 63 74 20 69 73 20 6e 6f 77  is object is now
6ad0: 20 64 69 73 70 6f 73 65 64 2e 0d 0a 20 20 20 20   disposed...    
6ae0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6af0: 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
6b00: 20 20 20 20 20 20 20 20 64 69 73 70 6f 73 65 64          disposed
6b10: 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20   = true;..      
6b20: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
6b30: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
6b40: 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
6b50: 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  on....          
6b60: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
6b70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6b80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6b90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6ba0: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
6bb0: 20 20 20 20 20 23 72 65 67 69 6f 6e 20 49 44 69       #region IDi
6bc0: 73 70 6f 73 61 62 6c 65 20 4d 65 6d 62 65 72 73  sposable Members
6bd0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
6be0: 62 6c 69 63 20 76 6f 69 64 20 44 69 73 70 6f 73  blic void Dispos
6bf0: 65 28 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e()..           
6c00: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
6c10: 20 20 20 20 44 69 73 70 6f 73 65 28 74 72 75 65      Dispose(true
6c20: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
6c30: 20 20 20 20 47 43 2e 53 75 70 70 72 65 73 73 46      GC.SuppressF
6c40: 69 6e 61 6c 69 7a 65 28 74 68 69 73 29 3b 0d 0a  inalize(this);..
6c50: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
6c60: 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 72             #endr
6c70: 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20  egion....       
6c80: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
6c90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6ca0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6cb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6cc0: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
6cd0: 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20          #region 
6ce0: 44 65 73 74 72 75 63 74 6f 72 0d 0a 20 20 20 20  Destructor..    
6cf0: 20 20 20 20 20 20 20 20 7e 4d 6f 63 6b 52 65 67          ~MockReg
6d00: 69 73 74 72 79 28 29 0d 0a 20 20 20 20 20 20 20  istry()..       
6d10: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
6d20: 20 20 20 20 20 20 20 20 44 69 73 70 6f 73 65 28          Dispose(
6d30: 66 61 6c 73 65 29 3b 0d 0a 20 20 20 20 20 20 20  false);..       
6d40: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
6d50: 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
6d60: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
6d70: 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
6d80: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
6d90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6da0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6db0: 2f 2f 2f 2f 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: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67  ....        #reg
6de0: 69 6f 6e 20 4d 6f 63 6b 52 65 67 69 73 74 72 79  ion MockRegistry
6df0: 4b 65 79 20 43 6c 61 73 73 0d 0a 20 20 20 20 20  Key Class..     
6e00: 20 20 20 69 6e 74 65 72 6e 61 6c 20 73 65 61 6c     internal seal
6e10: 65 64 20 63 6c 61 73 73 20 4d 6f 63 6b 52 65 67  ed class MockReg
6e20: 69 73 74 72 79 4b 65 79 20 3a 20 49 44 69 73 70  istryKey : IDisp
6e30: 6f 73 61 62 6c 65 0d 0a 20 20 20 20 20 20 20 20  osable..        
6e40: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  {..            #
6e50: 72 65 67 69 6f 6e 20 50 72 69 76 61 74 65 20 43  region Private C
6e60: 6f 6e 73 74 72 75 63 74 6f 72 73 0d 0a 20 20 20  onstructors..   
6e70: 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65           private
6e80: 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79   MockRegistryKey
6e90: 28 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ()..            
6ea0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
6eb0: 20 20 20 77 68 61 74 49 66 20 3d 20 74 72 75 65     whatIf = true
6ec0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
6ed0: 20 20 20 72 65 61 64 4f 6e 6c 79 20 3d 20 74 72     readOnly = tr
6ee0: 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
6ef0: 20 20 20 20 20 73 61 66 65 20 3d 20 74 72 75 65       safe = true
6f00: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
6f10: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 65  ..            #e
6f20: 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20  ndregion....    
6f30: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
6f40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6f50: 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20  ///////////.... 
6f80: 20 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69             #regi
6f90: 6f 6e 20 50 75 62 6c 69 63 20 43 6f 6e 73 74 72  on Public Constr
6fa0: 75 63 74 6f 72 73 0d 0a 20 20 20 20 20 20 20 20  uctors..        
6fb0: 20 20 20 20 70 75 62 6c 69 63 20 4d 6f 63 6b 52      public MockR
6fc0: 65 67 69 73 74 72 79 4b 65 79 28 0d 0a 20 20 20  egistryKey(..   
6fd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67               Reg
6fe0: 69 73 74 72 79 4b 65 79 20 6b 65 79 0d 0a 20 20  istryKey key..  
6ff0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d                ).
7000: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
7010: 20 3a 20 74 68 69 73 28 29 0d 0a 20 20 20 20 20   : this()..     
7020: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
7030: 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 6b            this.k
7040: 65 79 20 3d 20 6b 65 79 3b 0d 0a 20 20 20 20 20  ey = key;..     
7050: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
7060: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
7070: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7080: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7090: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
70a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
70b0: 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
70c0: 63 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65  c MockRegistryKe
70d0: 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y(..            
70e0: 20 20 20 20 52 65 67 69 73 74 72 79 4b 65 79 20      RegistryKey 
70f0: 6b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  key,..          
7100: 20 20 20 20 20 20 73 74 72 69 6e 67 20 73 75 62        string sub
7110: 4b 65 79 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20  KeyName..       
7120: 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
7130: 20 20 20 20 20 20 20 20 20 20 20 20 3a 20 74 68              : th
7140: 69 73 28 6b 65 79 29 0d 0a 20 20 20 20 20 20 20  is(key)..       
7150: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
7160: 20 20 20 20 20 20 20 20 74 68 69 73 2e 73 75 62          this.sub
7170: 4b 65 79 4e 61 6d 65 20 3d 20 73 75 62 4b 65 79  KeyName = subKey
7180: 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  Name;..         
7190: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
71a0: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
71b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
71c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
71d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
71e0: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
71f0: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 4d 6f         public Mo
7200: 63 6b 52 65 67 69 73 74 72 79 4b 65 79 28 0d 0a  ckRegistryKey(..
7210: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7220: 52 65 67 69 73 74 72 79 4b 65 79 20 6b 65 79 2c  RegistryKey key,
7230: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
7240: 20 20 73 74 72 69 6e 67 20 73 75 62 4b 65 79 4e    string subKeyN
7250: 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ame,..          
7260: 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49        bool whatI
7270: 66 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  f..             
7280: 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20     )..          
7290: 20 20 20 20 20 20 3a 20 74 68 69 73 28 6b 65 79        : this(key
72a0: 2c 20 73 75 62 4b 65 79 4e 61 6d 65 29 0d 0a 20  , subKeyName).. 
72b0: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
72c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
72d0: 69 73 2e 77 68 61 74 49 66 20 3d 20 77 68 61 74  is.whatIf = what
72e0: 49 66 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  If;..           
72f0: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
7300: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
7310: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7320: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7330: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7340: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
7350: 20 20 20 20 20 70 75 62 6c 69 63 20 4d 6f 63 6b       public Mock
7360: 52 65 67 69 73 74 72 79 4b 65 79 28 0d 0a 20 20  RegistryKey(..  
7370: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65                Re
7380: 67 69 73 74 72 79 4b 65 79 20 6b 65 79 2c 0d 0a  gistryKey key,..
7390: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
73a0: 73 74 72 69 6e 67 20 73 75 62 4b 65 79 4e 61 6d  string subKeyNam
73b0: 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
73c0: 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c      bool whatIf,
73d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
73e0: 20 20 62 6f 6f 6c 20 72 65 61 64 4f 6e 6c 79 0d    bool readOnly.
73f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
7400: 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   )..            
7410: 20 20 20 20 3a 20 74 68 69 73 28 6b 65 79 2c 20      : this(key, 
7420: 73 75 62 4b 65 79 4e 61 6d 65 2c 20 77 68 61 74  subKeyName, what
7430: 49 66 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  If)..           
7440: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
7450: 20 20 20 20 74 68 69 73 2e 72 65 61 64 4f 6e 6c      this.readOnl
7460: 79 20 3d 20 72 65 61 64 4f 6e 6c 79 3b 0d 0a 20  y = readOnly;.. 
7470: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
7480: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
7490: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
74a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
74b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
74c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
74d0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
74e0: 75 62 6c 69 63 20 4d 6f 63 6b 52 65 67 69 73 74  ublic MockRegist
74f0: 72 79 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20  ryKey(..        
7500: 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79          Registry
7510: 4b 65 79 20 6b 65 79 2c 0d 0a 20 20 20 20 20 20  Key key,..      
7520: 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
7530: 20 73 75 62 4b 65 79 4e 61 6d 65 2c 0d 0a 20 20   subKeyName,..  
7540: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f                bo
7550: 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20  ol whatIf,..    
7560: 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
7570: 20 72 65 61 64 4f 6e 6c 79 2c 0d 0a 20 20 20 20   readOnly,..    
7580: 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
7590: 20 73 61 66 65 0d 0a 20 20 20 20 20 20 20 20 20   safe..         
75a0: 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
75b0: 20 20 20 20 20 20 20 20 20 20 3a 20 74 68 69 73            : this
75c0: 28 6b 65 79 2c 20 73 75 62 4b 65 79 4e 61 6d 65  (key, subKeyName
75d0: 2c 20 77 68 61 74 49 66 2c 20 72 65 61 64 4f 6e  , whatIf, readOn
75e0: 6c 79 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ly)..           
75f0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
7600: 20 20 20 20 74 68 69 73 2e 73 61 66 65 20 3d 20      this.safe = 
7610: 73 61 66 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  safe;..         
7620: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
7630: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
7640: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7650: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7660: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7670: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
7680: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 4d 6f         public Mo
7690: 63 6b 52 65 67 69 73 74 72 79 4b 65 79 28 0d 0a  ckRegistryKey(..
76a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
76b0: 52 65 67 69 73 74 72 79 4b 65 79 20 6b 65 79 2c  RegistryKey key,
76c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
76d0: 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 0d 0a 20    bool whatIf.. 
76e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29                 )
76f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
7700: 20 20 3a 20 74 68 69 73 28 6b 65 79 2c 20 6e 75    : this(key, nu
7710: 6c 6c 2c 20 77 68 61 74 49 66 29 0d 0a 20 20 20  ll, whatIf)..   
7720: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
7730: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64              // d
7740: 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20  o nothing...    
7750: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
7760: 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
7770: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
77b0: 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
77c0: 69 63 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b  ic MockRegistryK
77d0: 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ey(..           
77e0: 20 20 20 20 20 52 65 67 69 73 74 72 79 4b 65 79       RegistryKey
77f0: 20 6b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20   key,..         
7800: 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74         bool what
7810: 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  If,..           
7820: 20 20 20 20 20 62 6f 6f 6c 20 72 65 61 64 4f 6e       bool readOn
7830: 6c 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ly..            
7840: 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20      )..         
7850: 20 20 20 20 20 20 20 3a 20 74 68 69 73 28 6b 65         : this(ke
7860: 79 2c 20 6e 75 6c 6c 2c 20 77 68 61 74 49 66 2c  y, null, whatIf,
7870: 20 72 65 61 64 4f 6e 6c 79 29 0d 0a 20 20 20 20   readOnly)..    
7880: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
7890: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f             // do
78a0: 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20   nothing...     
78b0: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
78c0: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
78d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
78e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
78f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7900: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
7910: 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
7920: 63 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65  c MockRegistryKe
7930: 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y(..            
7940: 20 20 20 20 52 65 67 69 73 74 72 79 4b 65 79 20      RegistryKey 
7950: 6b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  key,..          
7960: 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49        bool whatI
7970: 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  f,..            
7980: 20 20 20 20 62 6f 6f 6c 20 72 65 61 64 4f 6e 6c      bool readOnl
7990: 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y,..            
79a0: 20 20 20 20 62 6f 6f 6c 20 73 61 66 65 0d 0a 20      bool safe.. 
79b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29                 )
79c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
79d0: 20 20 3a 20 74 68 69 73 28 6b 65 79 2c 20 6e 75    : this(key, nu
79e0: 6c 6c 2c 20 77 68 61 74 49 66 2c 20 72 65 61 64  ll, whatIf, read
79f0: 4f 6e 6c 79 2c 20 73 61 66 65 29 0d 0a 20 20 20  Only, safe)..   
7a00: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
7a10: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64              // d
7a20: 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20  o nothing...    
7a30: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
7a40: 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f         #endregio
7a50: 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n....           
7a60: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
7a70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7a80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7a90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7aa0: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
7ab0: 20 20 20 20 23 72 65 67 69 6f 6e 20 50 75 62 6c      #region Publ
7ac0: 69 63 20 4d 65 74 68 6f 64 73 0d 0a 20 20 20 20  ic Methods..    
7ad0: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 76          public v
7ae0: 6f 69 64 20 43 6c 6f 73 65 28 29 0d 0a 20 20 20  oid Close()..   
7af0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
7b00: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
7b10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7b20: 2f 2f 20 4e 4f 54 45 3a 20 4e 6f 20 64 69 73 70  // NOTE: No disp
7b30: 6f 73 65 64 20 63 68 65 63 6b 20 68 65 72 65 20  osed check here 
7b40: 62 65 63 61 75 73 65 20 63 61 6c 6c 69 6e 67 20  because calling 
7b50: 74 68 69 73 20 6d 65 74 68 6f 64 0d 0a 20 20 20  this method..   
7b60: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
7b70: 20 20 20 20 20 20 73 68 6f 75 6c 64 20 62 65 20        should be 
7b80: 6a 75 73 74 20 6c 69 6b 65 20 63 61 6c 6c 69 6e  just like callin
7b90: 67 20 44 69 73 70 6f 73 65 2e 0d 0a 20 20 20 20  g Dispose...    
7ba0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
7bb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7bc0: 44 69 73 70 6f 73 65 28 74 72 75 65 29 3b 0d 0a  Dispose(true);..
7bd0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
7be0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
7bf0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7c00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7c10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7c20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7c30: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
7c40: 70 75 62 6c 69 63 20 4d 6f 63 6b 52 65 67 69 73  public MockRegis
7c50: 74 72 79 4b 65 79 20 43 72 65 61 74 65 53 75 62  tryKey CreateSub
7c60: 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20  Key(..          
7c70: 20 20 20 20 20 20 73 74 72 69 6e 67 20 73 75 62        string sub
7c80: 4b 65 79 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20  KeyName..       
7c90: 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
7ca0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
7cb0: 20 20 20 20 20 20 20 20 20 20 20 43 68 65 63 6b             Check
7cc0: 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 20 20 20  Disposed();..   
7cd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 43 68 65               Che
7ce0: 63 6b 52 65 61 64 4f 6e 6c 79 28 29 3b 0d 0a 0d  ckReadOnly();...
7cf0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
7d00: 20 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c   if (key == null
7d10: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
7d20: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 75         return nu
7d30: 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ll;....         
7d40: 20 20 20 20 20 20 20 69 66 20 28 77 68 61 74 49         if (whatI
7d50: 66 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  f)..            
7d60: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
7d70: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
7d80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7d90: 20 20 20 2f 2f 20 48 41 43 4b 3a 20 41 74 74 65     // HACK: Atte
7da0: 6d 70 74 20 74 6f 20 6f 70 65 6e 20 74 68 65 20  mpt to open the 
7db0: 73 70 65 63 69 66 69 65 64 20 73 75 62 2d 6b 65  specified sub-ke
7dc0: 79 2e 20 20 49 66 20 74 68 69 73 0d 0a 20 20 20  y.  If this..   
7dd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7de0: 20 2f 2f 20 20 20 20 20 20 20 66 61 69 6c 73 2c   //       fails,
7df0: 20 77 65 20 77 69 6c 6c 20 73 69 6d 70 6c 79 20   we will simply 
7e00: 72 65 74 75 72 6e 20 74 68 65 20 77 72 61 70 70  return the wrapp
7e10: 65 64 20 72 6f 6f 74 20 6b 65 79 0d 0a 20 20 20  ed root key..   
7e20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7e30: 20 2f 2f 20 20 20 20 20 20 20 69 74 73 65 6c 66   //       itself
7e40: 20 73 69 6e 63 65 20 6e 6f 20 77 72 69 74 65 73   since no writes
7e50: 20 61 72 65 20 61 6c 6c 6f 77 65 64 20 69 6e 20   are allowed in 
7e60: 27 77 68 61 74 2d 69 66 27 0d 0a 20 20 20 20 20  'what-if'..     
7e70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
7e80: 2f 20 20 20 20 20 20 20 6d 6f 64 65 20 61 6e 79  /       mode any
7e90: 68 6f 77 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  how...          
7ea0: 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
7eb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7ec0: 20 20 52 65 67 69 73 74 72 79 4b 65 79 20 73 75    RegistryKey su
7ed0: 62 4b 65 79 20 3d 20 6b 65 79 2e 4f 70 65 6e 53  bKey = key.OpenS
7ee0: 75 62 4b 65 79 28 73 75 62 4b 65 79 4e 61 6d 65  ubKey(subKeyName
7ef0: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
7f00: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
7f10: 20 28 73 75 62 4b 65 79 20 21 3d 20 6e 75 6c 6c   (subKey != null
7f20: 29 20 3f 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ) ?..           
7f30: 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 65 77               new
7f40: 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79   MockRegistryKey
7f50: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
7f60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7f70: 20 20 20 73 75 62 4b 65 79 2c 20 77 68 61 74 49     subKey, whatI
7f80: 66 2c 20 72 65 61 64 4f 6e 6c 79 2c 20 73 61 66  f, readOnly, saf
7f90: 65 29 20 3a 0d 0a 20 20 20 20 20 20 20 20 20 20  e) :..          
7fa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 65                ne
7fb0: 77 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65  w MockRegistryKe
7fc0: 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y(..            
7fd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7fe0: 20 20 20 20 6b 65 79 2c 20 73 75 62 4b 65 79 4e      key, subKeyN
7ff0: 61 6d 65 2c 20 77 68 61 74 49 66 2c 20 72 65 61  ame, whatIf, rea
8000: 64 4f 6e 6c 79 2c 20 73 61 66 65 29 3b 0d 0a 20  dOnly, safe);.. 
8010: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
8020: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
8030: 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20    else..        
8040: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
8050: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
8060: 65 74 75 72 6e 20 6e 65 77 20 4d 6f 63 6b 52 65  eturn new MockRe
8070: 67 69 73 74 72 79 4b 65 79 28 0d 0a 20 20 20 20  gistryKey(..    
8080: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8090: 20 20 20 20 6b 65 79 2e 43 72 65 61 74 65 53 75      key.CreateSu
80a0: 62 4b 65 79 28 73 75 62 4b 65 79 4e 61 6d 65 29  bKey(subKeyName)
80b0: 2c 20 77 68 61 74 49 66 2c 20 72 65 61 64 4f 6e  , whatIf, readOn
80c0: 6c 79 2c 20 73 61 66 65 29 3b 0d 0a 20 20 20 20  ly, safe);..    
80d0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
80e0: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
80f0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
8100: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8110: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8120: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8130: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
8140: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
8150: 75 62 6c 69 63 20 76 6f 69 64 20 44 65 6c 65 74  ublic void Delet
8160: 65 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20  eSubKey(..      
8170: 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
8180: 20 73 75 62 4b 65 79 4e 61 6d 65 2c 0d 0a 20 20   subKeyName,..  
8190: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f                bo
81a0: 6f 6c 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e  ol throwOnMissin
81b0: 67 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  g..             
81c0: 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20     )..          
81d0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
81e0: 20 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73       CheckDispos
81f0: 65 64 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ed();..         
8200: 20 20 20 20 20 20 20 43 68 65 63 6b 52 65 61 64         CheckRead
8210: 4f 6e 6c 79 28 29 3b 0d 0a 0d 0a 20 20 20 20 20  Only();....     
8220: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6b             if (k
8230: 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ey == null)..   
8240: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8250: 20 72 65 74 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20   return;....    
8260: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
8270: 21 77 68 61 74 49 66 29 0d 0a 20 20 20 20 20 20  !whatIf)..      
8280: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6b 65                ke
8290: 79 2e 44 65 6c 65 74 65 53 75 62 4b 65 79 28 73  y.DeleteSubKey(s
82a0: 75 62 4b 65 79 4e 61 6d 65 2c 20 74 68 72 6f 77  ubKeyName, throw
82b0: 4f 6e 4d 69 73 73 69 6e 67 29 3b 0d 0a 20 20 20  OnMissing);..   
82c0: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
82d0: 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
82e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
82f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8300: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8310: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
8320: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
8330: 6c 69 63 20 76 6f 69 64 20 44 65 6c 65 74 65 53  lic void DeleteS
8340: 75 62 4b 65 79 54 72 65 65 28 0d 0a 20 20 20 20  ubKeyTree(..    
8350: 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
8360: 6e 67 20 73 75 62 4b 65 79 4e 61 6d 65 0d 0a 20  ng subKeyName.. 
8370: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29                 )
8380: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
8390: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
83a0: 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29   CheckDisposed()
83b0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
83c0: 20 20 20 43 68 65 63 6b 52 65 61 64 4f 6e 6c 79     CheckReadOnly
83d0: 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ();....         
83e0: 20 20 20 20 20 20 20 69 66 20 28 6b 65 79 20 3d         if (key =
83f0: 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
8400: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
8410: 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  urn;....        
8420: 20 20 20 20 20 20 20 20 69 66 20 28 21 77 68 61          if (!wha
8430: 74 49 66 29 0d 0a 20 20 20 20 20 20 20 20 20 20  tIf)..          
8440: 20 20 20 20 20 20 20 20 20 20 6b 65 79 2e 44 65            key.De
8450: 6c 65 74 65 53 75 62 4b 65 79 54 72 65 65 28 73  leteSubKeyTree(s
8460: 75 62 4b 65 79 4e 61 6d 65 29 3b 0d 0a 20 20 20  ubKeyName);..   
8470: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
8480: 20 20 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
84d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
84e0: 6c 69 63 20 76 6f 69 64 20 44 65 6c 65 74 65 56  lic void DeleteV
84f0: 61 6c 75 65 28 0d 0a 20 20 20 20 20 20 20 20 20  alue(..         
8500: 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6e 61         string na
8510: 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me,..           
8520: 20 20 20 20 20 62 6f 6f 6c 20 74 68 72 6f 77 4f       bool throwO
8530: 6e 4d 69 73 73 69 6e 67 0d 0a 20 20 20 20 20 20  nMissing..      
8540: 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
8550: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
8560: 20 20 20 20 20 20 20 20 20 20 20 20 43 68 65 63              Chec
8570: 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 20 20  kDisposed();..  
8580: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43 68                Ch
8590: 65 63 6b 52 65 61 64 4f 6e 6c 79 28 29 3b 0d 0a  eckReadOnly();..
85a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
85b0: 20 20 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75 6c    if (key == nul
85c0: 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
85d0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 3b 0d          return;.
85e0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
85f0: 20 20 20 69 66 20 28 21 77 68 61 74 49 66 29 0d     if (!whatIf).
8600: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
8610: 20 20 20 20 20 6b 65 79 2e 44 65 6c 65 74 65 56       key.DeleteV
8620: 61 6c 75 65 28 6e 61 6d 65 2c 20 74 68 72 6f 77  alue(name, throw
8630: 4f 6e 4d 69 73 73 69 6e 67 29 3b 0d 0a 20 20 20  OnMissing);..   
8640: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
8650: 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
8660: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8670: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8680: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8690: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
86a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
86b0: 6c 69 63 20 73 74 72 69 6e 67 5b 5d 20 47 65 74  lic string[] Get
86c0: 53 75 62 4b 65 79 4e 61 6d 65 73 28 29 0d 0a 20  SubKeyNames().. 
86d0: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
86e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43 68                Ch
86f0: 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a  eckDisposed();..
8700: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
8710: 20 20 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75 6c    if (key == nul
8720: 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
8730: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e          return n
8740: 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ull;....        
8750: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6b          return k
8760: 65 79 2e 47 65 74 53 75 62 4b 65 79 4e 61 6d 65  ey.GetSubKeyName
8770: 73 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  s();..          
8780: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
8790: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
87a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
87b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
87c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
87d0: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
87e0: 20 20 20 20 20 20 70 75 62 6c 69 63 20 6f 62 6a        public obj
87f0: 65 63 74 20 47 65 74 56 61 6c 75 65 28 0d 0a 20  ect GetValue(.. 
8800: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
8810: 74 72 69 6e 67 20 6e 61 6d 65 2c 0d 0a 20 20 20  tring name,..   
8820: 20 20 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a               obj
8830: 65 63 74 20 64 65 66 61 75 6c 74 56 61 6c 75 65  ect defaultValue
8840: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
8850: 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20    )..           
8860: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
8870: 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65      CheckDispose
8880: 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  d();....        
8890: 20 20 20 20 20 20 20 20 69 66 20 28 6b 65 79 20          if (key 
88a0: 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
88b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
88c0: 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20  turn null;....  
88d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
88e0: 74 75 72 6e 20 6b 65 79 2e 47 65 74 56 61 6c 75  turn key.GetValu
88f0: 65 28 6e 61 6d 65 2c 20 64 65 66 61 75 6c 74 56  e(name, defaultV
8900: 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  alue);..        
8910: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
8920: 20 20 20 20 20 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 2f 2f 2f 2f  ////////////////
8950: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8960: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
8970: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 4d          public M
8980: 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 4f  ockRegistryKey O
8990: 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20 20  penSubKey(..    
89a0: 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
89b0: 6e 67 20 73 75 62 4b 65 79 4e 61 6d 65 0d 0a 20  ng subKeyName.. 
89c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29                 )
89d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
89e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
89f0: 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29   CheckDisposed()
8a00: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
8a10: 20 20 20 20 20 72 65 74 75 72 6e 20 4f 70 65 6e       return Open
8a20: 53 75 62 4b 65 79 28 73 75 62 4b 65 79 4e 61 6d  SubKey(subKeyNam
8a30: 65 2c 20 66 61 6c 73 65 29 3b 0d 0a 20 20 20 20  e, false);..    
8a40: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
8a50: 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
8a60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8a70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8a80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8a90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
8aa0: 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
8ab0: 69 63 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b  ic MockRegistryK
8ac0: 65 79 20 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a  ey OpenSubKey(..
8ad0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8ae0: 73 74 72 69 6e 67 20 73 75 62 4b 65 79 4e 61 6d  string subKeyNam
8af0: 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
8b00: 20 20 20 20 62 6f 6f 6c 20 77 72 69 74 61 62 6c      bool writabl
8b10: 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..             
8b20: 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20     )..          
8b30: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
8b40: 20 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73       CheckDispos
8b50: 65 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ed();....       
8b60: 20 20 20 20 20 20 20 20 20 69 66 20 28 77 72 69           if (wri
8b70: 74 61 62 6c 65 29 0d 0a 20 20 20 20 20 20 20 20  table)..        
8b80: 20 20 20 20 20 20 20 20 20 20 20 20 43 68 65 63              Chec
8b90: 6b 52 65 61 64 4f 6e 6c 79 28 29 3b 0d 0a 0d 0a  kReadOnly();....
8ba0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8bb0: 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29  if (key == null)
8bc0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
8bd0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c        return nul
8be0: 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  l;....          
8bf0: 20 20 20 20 20 20 52 65 67 69 73 74 72 79 4b 65        RegistryKe
8c00: 79 20 73 75 62 4b 65 79 20 3d 20 6b 65 79 2e 4f  y subKey = key.O
8c10: 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20 20  penSubKey(..    
8c20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8c30: 73 75 62 4b 65 79 4e 61 6d 65 2c 20 77 68 61 74  subKeyName, what
8c40: 49 66 20 3f 20 66 61 6c 73 65 20 3a 20 77 72 69  If ? false : wri
8c50: 74 61 62 6c 65 29 3b 0d 0a 0d 0a 20 20 20 20 20  table);....     
8c60: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
8c70: 6e 20 28 73 75 62 4b 65 79 20 21 3d 20 6e 75 6c  n (subKey != nul
8c80: 6c 29 20 3f 0d 0a 20 20 20 20 20 20 20 20 20 20  l) ?..          
8c90: 20 20 20 20 20 20 20 20 20 20 6e 65 77 20 4d 6f            new Mo
8ca0: 63 6b 52 65 67 69 73 74 72 79 4b 65 79 28 73 75  ckRegistryKey(su
8cb0: 62 4b 65 79 2c 20 77 68 61 74 49 66 2c 20 72 65  bKey, whatIf, re
8cc0: 61 64 4f 6e 6c 79 2c 20 73 61 66 65 29 20 3a 20  adOnly, safe) : 
8cd0: 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20  null;..         
8ce0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
8cf0: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
8d00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8d10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8d20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8d30: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
8d40: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 76 6f         public vo
8d50: 69 64 20 53 65 74 56 61 6c 75 65 28 0d 0a 20 20  id SetValue(..  
8d60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
8d70: 72 69 6e 67 20 6e 61 6d 65 2c 0d 0a 20 20 20 20  ring name,..    
8d80: 20 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65              obje
8d90: 63 74 20 76 61 6c 75 65 0d 0a 20 20 20 20 20 20  ct value..      
8da0: 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
8db0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
8dc0: 20 20 20 20 20 20 20 20 20 20 20 20 43 68 65 63              Chec
8dd0: 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 20 20  kDisposed();..  
8de0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43 68                Ch
8df0: 65 63 6b 52 65 61 64 4f 6e 6c 79 28 29 3b 0d 0a  eckReadOnly();..
8e00: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
8e10: 20 20 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75 6c    if (key == nul
8e20: 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
8e30: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 3b 0d          return;.
8e40: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
8e50: 20 20 20 69 66 20 28 21 77 68 61 74 49 66 29 0d     if (!whatIf).
8e60: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
8e70: 20 20 20 20 20 6b 65 79 2e 53 65 74 56 61 6c 75       key.SetValu
8e80: 65 28 6e 61 6d 65 2c 20 76 61 6c 75 65 29 3b 0d  e(name, value);.
8e90: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
8ea0: 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64              #end
8eb0: 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20  region....      
8ec0: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
8ed0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8ee0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8ef0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8f00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
8f10: 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e           #region
8f20: 20 50 75 62 6c 69 63 20 50 72 6f 70 65 72 74 69   Public Properti
8f30: 65 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  es..            
8f40: 70 75 62 6c 69 63 20 73 74 72 69 6e 67 20 4e 61  public string Na
8f50: 6d 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  me..            
8f60: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
8f70: 20 20 20 67 65 74 0d 0a 20 20 20 20 20 20 20 20     get..        
8f80: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
8f90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43                 C
8fa0: 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d  heckDisposed();.
8fb0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
8fc0: 20 20 20 20 20 20 20 69 66 20 28 6b 65 79 20 3d         if (key =
8fd0: 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
8fe0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8ff0: 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d   return null;...
9000: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
9010: 20 20 20 20 20 72 65 74 75 72 6e 20 21 53 74 72       return !Str
9020: 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74  ing.IsNullOrEmpt
9030: 79 28 73 75 62 4b 65 79 4e 61 6d 65 29 20 3f 0d  y(subKeyName) ?.
9040: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
9050: 20 20 20 20 20 20 20 20 20 53 74 72 69 6e 67 2e           String.
9060: 46 6f 72 6d 61 74 28 22 7b 30 7d 5c 5c 7b 31 7d  Format("{0}\\{1}
9070: 22 2c 20 6b 65 79 2e 4e 61 6d 65 2c 20 73 75 62  ", key.Name, sub
9080: 4b 65 79 4e 61 6d 65 29 20 3a 0d 0a 20 20 20 20  KeyName) :..    
9090: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
90a0: 20 20 20 20 6b 65 79 2e 4e 61 6d 65 3b 0d 0a 20      key.Name;.. 
90b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
90c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
90d0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
90e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
90f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9100: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9110: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9120: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
9130: 20 20 70 72 69 76 61 74 65 20 52 65 67 69 73 74    private Regist
9140: 72 79 4b 65 79 20 6b 65 79 3b 0d 0a 20 20 20 20  ryKey key;..    
9150: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 52          public R
9160: 65 67 69 73 74 72 79 4b 65 79 20 4b 65 79 0d 0a  egistryKey Key..
9170: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
9180: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67                 g
9190: 65 74 20 7b 20 43 68 65 63 6b 44 69 73 70 6f 73  et { CheckDispos
91a0: 65 64 28 29 3b 20 43 68 65 63 6b 53 61 66 65 28  ed(); CheckSafe(
91b0: 29 3b 20 72 65 74 75 72 6e 20 6b 65 79 3b 20 7d  ); return key; }
91c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
91d0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
91e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
91f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9200: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9210: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9220: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
9230: 20 20 70 72 69 76 61 74 65 20 73 74 72 69 6e 67    private string
9240: 20 73 75 62 4b 65 79 4e 61 6d 65 3b 0d 0a 20 20   subKeyName;..  
9250: 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
9260: 20 73 74 72 69 6e 67 20 53 75 62 4b 65 79 4e 61   string SubKeyNa
9270: 6d 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  me..            
9280: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
9290: 20 20 20 67 65 74 20 7b 20 43 68 65 63 6b 44 69     get { CheckDi
92a0: 73 70 6f 73 65 64 28 29 3b 20 72 65 74 75 72 6e  sposed(); return
92b0: 20 73 75 62 4b 65 79 4e 61 6d 65 3b 20 7d 0d 0a   subKeyName; }..
92c0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
92d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
92e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
92f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9300: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9310: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9320: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
9330: 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 77 68 61  private bool wha
9340: 74 49 66 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  tIf;..          
9350: 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 57 68    public bool Wh
9360: 61 74 49 66 0d 0a 20 20 20 20 20 20 20 20 20 20  atIf..          
9370: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
9380: 20 20 20 20 20 67 65 74 20 7b 20 43 68 65 63 6b       get { Check
9390: 44 69 73 70 6f 73 65 64 28 29 3b 20 72 65 74 75  Disposed(); retu
93a0: 72 6e 20 77 68 61 74 49 66 3b 20 7d 0d 0a 20 20  rn whatIf; }..  
93b0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
93c0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
93d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
93e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
93f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9400: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
9410: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
9420: 69 76 61 74 65 20 62 6f 6f 6c 20 72 65 61 64 4f  ivate bool readO
9430: 6e 6c 79 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  nly;..          
9440: 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 52 65    public bool Re
9450: 61 64 4f 6e 6c 79 0d 0a 20 20 20 20 20 20 20 20  adOnly..        
9460: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
9470: 20 20 20 20 20 20 20 67 65 74 20 7b 20 43 68 65         get { Che
9480: 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 20 72 65  ckDisposed(); re
9490: 74 75 72 6e 20 72 65 61 64 4f 6e 6c 79 3b 20 7d  turn readOnly; }
94a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
94b0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9500: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
9510: 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 73 61    public bool sa
9520: 66 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  fe;..           
9530: 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 53 61 66   public bool Saf
9540: 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  e..            {
9550: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
9560: 20 20 67 65 74 20 7b 20 43 68 65 63 6b 44 69 73    get { CheckDis
9570: 70 6f 73 65 64 28 29 3b 20 72 65 74 75 72 6e 20  posed(); return 
9580: 73 61 66 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20  safe; }..       
9590: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
95a0: 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
95b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
95c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
95d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
95e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
95f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9600: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
9610: 20 23 72 65 67 69 6f 6e 20 50 72 69 76 61 74 65   #region Private
9620: 20 4d 65 74 68 6f 64 73 0d 0a 20 20 20 20 20 20   Methods..      
9630: 20 20 20 20 20 20 70 72 69 76 61 74 65 20 76 6f        private vo
9640: 69 64 20 43 68 65 63 6b 52 65 61 64 4f 6e 6c 79  id CheckReadOnly
9650: 28 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ()..            
9660: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
9670: 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
9680: 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20         // NOTE: 
9690: 49 6e 20 22 72 65 61 64 2d 6f 6e 6c 79 22 20 6d  In "read-only" m
96a0: 6f 64 65 2c 20 77 65 20 64 69 73 61 6c 6c 6f 77  ode, we disallow
96b0: 20 61 6c 6c 20 77 72 69 74 65 20 61 63 63 65 73   all write acces
96c0: 73 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  s...            
96d0: 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
96e0: 20 20 20 20 20 20 20 20 69 66 20 28 21 72 65 61          if (!rea
96f0: 64 4f 6e 6c 79 29 0d 0a 20 20 20 20 20 20 20 20  dOnly)..        
9700: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
9710: 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  rn;....         
9720: 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77         throw new
9730: 20 49 6e 76 61 6c 69 64 4f 70 65 72 61 74 69 6f   InvalidOperatio
9740: 6e 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 20  nException();.. 
9750: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
9760: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
9770: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9780: 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d  ///////////////.
97b0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
97c0: 72 69 76 61 74 65 20 76 6f 69 64 20 43 68 65 63  rivate void Chec
97d0: 6b 53 61 66 65 28 29 0d 0a 20 20 20 20 20 20 20  kSafe()..       
97e0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
97f0: 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
9800: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e              // N
9810: 4f 54 45 3a 20 49 6e 20 22 73 61 66 65 22 20 6d  OTE: In "safe" m
9820: 6f 64 65 2c 20 77 65 20 64 69 73 61 6c 6c 6f 77  ode, we disallow
9830: 20 61 6c 6c 20 64 69 72 65 63 74 20 61 63 63 65   all direct acce
9840: 73 73 20 74 6f 20 74 68 65 0d 0a 20 20 20 20 20  ss to the..     
9850: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
9860: 20 20 20 20 63 6f 6e 74 61 69 6e 65 64 20 72 65      contained re
9870: 67 69 73 74 72 79 20 6b 65 79 2e 0d 0a 20 20 20  gistry key...   
9880: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
9890: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
98a0: 20 69 66 20 28 21 73 61 66 65 29 0d 0a 20 20 20   if (!safe)..   
98b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
98c0: 20 72 65 74 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20   return;....    
98d0: 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f              thro
98e0: 77 20 6e 65 77 20 49 6e 76 61 6c 69 64 4f 70 65  w new InvalidOpe
98f0: 72 61 74 69 6f 6e 45 78 63 65 70 74 69 6f 6e 28  rationException(
9900: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
9910: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  }..            #
9920: 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20  endregion....   
9930: 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
9940: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9950: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9960: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9970: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
9980: 20 20 20 20 20 20 20 20 20 20 20 20 23 72 65 67              #reg
9990: 69 6f 6e 20 53 79 73 74 65 6d 2e 4f 62 6a 65 63  ion System.Objec
99a0: 74 20 4f 76 65 72 72 69 64 65 73 0d 0a 20 20 20  t Overrides..   
99b0: 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
99c0: 6f 76 65 72 72 69 64 65 20 73 74 72 69 6e 67 20  override string 
99d0: 54 6f 53 74 72 69 6e 67 28 29 0d 0a 20 20 20 20  ToString()..    
99e0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
99f0: 20 20 20 20 20 20 20 20 20 20 20 43 68 65 63 6b             Check
9a00: 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20  Disposed();.... 
9a10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
9a20: 65 74 75 72 6e 20 74 68 69 73 2e 4e 61 6d 65 3b  eturn this.Name;
9a30: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
9a40: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e  .            #en
9a50: 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
9a60: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
9a70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9a80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9a90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9aa0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
9ab0: 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f            #regio
9ac0: 6e 20 49 6d 70 6c 69 63 69 74 20 43 6f 6e 76 65  n Implicit Conve
9ad0: 72 73 69 6f 6e 20 4f 70 65 72 61 74 6f 72 73 0d  rsion Operators.
9ae0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d  .            //.
9af0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20  .            // 
9b00: 42 55 47 42 55 47 3a 20 52 65 6d 6f 76 65 20 6d  BUGBUG: Remove m
9b10: 65 3f 20 20 54 68 69 73 20 73 68 6f 75 6c 64 20  e?  This should 
9b20: 62 65 20 73 61 66 65 20 62 65 63 61 75 73 65 20  be safe because 
9b30: 69 6e 20 27 77 68 61 74 2d 69 66 27 0d 0a 20 20  in 'what-if'..  
9b40: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
9b50: 20 20 20 20 20 6d 6f 64 65 20 61 6c 6c 20 6b 65       mode all ke
9b60: 79 73 20 61 72 65 20 6f 70 65 6e 65 64 20 72 65  ys are opened re
9b70: 61 64 2d 6f 6e 6c 79 2e 0d 0a 20 20 20 20 20 20  ad-only...      
9b80: 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
9b90: 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61        public sta
9ba0: 74 69 63 20 69 6d 70 6c 69 63 69 74 20 6f 70 65  tic implicit ope
9bb0: 72 61 74 6f 72 20 52 65 67 69 73 74 72 79 4b 65  rator RegistryKe
9bc0: 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y(..            
9bd0: 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79      MockRegistry
9be0: 4b 65 79 20 6b 65 79 0d 0a 20 20 20 20 20 20 20  Key key..       
9bf0: 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
9c00: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
9c10: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
9c20: 6e 20 28 6b 65 79 20 21 3d 20 6e 75 6c 6c 29 20  n (key != null) 
9c30: 3f 20 6b 65 79 2e 4b 65 79 20 3a 20 6e 75 6c 6c  ? key.Key : null
9c40: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
9c50: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 65  ..            #e
9c60: 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20  ndregion....    
9c70: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
9c80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9c90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9ca0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9cb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
9cc0: 20 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69             #regi
9cd0: 6f 6e 20 49 44 69 73 70 6f 73 61 62 6c 65 20 22  on IDisposable "
9ce0: 50 61 74 74 65 72 6e 22 20 4d 65 6d 62 65 72 73  Pattern" Members
9cf0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
9d00: 69 76 61 74 65 20 62 6f 6f 6c 20 64 69 73 70 6f  ivate bool dispo
9d10: 73 65 64 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  sed;..          
9d20: 20 20 70 72 69 76 61 74 65 20 76 6f 69 64 20 43    private void C
9d30: 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 20 2f  heckDisposed() /
9d40: 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a 20 20 20 20  * throw */..    
9d50: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
9d60: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21             if (!
9d70: 64 69 73 70 6f 73 65 64 29 0d 0a 20 20 20 20 20  disposed)..     
9d80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
9d90: 65 74 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20  eturn;....      
9da0: 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20            throw 
9db0: 6e 65 77 20 4f 62 6a 65 63 74 44 69 73 70 6f 73  new ObjectDispos
9dc0: 65 64 45 78 63 65 70 74 69 6f 6e 28 0d 0a 20 20  edException(..  
9dd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9de0: 20 20 74 79 70 65 6f 66 28 4d 6f 63 6b 52 65 67    typeof(MockReg
9df0: 69 73 74 72 79 4b 65 79 29 2e 4e 61 6d 65 29 3b  istryKey).Name);
9e00: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
9e10: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 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 2f 2f  ////////////////
9e40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9e50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9e60: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
9e70: 20 20 70 72 69 76 61 74 65 20 2f 2a 20 70 72 6f    private /* pro
9e80: 74 65 63 74 65 64 20 76 69 72 74 75 61 6c 20 2a  tected virtual *
9e90: 2f 20 76 6f 69 64 20 44 69 73 70 6f 73 65 28 0d  / void Dispose(.
9ea0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
9eb0: 20 62 6f 6f 6c 20 64 69 73 70 6f 73 69 6e 67 0d   bool disposing.
9ec0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
9ed0: 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   )..            
9ee0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
9ef0: 20 20 20 69 66 20 28 21 64 69 73 70 6f 73 65 64     if (!disposed
9f00: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
9f10: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
9f20: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 64 69            if (di
9f30: 73 70 6f 73 69 6e 67 29 0d 0a 20 20 20 20 20 20  sposing)..      
9f40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
9f50: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
9f60: 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
9f70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9f80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 20  /////////////.. 
9f90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9fa0: 20 20 20 20 20 20 20 2f 2f 20 64 69 73 70 6f 73         // dispos
9fb0: 65 20 6d 61 6e 61 67 65 64 20 72 65 73 6f 75 72  e managed resour
9fc0: 63 65 73 20 68 65 72 65 2e 2e 2e 0d 0a 20 20 20  ces here.....   
9fd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9fe0: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
9ff0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a000: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
a010: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a020: 20 20 20 20 20 69 66 20 28 6b 65 79 20 21 3d 20       if (key != 
a030: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
a040: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
a050: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
a060: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6b 65                ke
a070: 79 2e 43 6c 6f 73 65 28 29 3b 0d 0a 20 20 20 20  y.Close();..    
a080: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a090: 20 20 20 20 20 20 20 20 6b 65 79 20 3d 20 6e 75          key = nu
a0a0: 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll;..           
a0b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
a0c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a0d0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
a0e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 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 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ///..           
a120: 20 20 20 20 20 20 20 20 20 2f 2f 20 72 65 6c 65           // rele
a130: 61 73 65 20 75 6e 6d 61 6e 61 67 65 64 20 72 65  ase unmanaged re
a140: 73 6f 75 72 63 65 73 20 68 65 72 65 2e 2e 2e 0d  sources here....
a150: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
a160: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
a170: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a180: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
a190: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a1a0: 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
a1b0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f             // NO
a1c0: 54 45 3a 20 54 68 69 73 20 6f 62 6a 65 63 74 20  TE: This object 
a1d0: 69 73 20 6e 6f 77 20 64 69 73 70 6f 73 65 64 2e  is now disposed.
a1e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
a1f0: 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
a200: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 69                di
a210: 73 70 6f 73 65 64 20 3d 20 74 72 75 65 3b 0d 0a  sposed = true;..
a220: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a230: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
a240: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 65  ..            #e
a250: 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20  ndregion....    
a260: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
a270: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a280: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a290: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a2a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
a2b0: 20 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69             #regi
a2c0: 6f 6e 20 49 44 69 73 70 6f 73 61 62 6c 65 20 4d  on IDisposable M
a2d0: 65 6d 62 65 72 73 0d 0a 20 20 20 20 20 20 20 20  embers..        
a2e0: 20 20 20 20 70 75 62 6c 69 63 20 76 6f 69 64 20      public void 
a2f0: 44 69 73 70 6f 73 65 28 29 0d 0a 20 20 20 20 20  Dispose()..     
a300: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
a310: 20 20 20 20 20 20 20 20 20 20 44 69 73 70 6f 73            Dispos
a320: 65 28 74 72 75 65 29 3b 0d 0a 20 20 20 20 20 20  e(true);..      
a330: 20 20 20 20 20 20 20 20 20 20 47 43 2e 53 75 70            GC.Sup
a340: 70 72 65 73 73 46 69 6e 61 6c 69 7a 65 28 74 68  pressFinalize(th
a350: 69 73 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  is);..          
a360: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
a370: 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20   #endregion.... 
a380: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
a390: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a3a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a3b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a3c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
a3d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 72  ..            #r
a3e0: 65 67 69 6f 6e 20 44 65 73 74 72 75 63 74 6f 72  egion Destructor
a3f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7e 4d  ..            ~M
a400: 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 28 29  ockRegistryKey()
a410: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
a420: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
a430: 20 44 69 73 70 6f 73 65 28 66 61 6c 73 65 29 3b   Dispose(false);
a440: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
a450: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e  .            #en
a460: 64 72 65 67 69 6f 6e 0d 0a 20 20 20 20 20 20 20  dregion..       
a470: 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64   }..        #end
a480: 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20  region....      
a490: 20 20 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 2f 2f 2f 2f 2f  ////////////////
a4d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
a4e0: 20 20 20 20 20 23 72 65 67 69 6f 6e 20 52 65 67       #region Reg
a4f0: 69 73 74 72 79 48 65 6c 70 65 72 20 43 6c 61 73  istryHelper Clas
a500: 73 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  s..        priva
a510: 74 65 20 73 74 61 74 69 63 20 63 6c 61 73 73 20  te static class 
a520: 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 0d 0a  RegistryHelper..
a530: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
a540: 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50         #region P
a550: 75 62 6c 69 63 20 53 74 61 74 69 63 20 50 72 6f  ublic Static Pro
a560: 70 65 72 74 69 65 73 0d 0a 20 20 20 20 20 20 20  perties..       
a570: 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61       private sta
a580: 74 69 63 20 69 6e 74 20 73 75 62 4b 65 79 73 43  tic int subKeysC
a590: 72 65 61 74 65 64 3b 0d 0a 20 20 20 20 20 20 20  reated;..       
a5a0: 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74       public stat
a5b0: 69 63 20 69 6e 74 20 53 75 62 4b 65 79 73 43 72  ic int SubKeysCr
a5c0: 65 61 74 65 64 0d 0a 20 20 20 20 20 20 20 20 20  eated..         
a5d0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
a5e0: 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75        get { retu
a5f0: 72 6e 20 73 75 62 4b 65 79 73 43 72 65 61 74 65  rn subKeysCreate
a600: 64 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  d; }..          
a610: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
a620: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
a630: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a640: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a650: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a660: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
a670: 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74        private st
a680: 61 74 69 63 20 69 6e 74 20 73 75 62 4b 65 79 73  atic int subKeys
a690: 44 65 6c 65 74 65 64 3b 0d 0a 20 20 20 20 20 20  Deleted;..      
a6a0: 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61        public sta
a6b0: 74 69 63 20 69 6e 74 20 53 75 62 4b 65 79 73 44  tic int SubKeysD
a6c0: 65 6c 65 74 65 64 0d 0a 20 20 20 20 20 20 20 20  eleted..        
a6d0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
a6e0: 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74         get { ret
a6f0: 75 72 6e 20 73 75 62 4b 65 79 73 44 65 6c 65 74  urn subKeysDelet
a700: 65 64 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  ed; }..         
a710: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
a720: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
a730: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a740: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a750: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a760: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
a770: 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
a780: 74 61 74 69 63 20 69 6e 74 20 6b 65 79 56 61 6c  tatic int keyVal
a790: 75 65 73 53 65 74 3b 0d 0a 20 20 20 20 20 20 20  uesSet;..       
a7a0: 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74       public stat
a7b0: 69 63 20 69 6e 74 20 4b 65 79 56 61 6c 75 65 73  ic int KeyValues
a7c0: 53 65 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20  Set..           
a7d0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
a7e0: 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e      get { return
a7f0: 20 6b 65 79 56 61 6c 75 65 73 53 65 74 3b 20 7d   keyValuesSet; }
a800: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
a810: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
a820: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a830: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a840: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a850: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a860: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
a870: 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63    private static
a880: 20 69 6e 74 20 6b 65 79 56 61 6c 75 65 73 44 65   int keyValuesDe
a890: 6c 65 74 65 64 3b 0d 0a 20 20 20 20 20 20 20 20  leted;..        
a8a0: 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69      public stati
a8b0: 63 20 69 6e 74 20 4b 65 79 56 61 6c 75 65 73 44  c int KeyValuesD
a8c0: 65 6c 65 74 65 64 0d 0a 20 20 20 20 20 20 20 20  eleted..        
a8d0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
a8e0: 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74         get { ret
a8f0: 75 72 6e 20 6b 65 79 56 61 6c 75 65 73 44 65 6c  urn keyValuesDel
a900: 65 74 65 64 3b 20 7d 0d 0a 20 20 20 20 20 20 20  eted; }..       
a910: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
a920: 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
a930: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
a940: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a950: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a960: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a970: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a980: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
a990: 20 23 72 65 67 69 6f 6e 20 50 75 62 6c 69 63 20   #region Public 
a9a0: 53 74 61 74 69 63 20 4d 65 74 68 6f 64 73 0d 0a  Static Methods..
a9b0: 20 20 20 20 20 20 20 20 20 20 20 20 5b 4d 65 74              [Met
a9c0: 68 6f 64 49 6d 70 6c 28 4d 65 74 68 6f 64 49 6d  hodImpl(MethodIm
a9d0: 70 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e 6c 69  plOptions.NoInli
a9e0: 6e 69 6e 67 29 5d 0d 0a 20 20 20 20 20 20 20 20  ning)]..        
a9f0: 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69      public stati
aa00: 63 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65  c MockRegistryKe
aa10: 79 20 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20  y OpenSubKey(.. 
aa20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4d                 M
aa30: 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 72  ockRegistryKey r
aa40: 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20  ootKey,..       
aa50: 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
aa60: 73 75 62 4b 65 79 4e 61 6d 65 2c 0d 0a 20 20 20  subKeyName,..   
aa70: 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f               boo
aa80: 6c 20 77 72 69 74 61 62 6c 65 2c 0d 0a 20 20 20  l writable,..   
aa90: 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f               boo
aaa0: 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20  l whatIf,..     
aab0: 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
aac0: 76 65 72 62 6f 73 65 0d 0a 20 20 20 20 20 20 20  verbose..       
aad0: 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
aae0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
aaf0: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 72             if (r
ab00: 6f 6f 74 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d  ootKey == null).
ab10: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
ab20: 20 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c       return null
ab30: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
ab40: 20 20 20 20 20 69 66 20 28 76 65 72 62 6f 73 65       if (verbose
ab50: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
ab60: 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e         TraceOps.
ab70: 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 77 72  DebugAndTrace(wr
ab80: 69 74 61 62 6c 65 20 3f 0d 0a 20 20 20 20 20 20  itable ?..      
ab90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
aba0: 20 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e    TracePriority.
abb0: 48 69 67 68 65 73 74 20 3a 20 54 72 61 63 65 50  Highest : TraceP
abc0: 72 69 6f 72 69 74 79 2e 48 69 67 68 65 72 2c 0d  riority.Higher,.
abd0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
abe0: 20 20 20 20 20 20 20 20 20 64 65 62 75 67 43 61           debugCa
abf0: 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c  llback, traceCal
ac00: 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f  lback, String.Fo
ac10: 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
ac20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
ac30: 72 6f 6f 74 4b 65 79 20 3d 20 7b 30 7d 2c 20 73  rootKey = {0}, s
ac40: 75 62 4b 65 79 4e 61 6d 65 20 3d 20 7b 31 7d 2c  ubKeyName = {1},
ac50: 20 77 72 69 74 61 62 6c 65 20 3d 20 7b 32 7d 22   writable = {2}"
ac60: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
ac70: 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69             ForDi
ac80: 73 70 6c 61 79 28 72 6f 6f 74 4b 65 79 29 2c 20  splay(rootKey), 
ac90: 46 6f 72 44 69 73 70 6c 61 79 28 73 75 62 4b 65  ForDisplay(subKe
aca0: 79 4e 61 6d 65 29 2c 0d 0a 20 20 20 20 20 20 20  yName),..       
acb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
acc0: 20 46 6f 72 44 69 73 70 6c 61 79 28 77 72 69 74   ForDisplay(writ
acd0: 61 62 6c 65 29 29 2c 20 74 72 61 63 65 43 61 74  able)), traceCat
ace0: 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  egory);....     
acf0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
ad00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
ad10: 2f 20 48 41 43 4b 3a 20 41 6c 77 61 79 73 20 66  / HACK: Always f
ad20: 6f 72 62 69 64 20 77 72 69 74 61 62 6c 65 20 61  orbid writable a
ad30: 63 63 65 73 73 20 77 68 65 6e 20 6f 70 65 72 61  ccess when opera
ad40: 74 69 6e 67 20 69 6e 0d 0a 20 20 20 20 20 20 20  ting in..       
ad50: 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
ad60: 20 20 27 77 68 61 74 2d 69 66 27 20 6d 6f 64 65    'what-if' mode
ad70: 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
ad80: 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
ad90: 20 20 20 20 20 20 20 4d 6f 63 6b 52 65 67 69 73         MockRegis
ada0: 74 72 79 4b 65 79 20 6b 65 79 20 3d 20 72 6f 6f  tryKey key = roo
adb0: 74 4b 65 79 2e 4f 70 65 6e 53 75 62 4b 65 79 28  tKey.OpenSubKey(
adc0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
add0: 20 20 20 20 20 20 73 75 62 4b 65 79 4e 61 6d 65        subKeyName
ade0: 2c 20 77 68 61 74 49 66 20 3f 20 66 61 6c 73 65  , whatIf ? false
adf0: 20 3a 20 77 72 69 74 61 62 6c 65 29 3b 0d 0a 0d   : writable);...
ae00: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
ae10: 20 72 65 74 75 72 6e 20 28 6b 65 79 20 21 3d 20   return (key != 
ae20: 6e 75 6c 6c 29 20 3f 0d 0a 20 20 20 20 20 20 20  null) ?..       
ae30: 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 65 77               new
ae40: 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79   MockRegistryKey
ae50: 28 6b 65 79 2c 20 77 68 61 74 49 66 2c 20 66 61  (key, whatIf, fa
ae60: 6c 73 65 2c 20 66 61 6c 73 65 29 20 3a 20 6e 75  lse, false) : nu
ae70: 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll;..           
ae80: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
ae90: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
aea0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
aeb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
aec0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
aed0: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
aee0: 20 20 20 20 20 5b 4d 65 74 68 6f 64 49 6d 70 6c       [MethodImpl
aef0: 28 4d 65 74 68 6f 64 49 6d 70 6c 4f 70 74 69 6f  (MethodImplOptio
af00: 6e 73 2e 4e 6f 49 6e 6c 69 6e 69 6e 67 29 5d 0d  ns.NoInlining)].
af10: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
af20: 6c 69 63 20 73 74 61 74 69 63 20 4d 6f 63 6b 52  lic static MockR
af30: 65 67 69 73 74 72 79 4b 65 79 20 43 72 65 61 74  egistryKey Creat
af40: 65 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20  eSubKey(..      
af50: 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65            MockRe
af60: 67 69 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65  gistryKey rootKe
af70: 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y,..            
af80: 20 20 20 20 73 74 72 69 6e 67 20 73 75 62 4b 65      string subKe
af90: 79 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20  yName,..        
afa0: 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61          bool wha
afb0: 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  tIf,..          
afc0: 20 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f        bool verbo
afd0: 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  se..            
afe0: 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20      )..         
aff0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
b000: 20 20 20 20 20 20 69 66 20 28 72 6f 6f 74 4b 65        if (rootKe
b010: 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  y == null)..    
b020: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b030: 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a  return null;....
b040: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b050: 69 66 20 28 76 65 72 62 6f 73 65 29 0d 0a 20 20  if (verbose)..  
b060: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b070: 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67    TraceOps.Debug
b080: 41 6e 64 54 72 61 63 65 28 54 72 61 63 65 50 72  AndTrace(TracePr
b090: 69 6f 72 69 74 79 2e 48 69 67 68 65 73 74 2c 0d  iority.Highest,.
b0a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
b0b0: 20 20 20 20 20 20 20 20 20 64 65 62 75 67 43 61           debugCa
b0c0: 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c  llback, traceCal
b0d0: 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f  lback, String.Fo
b0e0: 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
b0f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
b100: 72 6f 6f 74 4b 65 79 20 3d 20 7b 30 7d 2c 20 73  rootKey = {0}, s
b110: 75 62 4b 65 79 4e 61 6d 65 20 3d 20 7b 31 7d 22  ubKeyName = {1}"
b120: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
b130: 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69             ForDi
b140: 73 70 6c 61 79 28 72 6f 6f 74 4b 65 79 29 2c 20  splay(rootKey), 
b150: 46 6f 72 44 69 73 70 6c 61 79 28 73 75 62 4b 65  ForDisplay(subKe
b160: 79 4e 61 6d 65 29 29 2c 0d 0a 20 20 20 20 20 20  yName)),..      
b170: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b180: 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29    traceCategory)
b190: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
b1a0: 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20       try..      
b1b0: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
b1c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b1d0: 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
b1e0: 20 20 20 20 20 20 20 20 20 2f 2f 20 48 41 43 4b           // HACK
b1f0: 3a 20 41 6c 77 61 79 73 20 6f 70 65 6e 20 61 20  : Always open a 
b200: 6b 65 79 2c 20 72 61 74 68 65 72 20 74 68 61 6e  key, rather than
b210: 20 63 72 65 61 74 69 6e 67 20 6f 6e 65 20 77 68   creating one wh
b220: 65 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  en..            
b230: 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
b240: 20 6f 70 65 72 61 74 69 6e 67 20 69 6e 20 27 77   operating in 'w
b250: 68 61 74 2d 69 66 27 20 6d 6f 64 65 2e 0d 0a 20  hat-if' mode... 
b260: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b270: 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
b280: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 77             if (w
b290: 68 61 74 49 66 29 0d 0a 20 20 20 20 20 20 20 20  hatIf)..        
b2a0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
b2b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b2c0: 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
b2d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b2e0: 20 20 20 2f 2f 20 48 41 43 4b 3a 20 41 74 74 65     // HACK: Atte
b2f0: 6d 70 74 20 74 6f 20 6f 70 65 6e 20 74 68 65 20  mpt to open the 
b300: 73 70 65 63 69 66 69 65 64 20 73 75 62 2d 6b 65  specified sub-ke
b310: 79 2e 20 20 49 66 0d 0a 20 20 20 20 20 20 20 20  y.  If..        
b320: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b330: 2f 2f 20 20 20 20 20 20 20 74 68 69 73 20 66 61  //       this fa
b340: 69 6c 73 2c 20 77 65 20 77 69 6c 6c 20 73 69 6d  ils, we will sim
b350: 70 6c 79 20 72 65 74 75 72 6e 20 74 68 65 20 72  ply return the r
b360: 6f 6f 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20  oot..           
b370: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
b380: 20 20 20 20 20 20 6b 65 79 20 69 74 73 65 6c 66        key itself
b390: 20 73 69 6e 63 65 20 6e 6f 20 77 72 69 74 65 73   since no writes
b3a0: 20 61 72 65 20 61 6c 6c 6f 77 65 64 20 69 6e 0d   are allowed in.
b3b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
b3c0: 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
b3d0: 20 20 27 77 68 61 74 2d 69 66 27 20 6d 6f 64 65    'what-if' mode
b3e0: 20 61 6e 79 68 6f 77 2e 0d 0a 20 20 20 20 20 20   anyhow...      
b3f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b400: 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
b410: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4d 6f                Mo
b420: 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 6b 65  ckRegistryKey ke
b430: 79 20 3d 20 72 6f 6f 74 4b 65 79 2e 4f 70 65 6e  y = rootKey.Open
b440: 53 75 62 4b 65 79 28 73 75 62 4b 65 79 4e 61 6d  SubKey(subKeyNam
b450: 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e);....         
b460: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
b470: 65 74 75 72 6e 20 28 6b 65 79 20 21 3d 20 6e 75  eturn (key != nu
b480: 6c 6c 29 20 3f 0d 0a 20 20 20 20 20 20 20 20 20  ll) ?..         
b490: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b4a0: 20 20 20 6b 65 79 20 3a 20 6e 65 77 20 4d 6f 63     key : new Moc
b4b0: 6b 52 65 67 69 73 74 72 79 4b 65 79 28 0d 0a 20  kRegistryKey(.. 
b4c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b4d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
b4e0: 6f 6f 74 4b 65 79 2c 20 73 75 62 4b 65 79 4e 61  ootKey, subKeyNa
b4f0: 6d 65 2c 20 77 68 61 74 49 66 2c 20 66 61 6c 73  me, whatIf, fals
b500: 65 2c 20 66 61 6c 73 65 29 3b 0d 0a 20 20 20 20  e, false);..    
b510: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b520: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
b530: 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20         else..   
b540: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b550: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
b560: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
b570: 72 6e 20 6e 65 77 20 4d 6f 63 6b 52 65 67 69 73  rn new MockRegis
b580: 74 72 79 4b 65 79 28 0d 0a 20 20 20 20 20 20 20  tryKey(..       
b590: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b5a0: 20 20 20 20 20 72 6f 6f 74 4b 65 79 2e 43 72 65       rootKey.Cre
b5b0: 61 74 65 53 75 62 4b 65 79 28 73 75 62 4b 65 79  ateSubKey(subKey
b5c0: 4e 61 6d 65 29 2c 20 77 68 61 74 49 66 2c 20 66  Name), whatIf, f
b5d0: 61 6c 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  alse,..         
b5e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b5f0: 20 20 20 66 61 6c 73 65 29 3b 0d 0a 20 20 20 20     false);..    
b600: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b610: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
b620: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
b630: 20 20 20 20 20 20 66 69 6e 61 6c 6c 79 0d 0a 20        finally.. 
b640: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
b650: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
b660: 20 20 20 20 20 20 73 75 62 4b 65 79 73 43 72 65        subKeysCre
b670: 61 74 65 64 2b 2b 3b 0d 0a 20 20 20 20 20 20 20  ated++;..       
b680: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
b690: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
b6a0: 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
b6b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b6c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b6d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b6e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
b6f0: 20 20 20 20 20 20 20 20 20 20 20 20 5b 4d 65 74              [Met
b700: 68 6f 64 49 6d 70 6c 28 4d 65 74 68 6f 64 49 6d  hodImpl(MethodIm
b710: 70 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e 6c 69  plOptions.NoInli
b720: 6e 69 6e 67 29 5d 0d 0a 20 20 20 20 20 20 20 20  ning)]..        
b730: 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69      public stati
b740: 63 20 76 6f 69 64 20 44 65 6c 65 74 65 53 75 62  c void DeleteSub
b750: 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20  Key(..          
b760: 20 20 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 74        MockRegist
b770: 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a  ryKey rootKey,..
b780: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b790: 73 74 72 69 6e 67 20 73 75 62 4b 65 79 4e 61 6d  string subKeyNam
b7a0: 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
b7b0: 20 20 20 20 62 6f 6f 6c 20 74 68 72 6f 77 4f 6e      bool throwOn
b7c0: 4d 69 73 73 69 6e 67 2c 0d 0a 20 20 20 20 20 20  Missing,..      
b7d0: 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77            bool w
b7e0: 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20  hatIf,..        
b7f0: 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65 72          bool ver
b800: 62 6f 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20  bose..          
b810: 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
b820: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
b830: 20 20 20 20 20 20 20 20 69 66 20 28 72 6f 6f 74          if (root
b840: 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  Key == null)..  
b850: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b860: 20 20 72 65 74 75 72 6e 3b 0d 0a 0d 0a 20 20 20    return;....   
b870: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
b880: 28 76 65 72 62 6f 73 65 29 0d 0a 20 20 20 20 20  (verbose)..     
b890: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
b8a0: 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64  raceOps.DebugAnd
b8b0: 54 72 61 63 65 28 54 72 61 63 65 50 72 69 6f 72  Trace(TracePrior
b8c0: 69 74 79 2e 48 69 67 68 65 73 74 2c 0d 0a 20 20  ity.Highest,..  
b8d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b8e0: 20 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62        debugCallb
b8f0: 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61  ack, traceCallba
b900: 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ck, String.Forma
b910: 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
b920: 20 20 20 20 20 20 20 20 20 20 20 20 22 72 6f 6f              "roo
b930: 74 4b 65 79 20 3d 20 7b 30 7d 2c 20 73 75 62 4b  tKey = {0}, subK
b940: 65 79 4e 61 6d 65 20 3d 20 7b 31 7d 22 2c 0d 0a  eyName = {1}",..
b950: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b960: 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c          ForDispl
b970: 61 79 28 72 6f 6f 74 4b 65 79 29 2c 20 46 6f 72  ay(rootKey), For
b980: 44 69 73 70 6c 61 79 28 73 75 62 4b 65 79 4e 61  Display(subKeyNa
b990: 6d 65 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  me)),..         
b9a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
b9b0: 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
b9c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
b9d0: 20 20 69 66 20 28 21 77 68 61 74 49 66 29 0d 0a    if (!whatIf)..
b9e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b9f0: 20 20 20 20 72 6f 6f 74 4b 65 79 2e 44 65 6c 65      rootKey.Dele
ba00: 74 65 53 75 62 4b 65 79 28 73 75 62 4b 65 79 4e  teSubKey(subKeyN
ba10: 61 6d 65 2c 20 74 68 72 6f 77 4f 6e 4d 69 73 73  ame, throwOnMiss
ba20: 69 6e 67 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ing);....       
ba30: 20 20 20 20 20 20 20 20 20 73 75 62 4b 65 79 73           subKeys
ba40: 44 65 6c 65 74 65 64 2b 2b 3b 0d 0a 20 20 20 20  Deleted++;..    
ba50: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
ba60: 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
ba70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ba80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ba90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
baa0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
bab0: 20 20 20 20 20 20 20 20 20 20 20 20 5b 4d 65 74              [Met
bac0: 68 6f 64 49 6d 70 6c 28 4d 65 74 68 6f 64 49 6d  hodImpl(MethodIm
bad0: 70 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e 6c 69  plOptions.NoInli
bae0: 6e 69 6e 67 29 5d 0d 0a 20 20 20 20 20 20 20 20  ning)]..        
baf0: 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69      public stati
bb00: 63 20 76 6f 69 64 20 44 65 6c 65 74 65 53 75 62  c void DeleteSub
bb10: 4b 65 79 54 72 65 65 28 0d 0a 20 20 20 20 20 20  KeyTree(..      
bb20: 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65            MockRe
bb30: 67 69 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65  gistryKey rootKe
bb40: 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y,..            
bb50: 20 20 20 20 73 74 72 69 6e 67 20 73 75 62 4b 65      string subKe
bb60: 79 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20  yName,..        
bb70: 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61          bool wha
bb80: 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  tIf,..          
bb90: 20 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f        bool verbo
bba0: 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  se..            
bbb0: 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20      )..         
bbc0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
bbd0: 20 20 20 20 20 20 69 66 20 28 72 6f 6f 74 4b 65        if (rootKe
bbe0: 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  y == null)..    
bbf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bc00: 72 65 74 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20  return;....     
bc10: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76             if (v
bc20: 65 72 62 6f 73 65 29 0d 0a 20 20 20 20 20 20 20  erbose)..       
bc30: 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61               Tra
bc40: 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72  ceOps.DebugAndTr
bc50: 61 63 65 28 54 72 61 63 65 50 72 69 6f 72 69 74  ace(TracePriorit
bc60: 79 2e 48 69 67 68 65 73 74 2c 0d 0a 20 20 20 20  y.Highest,..    
bc70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bc80: 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63      debugCallbac
bc90: 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b  k, traceCallback
bca0: 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  , String.Format(
bcb0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
bcc0: 20 20 20 20 20 20 20 20 20 20 22 72 6f 6f 74 4b            "rootK
bcd0: 65 79 20 3d 20 7b 30 7d 2c 20 73 75 62 4b 65 79  ey = {0}, subKey
bce0: 4e 61 6d 65 20 3d 20 7b 31 7d 22 2c 0d 0a 20 20  Name = {1}",..  
bcf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bd00: 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79        ForDisplay
bd10: 28 72 6f 6f 74 4b 65 79 29 2c 20 46 6f 72 44 69  (rootKey), ForDi
bd20: 73 70 6c 61 79 28 73 75 62 4b 65 79 4e 61 6d 65  splay(subKeyName
bd30: 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  )),..           
bd40: 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
bd50: 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
bd60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bd70: 69 66 20 28 21 77 68 61 74 49 66 29 0d 0a 20 20  if (!whatIf)..  
bd80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bd90: 20 20 72 6f 6f 74 4b 65 79 2e 44 65 6c 65 74 65    rootKey.Delete
bda0: 53 75 62 4b 65 79 54 72 65 65 28 73 75 62 4b 65  SubKeyTree(subKe
bdb0: 79 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20  yName);....     
bdc0: 20 20 20 20 20 20 20 20 20 20 20 73 75 62 4b 65             subKe
bdd0: 79 73 44 65 6c 65 74 65 64 2b 2b 3b 0d 0a 20 20  ysDeleted++;..  
bde0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
bdf0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
be00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
be10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
be20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
be30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
be40: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 4d  ..            [M
be50: 65 74 68 6f 64 49 6d 70 6c 28 4d 65 74 68 6f 64  ethodImpl(Method
be60: 49 6d 70 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e  ImplOptions.NoIn
be70: 6c 69 6e 69 6e 67 29 5d 0d 0a 20 20 20 20 20 20  lining)]..      
be80: 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61        public sta
be90: 74 69 63 20 73 74 72 69 6e 67 5b 5d 20 47 65 74  tic string[] Get
bea0: 53 75 62 4b 65 79 4e 61 6d 65 73 28 0d 0a 20 20  SubKeyNames(..  
beb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4d 6f                Mo
bec0: 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 6b 65  ckRegistryKey ke
bed0: 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y,..            
bee0: 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c      bool whatIf,
bef0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
bf00: 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 0d 0a    bool verbose..
bf10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bf20: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
bf30: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
bf40: 20 20 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75 6c    if (key == nul
bf50: 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
bf60: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e          return n
bf70: 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ull;....        
bf80: 20 20 20 20 20 20 20 20 69 66 20 28 76 65 72 62          if (verb
bf90: 6f 73 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ose)..          
bfa0: 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f            TraceO
bfb0: 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65  ps.DebugAndTrace
bfc0: 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 48  (TracePriority.H
bfd0: 69 67 68 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  igh,..          
bfe0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65                de
bff0: 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61  bugCallback, tra
c000: 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69  ceCallback, Stri
c010: 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ng.Format(..    
c020: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c030: 20 20 20 20 22 6b 65 79 20 3d 20 7b 30 7d 22 2c      "key = {0}",
c040: 20 46 6f 72 44 69 73 70 6c 61 79 28 6b 65 79 29   ForDisplay(key)
c050: 29 2c 20 74 72 61 63 65 43 61 74 65 67 6f 72 79  ), traceCategory
c060: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
c070: 20 20 20 20 20 20 72 65 74 75 72 6e 20 6b 65 79        return key
c080: 2e 47 65 74 53 75 62 4b 65 79 4e 61 6d 65 73 28  .GetSubKeyNames(
c090: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
c0a0: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
c0b0: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
c0c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c0d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c0e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c0f0: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
c100: 20 20 20 20 5b 4d 65 74 68 6f 64 49 6d 70 6c 28      [MethodImpl(
c110: 4d 65 74 68 6f 64 49 6d 70 6c 4f 70 74 69 6f 6e  MethodImplOption
c120: 73 2e 4e 6f 49 6e 6c 69 6e 69 6e 67 29 5d 0d 0a  s.NoInlining)]..
c130: 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
c140: 69 63 20 73 74 61 74 69 63 20 6f 62 6a 65 63 74  ic static object
c150: 20 47 65 74 56 61 6c 75 65 28 0d 0a 20 20 20 20   GetValue(..    
c160: 20 20 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b              Mock
c170: 52 65 67 69 73 74 72 79 4b 65 79 20 6b 65 79 2c  RegistryKey key,
c180: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
c190: 20 20 73 74 72 69 6e 67 20 6e 61 6d 65 2c 0d 0a    string name,..
c1a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c1b0: 6f 62 6a 65 63 74 20 64 65 66 61 75 6c 74 56 61  object defaultVa
c1c0: 6c 75 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  lue,..          
c1d0: 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49        bool whatI
c1e0: 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  f,..            
c1f0: 20 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65      bool verbose
c200: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
c210: 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20    )..           
c220: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
c230: 20 20 20 20 69 66 20 28 6b 65 79 20 3d 3d 20 6e      if (key == n
c240: 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
c250: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
c260: 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20   null;....      
c270: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76 65            if (ve
c280: 72 62 6f 73 65 29 0d 0a 20 20 20 20 20 20 20 20  rbose)..        
c290: 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
c2a0: 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61  eOps.DebugAndTra
c2b0: 63 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 79  ce(TracePriority
c2c0: 2e 48 69 67 68 2c 0d 0a 20 20 20 20 20 20 20 20  .High,..        
c2d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c2e0: 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74  debugCallback, t
c2f0: 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74  raceCallback, St
c300: 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
c310: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c320: 20 20 20 20 20 20 22 6b 65 79 20 3d 20 7b 30 7d        "key = {0}
c330: 2c 20 6e 61 6d 65 20 3d 20 7b 31 7d 2c 20 64 65  , name = {1}, de
c340: 66 61 75 6c 74 56 61 6c 75 65 20 3d 20 7b 32 7d  faultValue = {2}
c350: 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
c360: 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44              ForD
c370: 69 73 70 6c 61 79 28 6b 65 79 29 2c 20 46 6f 72  isplay(key), For
c380: 44 69 73 70 6c 61 79 28 6e 61 6d 65 29 2c 0d 0a  Display(name),..
c390: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c3a0: 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c          ForDispl
c3b0: 61 79 28 64 65 66 61 75 6c 74 56 61 6c 75 65 29  ay(defaultValue)
c3c0: 29 2c 20 74 72 61 63 65 43 61 74 65 67 6f 72 79  ), traceCategory
c3d0: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
c3e0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 6b 65 79        return key
c3f0: 2e 47 65 74 56 61 6c 75 65 28 6e 61 6d 65 2c 20  .GetValue(name, 
c400: 64 65 66 61 75 6c 74 56 61 6c 75 65 29 3b 0d 0a  defaultValue);..
c410: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
c420: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
c430: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c440: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c450: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c460: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c470: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
c480: 5b 4d 65 74 68 6f 64 49 6d 70 6c 28 4d 65 74 68  [MethodImpl(Meth
c490: 6f 64 49 6d 70 6c 4f 70 74 69 6f 6e 73 2e 4e 6f  odImplOptions.No
c4a0: 49 6e 6c 69 6e 69 6e 67 29 5d 0d 0a 20 20 20 20  Inlining)]..    
c4b0: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73          public s
c4c0: 74 61 74 69 63 20 76 6f 69 64 20 53 65 74 56 61  tatic void SetVa
c4d0: 6c 75 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  lue(..          
c4e0: 20 20 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 74        MockRegist
c4f0: 72 79 4b 65 79 20 6b 65 79 2c 0d 0a 20 20 20 20  ryKey key,..    
c500: 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
c510: 6e 67 20 6e 61 6d 65 2c 0d 0a 20 20 20 20 20 20  ng name,..      
c520: 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74            object
c530: 20 76 61 6c 75 65 2c 0d 0a 20 20 20 20 20 20 20   value,..       
c540: 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68           bool wh
c550: 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20  atIf,..         
c560: 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62         bool verb
c570: 6f 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ose..           
c580: 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
c590: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
c5a0: 20 20 20 20 20 20 20 69 66 20 28 6b 65 79 20 3d         if (key =
c5b0: 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
c5c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
c5d0: 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  urn;....        
c5e0: 20 20 20 20 20 20 20 20 69 66 20 28 76 65 72 62          if (verb
c5f0: 6f 73 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ose)..          
c600: 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f            TraceO
c610: 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65  ps.DebugAndTrace
c620: 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 48  (TracePriority.H
c630: 69 67 68 65 73 74 2c 0d 0a 20 20 20 20 20 20 20  ighest,..       
c640: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c650: 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20   debugCallback, 
c660: 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53  traceCallback, S
c670: 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
c680: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c690: 20 20 20 20 20 20 20 22 6b 65 79 20 3d 20 7b 30         "key = {0
c6a0: 7d 2c 20 6e 61 6d 65 20 3d 20 7b 31 7d 2c 20 76  }, name = {1}, v
c6b0: 61 6c 75 65 20 3d 20 7b 32 7d 22 2c 0d 0a 20 20  alue = {2}",..  
c6c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c6d0: 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79        ForDisplay
c6e0: 28 6b 65 79 29 2c 20 46 6f 72 44 69 73 70 6c 61  (key), ForDispla
c6f0: 79 28 6e 61 6d 65 29 2c 20 46 6f 72 44 69 73 70  y(name), ForDisp
c700: 6c 61 79 28 76 61 6c 75 65 29 29 2c 0d 0a 20 20  lay(value)),..  
c710: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c720: 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67        traceCateg
c730: 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
c740: 20 20 20 20 20 20 20 20 20 69 66 20 28 21 77 68           if (!wh
c750: 61 74 49 66 29 0d 0a 20 20 20 20 20 20 20 20 20  atIf)..         
c760: 20 20 20 20 20 20 20 20 20 20 20 6b 65 79 2e 53             key.S
c770: 65 74 56 61 6c 75 65 28 6e 61 6d 65 2c 20 76 61  etValue(name, va
c780: 6c 75 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  lue);....       
c790: 20 20 20 20 20 20 20 20 20 6b 65 79 56 61 6c 75           keyValu
c7a0: 65 73 53 65 74 2b 2b 3b 0d 0a 20 20 20 20 20 20  esSet++;..      
c7b0: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
c7c0: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
c7d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c7e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c7f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c800: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
c810: 20 20 20 20 20 20 20 20 20 20 5b 4d 65 74 68 6f            [Metho
c820: 64 49 6d 70 6c 28 4d 65 74 68 6f 64 49 6d 70 6c  dImpl(MethodImpl
c830: 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e 69  Options.NoInlini
c840: 6e 67 29 5d 0d 0a 20 20 20 20 20 20 20 20 20 20  ng)]..          
c850: 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20    public static 
c860: 76 6f 69 64 20 44 65 6c 65 74 65 56 61 6c 75 65  void DeleteValue
c870: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
c880: 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b     MockRegistryK
c890: 65 79 20 6b 65 79 2c 0d 0a 20 20 20 20 20 20 20  ey key,..       
c8a0: 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
c8b0: 6e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  name,..         
c8c0: 20 20 20 20 20 20 20 62 6f 6f 6c 20 74 68 72 6f         bool thro
c8d0: 77 4f 6e 4d 69 73 73 69 6e 67 2c 0d 0a 20 20 20  wOnMissing,..   
c8e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f               boo
c8f0: 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20  l whatIf,..     
c900: 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
c910: 76 65 72 62 6f 73 65 0d 0a 20 20 20 20 20 20 20  verbose..       
c920: 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
c930: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
c940: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6b             if (k
c950: 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ey == null)..   
c960: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c970: 20 72 65 74 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20   return;....    
c980: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
c990: 76 65 72 62 6f 73 65 29 0d 0a 20 20 20 20 20 20  verbose)..      
c9a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
c9b0: 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54  aceOps.DebugAndT
c9c0: 72 61 63 65 28 54 72 61 63 65 50 72 69 6f 72 69  race(TracePriori
c9d0: 74 79 2e 48 69 67 68 65 73 74 2c 0d 0a 20 20 20  ty.Highest,..   
c9e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c9f0: 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61       debugCallba
ca00: 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63  ck, traceCallbac
ca10: 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  k, String.Format
ca20: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
ca30: 20 20 20 20 20 20 20 20 20 20 20 22 6b 65 79 20             "key 
ca40: 3d 20 7b 30 7d 2c 20 6e 61 6d 65 20 3d 20 7b 31  = {0}, name = {1
ca50: 7d 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 6b  }", ForDisplay(k
ca60: 65 79 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ey),..          
ca70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f                Fo
ca80: 72 44 69 73 70 6c 61 79 28 6e 61 6d 65 29 29 2c  rDisplay(name)),
ca90: 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
caa0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
cab0: 20 20 20 20 69 66 20 28 21 77 68 61 74 49 66 29      if (!whatIf)
cac0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
cad0: 20 20 20 20 20 20 6b 65 79 2e 44 65 6c 65 74 65        key.Delete
cae0: 56 61 6c 75 65 28 6e 61 6d 65 2c 20 74 68 72 6f  Value(name, thro
caf0: 77 4f 6e 4d 69 73 73 69 6e 67 29 3b 0d 0a 0d 0a  wOnMissing);....
cb00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cb10: 6b 65 79 56 61 6c 75 65 73 44 65 6c 65 74 65 64  keyValuesDeleted
cb20: 2b 2b 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ++;..           
cb30: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
cb40: 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 20 20 20 20  #endregion..    
cb50: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23      }..        #
cb60: 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20  endregion....   
cb70: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
cb80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cb90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cba0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cbb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
cbc0: 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20          #region 
cbd0: 53 74 72 69 6e 67 4c 69 73 74 20 43 6c 61 73 73  StringList Class
cbe0: 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
cbf0: 65 20 73 65 61 6c 65 64 20 63 6c 61 73 73 20 53  e sealed class S
cc00: 74 72 69 6e 67 4c 69 73 74 20 3a 20 4c 69 73 74  tringList : List
cc10: 3c 73 74 72 69 6e 67 3e 0d 0a 20 20 20 20 20 20  <string>..      
cc20: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
cc30: 20 70 75 62 6c 69 63 20 53 74 72 69 6e 67 4c 69   public StringLi
cc40: 73 74 28 29 0d 0a 20 20 20 20 20 20 20 20 20 20  st()..          
cc50: 20 20 20 20 20 20 3a 20 62 61 73 65 28 29 0d 0a        : base()..
cc60: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
cc70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
cc80: 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20  / do nothing... 
cc90: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
cca0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
ccb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ccc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ccd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cce0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
ccf0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
cd00: 75 62 6c 69 63 20 53 74 72 69 6e 67 4c 69 73 74  ublic StringList
cd10: 28 49 45 6e 75 6d 65 72 61 62 6c 65 3c 73 74 72  (IEnumerable<str
cd20: 69 6e 67 3e 20 63 6f 6c 6c 65 63 74 69 6f 6e 29  ing> collection)
cd30: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
cd40: 20 20 3a 20 62 61 73 65 28 63 6f 6c 6c 65 63 74    : base(collect
cd50: 69 6f 6e 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ion)..          
cd60: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
cd70: 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69       // do nothi
cd80: 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ng...           
cd90: 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20   }..        }.. 
cda0: 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f         #endregio
cdb0: 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  n....        ///
cdc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
ce10: 23 72 65 67 69 6f 6e 20 53 74 72 69 6e 67 44 69  #region StringDi
ce20: 63 74 69 6f 6e 61 72 79 20 43 6c 61 73 73 0d 0a  ctionary Class..
ce30: 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
ce40: 73 65 61 6c 65 64 20 63 6c 61 73 73 20 53 74 72  sealed class Str
ce50: 69 6e 67 44 69 63 74 69 6f 6e 61 72 79 20 3a 20  ingDictionary : 
ce60: 44 69 63 74 69 6f 6e 61 72 79 3c 73 74 72 69 6e  Dictionary<strin
ce70: 67 2c 20 73 74 72 69 6e 67 3e 0d 0a 20 20 20 20  g, string>..    
ce80: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
ce90: 20 20 20 70 75 62 6c 69 63 20 53 74 72 69 6e 67     public String
cea0: 44 69 63 74 69 6f 6e 61 72 79 28 29 0d 0a 20 20  Dictionary()..  
ceb0: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
cec0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
ced0: 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20  do nothing...   
cee0: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
cef0: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23      }..        #
cf00: 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20  endregion....   
cf10: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
cf20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cf30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cf40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cf50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
cf60: 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20          #region 
cf70: 56 65 72 73 69 6f 6e 4c 69 73 74 20 43 6c 61 73  VersionList Clas
cf80: 73 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  s..        priva
cf90: 74 65 20 73 65 61 6c 65 64 20 63 6c 61 73 73 20  te sealed class 
cfa0: 56 65 72 73 69 6f 6e 4c 69 73 74 20 3a 20 4c 69  VersionList : Li
cfb0: 73 74 3c 56 65 72 73 69 6f 6e 3e 0d 0a 20 20 20  st<Version>..   
cfc0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
cfd0: 20 20 20 20 70 75 62 6c 69 63 20 56 65 72 73 69      public Versi
cfe0: 6f 6e 4c 69 73 74 28 29 0d 0a 20 20 20 20 20 20  onList()..      
cff0: 20 20 20 20 20 20 20 20 20 20 3a 20 62 61 73 65            : base
d000: 28 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ()..            
d010: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
d020: 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67     // do nothing
d030: 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ...            }
d040: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
d050: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d060: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d070: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d080: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d090: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
d0a0: 20 20 20 70 75 62 6c 69 63 20 56 65 72 73 69 6f     public Versio
d0b0: 6e 4c 69 73 74 28 49 45 6e 75 6d 65 72 61 62 6c  nList(IEnumerabl
d0c0: 65 3c 56 65 72 73 69 6f 6e 3e 20 63 6f 6c 6c 65  e<Version> colle
d0d0: 63 74 69 6f 6e 29 0d 0a 20 20 20 20 20 20 20 20  ction)..        
d0e0: 20 20 20 20 20 20 20 20 3a 20 62 61 73 65 28 63          : base(c
d0f0: 6f 6c 6c 65 63 74 69 6f 6e 29 0d 0a 20 20 20 20  ollection)..    
d100: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
d110: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f             // do
d120: 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20   nothing...     
d130: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
d140: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e    }..        #en
d150: 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
d160: 20 20 20 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 2f 2f 2f 2f  ////////////////
d190: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d1a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
d1b0: 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 56 65        #region Ve
d1c0: 72 73 69 6f 6e 4d 61 70 20 43 6c 61 73 73 0d 0a  rsionMap Class..
d1d0: 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
d1e0: 73 65 61 6c 65 64 20 63 6c 61 73 73 20 56 65 72  sealed class Ver
d1f0: 73 69 6f 6e 4d 61 70 20 3a 20 44 69 63 74 69 6f  sionMap : Dictio
d200: 6e 61 72 79 3c 73 74 72 69 6e 67 2c 20 56 65 72  nary<string, Ver
d210: 73 69 6f 6e 4c 69 73 74 3e 0d 0a 20 20 20 20 20  sionList>..     
d220: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
d230: 20 20 70 75 62 6c 69 63 20 56 65 72 73 69 6f 6e    public Version
d240: 4d 61 70 28 29 0d 0a 20 20 20 20 20 20 20 20 20  Map()..         
d250: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
d260: 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68        // do noth
d270: 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  ing...          
d280: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a    }..        }..
d290: 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
d2a0: 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  on....        //
d2b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d2c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d2d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d2e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d2f0: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
d300: 20 23 72 65 67 69 6f 6e 20 50 61 63 6b 61 67 65   #region Package
d310: 20 43 6c 61 73 73 0d 0a 20 20 20 20 20 20 20 20   Class..        
d320: 69 6e 74 65 72 6e 61 6c 20 73 65 61 6c 65 64 20  internal sealed 
d330: 63 6c 61 73 73 20 50 61 63 6b 61 67 65 0d 0a 20  class Package.. 
d340: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
d350: 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 75        #region Pu
d360: 62 6c 69 63 20 43 6f 6e 73 74 72 75 63 74 6f 72  blic Constructor
d370: 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  s..            p
d380: 75 62 6c 69 63 20 50 61 63 6b 61 67 65 28 29 0d  ublic Package().
d390: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
d3a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d3b0: 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a  // do nothing...
d3c0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
d3d0: 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 72             #endr
d3e0: 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20  egion....       
d3f0: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
d400: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d410: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d420: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d430: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
d440: 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20          #region 
d450: 50 75 62 6c 69 63 20 50 72 6f 70 65 72 74 69 65  Public Propertie
d460: 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  s..            p
d470: 72 69 76 61 74 65 20 47 75 69 64 20 70 61 63 6b  rivate Guid pack
d480: 61 67 65 49 64 3b 0d 0a 20 20 20 20 20 20 20 20  ageId;..        
d490: 20 20 20 20 70 75 62 6c 69 63 20 47 75 69 64 20      public Guid 
d4a0: 50 61 63 6b 61 67 65 49 64 0d 0a 20 20 20 20 20  PackageId..     
d4b0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
d4c0: 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20            get { 
d4d0: 72 65 74 75 72 6e 20 70 61 63 6b 61 67 65 49 64  return packageId
d4e0: 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
d4f0: 20 20 20 20 20 73 65 74 20 7b 20 70 61 63 6b 61       set { packa
d500: 67 65 49 64 20 3d 20 76 61 6c 75 65 3b 20 7d 0d  geId = value; }.
d510: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
d520: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
d530: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d540: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d550: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d560: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d570: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
d580: 20 70 72 69 76 61 74 65 20 47 75 69 64 20 73 65   private Guid se
d590: 72 76 69 63 65 49 64 3b 0d 0a 20 20 20 20 20 20  rviceId;..      
d5a0: 20 20 20 20 20 20 70 75 62 6c 69 63 20 47 75 69        public Gui
d5b0: 64 20 53 65 72 76 69 63 65 49 64 0d 0a 20 20 20  d ServiceId..   
d5c0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
d5d0: 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20              get 
d5e0: 7b 20 72 65 74 75 72 6e 20 73 65 72 76 69 63 65  { return service
d5f0: 49 64 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  Id; }..         
d600: 20 20 20 20 20 20 20 73 65 74 20 7b 20 73 65 72         set { ser
d610: 76 69 63 65 49 64 20 3d 20 76 61 6c 75 65 3b 20  viceId = value; 
d620: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
d630: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
d640: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d650: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d660: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d670: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d680: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
d690: 20 20 20 70 72 69 76 61 74 65 20 47 75 69 64 20     private Guid 
d6a0: 64 61 74 61 53 6f 75 72 63 65 49 64 3b 0d 0a 20  dataSourceId;.. 
d6b0: 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
d6c0: 63 20 47 75 69 64 20 44 61 74 61 53 6f 75 72 63  c Guid DataSourc
d6d0: 65 49 64 0d 0a 20 20 20 20 20 20 20 20 20 20 20  eId..           
d6e0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
d6f0: 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e      get { return
d700: 20 64 61 74 61 53 6f 75 72 63 65 49 64 3b 20 7d   dataSourceId; }
d710: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
d720: 20 20 73 65 74 20 7b 20 64 61 74 61 53 6f 75 72    set { dataSour
d730: 63 65 49 64 20 3d 20 76 61 6c 75 65 3b 20 7d 0d  ceId = value; }.
d740: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
d750: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
d760: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d770: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d780: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d790: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d7a0: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
d7b0: 20 70 72 69 76 61 74 65 20 47 75 69 64 20 64 61   private Guid da
d7c0: 74 61 50 72 6f 76 69 64 65 72 49 64 3b 0d 0a 20  taProviderId;.. 
d7d0: 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
d7e0: 63 20 47 75 69 64 20 44 61 74 61 50 72 6f 76 69  c Guid DataProvi
d7f0: 64 65 72 49 64 0d 0a 20 20 20 20 20 20 20 20 20  derId..         
d800: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
d810: 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75        get { retu
d820: 72 6e 20 64 61 74 61 50 72 6f 76 69 64 65 72 49  rn dataProviderI
d830: 64 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  d; }..          
d840: 20 20 20 20 20 20 73 65 74 20 7b 20 64 61 74 61        set { data
d850: 50 72 6f 76 69 64 65 72 49 64 20 3d 20 76 61 6c  ProviderId = val
d860: 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  ue; }..         
d870: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
d880: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
d890: 2f 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 0d 0a 0d 0a 20 20 20 20 20  ///////....     
d8d0: 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 47         private G
d8e0: 75 69 64 20 61 64 6f 4e 65 74 54 65 63 68 6e 6f  uid adoNetTechno
d8f0: 6c 6f 67 79 49 64 3b 0d 0a 20 20 20 20 20 20 20  logyId;..       
d900: 20 20 20 20 20 70 75 62 6c 69 63 20 47 75 69 64       public Guid
d910: 20 41 64 6f 4e 65 74 54 65 63 68 6e 6f 6c 6f 67   AdoNetTechnolog
d920: 79 49 64 0d 0a 20 20 20 20 20 20 20 20 20 20 20  yId..           
d930: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
d940: 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e      get { return
d950: 20 61 64 6f 4e 65 74 54 65 63 68 6e 6f 6c 6f 67   adoNetTechnolog
d960: 79 49 64 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  yId; }..        
d970: 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 61 64          set { ad
d980: 6f 4e 65 74 54 65 63 68 6e 6f 6c 6f 67 79 49 64  oNetTechnologyId
d990: 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20   = value; }..   
d9a0: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
d9b0: 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
d9c0: 6f 6e 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20  on..        }.. 
d9d0: 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f         #endregio
d9e0: 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  n....        ///
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 2f 2f 2f 2f 2f  ////////////////
da10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
da20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
da30: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
da40: 23 72 65 67 69 6f 6e 20 43 6f 6e 66 69 67 75 72  #region Configur
da50: 61 74 69 6f 6e 20 43 6c 61 73 73 0d 0a 20 20 20  ation Class..   
da60: 20 20 20 20 20 70 72 69 76 61 74 65 20 73 65 61       private sea
da70: 6c 65 64 20 63 6c 61 73 73 20 43 6f 6e 66 69 67  led class Config
da80: 75 72 61 74 69 6f 6e 0d 0a 20 20 20 20 20 20 20  uration..       
da90: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
daa0: 23 72 65 67 69 6f 6e 20 50 72 69 76 61 74 65 20  #region Private 
dab0: 43 6f 6e 73 74 61 6e 74 73 0d 0a 20 20 20 20 20  Constants..     
dac0: 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 63         private c
dad0: 6f 6e 73 74 20 63 68 61 72 20 53 77 69 74 63 68  onst char Switch
dae0: 20 3d 20 27 2d 27 3b 0d 0a 20 20 20 20 20 20 20   = '-';..       
daf0: 20 20 20 20 20 70 72 69 76 61 74 65 20 63 6f 6e       private con
db00: 73 74 20 63 68 61 72 20 41 6c 74 53 77 69 74 63  st char AltSwitc
db10: 68 20 3d 20 27 2f 27 3b 0d 0a 0d 0a 20 20 20 20  h = '/';....    
db20: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
db30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
db40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
db50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
db60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
db70: 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
db80: 74 65 20 73 74 61 74 69 63 20 72 65 61 64 6f 6e  te static readon
db90: 6c 79 20 63 68 61 72 5b 5d 20 53 77 69 74 63 68  ly char[] Switch
dba0: 43 68 61 72 73 20 3d 20 7b 0d 0a 20 20 20 20 20  Chars = {..     
dbb0: 20 20 20 20 20 20 20 20 20 20 20 53 77 69 74 63             Switc
dbc0: 68 2c 20 41 6c 74 53 77 69 74 63 68 0d 0a 20 20  h, AltSwitch..  
dbd0: 20 20 20 20 20 20 20 20 20 20 7d 3b 0d 0a 20 20            };..  
dbe0: 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65            #endre
dbf0: 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20  gion....        
dc00: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
dc10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
dc20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
dc30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
dc40: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
dc50: 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50         #region P
dc60: 72 69 76 61 74 65 20 43 6f 6e 73 74 72 75 63 74  rivate Construct
dc70: 6f 72 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ors..           
dc80: 20 70 72 69 76 61 74 65 20 43 6f 6e 66 69 67 75   private Configu
dc90: 72 61 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20  ration(..       
dca0: 20 20 20 20 20 20 20 20 20 41 73 73 65 6d 62 6c           Assembl
dcb0: 79 20 61 73 73 65 6d 62 6c 79 2c 0d 0a 20 20 20  y assembly,..   
dcc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72               str
dcd0: 69 6e 67 20 6c 6f 67 46 69 6c 65 4e 61 6d 65 2c  ing logFileName,
dce0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
dcf0: 20 20 73 74 72 69 6e 67 20 64 69 72 65 63 74 6f    string directo
dd00: 72 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ry,..           
dd10: 20 20 20 20 20 73 74 72 69 6e 67 20 63 6f 72 65       string core
dd20: 46 69 6c 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20  FileName,..     
dd30: 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
dd40: 67 20 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 2c 0d  g linqFileName,.
dd50: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
dd60: 20 73 74 72 69 6e 67 20 64 65 73 69 67 6e 65 72   string designer
dd70: 46 69 6c 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20  FileName,..     
dd80: 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
dd90: 67 20 72 65 67 69 73 74 72 79 56 65 72 73 69 6f  g registryVersio
dda0: 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n,..            
ddb0: 20 20 20 20 73 74 72 69 6e 67 20 63 6f 6e 66 69      string confi
ddc0: 67 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20  gVersion,..     
ddd0: 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
dde0: 67 20 64 65 62 75 67 46 6f 72 6d 61 74 2c 0d 0a  g debugFormat,..
ddf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
de00: 73 74 72 69 6e 67 20 74 72 61 63 65 46 6f 72 6d  string traceForm
de10: 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at,..           
de20: 20 20 20 20 20 49 6e 73 74 61 6c 6c 46 6c 61 67       InstallFlag
de30: 73 20 69 6e 73 74 61 6c 6c 46 6c 61 67 73 2c 0d  s installFlags,.
de40: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
de50: 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 20 64   TracePriority d
de60: 65 62 75 67 50 72 69 6f 72 69 74 79 2c 0d 0a 20  ebugPriority,.. 
de70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
de80: 72 61 63 65 50 72 69 6f 72 69 74 79 20 74 72 61  racePriority tra
de90: 63 65 50 72 69 6f 72 69 74 79 2c 0d 0a 20 20 20  cePriority,..   
dea0: 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f               boo
deb0: 6c 20 69 6e 73 74 61 6c 6c 2c 0d 0a 20 20 20 20  l install,..    
dec0: 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
ded0: 20 77 6f 77 36 34 2c 0d 0a 20 20 20 20 20 20 20   wow64,..       
dee0: 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 6e 6f           bool no
def0: 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 2c 0d  RuntimeVersion,.
df00: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
df10: 20 62 6f 6f 6c 20 6e 6f 44 65 73 6b 74 6f 70 2c   bool noDesktop,
df20: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
df30: 20 20 62 6f 6f 6c 20 6e 6f 43 6f 6d 70 61 63 74    bool noCompact
df40: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
df50: 20 20 20 62 6f 6f 6c 20 6e 6f 4e 65 74 46 78 32     bool noNetFx2
df60: 30 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  0,..            
df70: 20 20 20 20 62 6f 6f 6c 20 6e 6f 4e 65 74 46 78      bool noNetFx
df80: 34 30 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  40,..           
df90: 20 20 20 20 20 62 6f 6f 6c 20 6e 6f 4e 65 74 46       bool noNetF
dfa0: 78 34 35 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  x45,..          
dfb0: 20 20 20 20 20 20 62 6f 6f 6c 20 6e 6f 56 73 32        bool noVs2
dfc0: 30 30 35 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  005,..          
dfd0: 20 20 20 20 20 20 62 6f 6f 6c 20 6e 6f 56 73 32        bool noVs2
dfe0: 30 30 38 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  008,..          
dff0: 20 20 20 20 20 20 62 6f 6f 6c 20 6e 6f 56 73 32        bool noVs2
e000: 30 31 30 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  010,..          
e010: 20 20 20 20 20 20 62 6f 6f 6c 20 6e 6f 56 73 32        bool noVs2
e020: 30 31 32 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  012,..          
e030: 20 20 20 20 20 20 62 6f 6f 6c 20 6e 6f 54 72 61        bool noTra
e040: 63 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ce,..           
e050: 20 20 20 20 20 62 6f 6f 6c 20 6e 6f 43 6f 6e 73       bool noCons
e060: 6f 6c 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ole,..          
e070: 20 20 20 20 20 20 62 6f 6f 6c 20 6e 6f 4c 6f 67        bool noLog
e080: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
e090: 20 20 20 62 6f 6f 6c 20 74 68 72 6f 77 4f 6e 4d     bool throwOnM
e0a0: 69 73 73 69 6e 67 2c 0d 0a 20 20 20 20 20 20 20  issing,..       
e0b0: 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68           bool wh
e0c0: 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20  atIf,..         
e0d0: 20 20 20 20 20 20 20 62 6f 6f 6c 20 64 65 62 75         bool debu
e0e0: 67 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  g,..            
e0f0: 20 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65      bool verbose
e100: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
e110: 20 20 20 62 6f 6f 6c 20 63 6f 6e 66 69 72 6d 0d     bool confirm.
e120: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
e130: 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   )..            
e140: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
e150: 20 20 20 74 68 69 73 2e 61 73 73 65 6d 62 6c 79     this.assembly
e160: 20 3d 20 61 73 73 65 6d 62 6c 79 3b 0d 0a 20 20   = assembly;..  
e170: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
e180: 69 73 2e 6c 6f 67 46 69 6c 65 4e 61 6d 65 20 3d  is.logFileName =
e190: 20 6c 6f 67 46 69 6c 65 4e 61 6d 65 3b 0d 0a 20   logFileName;.. 
e1a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
e1b0: 68 69 73 2e 64 69 72 65 63 74 6f 72 79 20 3d 20  his.directory = 
e1c0: 64 69 72 65 63 74 6f 72 79 3b 0d 0a 20 20 20 20  directory;..    
e1d0: 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73              this
e1e0: 2e 63 6f 72 65 46 69 6c 65 4e 61 6d 65 20 3d 20  .coreFileName = 
e1f0: 63 6f 72 65 46 69 6c 65 4e 61 6d 65 3b 0d 0a 20  coreFileName;.. 
e200: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
e210: 68 69 73 2e 6c 69 6e 71 46 69 6c 65 4e 61 6d 65  his.linqFileName
e220: 20 3d 20 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 3b   = linqFileName;
e230: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
e240: 20 20 74 68 69 73 2e 64 65 73 69 67 6e 65 72 46    this.designerF
e250: 69 6c 65 4e 61 6d 65 20 3d 20 64 65 73 69 67 6e  ileName = design
e260: 65 72 46 69 6c 65 4e 61 6d 65 3b 0d 0a 20 20 20  erFileName;..   
e270: 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69               thi
e280: 73 2e 72 65 67 69 73 74 72 79 56 65 72 73 69 6f  s.registryVersio
e290: 6e 20 3d 20 72 65 67 69 73 74 72 79 56 65 72 73  n = registryVers
e2a0: 69 6f 6e 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ion;..          
e2b0: 20 20 20 20 20 20 74 68 69 73 2e 63 6f 6e 66 69        this.confi
e2c0: 67 56 65 72 73 69 6f 6e 20 3d 20 63 6f 6e 66 69  gVersion = confi
e2d0: 67 56 65 72 73 69 6f 6e 3b 0d 0a 20 20 20 20 20  gVersion;..     
e2e0: 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e             this.
e2f0: 64 65 62 75 67 46 6f 72 6d 61 74 20 3d 20 64 65  debugFormat = de
e300: 62 75 67 46 6f 72 6d 61 74 3b 0d 0a 20 20 20 20  bugFormat;..    
e310: 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73              this
e320: 2e 74 72 61 63 65 46 6f 72 6d 61 74 20 3d 20 74  .traceFormat = t
e330: 72 61 63 65 46 6f 72 6d 61 74 3b 0d 0a 20 20 20  raceFormat;..   
e340: 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69               thi
e350: 73 2e 69 6e 73 74 61 6c 6c 46 6c 61 67 73 20 3d  s.installFlags =
e360: 20 69 6e 73 74 61 6c 6c 46 6c 61 67 73 3b 0d 0a   installFlags;..
e370: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e380: 74 68 69 73 2e 64 65 62 75 67 50 72 69 6f 72 69  this.debugPriori
e390: 74 79 20 3d 20 64 65 62 75 67 50 72 69 6f 72 69  ty = debugPriori
e3a0: 74 79 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ty;..           
e3b0: 20 20 20 20 20 74 68 69 73 2e 74 72 61 63 65 50       this.traceP
e3c0: 72 69 6f 72 69 74 79 20 3d 20 74 72 61 63 65 50  riority = traceP
e3d0: 72 69 6f 72 69 74 79 3b 0d 0a 20 20 20 20 20 20  riority;..      
e3e0: 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 69            this.i
e3f0: 6e 73 74 61 6c 6c 20 3d 20 69 6e 73 74 61 6c 6c  nstall = install
e400: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
e410: 20 20 20 74 68 69 73 2e 77 6f 77 36 34 20 3d 20     this.wow64 = 
e420: 77 6f 77 36 34 3b 0d 0a 20 20 20 20 20 20 20 20  wow64;..        
e430: 20 20 20 20 20 20 20 20 74 68 69 73 2e 6e 6f 52          this.noR
e440: 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 20 3d 20  untimeVersion = 
e450: 6e 6f 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e  noRuntimeVersion
e460: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
e470: 20 20 20 74 68 69 73 2e 6e 6f 44 65 73 6b 74 6f     this.noDeskto
e480: 70 20 3d 20 6e 6f 44 65 73 6b 74 6f 70 3b 0d 0a  p = noDesktop;..
e490: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e4a0: 74 68 69 73 2e 6e 6f 43 6f 6d 70 61 63 74 20 3d  this.noCompact =
e4b0: 20 6e 6f 43 6f 6d 70 61 63 74 3b 0d 0a 20 20 20   noCompact;..   
e4c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69               thi
e4d0: 73 2e 6e 6f 4e 65 74 46 78 32 30 20 3d 20 6e 6f  s.noNetFx20 = no
e4e0: 4e 65 74 46 78 32 30 3b 0d 0a 20 20 20 20 20 20  NetFx20;..      
e4f0: 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 6e            this.n
e500: 6f 4e 65 74 46 78 34 30 20 3d 20 6e 6f 4e 65 74  oNetFx40 = noNet
e510: 46 78 34 30 3b 0d 0a 20 20 20 20 20 20 20 20 20  Fx40;..         
e520: 20 20 20 20 20 20 20 74 68 69 73 2e 6e 6f 4e 65         this.noNe
e530: 74 46 78 34 35 20 3d 20 6e 6f 4e 65 74 46 78 34  tFx45 = noNetFx4
e540: 35 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  5;..            
e550: 20 20 20 20 74 68 69 73 2e 6e 6f 56 73 32 30 30      this.noVs200
e560: 35 20 3d 20 6e 6f 56 73 32 30 30 35 3b 0d 0a 20  5 = noVs2005;.. 
e570: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
e580: 68 69 73 2e 6e 6f 56 73 32 30 30 38 20 3d 20 6e  his.noVs2008 = n
e590: 6f 56 73 32 30 30 38 3b 0d 0a 20 20 20 20 20 20  oVs2008;..      
e5a0: 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 6e            this.n
e5b0: 6f 56 73 32 30 31 30 20 3d 20 6e 6f 56 73 32 30  oVs2010 = noVs20
e5c0: 31 30 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  10;..           
e5d0: 20 20 20 20 20 74 68 69 73 2e 6e 6f 56 73 32 30       this.noVs20
e5e0: 31 32 20 3d 20 6e 6f 56 73 32 30 31 32 3b 0d 0a  12 = noVs2012;..
e5f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e600: 74 68 69 73 2e 6e 6f 54 72 61 63 65 20 3d 20 6e  this.noTrace = n
e610: 6f 54 72 61 63 65 3b 0d 0a 20 20 20 20 20 20 20  oTrace;..       
e620: 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 6e 6f           this.no
e630: 43 6f 6e 73 6f 6c 65 20 3d 20 6e 6f 43 6f 6e 73  Console = noCons
e640: 6f 6c 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ole;..          
e650: 20 20 20 20 20 20 74 68 69 73 2e 6e 6f 4c 6f 67        this.noLog
e660: 20 3d 20 6e 6f 4c 6f 67 3b 0d 0a 20 20 20 20 20   = noLog;..     
e670: 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e             this.
e680: 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 20 3d  throwOnMissing =
e690: 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 3b   throwOnMissing;
e6a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
e6b0: 20 20 74 68 69 73 2e 77 68 61 74 49 66 20 3d 20    this.whatIf = 
e6c0: 77 68 61 74 49 66 3b 0d 0a 20 20 20 20 20 20 20  whatIf;..       
e6d0: 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 64 65           this.de
e6e0: 62 75 67 20 3d 20 64 65 62 75 67 3b 0d 0a 20 20  bug = debug;..  
e6f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
e700: 69 73 2e 76 65 72 62 6f 73 65 20 3d 20 76 65 72  is.verbose = ver
e710: 62 6f 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  bose;..         
e720: 20 20 20 20 20 20 20 74 68 69 73 2e 63 6f 6e 66         this.conf
e730: 69 72 6d 20 3d 20 63 6f 6e 66 69 72 6d 3b 0d 0a  irm = confirm;..
e740: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
e750: 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 72             #endr
e760: 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20  egion....       
e770: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
e780: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e790: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e7a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e7b0: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
e7c0: 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20          #region 
e7d0: 50 72 69 76 61 74 65 20 53 74 61 74 69 63 20 4d  Private Static M
e7e0: 65 74 68 6f 64 73 0d 0a 20 20 20 20 20 20 20 20  ethods..        
e7f0: 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74      private stat
e800: 69 63 20 76 6f 69 64 20 47 65 74 44 65 66 61 75  ic void GetDefau
e810: 6c 74 46 69 6c 65 4e 61 6d 65 73 28 0d 0a 20 20  ltFileNames(..  
e820: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
e830: 66 20 73 74 72 69 6e 67 20 64 69 72 65 63 74 6f  f string directo
e840: 72 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ry,..           
e850: 20 20 20 20 20 72 65 66 20 73 74 72 69 6e 67 20       ref string 
e860: 63 6f 72 65 46 69 6c 65 4e 61 6d 65 2c 0d 0a 20  coreFileName,.. 
e870: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
e880: 65 66 20 73 74 72 69 6e 67 20 6c 69 6e 71 46 69  ef string linqFi
e890: 6c 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20  leName,..       
e8a0: 20 20 20 20 20 20 20 20 20 72 65 66 20 73 74 72           ref str
e8b0: 69 6e 67 20 64 65 73 69 67 6e 65 72 46 69 6c 65  ing designerFile
e8c0: 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 20 20  Name..          
e8d0: 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
e8e0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
e8f0: 20 20 20 20 20 20 20 20 69 66 20 28 74 68 69 73          if (this
e900: 41 73 73 65 6d 62 6c 79 20 3d 3d 20 6e 75 6c 6c  Assembly == null
e910: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
e920: 20 20 20 20 20 20 20 72 65 74 75 72 6e 3b 0d 0a         return;..
e930: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
e940: 20 20 64 69 72 65 63 74 6f 72 79 20 3d 20 50 61    directory = Pa
e950: 74 68 2e 47 65 74 44 69 72 65 63 74 6f 72 79 4e  th.GetDirectoryN
e960: 61 6d 65 28 74 68 69 73 41 73 73 65 6d 62 6c 79  ame(thisAssembly
e970: 2e 4c 6f 63 61 74 69 6f 6e 29 3b 0d 0a 0d 0a 20  .Location);.... 
e980: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
e990: 66 20 28 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c  f (String.IsNull
e9a0: 4f 72 45 6d 70 74 79 28 64 69 72 65 63 74 6f 72  OrEmpty(director
e9b0: 79 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  y))..           
e9c0: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 3b           return;
e9d0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
e9e0: 20 20 20 20 63 6f 72 65 46 69 6c 65 4e 61 6d 65      coreFileName
e9f0: 20 3d 20 50 61 74 68 2e 43 6f 6d 62 69 6e 65 28   = Path.Combine(
ea00: 64 69 72 65 63 74 6f 72 79 2c 0d 0a 20 20 20 20  directory,..    
ea10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ea20: 49 6e 73 74 61 6c 6c 65 72 2e 43 6f 72 65 46 69  Installer.CoreFi
ea30: 6c 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20  leName);....    
ea40: 20 20 20 20 20 20 20 20 20 20 20 20 6c 69 6e 71              linq
ea50: 46 69 6c 65 4e 61 6d 65 20 3d 20 50 61 74 68 2e  FileName = Path.
ea60: 43 6f 6d 62 69 6e 65 28 64 69 72 65 63 74 6f 72  Combine(director
ea70: 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y,..            
ea80: 20 20 20 20 20 20 20 20 49 6e 73 74 61 6c 6c 65          Installe
ea90: 72 2e 4c 69 6e 71 46 69 6c 65 4e 61 6d 65 29 3b  r.LinqFileName);
eaa0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
eab0: 20 20 20 20 64 65 73 69 67 6e 65 72 46 69 6c 65      designerFile
eac0: 4e 61 6d 65 20 3d 20 50 61 74 68 2e 43 6f 6d 62  Name = Path.Comb
ead0: 69 6e 65 28 64 69 72 65 63 74 6f 72 79 2c 0d 0a  ine(directory,..
eae0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
eaf0: 20 20 20 20 49 6e 73 74 61 6c 6c 65 72 2e 44 65      Installer.De
eb00: 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 29 3b  signerFileName);
eb10: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
eb20: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
eb30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
eb40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
eb50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
eb60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
eb70: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
eb80: 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63    private static
eb90: 20 62 6f 6f 6c 20 43 68 65 63 6b 4f 70 74 69 6f   bool CheckOptio
eba0: 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n(..            
ebb0: 20 20 20 20 72 65 66 20 73 74 72 69 6e 67 20 61      ref string a
ebc0: 72 67 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  rg..            
ebd0: 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20      )..         
ebe0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
ebf0: 20 20 20 20 20 20 73 74 72 69 6e 67 20 72 65 73        string res
ec00: 75 6c 74 20 3d 20 61 72 67 3b 0d 0a 0d 0a 20 20  ult = arg;....  
ec10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
ec20: 20 28 21 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c   (!String.IsNull
ec30: 4f 72 45 6d 70 74 79 28 72 65 73 75 6c 74 29 29  OrEmpty(result))
ec40: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
ec50: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
ec60: 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
ec70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ec80: 20 2f 2f 20 4e 4f 54 45 3a 20 52 65 6d 6f 76 65   // NOTE: Remove
ec90: 20 61 6c 6c 20 6c 65 61 64 69 6e 67 20 73 77 69   all leading swi
eca0: 74 63 68 20 63 68 61 72 73 2e 0d 0a 20 20 20 20  tch chars...    
ecb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ecc0: 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
ecd0: 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 20 3d          result =
ece0: 20 72 65 73 75 6c 74 2e 54 72 69 6d 53 74 61 72   result.TrimStar
ecf0: 74 28 53 77 69 74 63 68 43 68 61 72 73 29 3b 0d  t(SwitchChars);.
ed00: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
ed10: 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
ed20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
ed30: 2f 20 4e 4f 54 45 3a 20 48 6f 77 20 6d 61 6e 79  / NOTE: How many
ed40: 20 63 68 61 72 73 20 77 65 72 65 20 72 65 6d 6f   chars were remo
ed50: 76 65 64 3f 0d 0a 20 20 20 20 20 20 20 20 20 20  ved?..          
ed60: 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
ed70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ed80: 20 20 69 6e 74 20 63 6f 75 6e 74 20 3d 20 61 72    int count = ar
ed90: 67 2e 4c 65 6e 67 74 68 20 2d 20 72 65 73 75 6c  g.Length - resul
eda0: 74 2e 4c 65 6e 67 74 68 3b 0d 0a 0d 0a 20 20 20  t.Length;....   
edb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
edc0: 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
edd0: 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45           // NOTE
ede0: 3a 20 57 61 73 20 74 68 65 72 65 20 61 74 20 6c  : Was there at l
edf0: 65 61 73 74 20 6f 6e 65 3f 0d 0a 20 20 20 20 20  east one?..     
ee00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
ee10: 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
ee20: 20 20 20 20 20 20 20 69 66 20 28 63 6f 75 6e 74         if (count
ee30: 20 3e 20 30 29 0d 0a 20 20 20 20 20 20 20 20 20   > 0)..         
ee40: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
ee50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ee60: 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
ee70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ee80: 20 20 2f 2f 20 4e 4f 54 45 3a 20 4f 6b 2c 20 72    // NOTE: Ok, r
ee90: 65 70 6c 61 63 65 20 74 68 65 69 72 20 6f 72 69  eplace their ori
eea0: 67 69 6e 61 6c 0d 0a 20 20 20 20 20 20 20 20 20  ginal..         
eeb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
eec0: 2f 20 20 20 20 20 20 20 61 72 67 75 6d 65 6e 74  /       argument
eed0: 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
eee0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
eef0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ef00: 20 20 20 20 20 20 20 61 72 67 20 3d 20 72 65 73         arg = res
ef10: 75 6c 74 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ult;....        
ef20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ef30: 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
ef40: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e              // N
ef50: 4f 54 45 3a 20 59 65 73 2c 20 74 68 69 73 20 69  OTE: Yes, this i
ef60: 73 20 61 20 73 77 69 74 63 68 2e 0d 0a 20 20 20  s a switch...   
ef70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ef80: 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
ef90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
efa0: 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20   return true;.. 
efb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
efc0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
efd0: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
efe0: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
eff0: 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  n false;..      
f000: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
f010: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
f020: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f030: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f040: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f050: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
f060: 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
f070: 65 20 73 74 61 74 69 63 20 62 6f 6f 6c 20 4d 61  e static bool Ma
f080: 74 63 68 4f 70 74 69 6f 6e 28 0d 0a 20 20 20 20  tchOption(..    
f090: 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
f0a0: 6e 67 20 61 72 67 2c 0d 0a 20 20 20 20 20 20 20  ng arg,..       
f0b0: 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
f0c0: 6f 70 74 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20  option..        
f0d0: 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
f0e0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
f0f0: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 28 61            if ((a
f100: 72 67 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20 28  rg == null) || (
f110: 6f 70 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 29  option == null))
f120: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
f130: 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
f140: 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  se;....         
f150: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 74         return St
f160: 72 69 6e 67 2e 43 6f 6d 70 61 72 65 28 61 72 67  ring.Compare(arg
f170: 2c 20 30 2c 20 6f 70 74 69 6f 6e 2c 20 30 2c 0d  , 0, option, 0,.
f180: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
f190: 20 20 20 20 20 61 72 67 2e 4c 65 6e 67 74 68 2c       arg.Length,
f1a0: 20 53 74 72 69 6e 67 43 6f 6d 70 61 72 69 73 6f   StringCompariso
f1b0: 6e 2e 4f 72 64 69 6e 61 6c 49 67 6e 6f 72 65 43  n.OrdinalIgnoreC
f1c0: 61 73 65 29 20 3d 3d 20 30 3b 0d 0a 20 20 20 20  ase) == 0;..    
f1d0: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
f1e0: 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
f1f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f200: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f210: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f220: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
f230: 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
f240: 61 74 65 20 73 74 61 74 69 63 20 62 6f 6f 6c 3f  ate static bool?
f250: 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28 0d 0a   ParseBoolean(..
f260: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f270: 73 74 72 69 6e 67 20 74 65 78 74 0d 0a 20 20 20  string text..   
f280: 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a               )..
f290: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
f2a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
f2b0: 66 20 28 21 53 74 72 69 6e 67 2e 49 73 4e 75 6c  f (!String.IsNul
f2c0: 6c 4f 72 45 6d 70 74 79 28 74 65 78 74 29 29 0d  lOrEmpty(text)).
f2d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
f2e0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
f2f0: 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 61 6c          bool val
f300: 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ue;....         
f310: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 62             if (b
f320: 6f 6f 6c 2e 54 72 79 50 61 72 73 65 28 74 65 78  ool.TryParse(tex
f330: 74 2c 20 6f 75 74 20 76 61 6c 75 65 29 29 0d 0a  t, out value))..
f340: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f350: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 76          return v
f360: 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alue;..         
f370: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
f380: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
f390: 72 6e 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20  rn null;..      
f3a0: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
f3b0: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
f3c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f3d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f3e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f3f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
f400: 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
f410: 65 20 73 74 61 74 69 63 20 6f 62 6a 65 63 74 20  e static object 
f420: 50 61 72 73 65 45 6e 75 6d 28 0d 0a 20 20 20 20  ParseEnum(..    
f430: 20 20 20 20 20 20 20 20 20 20 20 20 54 79 70 65              Type
f440: 20 65 6e 75 6d 54 79 70 65 2c 0d 0a 20 20 20 20   enumType,..    
f450: 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
f460: 6e 67 20 74 65 78 74 2c 0d 0a 20 20 20 20 20 20  ng text,..      
f470: 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 6e            bool n
f480: 6f 43 61 73 65 0d 0a 20 20 20 20 20 20 20 20 20  oCase..         
f490: 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
f4a0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
f4b0: 20 20 20 20 20 20 20 20 20 69 66 20 28 28 65 6e           if ((en
f4c0: 75 6d 54 79 70 65 20 3d 3d 20 6e 75 6c 6c 29 20  umType == null) 
f4d0: 7c 7c 20 21 65 6e 75 6d 54 79 70 65 2e 49 73 45  || !enumType.IsE
f4e0: 6e 75 6d 29 0d 0a 20 20 20 20 20 20 20 20 20 20  num)..          
f4f0: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
f500: 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20   null;....      
f510: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21 53            if (!S
f520: 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d  tring.IsNullOrEm
f530: 70 74 79 28 74 65 78 74 29 29 0d 0a 20 20 20 20  pty(text))..    
f540: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
f550: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f560: 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20     try..        
f570: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
f580: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f590: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 45 6e         return En
f5a0: 75 6d 2e 50 61 72 73 65 28 65 6e 75 6d 54 79 70  um.Parse(enumTyp
f5b0: 65 2c 20 74 65 78 74 2c 20 6e 6f 43 61 73 65 29  e, text, noCase)
f5c0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
f5d0: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
f5e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 61                ca
f5f0: 74 63 68 0d 0a 20 20 20 20 20 20 20 20 20 20 20  tch..           
f600: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
f610: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f620: 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e      // do nothin
f630: 67 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  g...            
f640: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
f650: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
f660: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f670: 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 20 20  return null;..  
f680: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
f690: 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67           #endreg
f6a0: 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ion....         
f6b0: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
f6c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f6d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f6e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f6f0: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
f700: 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 75        #region Pu
f710: 62 6c 69 63 20 53 74 61 74 69 63 20 4d 65 74 68  blic Static Meth
f720: 6f 64 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ods..           
f730: 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 43   public static C
f740: 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 43 72 65  onfiguration Cre
f750: 61 74 65 44 65 66 61 75 6c 74 28 29 0d 0a 20 20  ateDefault()..  
f760: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
f770: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72               str
f780: 69 6e 67 20 64 69 72 65 63 74 6f 72 79 20 3d 20  ing directory = 
f790: 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20  null;..         
f7a0: 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 63 6f         string co
f7b0: 72 65 46 69 6c 65 4e 61 6d 65 20 3d 20 6e 75 6c  reFileName = nul
f7c0: 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l;..            
f7d0: 20 20 20 20 73 74 72 69 6e 67 20 6c 69 6e 71 46      string linqF
f7e0: 69 6c 65 4e 61 6d 65 20 3d 20 6e 75 6c 6c 3b 0d  ileName = null;.
f7f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
f800: 20 73 74 72 69 6e 67 20 64 65 73 69 67 6e 65 72   string designer
f810: 46 69 6c 65 4e 61 6d 65 20 3d 20 6e 75 6c 6c 3b  FileName = null;
f820: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
f830: 20 20 20 20 47 65 74 44 65 66 61 75 6c 74 46 69      GetDefaultFi
f840: 6c 65 4e 61 6d 65 73 28 0d 0a 20 20 20 20 20 20  leNames(..      
f850: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
f860: 66 20 64 69 72 65 63 74 6f 72 79 2c 20 72 65 66  f directory, ref
f870: 20 63 6f 72 65 46 69 6c 65 4e 61 6d 65 2c 20 72   coreFileName, r
f880: 65 66 20 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 2c  ef linqFileName,
f890: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
f8a0: 20 20 20 20 20 20 72 65 66 20 64 65 73 69 67 6e        ref design
f8b0: 65 72 46 69 6c 65 4e 61 6d 65 29 3b 0d 0a 0d 0a  erFileName);....
f8c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f8d0: 72 65 74 75 72 6e 20 6e 65 77 20 43 6f 6e 66 69  return new Confi
f8e0: 67 75 72 61 74 69 6f 6e 28 74 68 69 73 41 73 73  guration(thisAss
f8f0: 65 6d 62 6c 79 2c 20 6e 75 6c 6c 2c 20 64 69 72  embly, null, dir
f900: 65 63 74 6f 72 79 2c 0d 0a 20 20 20 20 20 20 20  ectory,..       
f910: 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 72               cor
f920: 65 46 69 6c 65 4e 61 6d 65 2c 20 6c 69 6e 71 46  eFileName, linqF
f930: 69 6c 65 4e 61 6d 65 2c 20 64 65 73 69 67 6e 65  ileName, designe
f940: 72 46 69 6c 65 4e 61 6d 65 2c 20 6e 75 6c 6c 2c  rFileName, null,
f950: 20 6e 75 6c 6c 2c 0d 0a 20 20 20 20 20 20 20 20   null,..        
f960: 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
f970: 65 4f 70 73 2e 44 65 62 75 67 46 6f 72 6d 61 74  eOps.DebugFormat
f980: 2c 20 54 72 61 63 65 4f 70 73 2e 54 72 61 63 65  , TraceOps.Trace
f990: 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20  Format,..       
f9a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 73               Ins
f9b0: 74 61 6c 6c 46 6c 61 67 73 2e 44 65 66 61 75 6c  tallFlags.Defaul
f9c0: 74 2c 20 54 72 61 63 65 50 72 69 6f 72 69 74 79  t, TracePriority
f9d0: 2e 44 65 66 61 75 6c 74 2c 0d 0a 20 20 20 20 20  .Default,..     
f9e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
f9f0: 72 61 63 65 50 72 69 6f 72 69 74 79 2e 44 65 66  racePriority.Def
fa00: 61 75 6c 74 2c 20 74 72 75 65 2c 20 66 61 6c 73  ault, true, fals
fa10: 65 2c 20 66 61 6c 73 65 2c 20 66 61 6c 73 65 2c  e, false, false,
fa20: 20 66 61 6c 73 65 2c 0d 0a 20 20 20 20 20 20 20   false,..       
fa30: 20 20 20 20 20 20 20 20 20 20 20 20 20 66 61 6c               fal
fa40: 73 65 2c 20 66 61 6c 73 65 2c 20 66 61 6c 73 65  se, false, false
fa50: 2c 20 66 61 6c 73 65 2c 20 66 61 6c 73 65 2c 20  , false, false, 
fa60: 66 61 6c 73 65 2c 20 66 61 6c 73 65 2c 20 66 61  false, false, fa
fa70: 6c 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  lse,..          
fa80: 20 20 20 20 20 20 20 20 20 20 66 61 6c 73 65 2c            false,
fa90: 20 66 61 6c 73 65 2c 20 74 72 75 65 2c 20 74 72   false, true, tr
faa0: 75 65 2c 20 66 61 6c 73 65 2c 20 66 61 6c 73 65  ue, false, false
fab0: 2c 20 66 61 6c 73 65 29 3b 0d 0a 20 20 20 20 20  , false);..     
fac0: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
fad0: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
fae0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
faf0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fb00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fb10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
fb20: 20 20 20 20 20 20 20 20 20 20 20 5b 4d 65 74 68             [Meth
fb30: 6f 64 49 6d 70 6c 28 4d 65 74 68 6f 64 49 6d 70  odImpl(MethodImp
fb40: 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e  lOptions.NoInlin
fb50: 69 6e 67 29 5d 0d 0a 20 20 20 20 20 20 20 20 20  ing)]..         
fb60: 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63     public static
fb70: 20 62 6f 6f 6c 20 46 72 6f 6d 41 72 67 73 28 0d   bool FromArgs(.
fb80: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
fb90: 20 73 74 72 69 6e 67 5b 5d 20 61 72 67 73 2c 0d   string[] args,.
fba0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
fbb0: 20 62 6f 6f 6c 20 73 74 72 69 63 74 2c 0d 0a 20   bool strict,.. 
fbc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
fbd0: 65 66 20 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e  ef Configuration
fbe0: 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2c 0d   configuration,.
fbf0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
fc00: 20 72 65 66 20 73 74 72 69 6e 67 20 65 72 72 6f   ref string erro
fc10: 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  r..             
fc20: 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20     )..          
fc30: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
fc40: 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20       try..      
fc50: 20 20 20 20 20 20 20 20 20 20 7b 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 61 72 67 73 20 3d 3d 20 6e 75 6c   if (args == nul
fc80: 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
fc90: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
fca0: 72 6e 20 74 72 75 65 3b 0d 0a 0d 0a 20 20 20 20  rn true;....    
fcb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fcc0: 69 66 20 28 63 6f 6e 66 69 67 75 72 61 74 69 6f  if (configuratio
fcd0: 6e 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  n == null)..    
fce0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fcf0: 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f      configuratio
fd00: 6e 20 3d 20 43 6f 6e 66 69 67 75 72 61 74 69 6f  n = Configuratio
fd10: 6e 2e 43 72 65 61 74 65 44 65 66 61 75 6c 74 28  n.CreateDefault(
fd20: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
fd30: 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 6c 65            int le
fd40: 6e 67 74 68 20 3d 20 61 72 67 73 2e 4c 65 6e 67  ngth = args.Leng
fd50: 74 68 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  th;....         
fd60: 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 20 28             for (
fd70: 69 6e 74 20 69 6e 64 65 78 20 3d 20 30 3b 20 69  int index = 0; i
fd80: 6e 64 65 78 20 3c 20 6c 65 6e 67 74 68 3b 20 69  ndex < length; i
fd90: 6e 64 65 78 2b 2b 29 0d 0a 20 20 20 20 20 20 20  ndex++)..       
fda0: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
fdb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fdc0: 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 61          string a
fdd0: 72 67 20 3d 20 61 72 67 73 5b 69 6e 64 65 78 5d  rg = args[index]
fde0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
fdf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
fe00: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
fe10: 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45           // NOTE
fe20: 3a 20 53 6b 69 70 20 61 6e 79 20 61 72 67 75 6d  : Skip any argum
fe30: 65 6e 74 20 74 68 61 74 20 69 73 20 6e 75 6c 6c  ent that is null
fe40: 20 28 3f 29 20 6f 72 20 61 6e 20 65 6d 70 74 79   (?) or an empty
fe50: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
fe60: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
fe70: 20 20 20 73 74 72 69 6e 67 2e 0d 0a 20 20 20 20     string...    
fe80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fe90: 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
fea0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
feb0: 69 66 20 28 53 74 72 69 6e 67 2e 49 73 4e 75 6c  if (String.IsNul
fec0: 6c 4f 72 45 6d 70 74 79 28 61 72 67 29 29 0d 0a  lOrEmpty(arg))..
fed0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fee0: 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74              cont
fef0: 69 6e 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  inue;....       
ff00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ff10: 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
ff20: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
ff30: 4e 4f 54 45 3a 20 57 65 20 61 72 65 20 67 6f 69  NOTE: We are goi
ff40: 6e 67 20 74 6f 20 6d 6f 64 69 66 79 20 74 68 65  ng to modify the
ff50: 20 6f 72 69 67 69 6e 61 6c 20 61 72 67 75 6d 65   original argume
ff60: 6e 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  nt..            
ff70: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
ff80: 20 20 20 20 20 62 79 20 72 65 6d 6f 76 69 6e 67       by removing
ff90: 20 61 6e 79 20 6c 65 61 64 69 6e 67 20 6f 70 74   any leading opt
ffa0: 69 6f 6e 20 63 68 61 72 61 63 74 65 72 73 3b 0d  ion characters;.
ffb0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
ffc0: 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
ffd0: 20 20 74 68 65 72 65 66 6f 72 65 2c 20 77 65 20    therefore, we 
ffe0: 75 73 65 20 61 20 6e 65 77 20 73 74 72 69 6e 67  use a new string
fff0: 20 74 6f 20 68 6f 6c 64 20 74 68 65 0d 0a 20 20   to hold the..  
10000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10010 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 6d        //       m
10020 6f 64 69 66 69 65 64 20 61 72 67 75 6d 65 6e 74  odified argument
10030 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
10040 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
10050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10060 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6e 65         string ne
10070 77 41 72 67 20 3d 20 61 72 67 3b 0d 0a 0d 0a 20  wArg = arg;.... 
10080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10090 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
100a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
100b0 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 41 6c 6c 20     // NOTE: All 
100c0 74 68 65 20 73 75 70 70 6f 72 74 65 64 20 63 6f  the supported co
100d0 6d 6d 61 6e 64 20 6c 69 6e 65 20 6f 70 74 69 6f  mmand line optio
100e0 6e 73 20 6d 75 73 74 0d 0a 20 20 20 20 20 20 20  ns must..       
100f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10100 20 2f 2f 20 20 20 20 20 20 20 62 65 67 69 6e 20   //       begin 
10110 77 69 74 68 20 61 6e 20 6f 70 74 69 6f 6e 20 63  with an option c
10120 68 61 72 61 63 74 65 72 20 28 65 2e 67 2e 20 61  haracter (e.g. a
10130 20 6d 69 6e 75 73 0d 0a 20 20 20 20 20 20 20 20   minus..        
10140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10150 2f 2f 20 20 20 20 20 20 20 6f 72 20 66 6f 72 77  //       or forw
10160 61 72 64 20 73 6c 61 73 68 29 3b 20 61 74 74 65  ard slash); atte
10170 6d 70 74 20 74 6f 20 76 61 6c 69 64 61 74 65 20  mpt to validate 
10180 74 68 61 74 0d 0a 20 20 20 20 20 20 20 20 20 20  that..          
10190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
101a0 20 20 20 20 20 20 20 6e 6f 77 2e 20 20 49 66 20         now.  If 
101b0 77 65 20 66 61 69 6c 20 69 6e 20 73 74 72 69 63  we fail in stric
101c0 74 20 6d 6f 64 65 2c 20 77 65 20 61 72 65 20 64  t mode, we are d
101d0 6f 6e 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  one;..          
101e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
101f0 20 20 20 20 20 20 20 6f 74 68 65 72 77 69 73 65         otherwise
10200 2c 20 6a 75 73 74 20 73 6b 69 70 20 74 68 69 73  , just skip this
10210 20 61 72 67 75 6d 65 6e 74 20 61 6e 64 20 61 64   argument and ad
10220 76 61 6e 63 65 0d 0a 20 20 20 20 20 20 20 20 20  vance..         
10230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
10240 2f 20 20 20 20 20 20 20 74 6f 20 74 68 65 20 6e  /       to the n
10250 65 78 74 20 6f 6e 65 2e 0d 0a 20 20 20 20 20 20  ext one...      
10260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10270 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
10280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
10290 20 28 21 43 68 65 63 6b 4f 70 74 69 6f 6e 28 72   (!CheckOption(r
102a0 65 66 20 6e 65 77 41 72 67 29 29 0d 0a 20 20 20  ef newArg))..   
102b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
102c0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
102d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
102e0 20 20 20 20 65 72 72 6f 72 20 3d 20 54 72 61 63      error = Trac
102f0 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61  eOps.DebugAndTra
10300 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ce(..           
10310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10320 20 20 20 20 20 54 72 61 63 65 50 72 69 6f 72 69       TracePriori
10330 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75 67  ty.Lowest, debug
10340 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20  Callback,..     
10350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10360 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
10370 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67  Callback, String
10380 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  .Format(..      
10390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
103a0 20 20 20 20 20 20 20 20 20 20 22 55 6e 73 75 70            "Unsup
103b0 70 6f 72 74 65 64 20 63 6f 6d 6d 61 6e 64 20 6c  ported command l
103c0 69 6e 65 20 61 72 67 75 6d 65 6e 74 3a 20 7b 30  ine argument: {0
103d0 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }",..           
103e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
103f0 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28       ForDisplay(
10400 61 72 67 29 29 2c 20 74 72 61 63 65 43 61 74 65  arg)), traceCate
10410 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
10420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10430 20 20 20 20 20 20 69 66 20 28 73 74 72 69 63 74        if (strict
10440 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
10450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10460 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
10470 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
10480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10490 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20  continue;..     
104a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
104b0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
104c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
104d0 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
104e0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e              // N
104f0 4f 54 45 3a 20 41 6c 6c 20 74 68 65 20 73 75 70  OTE: All the sup
10500 70 6f 72 74 65 64 20 63 6f 6d 6d 61 6e 64 20 6c  ported command l
10510 69 6e 65 20 6f 70 74 69 6f 6e 73 20 6d 75 73 74  ine options must
10520 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
10530 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
10540 20 20 20 68 61 76 65 20 61 20 76 61 6c 75 65 3b     have a value;
10550 20 74 68 65 72 65 66 6f 72 65 2c 20 61 74 74 65   therefore, atte
10560 6d 70 74 20 74 6f 20 61 64 76 61 6e 63 65 0d 0a  mpt to advance..
10570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10580 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
10590 20 74 6f 20 69 74 20 6e 6f 77 2e 20 20 49 66 20   to it now.  If 
105a0 77 65 20 66 61 69 6c 2c 20 77 65 20 61 72 65 20  we fail, we are 
105b0 64 6f 6e 65 2e 0d 0a 20 20 20 20 20 20 20 20 20  done...         
105c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
105d0 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
105e0 20 20 20 20 20 20 20 20 20 20 20 69 6e 64 65 78             index
105f0 2b 2b 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ++;....         
10600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
10610 66 20 28 69 6e 64 65 78 20 3e 3d 20 6c 65 6e 67  f (index >= leng
10620 74 68 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  th)..           
10630 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
10640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10650 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
10660 72 20 3d 20 54 72 61 63 65 4f 70 73 2e 44 65 62  r = TraceOps.Deb
10670 75 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 20 20  ugAndTrace(..   
10680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10690 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61               Tra
106a0 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73  cePriority.Lowes
106b0 74 2c 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b  t, debugCallback
106c0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
106d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
106e0 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b     traceCallback
106f0 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  , String.Format(
10700 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
10710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10720 20 20 22 4d 69 73 73 69 6e 67 20 76 61 6c 75 65    "Missing value
10730 20 66 6f 72 20 6f 70 74 69 6f 6e 3a 20 7b 30 7d   for option: {0}
10740 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
10750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10760 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 61      ForDisplay(a
10770 72 67 29 29 2c 20 74 72 61 63 65 43 61 74 65 67  rg)), traceCateg
10780 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
10790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
107a0 20 20 20 20 20 69 66 20 28 73 74 72 69 63 74 29       if (strict)
107b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
107c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
107d0 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
107e0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
107f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62                 b
10800 72 65 61 6b 3b 0d 0a 20 20 20 20 20 20 20 20 20  reak;..         
10810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
10820 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
10830 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
10840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10850 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a          // NOTE:
10860 20 47 72 61 62 20 74 68 65 20 74 65 78 74 75 61   Grab the textua
10870 6c 20 76 61 6c 75 65 20 6f 66 20 74 68 69 73 20  l value of this 
10880 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 0d 0a 20 20  command line..  
10890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
108a0 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 6f        //       o
108b0 70 74 69 6f 6e 2e 0d 0a 20 20 20 20 20 20 20 20  ption...        
108c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
108d0 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
108e0 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
108f0 6e 67 20 74 65 78 74 20 3d 20 61 72 67 73 5b 69  ng text = args[i
10900 6e 64 65 78 5d 3b 0d 0a 0d 0a 20 20 20 20 20 20  ndex];....      
10910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10920 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
10930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
10940 20 4e 4f 54 45 3a 20 46 69 67 75 72 65 20 6f 75   NOTE: Figure ou
10950 74 20 77 68 69 63 68 20 63 6f 6d 6d 61 6e 64 20  t which command 
10960 6c 69 6e 65 20 6f 70 74 69 6f 6e 20 74 68 69 73  line option this
10970 20 69 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20   is..           
10980 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
10990 20 20 20 20 20 20 28 62 61 73 65 64 20 6f 6e 20        (based on 
109a0 61 20 70 61 72 74 69 61 6c 20 6e 61 6d 65 20 6d  a partial name m
109b0 61 74 63 68 29 20 61 6e 64 20 74 68 65 6e 20 74  atch) and then t
109c0 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ry..            
109d0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
109e0 20 20 20 20 20 74 6f 20 69 6e 74 65 72 70 72 65       to interpre
109f0 74 20 74 68 65 20 74 65 78 74 75 61 6c 20 76 61  t the textual va
10a00 6c 75 65 20 61 73 20 74 68 65 20 63 6f 72 72 65  lue as the corre
10a10 63 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ct..            
10a20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
10a30 20 20 20 20 20 74 79 70 65 2e 0d 0a 20 20 20 20       type...    
10a40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10a50 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
10a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10a70 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28  if (MatchOption(
10a80 6e 65 77 41 72 67 2c 20 22 63 6f 6e 66 69 67 56  newArg, "configV
10a90 65 72 73 69 6f 6e 22 29 29 0d 0a 20 20 20 20 20  ersion"))..     
10aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10ab0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
10ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10ad0 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e    configuration.
10ae0 63 6f 6e 66 69 67 56 65 72 73 69 6f 6e 20 3d 20  configVersion = 
10af0 74 65 78 74 3b 0d 0a 20 20 20 20 20 20 20 20 20  text;..         
10b00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
10b10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
10b20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69            else i
10b30 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e  f (MatchOption(n
10b40 65 77 41 72 67 2c 20 22 63 6f 6e 66 69 72 6d 22  ewArg, "confirm"
10b50 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
10b60 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
10b70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10b80 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 3f             bool?
10b90 20 76 61 6c 75 65 20 3d 20 50 61 72 73 65 42 6f   value = ParseBo
10ba0 6f 6c 65 61 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a  olean(text);....
10bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10bc0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
10bd0 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  value == null)..
10be0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10bf0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
10c00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10c10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
10c20 72 72 6f 72 20 3d 20 54 72 61 63 65 4f 70 73 2e  rror = TraceOps.
10c30 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 0d 0a  DebugAndTrace(..
10c40 20 20 20 20 20 20 20 20 20 20 20 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 20 54 72 61 63 65 50 72 69 6f 72 69 74      TracePriorit
10c70 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75 67 43  y.Lowest, debugC
10c80 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20  allback,..      
10c90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
10cb0 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72  aceCallback, Str
10cc0 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
10cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10cf0 20 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20 62 6f   "Invalid {0} bo
10d00 6f 6c 65 61 6e 20 76 61 6c 75 65 3a 20 7b 31 7d  olean value: {1}
10d10 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
10d20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10d30 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c          ForDispl
10d40 61 79 28 61 72 67 29 2c 20 46 6f 72 44 69 73 70  ay(arg), ForDisp
10d50 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a 20 20 20  lay(text)),..   
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 20 20 20 20 20 20 20 20 20                  
10d80 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
10d90 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
10da0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10db0 20 20 20 20 69 66 20 28 73 74 72 69 63 74 29 0d      if (strict).
10dc0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
10dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10de0 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
10df0 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
10e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10e10 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d        continue;.
10e20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
10e30 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
10e40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
10e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
10e60 6e 66 69 67 75 72 61 74 69 6f 6e 2e 63 6f 6e 66  nfiguration.conf
10e70 69 72 6d 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75  irm = (bool)valu
10e80 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
10e90 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
10ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10eb0 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28         else if (
10ec0 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41  MatchOption(newA
10ed0 72 67 2c 20 22 63 6f 72 65 46 69 6c 65 4e 61 6d  rg, "coreFileNam
10ee0 65 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  e"))..          
10ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
10f00 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
10f10 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
10f20 66 69 67 75 72 61 74 69 6f 6e 2e 63 6f 72 65 46  figuration.coreF
10f30 69 6c 65 4e 61 6d 65 20 3d 20 74 65 78 74 3b 0d  ileName = text;.
10f40 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
10f50 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
10f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10f70 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74      else if (Mat
10f80 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c  chOption(newArg,
10f90 20 22 64 65 62 75 67 22 29 29 0d 0a 20 20 20 20   "debug"))..    
10fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10fb0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
10fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10fd0 20 20 20 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d     bool? value =
10fe0 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65   ParseBoolean(te
10ff0 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  xt);....        
11000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11010 20 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d 3d      if (value ==
11020 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
11030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11040 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
11050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11060 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 54         error = T
11070 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64  raceOps.DebugAnd
11080 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20  Trace(..        
11090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
110a0 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
110b0 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74  ePriority.Lowest
110c0 2c 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c  , debugCallback,
110d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
110e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
110f0 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62        traceCallb
11100 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d  ack, String.Form
11110 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
11120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11130 20 20 20 20 20 20 20 20 20 22 49 6e 76 61 6c 69           "Invali
11140 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61  d {0} boolean va
11150 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20  lue: {1}",..    
11160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11180 46 6f 72 44 69 73 70 6c 61 79 28 61 72 67 29 2c  ForDisplay(arg),
11190 20 46 6f 72 44 69 73 70 6c 61 79 28 74 65 78 74   ForDisplay(text
111a0 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  )),..           
111b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
111c0 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
111d0 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
111e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
111f0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
11200 73 74 72 69 63 74 29 0d 0a 20 20 20 20 20 20 20  strict)..       
11210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11220 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
11230 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20  urn false;....  
11240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
11260 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20  ntinue;..       
11270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11280 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
11290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
112a0 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74        configurat
112b0 69 6f 6e 2e 64 65 62 75 67 20 3d 20 28 62 6f 6f  ion.debug = (boo
112c0 6c 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20  l)value;..      
112d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
112e0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
112f0 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73               els
11300 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f  e if (MatchOptio
11310 6e 28 6e 65 77 41 72 67 2c 20 22 64 65 62 75 67  n(newArg, "debug
11320 46 6f 72 6d 61 74 22 29 29 0d 0a 20 20 20 20 20  Format"))..     
11330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11340 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
11350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11360 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e    configuration.
11370 64 65 62 75 67 46 6f 72 6d 61 74 20 3d 20 74 65  debugFormat = te
11380 78 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  xt;..           
11390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
113a0 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 46   TraceOps.DebugF
113b0 6f 72 6d 61 74 20 3d 20 63 6f 6e 66 69 67 75 72  ormat = configur
113c0 61 74 69 6f 6e 2e 64 65 62 75 67 46 6f 72 6d 61  ation.debugForma
113d0 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t;..            
113e0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
113f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11400 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28         else if (
11410 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41  MatchOption(newA
11420 72 67 2c 20 22 64 65 62 75 67 50 72 69 6f 72 69  rg, "debugPriori
11430 74 79 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ty"))..         
11440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
11450 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
11460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6f 62                ob
11470 6a 65 63 74 20 76 61 6c 75 65 20 3d 20 50 61 72  ject value = Par
11480 73 65 45 6e 75 6d 28 0d 0a 20 20 20 20 20 20 20  seEnum(..       
11490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
114a0 20 20 20 20 20 20 20 20 20 74 79 70 65 6f 66 28           typeof(
114b0 54 72 61 63 65 50 72 69 6f 72 69 74 79 29 2c 20  TracePriority), 
114c0 74 65 78 74 2c 20 74 72 75 65 29 3b 0d 0a 0d 0a  text, true);....
114d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
114e0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
114f0 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  value == null)..
11500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11510 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
11520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
11540 72 72 6f 72 20 3d 20 54 72 61 63 65 4f 70 73 2e  rror = TraceOps.
11550 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 0d 0a  DebugAndTrace(..
11560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11580 20 20 20 20 54 72 61 63 65 50 72 69 6f 72 69 74      TracePriorit
11590 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75 67 43  y.Lowest, debugC
115a0 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20  allback,..      
115b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
115c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
115d0 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72  aceCallback, Str
115e0 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
115f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11610 20 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20 76 61   "Invalid {0} va
11620 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20  lue: {1}",..    
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 20 20 20 20 20 20 20                  
11650 46 6f 72 44 69 73 70 6c 61 79 28 61 72 67 29 2c  ForDisplay(arg),
11660 20 46 6f 72 44 69 73 70 6c 61 79 28 74 65 78 74   ForDisplay(text
11670 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  )),..           
11680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11690 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
116a0 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
116b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
116c0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
116d0 73 74 72 69 63 74 29 0d 0a 20 20 20 20 20 20 20  strict)..       
116e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
116f0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
11700 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20  urn false;....  
11710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
11730 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20  ntinue;..       
11740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11750 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
11760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11770 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74        configurat
11780 69 6f 6e 2e 64 65 62 75 67 50 72 69 6f 72 69 74  ion.debugPriorit
11790 79 20 3d 20 28 54 72 61 63 65 50 72 69 6f 72 69  y = (TracePriori
117a0 74 79 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20  ty)value;..     
117b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
117c0 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e         TraceOps.
117d0 44 65 62 75 67 50 72 69 6f 72 69 74 79 20 3d 20  DebugPriority = 
117e0 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 64 65  configuration.de
117f0 62 75 67 50 72 69 6f 72 69 74 79 3b 0d 0a 20 20  bugPriority;..  
11800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11810 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
11820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11830 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f   else if (MatchO
11840 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 64  ption(newArg, "d
11850 65 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 22  esignerFileName"
11860 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
11870 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
11880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11890 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69             confi
118a0 67 75 72 61 74 69 6f 6e 2e 64 65 73 69 67 6e 65  guration.designe
118b0 72 46 69 6c 65 4e 61 6d 65 20 3d 20 74 65 78 74  rFileName = text
118c0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
118d0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
118e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
118f0 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d        else if (M
11900 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72  atchOption(newAr
11910 67 2c 20 22 64 69 72 65 63 74 6f 72 79 22 29 29  g, "directory"))
11920 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
11930 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
11940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11950 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75           configu
11960 72 61 74 69 6f 6e 2e 64 69 72 65 63 74 6f 72 79  ration.directory
11970 20 3d 20 74 65 78 74 3b 0d 0a 0d 0a 20 20 20 20   = text;....    
11980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11990 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
119a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
119b0 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a          // NOTE:
119c0 20 2a 53 50 45 43 49 41 4c 2a 20 4d 75 73 74 20   *SPECIAL* Must 
119d0 72 65 66 72 65 73 68 20 74 68 65 20 66 69 6c 65  refresh the file
119e0 20 6e 61 6d 65 73 0d 0a 20 20 20 20 20 20 20 20   names..        
119f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11a00 20 20 20 20 2f 2f 20 20 20 20 20 20 20 68 65 72      //       her
11a10 65 20 62 65 63 61 75 73 65 20 74 68 65 20 75 6e  e because the un
11a20 64 65 72 6c 79 69 6e 67 20 64 69 72 65 63 74 6f  derlying directo
11a30 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ry..            
11a40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11a50 2f 2f 20 20 20 20 20 20 20 68 61 73 20 63 68 61  //       has cha
11a60 6e 67 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 20  nged...         
11a70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11a80 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
11a90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11aa0 20 20 20 73 74 72 69 6e 67 20 63 6f 72 65 46 69     string coreFi
11ab0 6c 65 4e 61 6d 65 20 3d 20 63 6f 6e 66 69 67 75  leName = configu
11ac0 72 61 74 69 6f 6e 2e 63 6f 72 65 46 69 6c 65 4e  ration.coreFileN
11ad0 61 6d 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ame;....        
11ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11af0 20 20 20 20 69 66 20 28 21 53 74 72 69 6e 67 2e      if (!String.
11b00 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 63 6f  IsNullOrEmpty(co
11b10 72 65 46 69 6c 65 4e 61 6d 65 29 29 0d 0a 20 20  reFileName))..  
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 20 20 20 63 6f                co
11b40 72 65 46 69 6c 65 4e 61 6d 65 20 3d 20 50 61 74  reFileName = Pat
11b50 68 2e 47 65 74 46 69 6c 65 4e 61 6d 65 28 63 6f  h.GetFileName(co
11b60 72 65 46 69 6c 65 4e 61 6d 65 29 3b 0d 0a 0d 0a  reFileName);....
11b70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11b80 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
11b90 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45  String.IsNullOrE
11ba0 6d 70 74 79 28 63 6f 72 65 46 69 6c 65 4e 61 6d  mpty(coreFileNam
11bb0 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e))..           
11bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11bd0 20 20 20 20 20 63 6f 72 65 46 69 6c 65 4e 61 6d       coreFileNam
11be0 65 20 3d 20 49 6e 73 74 61 6c 6c 65 72 2e 43 6f  e = Installer.Co
11bf0 72 65 46 69 6c 65 4e 61 6d 65 3b 0d 0a 0d 0a 20  reFileName;.... 
11c00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11c10 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69             confi
11c20 67 75 72 61 74 69 6f 6e 2e 63 6f 72 65 46 69 6c  guration.coreFil
11c30 65 4e 61 6d 65 20 3d 20 50 61 74 68 2e 43 6f 6d  eName = Path.Com
11c40 62 69 6e 65 28 0d 0a 20 20 20 20 20 20 20 20 20  bine(..         
11c50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11c60 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61         configura
11c70 74 69 6f 6e 2e 64 69 72 65 63 74 6f 72 79 2c 20  tion.directory, 
11c80 63 6f 72 65 46 69 6c 65 4e 61 6d 65 29 3b 0d 0a  coreFileName);..
11c90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
11ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
11cb0 72 69 6e 67 20 6c 69 6e 71 46 69 6c 65 4e 61 6d  ring linqFileNam
11cc0 65 20 3d 20 63 6f 6e 66 69 67 75 72 61 74 69 6f  e = configuratio
11cd0 6e 2e 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 3b 0d  n.linqFileName;.
11ce0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
11cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
11d00 66 20 28 21 53 74 72 69 6e 67 2e 49 73 4e 75 6c  f (!String.IsNul
11d10 6c 4f 72 45 6d 70 74 79 28 6c 69 6e 71 46 69 6c  lOrEmpty(linqFil
11d20 65 4e 61 6d 65 29 29 0d 0a 20 20 20 20 20 20 20  eName))..       
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 20 6c 69 6e 71 46 69 6c           linqFil
11d50 65 4e 61 6d 65 20 3d 20 50 61 74 68 2e 47 65 74  eName = Path.Get
11d60 46 69 6c 65 4e 61 6d 65 28 6c 69 6e 71 46 69 6c  FileName(linqFil
11d70 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20  eName);....     
11d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11d90 20 20 20 20 20 20 20 69 66 20 28 53 74 72 69 6e         if (Strin
11da0 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28  g.IsNullOrEmpty(
11db0 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 29 29 0d 0a  linqFileName))..
11dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11de0 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 20 3d 20 49  linqFileName = I
11df0 6e 73 74 61 6c 6c 65 72 2e 4c 69 6e 71 46 69 6c  nstaller.LinqFil
11e00 65 4e 61 6d 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  eName;....      
11e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11e20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74        configurat
11e30 69 6f 6e 2e 6c 69 6e 71 46 69 6c 65 4e 61 6d 65  ion.linqFileName
11e40 20 3d 20 50 61 74 68 2e 43 6f 6d 62 69 6e 65 28   = Path.Combine(
11e50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
11e60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11e70 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e    configuration.
11e80 64 69 72 65 63 74 6f 72 79 2c 20 6c 69 6e 71 46  directory, linqF
11e90 69 6c 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20  ileName);....   
11ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11eb0 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
11ec0 64 65 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65  designerFileName
11ed0 20 3d 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e   = configuration
11ee0 2e 64 65 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d  .designerFileNam
11ef0 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
11f00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11f10 20 20 69 66 20 28 21 53 74 72 69 6e 67 2e 49 73    if (!String.Is
11f20 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 64 65 73 69  NullOrEmpty(desi
11f30 67 6e 65 72 46 69 6c 65 4e 61 6d 65 29 29 0d 0a  gnerFileName))..
11f40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11f50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11f60 64 65 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65  designerFileName
11f70 20 3d 20 50 61 74 68 2e 47 65 74 46 69 6c 65 4e   = Path.GetFileN
11f80 61 6d 65 28 64 65 73 69 67 6e 65 72 46 69 6c 65  ame(designerFile
11f90 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  Name);....      
11fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11fb0 20 20 20 20 20 20 69 66 20 28 53 74 72 69 6e 67        if (String
11fc0 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 64  .IsNullOrEmpty(d
11fd0 65 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 29  esignerFileName)
11fe0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
11ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12000 20 20 20 64 65 73 69 67 6e 65 72 46 69 6c 65 4e     designerFileN
12010 61 6d 65 20 3d 20 49 6e 73 74 61 6c 6c 65 72 2e  ame = Installer.
12020 44 65 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65  DesignerFileName
12030 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
12040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12050 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 64   configuration.d
12060 65 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 20  esignerFileName 
12070 3d 20 50 61 74 68 2e 43 6f 6d 62 69 6e 65 28 0d  = Path.Combine(.
12080 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
12090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
120a0 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 64   configuration.d
120b0 69 72 65 63 74 6f 72 79 2c 20 64 65 73 69 67 6e  irectory, design
120c0 65 72 46 69 6c 65 4e 61 6d 65 29 3b 0d 0a 20 20  erFileName);..  
120d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
120e0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
120f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12100 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f   else if (MatchO
12110 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 69  ption(newArg, "i
12120 6e 73 74 61 6c 6c 22 29 29 0d 0a 20 20 20 20 20  nstall"))..     
12130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12140 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
12150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12160 20 20 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d 20    bool? value = 
12170 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65 78  ParseBoolean(tex
12180 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  t);....         
12190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
121a0 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d 3d 20     if (value == 
121b0 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
121c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
121d0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
121e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
121f0 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 54 72        error = Tr
12200 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54  aceOps.DebugAndT
12210 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20  race(..         
12220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12230 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
12240 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c  Priority.Lowest,
12250 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d   debugCallback,.
12260 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
12270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12280 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61       traceCallba
12290 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ck, String.Forma
122a0 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
122b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
122c0 20 20 20 20 20 20 20 20 22 49 6e 76 61 6c 69 64          "Invalid
122d0 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 6c   {0} boolean val
122e0 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20  ue: {1}",..     
122f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46                 F
12310 6f 72 44 69 73 70 6c 61 79 28 61 72 67 29 2c 20  orDisplay(arg), 
12320 46 6f 72 44 69 73 70 6c 61 79 28 74 65 78 74 29  ForDisplay(text)
12330 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
12340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12350 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74          traceCat
12360 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  egory);....     
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 20 20 69 66 20 28 73             if (s
12390 74 72 69 63 74 29 0d 0a 20 20 20 20 20 20 20 20  trict)..        
123a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
123b0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
123c0 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20  rn false;....   
123d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
123e0 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
123f0 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20  tinue;..        
12400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12410 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
12420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12430 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69       configurati
12440 6f 6e 2e 69 6e 73 74 61 6c 6c 20 3d 20 28 62 6f  on.install = (bo
12450 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20  ol)value;..     
12460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12470 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
12480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c                el
12490 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69  se if (MatchOpti
124a0 6f 6e 28 6e 65 77 41 72 67 2c 20 22 69 6e 73 74  on(newArg, "inst
124b0 61 6c 6c 46 6c 61 67 73 22 29 29 0d 0a 20 20 20  allFlags"))..   
124c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
124d0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
124e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
124f0 20 20 20 20 6f 62 6a 65 63 74 20 76 61 6c 75 65      object value
12500 20 3d 20 50 61 72 73 65 45 6e 75 6d 28 0d 0a 20   = ParseEnum(.. 
12510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
12530 79 70 65 6f 66 28 49 6e 73 74 61 6c 6c 46 6c 61  ypeof(InstallFla
12540 67 73 29 2c 20 74 65 78 74 2c 20 74 72 75 65 29  gs), text, true)
12550 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
12560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12570 20 69 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75   if (value == nu
12580 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
12590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
125a0 20 7b 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 20 20 20 20 65 72 72 6f 72 20 3d 20 54 72 61 63      error = Trac
125d0 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61  eOps.DebugAndTra
125e0 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ce(..           
125f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12600 20 20 20 20 20 20 20 20 20 54 72 61 63 65 50 72           TracePr
12610 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64  iority.Lowest, d
12620 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20  ebugCallback,.. 
12630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12650 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b     traceCallback
12660 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  , String.Format(
12670 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
12680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12690 20 20 20 20 20 20 22 49 6e 76 61 6c 69 64 20 69        "Invalid i
126a0 6e 73 74 61 6c 6c 20 66 6c 61 67 73 20 76 61 6c  nstall flags val
126b0 75 65 3a 20 7b 30 7d 22 2c 0d 0a 20 20 20 20 20  ue: {0}",..     
126c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
126d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46                 F
126e0 6f 72 44 69 73 70 6c 61 79 28 74 65 78 74 29 29  orDisplay(text))
126f0 2c 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29  , traceCategory)
12700 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
12710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12720 20 20 20 20 20 69 66 20 28 73 74 72 69 63 74 29       if (strict)
12730 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
12740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12750 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
12760 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  se;....         
12770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12780 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b         continue;
12790 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
127a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
127b0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
127c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
127d0 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 69 6e 73  onfiguration.ins
127e0 74 61 6c 6c 46 6c 61 67 73 20 3d 20 28 49 6e 73  tallFlags = (Ins
127f0 74 61 6c 6c 46 6c 61 67 73 29 76 61 6c 75 65 3b  tallFlags)value;
12800 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
12810 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
12820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12830 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61       else if (Ma
12840 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67  tchOption(newArg
12850 2c 20 22 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 22  , "linqFileName"
12860 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
12870 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
12880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12890 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69             confi
128a0 67 75 72 61 74 69 6f 6e 2e 6c 69 6e 71 46 69 6c  guration.linqFil
128b0 65 4e 61 6d 65 20 3d 20 74 65 78 74 3b 0d 0a 20  eName = text;.. 
128c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
128d0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
128e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
128f0 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68    else if (Match
12900 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22  Option(newArg, "
12910 6c 6f 67 46 69 6c 65 4e 61 6d 65 22 29 29 0d 0a  logFileName"))..
12920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12930 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
12940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12950 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61         configura
12960 74 69 6f 6e 2e 6c 6f 67 46 69 6c 65 4e 61 6d 65  tion.logFileName
12970 20 3d 20 74 65 78 74 3b 0d 0a 20 20 20 20 20 20   = text;..      
12980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12990 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
129a0 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73               els
129b0 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f  e if (MatchOptio
129c0 6e 28 6e 65 77 41 72 67 2c 20 22 6e 6f 43 6f 6d  n(newArg, "noCom
129d0 70 61 63 74 22 29 29 0d 0a 20 20 20 20 20 20 20  pact"))..       
129e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
129f0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
12a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12a10 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d 20 50 61  bool? value = Pa
12a20 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65 78 74 29  rseBoolean(text)
12a30 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
12a40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12a50 20 69 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75   if (value == nu
12a60 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
12a70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12a80 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
12a90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12aa0 20 20 20 20 65 72 72 6f 72 20 3d 20 54 72 61 63      error = Trac
12ab0 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61  eOps.DebugAndTra
12ac0 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ce(..           
12ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12ae0 20 20 20 20 20 20 20 20 20 54 72 61 63 65 50 72           TracePr
12af0 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64  iority.Lowest, d
12b00 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20  ebugCallback,.. 
12b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12b30 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b     traceCallback
12b40 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  , String.Format(
12b50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
12b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12b70 20 20 20 20 20 20 22 49 6e 76 61 6c 69 64 20 7b        "Invalid {
12b80 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65  0} boolean value
12b90 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20  : {1}",..       
12ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72               For
12bc0 44 69 73 70 6c 61 79 28 61 72 67 29 2c 20 46 6f  Display(arg), Fo
12bd0 72 44 69 73 70 6c 61 79 28 74 65 78 74 29 29 2c  rDisplay(text)),
12be0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
12bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12c00 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67        traceCateg
12c10 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
12c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12c30 20 20 20 20 20 20 20 20 20 69 66 20 28 73 74 72           if (str
12c40 69 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ict)..          
12c50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12c60 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
12c70 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20   false;....     
12c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12c90 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69             conti
12ca0 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  nue;..          
12cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12cc0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
12cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12ce0 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e     configuration
12cf0 2e 6e 6f 43 6f 6d 70 61 63 74 20 3d 20 28 62 6f  .noCompact = (bo
12d00 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20  ol)value;..     
12d10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12d20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
12d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c                el
12d40 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69  se if (MatchOpti
12d50 6f 6e 28 6e 65 77 41 72 67 2c 20 22 6e 6f 43 6f  on(newArg, "noCo
12d60 6e 73 6f 6c 65 22 29 29 0d 0a 20 20 20 20 20 20  nsole"))..      
12d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12d80 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
12d90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12da0 20 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d 20 50   bool? value = P
12db0 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65 78 74  arseBoolean(text
12dc0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
12dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12de0 20 20 69 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e    if (value == n
12df0 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
12e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12e10 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
12e20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12e30 20 20 20 20 20 65 72 72 6f 72 20 3d 20 54 72 61       error = Tra
12e40 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72  ceOps.DebugAndTr
12e50 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ace(..          
12e60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12e70 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 50            TraceP
12e80 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20  riority.Lowest, 
12e90 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a  debugCallback,..
12ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12ec0 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63      traceCallbac
12ed0 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  k, String.Format
12ee0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
12ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12f00 20 20 20 20 20 20 20 22 49 6e 76 61 6c 69 64 20         "Invalid 
12f10 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75  {0} boolean valu
12f20 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20  e: {1}",..      
12f30 20 20 20 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 20 20 20 46 6f                Fo
12f50 72 44 69 73 70 6c 61 79 28 61 72 67 29 2c 20 46  rDisplay(arg), F
12f60 6f 72 44 69 73 70 6c 61 79 28 74 65 78 74 29 29  orDisplay(text))
12f70 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
12f80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12f90 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65         traceCate
12fa0 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
12fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12fc0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 73 74            if (st
12fd0 72 69 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20  rict)..         
12fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12ff0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
13000 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20  n false;....    
13010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13020 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74              cont
13030 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  inue;..         
13040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13050 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
13060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13070 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f      configuratio
13080 6e 2e 6e 6f 43 6f 6e 73 6f 6c 65 20 3d 20 28 62  n.noConsole = (b
13090 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20  ool)value;..    
130a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
130b0 20 20 20 20 7d 0d 0a 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 65                 e
130d0 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74  lse if (MatchOpt
130e0 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 6e 6f 44  ion(newArg, "noD
130f0 65 73 6b 74 6f 70 22 29 29 0d 0a 20 20 20 20 20  esktop"))..     
13100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13110 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
13120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13130 20 20 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d 20    bool? value = 
13140 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65 78  ParseBoolean(tex
13150 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  t);....         
13160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13170 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d 3d 20     if (value == 
13180 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
13190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
131a0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
131b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
131c0 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 54 72        error = Tr
131d0 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54  aceOps.DebugAndT
131e0 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20  race(..         
131f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13200 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
13210 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c  Priority.Lowest,
13220 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d   debugCallback,.
13230 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
13240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13250 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61       traceCallba
13260 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ck, String.Forma
13270 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
13280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13290 20 20 20 20 20 20 20 20 22 49 6e 76 61 6c 69 64          "Invalid
132a0 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 6c   {0} boolean val
132b0 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20  ue: {1}",..     
132c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
132d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46                 F
132e0 6f 72 44 69 73 70 6c 61 79 28 61 72 67 29 2c 20  orDisplay(arg), 
132f0 46 6f 72 44 69 73 70 6c 61 79 28 74 65 78 74 29  ForDisplay(text)
13300 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
13310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13320 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74          traceCat
13330 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  egory);....     
13340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13350 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 73             if (s
13360 74 72 69 63 74 29 0d 0a 20 20 20 20 20 20 20 20  trict)..        
13370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13380 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
13390 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20  rn false;....   
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 20 20 63 6f 6e               con
133c0 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20  tinue;..        
133d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
133e0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 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 63 6f 6e 66 69 67 75 72 61 74 69       configurati
13410 6f 6e 2e 6e 6f 44 65 73 6b 74 6f 70 20 3d 20 28  on.noDesktop = (
13420 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20 20 20  bool)value;..   
13430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13440 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
13450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13460 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70  else if (MatchOp
13470 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 6e 6f  tion(newArg, "no
13480 4c 6f 67 22 29 29 0d 0a 20 20 20 20 20 20 20 20  Log"))..        
13490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
134a0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
134b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62                 b
134c0 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d 20 50 61 72  ool? value = Par
134d0 73 65 42 6f 6f 6c 65 61 6e 28 74 65 78 74 29 3b  seBoolean(text);
134e0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
134f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13500 69 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c  if (value == nul
13510 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
13520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13530 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
13540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13550 20 20 20 65 72 72 6f 72 20 3d 20 54 72 61 63 65     error = Trace
13560 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63  Ops.DebugAndTrac
13570 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
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 54 72 61 63 65 50 72 69          TracePri
135a0 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65  ority.Lowest, de
135b0 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20  bugCallback,..  
135c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
135d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
135e0 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c    traceCallback,
135f0 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d   String.Format(.
13600 0a 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 20 20 20 20 20 20 20                  
13620 20 20 20 20 20 22 49 6e 76 61 6c 69 64 20 7b 30       "Invalid {0
13630 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 3a  } boolean value:
13640 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20   {1}",..        
13650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13660 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44              ForD
13670 69 73 70 6c 61 79 28 61 72 67 29 2c 20 46 6f 72  isplay(arg), For
13680 44 69 73 70 6c 61 79 28 74 65 78 74 29 29 2c 0d  Display(text)),.
13690 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
136a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
136b0 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f       traceCatego
136c0 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
136d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
136e0 20 20 20 20 20 20 20 20 69 66 20 28 73 74 72 69          if (stri
136f0 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ct)..           
13700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13710 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
13720 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  false;....      
13730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13740 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e            contin
13750 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
13760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13770 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
13780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13790 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e    configuration.
137a0 6e 6f 4c 6f 67 20 3d 20 28 62 6f 6f 6c 29 76 61  noLog = (bool)va
137b0 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lue;..          
137c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
137d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
137e0 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66           else if
137f0 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65   (MatchOption(ne
13800 77 41 72 67 2c 20 22 6e 6f 4e 65 74 46 78 32 30  wArg, "noNetFx20
13810 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  "))..           
13820 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
13830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13840 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
13850 3f 20 76 61 6c 75 65 20 3d 20 50 61 72 73 65 42  ? value = ParseB
13860 6f 6f 6c 65 61 6e 28 74 65 78 74 29 3b 0d 0a 0d  oolean(text);...
13870 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
13880 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
13890 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d  (value == null).
138a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
138b0 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
138c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
138d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
138e0 65 72 72 6f 72 20 3d 20 54 72 61 63 65 4f 70 73  error = TraceOps
138f0 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 0d  .DebugAndTrace(.
13900 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
13910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13920 20 20 20 20 20 54 72 61 63 65 50 72 69 6f 72 69       TracePriori
13930 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75 67  ty.Lowest, debug
13940 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20  Callback,..     
13950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
13970 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74  raceCallback, St
13980 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
13990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
139a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
139b0 20 20 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20 62    "Invalid {0} b
139c0 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 3a 20 7b 31  oolean value: {1
139d0 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }",..           
139e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
139f0 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70           ForDisp
13a00 6c 61 79 28 61 72 67 29 2c 20 46 6f 72 44 69 73  lay(arg), ForDis
13a10 70 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a 20 20  play(text)),..  
13a20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13a30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13a40 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29    traceCategory)
13a50 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
13a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13a70 20 20 20 20 20 69 66 20 28 73 74 72 69 63 74 29       if (strict)
13a80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
13a90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13aa0 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
13ab0 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  se;....         
13ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13ad0 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b         continue;
13ae0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
13af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
13b00 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
13b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
13b20 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 4e  onfiguration.noN
13b30 65 74 46 78 32 30 20 3d 20 28 62 6f 6f 6c 29 76  etFx20 = (bool)v
13b40 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alue;..         
13b50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
13b60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
13b70 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69            else i
13b80 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e  f (MatchOption(n
13b90 65 77 41 72 67 2c 20 22 6e 6f 4e 65 74 46 78 34  ewArg, "noNetFx4
13ba0 30 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  0"))..          
13bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
13bc0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
13bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f               boo
13be0 6c 3f 20 76 61 6c 75 65 20 3d 20 50 61 72 73 65  l? value = Parse
13bf0 42 6f 6f 6c 65 61 6e 28 74 65 78 74 29 3b 0d 0a  Boolean(text);..
13c00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
13c10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
13c20 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29   (value == null)
13c30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
13c40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
13c50 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
13c60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13c70 20 65 72 72 6f 72 20 3d 20 54 72 61 63 65 4f 70   error = TraceOp
13c80 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28  s.DebugAndTrace(
13c90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
13ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13cb0 20 20 20 20 20 20 54 72 61 63 65 50 72 69 6f 72        TracePrior
13cc0 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75  ity.Lowest, debu
13cd0 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20  gCallback,..    
13ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13d00 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53  traceCallback, S
13d10 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
13d20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13d40 20 20 20 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20     "Invalid {0} 
13d50 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 3a 20 7b  boolean value: {
13d60 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  1}",..          
13d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13d80 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73            ForDis
13d90 70 6c 61 79 28 61 72 67 29 2c 20 46 6f 72 44 69  play(arg), ForDi
13da0 73 70 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a 20  splay(text)),.. 
13db0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13dd0 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
13de0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
13df0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13e00 20 20 20 20 20 20 69 66 20 28 73 74 72 69 63 74        if (strict
13e10 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
13e20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13e30 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
13e40 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  lse;....        
13e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13e60 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65          continue
13e70 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
13e80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
13e90 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
13ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13eb0 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f  configuration.no
13ec0 4e 65 74 46 78 34 30 20 3d 20 28 62 6f 6f 6c 29  NetFx40 = (bool)
13ed0 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20  value;..        
13ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13ef0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
13f00 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20             else 
13f10 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28  if (MatchOption(
13f20 6e 65 77 41 72 67 2c 20 22 6e 6f 4e 65 74 46 78  newArg, "noNetFx
13f30 34 35 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20  45"))..         
13f40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
13f50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
13f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f                bo
13f70 6f 6c 3f 20 76 61 6c 75 65 20 3d 20 50 61 72 73  ol? value = Pars
13f80 65 42 6f 6f 6c 65 61 6e 28 74 65 78 74 29 3b 0d  eBoolean(text);.
13f90 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
13fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
13fb0 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c  f (value == null
13fc0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
13fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
13fe0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
13ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14000 20 20 65 72 72 6f 72 20 3d 20 54 72 61 63 65 4f    error = TraceO
14010 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65  ps.DebugAndTrace
14020 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
14030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14040 20 20 20 20 20 20 20 54 72 61 63 65 50 72 69 6f         TracePrio
14050 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62  rity.Lowest, deb
14060 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20  ugCallback,..   
14070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14090 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20   traceCallback, 
140a0 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
140b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
140c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
140d0 20 20 20 20 22 49 6e 76 61 6c 69 64 20 7b 30 7d      "Invalid {0}
140e0 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 3a 20   boolean value: 
140f0 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  {1}",..         
14100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14110 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69             ForDi
14120 73 70 6c 61 79 28 61 72 67 29 2c 20 46 6f 72 44  splay(arg), ForD
14130 69 73 70 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a  isplay(text)),..
14140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14160 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72      traceCategor
14170 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
14180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14190 20 20 20 20 20 20 20 69 66 20 28 73 74 72 69 63         if (stric
141a0 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t)..            
141b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
141c0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
141d0 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  alse;....       
141e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
141f0 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75           continu
14200 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
14210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14220 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
14230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14240 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e   configuration.n
14250 6f 4e 65 74 46 78 34 35 20 3d 20 28 62 6f 6f 6c  oNetFx45 = (bool
14260 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20  )value;..       
14270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14280 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
14290 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65              else
142a0 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e   if (MatchOption
142b0 28 6e 65 77 41 72 67 2c 20 22 6e 6f 52 75 6e 74  (newArg, "noRunt
142c0 69 6d 65 56 65 72 73 69 6f 6e 22 29 29 0d 0a 20  imeVersion")).. 
142d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
142e0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
142f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14300 20 20 20 20 20 20 62 6f 6f 6c 3f 20 76 61 6c 75        bool? valu
14310 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e  e = ParseBoolean
14320 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20  (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 69 66 20 28 76 61 6c 75 65         if (value
14350 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == 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 7b 0d 0a 20 20 20 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 65 72 72 6f 72 20            error 
143a0 3d 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67  = TraceOps.Debug
143b0 41 6e 64 54 72 61 63 65 28 0d 0a 20 20 20 20 20  AndTrace(..     
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 54                 T
143e0 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77  racePriority.Low
143f0 65 73 74 2c 20 64 65 62 75 67 43 61 6c 6c 62 61  est, debugCallba
14400 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ck,..           
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 74 72 61 63 65 43 61           traceCa
14430 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46  llback, String.F
14440 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
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 22 49 6e 76              "Inv
14470 61 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e  alid {0} boolean
14480 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20   value: {1}",.. 
14490 20 20 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 46 6f 72 44 69 73 70 6c 61 79 28 61 72     ForDisplay(ar
144c0 67 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 74  g), ForDisplay(t
144d0 65 78 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20  ext)),..        
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 74 72 61 63              trac
14500 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
14510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
14530 66 20 28 73 74 72 69 63 74 29 0d 0a 20 20 20 20  f (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 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d  return false;...
14570 0a 20 20 20 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 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 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 7d 0d 0a 0d 0a 20 20 20          }....   
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 63 6f 6e 66 69 67 75           configu
145e0 72 61 74 69 6f 6e 2e 6e 6f 52 75 6e 74 69 6d 65  ration.noRuntime
145f0 56 65 72 73 69 6f 6e 20 3d 20 28 62 6f 6f 6c 29  Version = (bool)
14600 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20  value;..        
14610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14620 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
14630 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20             else 
14640 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28  if (MatchOption(
14650 6e 65 77 41 72 67 2c 20 22 6e 6f 54 72 61 63 65  newArg, "noTrace
14660 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  "))..           
14670 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
14680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14690 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
146a0 3f 20 76 61 6c 75 65 20 3d 20 50 61 72 73 65 42  ? value = ParseB
146b0 6f 6f 6c 65 61 6e 28 74 65 78 74 29 3b 0d 0a 0d  oolean(text);...
146c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
146d0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
146e0 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d  (value == null).
146f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
14700 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
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 20 20 20 20 20 20                  
14730 65 72 72 6f 72 20 3d 20 54 72 61 63 65 4f 70 73  error = TraceOps
14740 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 0d  .DebugAndTrace(.
14750 0a 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 20                  
14770 20 20 20 20 20 54 72 61 63 65 50 72 69 6f 72 69       TracePriori
14780 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75 67  ty.Lowest, debug
14790 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20  Callback,..     
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 20 20 20 20 20 20 74                 t
147c0 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74  raceCallback, St
147d0 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
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 20 20 20 20                  
14800 20 20 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20 62    "Invalid {0} b
14810 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 3a 20 7b 31  oolean value: {1
14820 7d 22 2c 0d 0a 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 20 20 20 20 20 20 46 6f 72 44 69 73 70           ForDisp
14850 6c 61 79 28 61 72 67 29 2c 20 46 6f 72 44 69 73  lay(arg), ForDis
14860 70 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a 20 20  play(text)),..  
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 20 20 20 20                  
14890 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29    traceCategory)
148a0 3b 0d 0a 0d 0a 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 20                  
148c0 20 20 20 20 20 69 66 20 28 73 74 72 69 63 74 29       if (strict)
148d0 0d 0a 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 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
14900 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  se;....         
14910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14920 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b         continue;
14930 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
14940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
14950 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
14960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
14970 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 54  onfiguration.noT
14980 72 61 63 65 20 3d 20 28 62 6f 6f 6c 29 76 61 6c  race = (bool)val
14990 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
149a0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
149b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
149c0 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20          else if 
149d0 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77  (MatchOption(new
149e0 41 72 67 2c 20 22 6e 6f 56 73 32 30 30 35 22 29  Arg, "noVs2005")
149f0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
14a00 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 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 20 20 20 62 6f 6f 6c 3f 20            bool? 
14a30 76 61 6c 75 65 20 3d 20 50 61 72 73 65 42 6f 6f  value = ParseBoo
14a40 6c 65 61 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a 20  lean(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 20 20 20 69 66 20 28 76             if (v
14a70 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  alue == 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 20 20 20 7b 0d 0a 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 20 20 20 65 72                er
14ac0 72 6f 72 20 3d 20 54 72 61 63 65 4f 70 73 2e 44  ror = TraceOps.D
14ad0 65 62 75 67 41 6e 64 54 72 61 63 65 28 0d 0a 20  ebugAndTrace(.. 
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 20 20 20 54 72 61 63 65 50 72 69 6f 72 69 74 79     TracePriority
14b10 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75 67 43 61  .Lowest, debugCa
14b20 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20  llback,..       
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 20 20 20 74 72 61               tra
14b50 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69  ceCallback, Stri
14b60 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ng.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 20 20 20                  
14b90 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20 62 6f 6f  "Invalid {0} boo
14ba0 6c 65 61 6e 20 76 61 6c 75 65 3a 20 7b 31 7d 22  lean value: {1}"
14bb0 2c 0d 0a 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 20 20 20 46 6f 72 44 69 73 70 6c 61         ForDispla
14be0 79 28 61 72 67 29 2c 20 46 6f 72 44 69 73 70 6c  y(arg), ForDispl
14bf0 61 79 28 74 65 78 74 29 29 2c 0d 0a 20 20 20 20  ay(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 20 20 20                  
14c20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
14c30 0a 0d 0a 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 20 20 20 69 66 20 28 73 74 72 69 63 74 29 0d 0a     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 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
14c90 3b 0d 0a 0d 0a 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 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a       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 20 20 20 7d 0d 0a 0d              }...
14ce0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
14cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
14d00 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 56 73 32  figuration.noVs2
14d10 30 30 35 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75  005 = (bool)valu
14d20 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
14d30 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
14d40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14d50 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28         else if (
14d60 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41  MatchOption(newA
14d70 72 67 2c 20 22 6e 6f 56 73 32 30 30 38 22 29 29  rg, "noVs2008"))
14d80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
14d90 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 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 20 62 6f 6f 6c 3f 20 76           bool? v
14dc0 61 6c 75 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c  alue = ParseBool
14dd0 65 61 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20  ean(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 20 69 66 20 28 76 61            if (va
14e00 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  lue == 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 20 7b 0d 0a 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 20 65 72 72               err
14e50 6f 72 20 3d 20 54 72 61 63 65 4f 70 73 2e 44 65  or = TraceOps.De
14e60 62 75 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 20  bugAndTrace(..  
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 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e    TracePriority.
14ea0 4c 6f 77 65 73 74 2c 20 64 65 62 75 67 43 61 6c  Lowest, debugCal
14eb0 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20  lback,..        
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 20 74 72 61 63              trac
14ee0 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e  eCallback, Strin
14ef0 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.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 20 22                 "
14f20 49 6e 76 61 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c  Invalid {0} bool
14f30 65 61 6e 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c  ean value: {1}",
14f40 0d 0a 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 20 46 6f 72 44 69 73 70 6c 61 79        ForDisplay
14f70 28 61 72 67 29 2c 20 46 6f 72 44 69 73 70 6c 61  (arg), ForDispla
14f80 79 28 74 65 78 74 29 29 2c 0d 0a 20 20 20 20 20  y(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 20 74                 t
14fb0 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
14fc0 0d 0a 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 20 69 66 20 28 73 74 72 69 63 74 29 0d 0a 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 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
15020 0d 0a 0d 0a 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 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 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 20 7d 0d 0a 0d 0a             }....
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 20 63 6f 6e 66              conf
15090 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 56 73 32 30  iguration.noVs20
150a0 30 38 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 65  08 = (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 56 73 32 30 31 30 22 29 29 0d  g, "noVs2010")).
15110 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
15120 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
15130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15140 20 20 20 20 20 20 20 20 62 6f 6f 6c 3f 20 76 61          bool? va
15150 6c 75 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c 65  lue = ParseBoole
15160 61 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20 20  an(text);....   
15170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15180 20 20 20 20 20 20 20 20 20 69 66 20 28 76 61 6c           if (val
15190 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ue == null)..   
151a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
151b0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
151c0 20 20 20 20 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 65 72 72 6f              erro
151e0 72 20 3d 20 54 72 61 63 65 4f 70 73 2e 44 65 62  r = TraceOps.Deb
151f0 75 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 20 20  ugAndTrace(..   
15200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15220 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c   TracePriority.L
15230 6f 77 65 73 74 2c 20 64 65 62 75 67 43 61 6c 6c  owest, debugCall
15240 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20  back,..         
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 74 72 61 63 65             trace
15270 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67  Callback, String
15280 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  .Format(..      
15290 20 20 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 22 49                "I
152b0 6e 76 61 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c 65  nvalid {0} boole
152c0 61 6e 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d  an value: {1}",.
152d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
152e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
152f0 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28       ForDisplay(
15300 61 72 67 29 2c 20 46 6f 72 44 69 73 70 6c 61 79  arg), ForDisplay
15310 28 74 65 78 74 29 29 2c 0d 0a 20 20 20 20 20 20  (text)),..      
15320 20 20 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 74 72                tr
15340 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  aceCategory);...
15350 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
15360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15370 20 69 66 20 28 73 74 72 69 63 74 29 0d 0a 20 20   if (strict)..  
15380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
153a0 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
153b0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
153c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
153d0 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20     continue;..  
153e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
153f0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
15400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15410 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69             confi
15420 67 75 72 61 74 69 6f 6e 2e 6e 6f 56 73 32 30 31  guration.noVs201
15430 30 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 65 3b  0 = (bool)value;
15440 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
15450 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
15460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15470 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61       else if (Ma
15480 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67  tchOption(newArg
15490 2c 20 22 6e 6f 56 73 32 30 31 32 22 29 29 0d 0a  , "noVs2012"))..
154a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
154b0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
154c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
154d0 20 20 20 20 20 20 20 62 6f 6f 6c 3f 20 76 61 6c         bool? val
154e0 75 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c 65 61  ue = ParseBoolea
154f0 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20  n(text);....    
15500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15510 20 20 20 20 20 20 20 20 69 66 20 28 76 61 6c 75          if (valu
15520 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  e == null)..    
15530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15540 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
15550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15560 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72             error
15570 20 3d 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75   = TraceOps.Debu
15580 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 20 20 20  gAndTrace(..    
15590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
155a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
155b0 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f  TracePriority.Lo
155c0 77 65 73 74 2c 20 64 65 62 75 67 43 61 6c 6c 62  west, debugCallb
155d0 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ack,..          
155e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
155f0 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
15600 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e  allback, String.
15610 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
15620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15630 20 20 20 20 20 20 20 20 20 20 20 20 20 22 49 6e               "In
15640 76 61 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c 65 61  valid {0} boolea
15650 6e 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a  n value: {1}",..
15660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15680 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 61      ForDisplay(a
15690 72 67 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28  rg), ForDisplay(
156a0 74 65 78 74 29 29 2c 0d 0a 20 20 20 20 20 20 20  text)),..       
156b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
156c0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
156d0 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
156e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
156f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15700 69 66 20 28 73 74 72 69 63 74 29 0d 0a 20 20 20  if (strict)..   
15710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15730 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
15740 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
15750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15760 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20    continue;..   
15770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15780 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
15790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
157a0 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67            config
157b0 75 72 61 74 69 6f 6e 2e 6e 6f 56 73 32 30 31 32  uration.noVs2012
157c0 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d   = (bool)value;.
157d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
157e0 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
157f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15800 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74      else if (Mat
15810 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c  chOption(newArg,
15820 20 22 72 65 67 69 73 74 72 79 56 65 72 73 69 6f   "registryVersio
15830 6e 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  n"))..          
15840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
15850 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
15860 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
15870 66 69 67 75 72 61 74 69 6f 6e 2e 72 65 67 69 73  figuration.regis
15880 74 72 79 56 65 72 73 69 6f 6e 20 3d 20 74 65 78  tryVersion = tex
15890 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t;..            
158a0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
158b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
158c0 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28         else if (
158d0 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41  MatchOption(newA
158e0 72 67 2c 20 22 73 74 72 69 63 74 22 29 29 0d 0a  rg, "strict"))..
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 7b 0d 0a 20 20 20 20 20          {..     
15910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15920 20 20 20 20 20 20 20 62 6f 6f 6c 3f 20 76 61 6c         bool? val
15930 75 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c 65 61  ue = ParseBoolea
15940 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20  n(text);....    
15950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15960 20 20 20 20 20 20 20 20 69 66 20 28 76 61 6c 75          if (valu
15970 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  e == null)..    
15980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15990 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
159a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
159b0 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72             error
159c0 20 3d 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75   = TraceOps.Debu
159d0 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 20 20 20  gAndTrace(..    
159e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
159f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15a00 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f  TracePriority.Lo
15a10 77 65 73 74 2c 20 64 65 62 75 67 43 61 6c 6c 62  west, debugCallb
15a20 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ack,..          
15a30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15a40 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
15a50 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e  allback, String.
15a60 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
15a70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15a80 20 20 20 20 20 20 20 20 20 20 20 20 20 22 49 6e               "In
15a90 76 61 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c 65 61  valid {0} boolea
15aa0 6e 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a  n value: {1}",..
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 20 20                  
15ad0 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 61      ForDisplay(a
15ae0 72 67 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28  rg), ForDisplay(
15af0 74 65 78 74 29 29 2c 0d 0a 20 20 20 20 20 20 20  text)),..       
15b00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15b10 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
15b20 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
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 20 20 20 20 20 20 20 20 20                  
15b50 69 66 20 28 73 74 72 69 63 74 29 0d 0a 20 20 20  if (strict)..   
15b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15b70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15b80 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
15b90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
15ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15bb0 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20    continue;..   
15bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15bd0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
15be0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15bf0 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
15c00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15c10 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54            // NOT
15c20 45 3a 20 41 6c 6c 6f 77 20 74 68 65 20 63 6f 6d  E: Allow the com
15c30 6d 61 6e 64 20 6c 69 6e 65 20 61 72 67 75 6d 65  mand line argume
15c40 6e 74 73 20 74 6f 0d 0a 20 20 20 20 20 20 20 20  nts to..        
15c50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15c60 20 20 20 20 2f 2f 20 20 20 20 20 20 20 6f 76 65      //       ove
15c70 72 72 69 64 65 20 74 68 65 20 22 73 74 72 69 63  rride the "stric
15c80 74 6e 65 73 73 22 20 73 65 74 74 69 6e 67 0d 0a  tness" setting..
15c90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15ca0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
15cb0 20 20 20 20 20 70 72 6f 76 69 64 65 64 20 62 79       provided by
15cc0 20 6f 75 72 20 63 61 6c 6c 65 72 2e 0d 0a 20 20   our caller...  
15cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15ce0 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
15cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15d00 20 20 20 20 20 20 20 20 20 20 73 74 72 69 63 74            strict
15d10 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d   = (bool)value;.
15d20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
15d30 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
15d40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15d50 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74      else if (Mat
15d60 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c  chOption(newArg,
15d70 20 22 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67   "throwOnMissing
15d80 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  "))..           
15d90 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
15da0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15db0 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
15dc0 3f 20 76 61 6c 75 65 20 3d 20 50 61 72 73 65 42  ? value = ParseB
15dd0 6f 6f 6c 65 61 6e 28 74 65 78 74 29 3b 0d 0a 0d  oolean(text);...
15de0 0a 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 20 20 20 20 69 66 20               if 
15e00 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d  (value == null).
15e10 0a 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 20 7b 0d 0a               {..
15e30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15e50 65 72 72 6f 72 20 3d 20 54 72 61 63 65 4f 70 73  error = TraceOps
15e60 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 0d  .DebugAndTrace(.
15e70 0a 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 20 20                  
15e90 20 20 20 20 20 54 72 61 63 65 50 72 69 6f 72 69       TracePriori
15ea0 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75 67  ty.Lowest, debug
15eb0 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20  Callback,..     
15ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
15ee0 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74  raceCallback, St
15ef0 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
15f00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15f20 20 20 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20 62    "Invalid {0} b
15f30 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 3a 20 7b 31  oolean value: {1
15f40 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }",..           
15f50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15f60 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70           ForDisp
15f70 6c 61 79 28 61 72 67 29 2c 20 46 6f 72 44 69 73  lay(arg), ForDis
15f80 70 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a 20 20  play(text)),..  
15f90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15fb0 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29    traceCategory)
15fc0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
15fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15fe0 20 20 20 20 20 69 66 20 28 73 74 72 69 63 74 29       if (strict)
15ff0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
16000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16010 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
16020 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  se;....         
16030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16040 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b         continue;
16050 0d 0a 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 20 20 20 7d 0d                }.
16070 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
16080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
16090 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 74 68 72  onfiguration.thr
160a0 6f 77 4f 6e 4d 69 73 73 69 6e 67 20 3d 20 28 62  owOnMissing = (b
160b0 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20  ool)value;..    
160c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
160d0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
160e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
160f0 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74  lse if (MatchOpt
16100 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 74 72 61  ion(newArg, "tra
16110 63 65 46 6f 72 6d 61 74 22 29 29 0d 0a 20 20 20  ceFormat"))..   
16120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16130 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
16140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16150 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f      configuratio
16160 6e 2e 74 72 61 63 65 46 6f 72 6d 61 74 20 3d 20  n.traceFormat = 
16170 74 65 78 74 3b 0d 0a 20 20 20 20 20 20 20 20 20  text;..         
16180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16190 20 20 20 54 72 61 63 65 4f 70 73 2e 54 72 61 63     TraceOps.Trac
161a0 65 46 6f 72 6d 61 74 20 3d 20 63 6f 6e 66 69 67  eFormat = config
161b0 75 72 61 74 69 6f 6e 2e 74 72 61 63 65 46 6f 72  uration.traceFor
161c0 6d 61 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  mat;..          
161d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
161e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
161f0 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66           else if
16200 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65   (MatchOption(ne
16210 77 41 72 67 2c 20 22 74 72 61 63 65 50 72 69 6f  wArg, "tracePrio
16220 72 69 74 79 22 29 29 0d 0a 20 20 20 20 20 20 20  rity"))..       
16230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16240 20 7b 0d 0a 20 20 20 20 20 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 6f 62 6a 65 63 74 20 76 61 6c 75 65 20 3d 20 50  object value = P
16270 61 72 73 65 45 6e 75 6d 28 0d 0a 20 20 20 20 20  arseEnum(..     
16280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16290 20 20 20 20 20 20 20 20 20 20 20 74 79 70 65 6f             typeo
162a0 66 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 29  f(TracePriority)
162b0 2c 20 74 65 78 74 2c 20 74 72 75 65 29 3b 0d 0a  , text, true);..
162c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
162d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
162e0 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29   (value == null)
162f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
16300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
16310 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
16320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16330 20 65 72 72 6f 72 20 3d 20 54 72 61 63 65 4f 70   error = TraceOp
16340 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28  s.DebugAndTrace(
16350 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
16360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16370 20 20 20 20 20 20 54 72 61 63 65 50 72 69 6f 72        TracePrior
16380 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75  ity.Lowest, debu
16390 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20  gCallback,..    
163a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
163b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
163c0 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53  traceCallback, S
163d0 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
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 20 20 20 20 20 20                  
16400 20 20 20 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20     "Invalid {0} 
16410 76 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20  value: {1}",..  
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 46 6f 72 44 69 73 70 6c 61 79 28 61 72 67    ForDisplay(arg
16450 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 74 65  ), ForDisplay(te
16460 78 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  xt)),..         
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 20 20 20 20 74 72 61 63 65             trace
16490 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
164a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
164b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
164c0 20 28 73 74 72 69 63 74 29 0d 0a 20 20 20 20 20   (strict)..     
164d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
164e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
164f0 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a  eturn false;....
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 20 20 20 20 20 20 20 20 20                  
16520 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20  continue;..     
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 7d 0d 0a 0d 0a 20 20 20 20         }....    
16550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16560 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72          configur
16570 61 74 69 6f 6e 2e 74 72 61 63 65 50 72 69 6f 72  ation.tracePrior
16580 69 74 79 20 3d 20 28 54 72 61 63 65 50 72 69 6f  ity = (TracePrio
16590 72 69 74 79 29 76 61 6c 75 65 3b 0d 0a 20 20 20  rity)value;..   
165a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
165b0 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70           TraceOp
165c0 73 2e 54 72 61 63 65 50 72 69 6f 72 69 74 79 20  s.TracePriority 
165d0 3d 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e  = configuration.
165e0 74 72 61 63 65 50 72 69 6f 72 69 74 79 3b 0d 0a  tracePriority;..
165f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16600 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
16610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16620 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63     else if (Matc
16630 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20  hOption(newArg, 
16640 22 76 65 72 62 6f 73 65 22 29 29 0d 0a 20 20 20  "verbose"))..   
16650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16660 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
16670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16680 20 20 20 20 62 6f 6f 6c 3f 20 76 61 6c 75 65 20      bool? value 
16690 3d 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74  = ParseBoolean(t
166a0 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ext);....       
166b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
166c0 20 20 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d       if (value =
166d0 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
166e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
166f0 20 20 20 20 20 7b 0d 0a 20 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 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
16720 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e  TraceOps.DebugAn
16730 64 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20  dTrace(..       
16740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16750 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61               Tra
16760 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73  cePriority.Lowes
16770 74 2c 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b  t, debugCallback
16780 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
16790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
167a0 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c         traceCall
167b0 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72  back, String.For
167c0 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
167d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
167e0 20 20 20 20 20 20 20 20 20 20 22 49 6e 76 61 6c            "Inval
167f0 69 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76  id {0} boolean v
16800 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20  alue: {1}",..   
16810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16830 20 46 6f 72 44 69 73 70 6c 61 79 28 61 72 67 29   ForDisplay(arg)
16840 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 74 65 78  , ForDisplay(tex
16850 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  t)),..          
16860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16870 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
16880 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20  ategory);....   
16890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
168a0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
168b0 28 73 74 72 69 63 74 29 0d 0a 20 20 20 20 20 20  (strict)..      
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 20 20 20 20 20 20 20 72 65                re
168e0 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20  turn false;.... 
168f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
16910 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20  ontinue;..      
16920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16930 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
16940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16950 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61         configura
16960 74 69 6f 6e 2e 76 65 72 62 6f 73 65 20 3d 20 28  tion.verbose = (
16970 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20 20 20  bool)value;..   
16980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16990 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
169a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
169b0 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70  else if (MatchOp
169c0 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 77 68  tion(newArg, "wh
169d0 61 74 49 66 22 29 29 0d 0a 20 20 20 20 20 20 20  atIf"))..       
169e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
169f0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
16a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16a10 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d 20 50 61  bool? value = Pa
16a20 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65 78 74 29  rseBoolean(text)
16a30 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
16a40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16a50 20 69 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75   if (value == nu
16a60 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
16a70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16a80 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
16a90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16aa0 20 20 20 20 65 72 72 6f 72 20 3d 20 54 72 61 63      error = Trac
16ab0 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61  eOps.DebugAndTra
16ac0 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ce(..           
16ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16ae0 20 20 20 20 20 20 20 20 20 54 72 61 63 65 50 72           TracePr
16af0 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64  iority.Lowest, d
16b00 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20  ebugCallback,.. 
16b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16b30 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b     traceCallback
16b40 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  , String.Format(
16b50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
16b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16b70 20 20 20 20 20 20 22 49 6e 76 61 6c 69 64 20 7b        "Invalid {
16b80 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65  0} boolean value
16b90 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20  : {1}",..       
16ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72               For
16bc0 44 69 73 70 6c 61 79 28 61 72 67 29 2c 20 46 6f  Display(arg), Fo
16bd0 72 44 69 73 70 6c 61 79 28 74 65 78 74 29 29 2c  rDisplay(text)),
16be0 0d 0a 20 20 20 20 20 20 20 20 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 74 72 61 63 65 43 61 74 65 67        traceCateg
16c10 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
16c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16c30 20 20 20 20 20 20 20 20 20 69 66 20 28 73 74 72           if (str
16c40 69 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ict)..          
16c50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16c60 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
16c70 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20   false;....     
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 20 63 6f 6e 74 69             conti
16ca0 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  nue;..          
16cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16cc0 20 20 7d 0d 0a 0d 0a 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 20                  
16ce0 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e     configuration
16cf0 2e 77 68 61 74 49 66 20 3d 20 28 62 6f 6f 6c 29  .whatIf = (bool)
16d00 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20  value;..        
16d10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16d20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
16d30 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20             else 
16d40 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28  if (MatchOption(
16d50 6e 65 77 41 72 67 2c 20 22 77 6f 77 36 34 22 29  newArg, "wow64")
16d60 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
16d70 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
16d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16d90 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 3f 20            bool? 
16da0 76 61 6c 75 65 20 3d 20 50 61 72 73 65 42 6f 6f  value = ParseBoo
16db0 6c 65 61 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a 20  lean(text);.... 
16dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16dd0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76             if (v
16de0 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  alue == null).. 
16df0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16e00 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
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 65 72                er
16e30 72 6f 72 20 3d 20 54 72 61 63 65 4f 70 73 2e 44  ror = TraceOps.D
16e40 65 62 75 67 41 6e 64 54 72 61 63 65 28 0d 0a 20  ebugAndTrace(.. 
16e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16e60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16e70 20 20 20 54 72 61 63 65 50 72 69 6f 72 69 74 79     TracePriority
16e80 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75 67 43 61  .Lowest, debugCa
16e90 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20  llback,..       
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 20 20 20 20 20 74 72 61               tra
16ec0 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69  ceCallback, Stri
16ed0 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ng.Format(..    
16ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16f00 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20 62 6f 6f  "Invalid {0} boo
16f10 6c 65 61 6e 20 76 61 6c 75 65 3a 20 7b 31 7d 22  lean value: {1}"
16f20 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
16f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16f40 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61         ForDispla
16f50 79 28 61 72 67 29 2c 20 46 6f 72 44 69 73 70 6c  y(arg), ForDispl
16f60 61 79 28 74 65 78 74 29 29 2c 0d 0a 20 20 20 20  ay(text)),..    
16f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16f80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16f90 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
16fa0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
16fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16fc0 20 20 20 69 66 20 28 73 74 72 69 63 74 29 0d 0a     if (strict)..
16fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16ff0 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
17000 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
17010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17020 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a       continue;..
17030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17040 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
17050 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
17060 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
17070 66 69 67 75 72 61 74 69 6f 6e 2e 77 6f 77 36 34  figuration.wow64
17080 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d   = (bool)value;.
17090 0a 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 7d 0d 0a 20 20 20 20           }..    
170b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
170c0 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20      else..      
170d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
170e0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
170f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17100 20 65 72 72 6f 72 20 3d 20 54 72 61 63 65 4f 70   error = TraceOp
17110 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28  s.DebugAndTrace(
17120 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
17130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17140 20 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e    TracePriority.
17150 4c 6f 77 65 73 74 2c 20 64 65 62 75 67 43 61 6c  Lowest, debugCal
17160 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20  lback,..        
17170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17180 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c          traceCal
17190 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f  lback, String.Fo
171a0 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
171b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
171c0 20 20 20 20 20 20 20 22 55 6e 73 75 70 70 6f 72         "Unsuppor
171d0 74 65 64 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65  ted command line
171e0 20 6f 70 74 69 6f 6e 3a 20 7b 30 7d 22 2c 0d 0a   option: {0}",..
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 20 20 20 20 20 20                  
17210 46 6f 72 44 69 73 70 6c 61 79 28 61 72 67 29 29  ForDisplay(arg))
17220 2c 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29  , traceCategory)
17230 3b 0d 0a 0d 0a 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 20 20 20                  
17250 20 69 66 20 28 73 74 72 69 63 74 29 0d 0a 20 20   if (strict)..  
17260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
17280 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20  turn false;..   
17290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
172a0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
172b0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
172c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
172d0 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65       return true
172e0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
172f0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
17300 20 20 20 20 20 20 63 61 74 63 68 20 28 45 78 63        catch (Exc
17310 65 70 74 69 6f 6e 20 65 29 0d 0a 20 20 20 20 20  eption e)..     
17320 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
17330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17340 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67    TraceOps.Debug
17350 41 6e 64 54 72 61 63 65 28 54 72 61 63 65 50 72  AndTrace(TracePr
17360 69 6f 72 69 74 79 2e 48 69 67 68 65 73 74 2c 0d  iority.Highest,.
17370 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
17380 20 20 20 20 20 20 20 20 20 64 65 62 75 67 43 61           debugCa
17390 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c  llback, traceCal
173a0 6c 62 61 63 6b 2c 20 65 2c 20 74 72 61 63 65 43  lback, e, traceC
173b0 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20  ategory);....   
173c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
173d0 20 65 72 72 6f 72 20 3d 20 22 46 61 69 6c 65 64   error = "Failed
173e0 20 74 6f 20 6d 6f 64 69 66 79 20 63 6f 6e 66 69   to modify confi
173f0 67 75 72 61 74 69 6f 6e 2e 22 3b 0d 0a 20 20 20  guration.";..   
17400 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
17410 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
17420 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
17430 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
17440 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
17450 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17460 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17470 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17480 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17490 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
174a0 20 5b 4d 65 74 68 6f 64 49 6d 70 6c 28 4d 65 74   [MethodImpl(Met
174b0 68 6f 64 49 6d 70 6c 4f 70 74 69 6f 6e 73 2e 4e  hodImplOptions.N
174c0 6f 49 6e 6c 69 6e 69 6e 67 29 5d 0d 0a 20 20 20  oInlining)]..   
174d0 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
174e0 73 74 61 74 69 63 20 62 6f 6f 6c 20 50 72 6f 63  static bool Proc
174f0 65 73 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ess(..          
17500 20 20 20 20 20 20 73 74 72 69 6e 67 5b 5d 20 61        string[] a
17510 72 67 73 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  rgs,..          
17520 20 20 20 20 20 20 43 6f 6e 66 69 67 75 72 61 74        Configurat
17530 69 6f 6e 20 63 6f 6e 66 69 67 75 72 61 74 69 6f  ion configuratio
17540 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n,..            
17550 20 20 20 20 62 6f 6f 6c 20 73 74 72 69 63 74 2c      bool strict,
17560 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
17570 20 20 72 65 66 20 73 74 72 69 6e 67 20 65 72 72    ref string err
17580 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  or..            
17590 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20      )..         
175a0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
175b0 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20        try..     
175c0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
175d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
175e0 20 20 69 66 20 28 63 6f 6e 66 69 67 75 72 61 74    if (configurat
175f0 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  ion == null)..  
17600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17610 20 20 7b 0d 0a 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 65 72 72               err
17630 6f 72 20 3d 20 22 49 6e 76 61 6c 69 64 20 63 6f  or = "Invalid co
17640 6e 66 69 67 75 72 61 74 69 6f 6e 2e 22 3b 0d 0a  nfiguration.";..
17650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17660 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
17670 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alse;..         
17680 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
17690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
176a0 20 20 20 20 41 73 73 65 6d 62 6c 79 20 61 73 73      Assembly ass
176b0 65 6d 62 6c 79 20 3d 20 63 6f 6e 66 69 67 75 72  embly = configur
176c0 61 74 69 6f 6e 2e 61 73 73 65 6d 62 6c 79 3b 0d  ation.assembly;.
176d0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
176e0 20 20 20 20 20 20 20 69 66 20 28 61 73 73 65 6d         if (assem
176f0 62 6c 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  bly == null)..  
17700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17710 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
17720 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
17730 6f 72 20 3d 20 22 49 6e 76 61 6c 69 64 20 61 73  or = "Invalid as
17740 73 65 6d 62 6c 79 2e 22 3b 0d 0a 20 20 20 20 20  sembly.";..     
17750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17760 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
17770 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
17780 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
17790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
177a0 66 20 28 21 63 6f 6e 66 69 67 75 72 61 74 69 6f  f (!configuratio
177b0 6e 2e 6e 6f 54 72 61 63 65 29 0d 0a 20 20 20 20  n.noTrace)..    
177c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
177d0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
177e0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21             if (!
177f0 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f  configuration.no
17800 4c 6f 67 20 26 26 0d 0a 20 20 20 20 20 20 20 20  Log &&..        
17810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17820 20 20 20 20 53 74 72 69 6e 67 2e 49 73 4e 75 6c      String.IsNul
17830 6c 4f 72 45 6d 70 74 79 28 63 6f 6e 66 69 67 75  lOrEmpty(configu
17840 72 61 74 69 6f 6e 2e 6c 6f 67 46 69 6c 65 4e 61  ration.logFileNa
17850 6d 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  me))..          
17860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
17870 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
17880 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
17890 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
178a0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
178b0 4e 4f 54 45 3a 20 55 73 65 20 74 68 65 20 64 65  NOTE: Use the de
178c0 66 61 75 6c 74 20 6c 6f 67 20 66 69 6c 65 20 6e  fault log file n
178d0 61 6d 65 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  ame...          
178e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
178f0 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
17900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17910 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e    configuration.
17920 6c 6f 67 46 69 6c 65 4e 61 6d 65 20 3d 20 47 65  logFileName = Ge
17930 74 4c 6f 67 46 69 6c 65 4e 61 6d 65 28 0d 0a 20  tLogFileName(.. 
17940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
17960 74 72 61 63 65 22 29 3b 0d 0a 20 20 20 20 20 20  trace");..      
17970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17980 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
17990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
179a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
179b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
179c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
179d0 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
179e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
179f0 20 20 69 66 20 28 21 63 6f 6e 66 69 67 75 72 61    if (!configura
17a00 74 69 6f 6e 2e 6e 6f 43 6f 6e 73 6f 6c 65 29 0d  tion.noConsole).
17a10 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
17a20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
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 2f 2f 0d 0a 20 20 20 20          //..    
17a50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17a60 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a          // NOTE:
17a70 20 49 6e 20 76 65 72 62 6f 73 65 20 6d 6f 64 65   In verbose mode
17a80 2c 20 64 65 62 75 67 20 6f 75 74 70 75 74 20 28  , debug output (
17a90 74 68 61 74 20 6d 65 65 74 73 0d 0a 20 20 20 20  that meets..    
17aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17ab0 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
17ac0 20 74 68 65 20 63 6f 6e 66 69 67 75 72 65 64 20   the configured 
17ad0 70 72 69 6f 72 69 74 79 20 63 72 69 74 65 72 69  priority criteri
17ae0 61 29 20 77 69 6c 6c 20 62 65 0d 0a 20 20 20 20  a) will be..    
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 2f 2f 20 20 20 20 20 20          //      
17b10 20 64 69 73 70 6c 61 79 65 64 20 74 6f 20 74 68   displayed to th
17b20 65 20 63 6f 6e 73 6f 6c 65 3b 20 6f 74 68 65 72  e console; other
17b30 77 69 73 65 2c 20 74 72 61 63 65 0d 0a 20 20 20  wise, trace..   
17b40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17b50 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
17b60 20 20 6f 75 74 70 75 74 20 28 74 68 61 74 20 6d    output (that m
17b70 65 65 74 73 20 74 68 65 20 63 6f 6e 66 69 67 75  eets the configu
17b80 72 65 64 20 70 72 69 6f 72 69 74 79 0d 0a 20 20  red priority..  
17b90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17ba0 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
17bb0 20 20 20 63 72 69 74 65 72 69 61 29 20 77 69 6c     criteria) wil
17bc0 6c 20 62 65 20 64 69 73 70 6c 61 79 65 64 20 74  l be displayed t
17bd0 6f 20 74 68 65 20 63 6f 6e 73 6f 6c 65 2e 0d 0a  o the console...
17be0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17bf0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
17c00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17c10 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
17c20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 64 65  configuration.de
17c30 62 75 67 29 0d 0a 20 20 20 20 20 20 20 20 20 20  bug)..          
17c40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17c50 20 20 7b 0d 0a 20 20 20 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 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
17c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17c90 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45           // NOTE
17ca0 3a 20 41 64 64 20 74 68 65 20 63 6f 6e 73 6f 6c  : Add the consol
17cb0 65 20 74 72 61 63 65 20 6c 69 73 74 65 6e 65 72  e trace listener
17cc0 20 74 6f 20 74 68 65 0d 0a 20 20 20 20 20 20 20   to the..       
17cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17ce0 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
17cf0 20 20 6c 69 73 74 20 6f 66 20 74 72 61 63 65 20    list of trace 
17d00 6c 69 73 74 65 6e 65 72 73 20 6d 61 69 6e 74 61  listeners mainta
17d10 69 6e 65 64 20 62 79 0d 0a 20 20 20 20 20 20 20  ined by..       
17d20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17d30 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
17d40 20 20 74 68 65 20 54 72 61 63 65 4f 70 73 20 63    the TraceOps c
17d50 6c 61 73 73 20 28 69 2e 65 2e 20 6f 6e 6c 79 20  lass (i.e. only 
17d60 6d 65 73 73 61 67 65 73 0d 0a 20 20 20 20 20 20  messages..      
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 2f 2f 20 20 20 20            //    
17d90 20 20 20 74 68 61 74 20 6d 65 65 74 20 74 68 65     that meet the
17da0 20 64 65 62 75 67 20 70 72 69 6f 72 69 74 79 20   debug priority 
17db0 77 69 6c 6c 20 62 65 0d 0a 20 20 20 20 20 20 20  will be..       
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 2f 2f 20 20 20 20 20           //     
17de0 20 20 73 65 65 6e 20 6f 6e 20 74 68 65 20 63 6f    seen on the co
17df0 6e 73 6f 6c 65 29 2e 0d 0a 20 20 20 20 20 20 20  nsole)...       
17e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17e10 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
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 54 72 61               Tra
17e40 63 65 4f 70 73 2e 53 65 74 75 70 44 65 62 75 67  ceOps.SetupDebug
17e50 4c 69 73 74 65 6e 65 72 73 28 29 3b 0d 0a 20 20  Listeners();..  
17e60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17e70 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
17e80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17e90 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20           else.. 
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 20 20 20 20 7b 0d 0a 20 20             {..  
17ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
17ee0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
17ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17f00 20 20 2f 2f 20 4e 4f 54 45 3a 20 41 64 64 20 74    // NOTE: Add t
17f10 68 65 20 63 6f 6e 73 6f 6c 65 20 74 72 61 63 65  he console trace
17f20 20 6c 69 73 74 65 6e 65 72 20 74 6f 20 74 68 65   listener to the
17f30 0d 0a 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 20 20 20 20 20                  
17f50 20 20 2f 2f 20 20 20 20 20 20 20 6c 69 73 74 20    //       list 
17f60 6f 66 20 62 75 69 6c 74 2d 69 6e 20 74 72 61 63  of built-in trac
17f70 65 20 6c 69 73 74 65 6e 65 72 73 20 28 69 2e 65  e listeners (i.e
17f80 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
17f90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17fa0 20 20 20 2f 2f 20 20 20 20 20 20 20 6f 6e 6c 79     //       only
17fb0 20 6d 65 73 73 61 67 65 73 20 74 68 61 74 20 6d   messages that m
17fc0 65 65 74 20 74 68 65 20 74 72 61 63 65 0d 0a 20  eet the trace.. 
17fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
17ff0 2f 20 20 20 20 20 20 20 70 72 69 6f 72 69 74 79  /       priority
18000 20 77 69 6c 6c 20 62 65 20 73 65 65 6e 20 6f 6e   will be seen on
18010 20 74 68 65 20 63 6f 6e 73 6f 6c 65 29 2e 0d 0a   the console)...
18020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18040 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
18050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18060 20 20 20 20 54 72 61 63 65 2e 4c 69 73 74 65 6e      Trace.Listen
18070 65 72 73 2e 41 64 64 28 6e 65 77 20 43 6f 6e 73  ers.Add(new Cons
18080 6f 6c 65 54 72 61 63 65 4c 69 73 74 65 6e 65 72  oleTraceListener
18090 28 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ());..          
180a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
180b0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
180c0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
180d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
180e0 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
180f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18100 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18110 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18120 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
18130 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
18140 28 21 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e  (!configuration.
18150 6e 6f 4c 6f 67 20 26 26 0d 0a 20 20 20 20 20 20  noLog &&..      
18160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18170 20 20 20 20 20 20 21 53 74 72 69 6e 67 2e 49 73        !String.Is
18180 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 63 6f 6e 66  NullOrEmpty(conf
18190 69 67 75 72 61 74 69 6f 6e 2e 6c 6f 67 46 69 6c  iguration.logFil
181a0 65 4e 61 6d 65 29 29 0d 0a 20 20 20 20 20 20 20  eName))..       
181b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
181c0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
181d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
181e0 54 72 61 63 65 2e 4c 69 73 74 65 6e 65 72 73 2e  Trace.Listeners.
181f0 41 64 64 28 6e 65 77 20 54 65 78 74 57 72 69 74  Add(new TextWrit
18200 65 72 54 72 61 63 65 4c 69 73 74 65 6e 65 72 28  erTraceListener(
18210 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
18220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18230 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e    configuration.
18240 6c 6f 67 46 69 6c 65 4e 61 6d 65 29 29 3b 0d 0a  logFileName));..
18250 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
18260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
18270 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
18280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
18290 20 4e 4f 54 45 3a 20 54 65 63 68 6e 69 63 61 6c   NOTE: Technical
182a0 6c 79 2c 20 77 65 20 63 72 65 61 74 65 64 20 74  ly, we created t
182b0 68 65 20 6c 6f 67 20 66 69 6c 65 2e 0d 0a 20 20  he log file...  
182c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
182d0 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
182e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
182f0 20 20 20 20 20 20 20 20 20 20 66 69 6c 65 73 43            filesC
18300 72 65 61 74 65 64 2b 2b 3b 0d 0a 20 20 20 20 20  reated++;..     
18310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18320 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
18330 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
18340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18350 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
18360 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f             // NO
18370 54 45 3a 20 44 75 6d 70 20 74 68 65 20 63 6f 6e  TE: Dump the con
18380 66 69 67 75 72 61 74 69 6f 6e 20 6e 6f 77 20 69  figuration now i
18390 6e 20 63 61 73 65 20 77 65 20 6e 65 65 64 20 74  n case we need t
183a0 6f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  o..             
183b0 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
183c0 74 72 6f 75 62 6c 65 73 68 6f 6f 74 20 61 6e 79  troubleshoot any
183d0 20 69 73 73 75 65 73 2e 0d 0a 20 20 20 20 20 20   issues...      
183e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
183f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
18400 20 20 20 20 20 20 69 66 20 28 63 6f 6e 66 69 67        if (config
18410 75 72 61 74 69 6f 6e 2e 64 65 62 75 67 50 72 69  uration.debugPri
18420 6f 72 69 74 79 20 3c 3d 20 54 72 61 63 65 50 72  ority <= TracePr
18430 69 6f 72 69 74 79 2e 4d 65 64 69 75 6d 29 0d 0a  iority.Medium)..
18440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18450 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72          configur
18460 61 74 69 6f 6e 2e 44 75 6d 70 28 64 65 62 75 67  ation.Dump(debug
18470 43 61 6c 6c 62 61 63 6b 29 3b 0d 0a 0d 0a 20 20  Callback);....  
18480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18490 20 20 69 66 20 28 63 6f 6e 66 69 67 75 72 61 74    if (configurat
184a0 69 6f 6e 2e 74 72 61 63 65 50 72 69 6f 72 69 74  ion.tracePriorit
184b0 79 20 3c 3d 20 54 72 61 63 65 50 72 69 6f 72 69  y <= TracePriori
184c0 74 79 2e 4d 65 64 69 75 6d 29 0d 0a 20 20 20 20  ty.Medium)..    
184d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
184e0 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f      configuratio
184f0 6e 2e 44 75 6d 70 28 74 72 61 63 65 43 61 6c 6c  n.Dump(traceCall
18500 62 61 63 6b 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  back);....      
18510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
18520 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
18530 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 53        // NOTE: S
18540 68 6f 77 20 77 68 65 72 65 20 77 65 20 61 72 65  how where we are
18550 20 72 75 6e 6e 69 6e 67 20 66 72 6f 6d 20 61 6e   running from an
18560 64 20 68 6f 77 20 77 65 20 77 65 72 65 0d 0a 20  d how we were.. 
18570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18580 20 20 20 2f 2f 20 20 20 20 20 20 20 69 6e 76 6f     //       invo
18590 6b 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  ked...          
185a0 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
185b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
185c0 20 20 73 74 72 69 6e 67 20 6c 6f 63 61 74 69 6f    string locatio
185d0 6e 20 3d 20 61 73 73 65 6d 62 6c 79 2e 4c 6f 63  n = assembly.Loc
185e0 61 74 69 6f 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20  ation;....      
185f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
18600 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54  aceOps.DebugAndT
18610 72 61 63 65 28 54 72 61 63 65 50 72 69 6f 72 69  race(TracePriori
18620 74 79 2e 4d 65 64 69 75 6d 4c 6f 77 2c 0d 0a 20  ty.MediumLow,.. 
18630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18640 20 20 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c         debugCall
18650 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62  back, traceCallb
18660 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d  ack, String.Form
18670 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
18680 20 20 20 20 20 20 20 20 20 20 20 20 20 22 52 75               "Ru
18690 6e 6e 69 6e 67 20 65 78 65 63 75 74 61 62 6c 65  nning executable
186a0 20 69 73 3a 20 7b 30 7d 22 2c 20 46 6f 72 44 69   is: {0}", ForDi
186b0 73 70 6c 61 79 28 6c 6f 63 61 74 69 6f 6e 29 29  splay(location))
186c0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
186d0 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
186e0 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
186f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18700 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67    TraceOps.Debug
18710 41 6e 64 54 72 61 63 65 28 54 72 61 63 65 50 72  AndTrace(TracePr
18720 69 6f 72 69 74 79 2e 4d 65 64 69 75 6d 4c 6f 77  iority.MediumLow
18730 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
18740 20 20 20 20 20 20 20 20 20 20 20 64 65 62 75 67             debug
18750 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43  Callback, traceC
18760 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e  allback, String.
18770 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
18780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18790 20 22 4f 72 69 67 69 6e 61 6c 20 63 6f 6d 6d 61   "Original comma
187a0 6e 64 20 6c 69 6e 65 20 69 73 3a 20 7b 30 7d 22  nd line is: {0}"
187b0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
187c0 20 20 20 20 20 20 20 20 20 20 20 45 6e 76 69 72             Envir
187d0 6f 6e 6d 65 6e 74 2e 43 6f 6d 6d 61 6e 64 4c 69  onment.CommandLi
187e0 6e 65 29 2c 20 74 72 61 63 65 43 61 74 65 67 6f  ne), traceCatego
187f0 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
18800 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
18810 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61  eOps.DebugAndTra
18820 63 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 79  ce(TracePriority
18830 2e 4d 65 64 69 75 6d 4c 6f 77 2c 0d 0a 20 20 20  .MediumLow,..   
18840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18850 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61       debugCallba
18860 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63  ck, traceCallbac
18870 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  k, String.Format
18880 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
18890 20 20 20 20 20 20 20 20 20 20 20 22 52 75 6e 6e             "Runn
188a0 69 6e 67 20 70 72 6f 63 65 73 73 20 69 73 20 7b  ing process is {
188b0 30 7d 2e 22 2c 20 49 73 36 34 42 69 74 50 72 6f  0}.", Is64BitPro
188c0 63 65 73 73 28 29 20 3f 0d 0a 20 20 20 20 20 20  cess() ?..      
188d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
188e0 20 20 20 20 20 20 22 36 34 2d 62 69 74 22 20 3a        "64-bit" :
188f0 20 22 33 32 2d 62 69 74 22 29 2c 20 74 72 61 63   "32-bit"), trac
18900 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
18910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18920 20 20 20 69 66 20 28 21 63 6f 6e 66 69 67 75 72     if (!configur
18930 61 74 69 6f 6e 2e 77 68 61 74 49 66 29 0d 0a 20  ation.whatIf).. 
18940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18950 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
18960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
18970 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
18980 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54            // NOT
18990 45 3a 20 49 66 20 74 68 65 20 64 65 62 75 67 67  E: If the debugg
189a0 65 72 20 69 73 20 61 74 74 61 63 68 65 64 20 61  er is attached a
189b0 6e 64 20 57 68 61 74 2d 49 66 20 6d 6f 64 65 0d  nd What-If mode.
189c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
189d0 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
189e0 20 20 69 73 20 5b 6e 6f 77 5d 20 64 69 73 61 62    is [now] disab
189f0 6c 65 64 2c 20 69 73 73 75 65 20 61 20 77 61 72  led, issue a war
18a00 6e 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 20  ning...         
18a10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
18a20 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
18a30 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 44             if (D
18a40 65 62 75 67 67 65 72 2e 49 73 41 74 74 61 63 68  ebugger.IsAttach
18a50 65 64 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ed)..           
18a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18a70 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41   TraceOps.DebugA
18a80 6e 64 54 72 61 63 65 28 54 72 61 63 65 50 72 69  ndTrace(TracePri
18a90 6f 72 69 74 79 2e 4d 65 64 69 75 6d 48 69 67 68  ority.MediumHigh
18aa0 2c 0d 0a 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 20                  
18ac0 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b     debugCallback
18ad0 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c  , traceCallback,
18ae0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
18af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18b00 20 20 22 46 6f 72 63 65 64 20 74 6f 20 64 69 73    "Forced to dis
18b10 61 62 6c 65 20 5c 22 77 68 61 74 2d 69 66 5c 22  able \"what-if\"
18b20 20 6d 6f 64 65 20 77 69 74 68 20 22 20 2b 0d 0a   mode with " +..
18b30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18b40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18b50 22 64 65 62 75 67 67 65 72 20 61 74 74 61 63 68  "debugger attach
18b60 65 64 2e 22 2c 20 74 72 61 63 65 43 61 74 65 67  ed.", traceCateg
18b70 6f 72 79 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ory);..         
18b80 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
18b90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18ba0 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20    else..        
18bb0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
18bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18bd0 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e         TraceOps.
18be0 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 54 72  DebugAndTrace(Tr
18bf0 61 63 65 50 72 69 6f 72 69 74 79 2e 4d 65 64 69  acePriority.Medi
18c00 75 6d 48 69 67 68 2c 0d 0a 20 20 20 20 20 20 20  umHigh,..       
18c10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18c20 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61       debugCallba
18c30 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63  ck, traceCallbac
18c40 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  k,..            
18c50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18c60 22 4e 6f 20 61 63 74 75 61 6c 20 63 68 61 6e 67  "No actual chang
18c70 65 73 20 77 69 6c 6c 20 62 65 20 6d 61 64 65 20  es will be made 
18c80 74 6f 20 74 68 69 73 20 22 20 2b 0d 0a 20 20 20  to this " +..   
18c90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18ca0 20 20 20 20 20 20 20 20 20 22 73 79 73 74 65 6d           "system
18cb0 20 62 65 63 61 75 73 65 20 5c 22 77 68 61 74 2d   because \"what-
18cc0 69 66 5c 22 20 6d 6f 64 65 20 69 73 20 65 6e 61  if\" mode is ena
18cd0 62 6c 65 64 2e 22 2c 0d 0a 20 20 20 20 20 20 20  bled.",..       
18ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18cf0 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f       traceCatego
18d00 72 79 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ry);..          
18d10 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
18d20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18d30 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
18d40 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f             // NO
18d50 54 45 3a 20 49 66 20 74 68 65 20 63 6f 6d 6d 61  TE: If the comma
18d60 6e 64 20 6c 69 6e 65 20 68 61 73 20 6e 6f 74 20  nd line has not 
18d70 62 65 65 6e 20 6d 61 6e 75 61 6c 6c 79 0d 0a 20  been manually.. 
18d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18d90 20 20 20 2f 2f 20 20 20 20 20 20 20 63 6f 6e 66     //       conf
18da0 69 72 6d 65 64 20 28 69 2e 65 2e 20 76 69 61 20  irmed (i.e. via 
18db0 74 68 65 20 65 78 70 6c 69 63 69 74 20 63 6f 6d  the explicit com
18dc0 6d 61 6e 64 20 6c 69 6e 65 0d 0a 20 20 20 20 20  mand line..     
18dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
18de0 2f 20 20 20 20 20 20 20 6f 70 74 69 6f 6e 29 2c  /       option),
18df0 20 74 68 65 6e 20 73 74 6f 70 20 70 72 6f 63 65   then stop proce
18e00 73 73 69 6e 67 20 6e 6f 77 2e 20 20 57 65 20 65  ssing now.  We e
18e10 6e 66 6f 72 63 65 0d 0a 20 20 20 20 20 20 20 20  nforce..        
18e20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
18e30 20 20 20 20 20 74 68 69 73 20 72 75 6c 65 20 73       this rule s
18e40 6f 20 74 68 61 74 20 73 69 6d 70 6c 79 20 64 6f  o that simply do
18e50 75 62 6c 65 2d 63 6c 69 63 6b 69 6e 67 20 74 68  uble-clicking th
18e60 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..             
18e70 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
18e80 65 78 65 63 75 74 61 62 6c 65 20 77 69 6c 6c 20  executable will 
18e90 6e 6f 74 20 72 65 73 75 6c 74 20 69 6e 20 61 6e  not result in an
18ea0 79 20 63 68 61 6e 67 65 73 20 62 65 69 6e 67 0d  y changes being.
18eb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
18ec0 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 6d 61       //       ma
18ed0 64 65 20 74 6f 20 74 68 65 20 73 79 73 74 65 6d  de to the system
18ee0 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
18ef0 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
18f00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
18f10 66 20 28 21 63 6f 6e 66 69 67 75 72 61 74 69 6f  f (!configuratio
18f20 6e 2e 63 6f 6e 66 69 72 6d 29 0d 0a 20 20 20 20  n.confirm)..    
18f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18f40 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
18f50 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72             error
18f60 20 3d 20 22 43 61 6e 6e 6f 74 20 63 6f 6e 74 69   = "Cannot conti
18f70 6e 75 65 2c 20 74 68 65 20 5c 22 63 6f 6e 66 69  nue, the \"confi
18f80 72 6d 5c 22 20 6f 70 74 69 6f 6e 20 69 73 20 22  rm\" option is "
18f90 20 2b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   +..            
18fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18fb0 22 6e 6f 74 20 65 6e 61 62 6c 65 64 2e 22 3b 0d  "not enabled.";.
18fc0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
18fd0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
18fe0 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  n false;..      
18ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
19000 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
19010 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72         return tr
19020 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
19030 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
19040 20 20 20 20 20 20 20 20 63 61 74 63 68 20 28 45          catch (E
19050 78 63 65 70 74 69 6f 6e 20 65 29 0d 0a 20 20 20  xception e)..   
19060 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
19070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19080 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62      TraceOps.Deb
19090 75 67 41 6e 64 54 72 61 63 65 28 54 72 61 63 65  ugAndTrace(Trace
190a0 50 72 69 6f 72 69 74 79 2e 48 69 67 68 65 73 74  Priority.Highest
190b0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
190c0 20 20 20 20 20 20 20 20 20 20 20 64 65 62 75 67             debug
190d0 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43  Callback, traceC
190e0 61 6c 6c 62 61 63 6b 2c 20 65 2c 20 74 72 61 63  allback, e, trac
190f0 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
19100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19110 20 20 20 65 72 72 6f 72 20 3d 20 22 46 61 69 6c     error = "Fail
19120 65 64 20 74 6f 20 70 72 6f 63 65 73 73 20 63 6f  ed to process co
19130 6e 66 69 67 75 72 61 74 69 6f 6e 2e 22 3b 0d 0a  nfiguration.";..
19140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19150 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
19160 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
19170 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
19180 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
19190 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
191a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
191b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
191c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
191d0 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
191e0 20 20 20 20 5b 4d 65 74 68 6f 64 49 6d 70 6c 28      [MethodImpl(
191f0 4d 65 74 68 6f 64 49 6d 70 6c 4f 70 74 69 6f 6e  MethodImplOption
19200 73 2e 4e 6f 49 6e 6c 69 6e 69 6e 67 29 5d 0d 0a  s.NoInlining)]..
19210 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
19220 69 63 20 73 74 61 74 69 63 20 62 6f 6f 6c 20 43  ic static bool C
19230 68 65 63 6b 52 75 6e 74 69 6d 65 56 65 72 73 69  heckRuntimeVersi
19240 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  on(..           
19250 20 20 20 20 20 43 6f 6e 66 69 67 75 72 61 74 69       Configurati
19260 6f 6e 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  on configuration
19270 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
19280 20 20 20 62 6f 6f 6c 20 73 74 72 69 63 74 2c 0d     bool strict,.
19290 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
192a0 20 72 65 66 20 73 74 72 69 6e 67 20 65 72 72 6f   ref string erro
192b0 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  r..             
192c0 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20     )..          
192d0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
192e0 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20       try..      
192f0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
19300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19310 20 69 66 20 28 63 6f 6e 66 69 67 75 72 61 74 69   if (configurati
19320 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  on == null)..   
19330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19340 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
19350 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
19360 72 20 3d 20 22 49 6e 76 61 6c 69 64 20 63 6f 6e  r = "Invalid con
19370 66 69 67 75 72 61 74 69 6f 6e 2e 22 3b 0d 0a 20  figuration.";.. 
19380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19390 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
193a0 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lse;..          
193b0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
193c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
193d0 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
193e0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f             // NO
193f0 54 45 3a 20 57 68 61 74 20 76 65 72 73 69 6f 6e  TE: What version
19400 20 6f 66 20 74 68 65 20 72 75 6e 74 69 6d 65 20   of the runtime 
19410 77 61 73 20 74 68 65 20 63 6f 72 65 20 28 70 72  was the core (pr
19420 69 6d 61 72 79 29 0d 0a 20 20 20 20 20 20 20 20  imary)..        
19430 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
19440 20 20 20 20 20 61 73 73 65 6d 62 6c 79 20 63 6f       assembly co
19450 6d 70 69 6c 65 64 20 61 67 61 69 6e 73 74 20 28  mpiled against (
19460 65 2e 67 2e 20 22 76 32 2e 30 2e 35 30 37 32 37  e.g. "v2.0.50727
19470 22 20 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20  " or..          
19480 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
19490 20 20 20 22 76 34 2e 30 2e 33 30 33 31 39 22 29     "v4.0.30319")
194a0 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
194b0 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
194c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
194d0 74 72 69 6e 67 20 63 6f 72 65 49 6d 61 67 65 52  tring coreImageR
194e0 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 20 3d 20  untimeVersion = 
194f0 47 65 74 49 6d 61 67 65 52 75 6e 74 69 6d 65 56  GetImageRuntimeV
19500 65 72 73 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20  ersion(..       
19510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19520 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 63   configuration.c
19530 6f 72 65 46 69 6c 65 4e 61 6d 65 29 3b 0d 0a 0d  oreFileName);...
19540 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
19550 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
19560 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
19570 4e 4f 54 45 3a 20 57 65 20 61 6c 6c 6f 77 20 74  NOTE: We allow t
19580 68 65 20 61 63 74 75 61 6c 20 69 6d 61 67 65 20  he actual image 
19590 72 75 6e 74 69 6d 65 20 63 68 65 63 6b 69 6e 67  runtime checking
195a0 20 74 6f 20 62 65 0d 0a 20 20 20 20 20 20 20 20   to be..        
195b0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
195c0 20 20 20 20 20 62 79 70 61 73 73 65 64 20 76 69       bypassed vi
195d0 61 20 74 68 65 20 22 2d 6e 6f 52 75 6e 74 69 6d  a the "-noRuntim
195e0 65 56 65 72 73 69 6f 6e 22 20 63 6f 6d 6d 61 6e  eVersion" comman
195f0 64 20 6c 69 6e 65 0d 0a 20 20 20 20 20 20 20 20  d line..        
19600 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
19610 20 20 20 20 20 6f 70 74 69 6f 6e 2e 20 20 54 68       option.  Th
19620 65 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 20 6f  e command line o
19630 70 74 69 6f 6e 20 69 73 20 69 6e 74 65 6e 64 65  ption is intende
19640 64 20 66 6f 72 0d 0a 20 20 20 20 20 20 20 20 20  d for..         
19650 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
19660 20 20 20 20 65 78 70 65 72 74 20 75 73 65 20 6f      expert use o
19670 6e 6c 79 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  nly...          
19680 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
19690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
196a0 20 20 69 66 20 28 63 6f 6e 66 69 67 75 72 61 74    if (configurat
196b0 69 6f 6e 2e 6e 6f 52 75 6e 74 69 6d 65 56 65 72  ion.noRuntimeVer
196c0 73 69 6f 6e 29 0d 0a 20 20 20 20 20 20 20 20 20  sion)..         
196d0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
196e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
196f0 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44        TraceOps.D
19700 65 62 75 67 41 6e 64 54 72 61 63 65 28 54 72 61  ebugAndTrace(Tra
19710 63 65 50 72 69 6f 72 69 74 79 2e 4d 65 64 69 75  cePriority.Mediu
19720 6d 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  m,..            
19730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19740 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74  debugCallback, t
19750 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74  raceCallback, St
19760 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
19770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19780 20 20 20 20 20 20 20 20 20 20 22 41 73 73 65 6d            "Assem
19790 62 6c 79 20 69 73 20 63 6f 6d 70 69 6c 65 64 20  bly is compiled 
197a0 66 6f 72 20 74 68 65 20 2e 4e 45 54 20 46 72 61  for the .NET Fra
197b0 6d 65 77 6f 72 6b 20 7b 30 7d 3b 20 22 20 2b 0d  mework {0}; " +.
197c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
197d0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 68 6f               "ho
197e0 77 65 76 65 72 2c 20 69 6e 73 74 61 6c 6c 61 74  wever, installat
197f0 69 6f 6e 20 72 65 73 74 72 69 63 74 69 6f 6e 73  ion restrictions
19800 20 62 61 73 65 64 20 6f 6e 20 74 68 69 73 20 22   based on this "
19810 20 2b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   +..            
19820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19830 22 66 61 63 74 20 68 61 76 65 20 62 65 65 6e 20  "fact have been 
19840 64 69 73 61 62 6c 65 64 20 76 69 61 20 74 68 65  disabled via the
19850 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 2e 22 2c   command line.",
19860 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
19870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
19880 72 65 49 6d 61 67 65 52 75 6e 74 69 6d 65 56 65  reImageRuntimeVe
19890 72 73 69 6f 6e 29 2c 20 74 72 61 63 65 43 61 74  rsion), traceCat
198a0 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  egory);....     
198b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
198c0 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d     return true;.
198d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
198e0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
198f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
19900 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
19910 20 20 20 20 20 20 2f 2f 20 54 4f 44 4f 3a 20 52        // TODO: R
19920 65 73 74 72 69 63 74 20 74 68 65 20 63 6f 6e 66  estrict the conf
19930 69 67 75 72 61 74 69 6f 6e 20 62 61 73 65 64 20  iguration based 
19940 6f 6e 20 77 68 69 63 68 20 69 6d 61 67 65 0d 0a  on which image..
19950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19960 20 20 20 20 2f 2f 20 20 20 20 20 20 20 72 75 6e      //       run
19970 74 69 6d 65 20 76 65 72 73 69 6f 6e 73 20 28 77  time versions (w
19980 68 69 63 68 20 6d 6f 72 65 2d 6f 72 2d 6c 65 73  hich more-or-les
19990 73 20 63 6f 72 72 65 73 70 6f 6e 64 0d 0a 20 20  s correspond..  
199a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
199b0 20 20 2f 2f 20 20 20 20 20 20 20 74 6f 20 2e 4e    //       to .N
199c0 45 54 20 46 72 61 6d 65 77 6f 72 6b 20 76 65 72  ET Framework ver
199d0 73 69 6f 6e 73 29 20 61 72 65 20 73 75 70 70 6f  sions) are suppo
199e0 72 74 65 64 20 62 79 20 74 68 65 0d 0a 20 20 20  rted by the..   
199f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19a00 20 2f 2f 20 20 20 20 20 20 20 76 65 72 73 69 6f   //       versio
19a10 6e 73 20 6f 66 20 56 69 73 75 61 6c 20 53 74 75  ns of Visual Stu
19a20 64 69 6f 20 74 68 61 74 20 61 72 65 20 69 6e 73  dio that are ins
19a30 74 61 6c 6c 65 64 2e 0d 0a 20 20 20 20 20 20 20  talled...       
19a40 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
19a50 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
19a60 20 20 20 20 20 69 66 20 28 53 74 72 69 6e 67 2e       if (String.
19a70 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 63 6f  IsNullOrEmpty(co
19a80 72 65 49 6d 61 67 65 52 75 6e 74 69 6d 65 56 65  reImageRuntimeVe
19a90 72 73 69 6f 6e 29 29 0d 0a 20 20 20 20 20 20 20  rsion))..       
19aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
19ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19ac0 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
19ad0 22 69 6e 76 61 6c 69 64 20 63 6f 72 65 20 66 69  "invalid core fi
19ae0 6c 65 20 69 6d 61 67 65 20 72 75 6e 74 69 6d 65  le image runtime
19af0 20 76 65 72 73 69 6f 6e 22 3b 0d 0a 20 20 20 20   version";..    
19b00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19b10 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
19b20 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
19b30 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
19b40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c                el
19b50 73 65 20 69 66 20 28 53 74 72 69 6e 67 2e 45 71  se if (String.Eq
19b60 75 61 6c 73 28 0d 0a 20 20 20 20 20 20 20 20 20  uals(..         
19b70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19b80 20 20 20 63 6f 72 65 49 6d 61 67 65 52 75 6e 74     coreImageRunt
19b90 69 6d 65 56 65 72 73 69 6f 6e 2c 20 43 4c 52 76  imeVersion, CLRv
19ba0 32 49 6d 61 67 65 52 75 6e 74 69 6d 65 56 65 72  2ImageRuntimeVer
19bb0 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20  sion,..         
19bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19bd0 20 20 20 53 74 72 69 6e 67 43 6f 6d 70 61 72 69     StringCompari
19be0 73 6f 6e 2e 4f 72 64 69 6e 61 6c 29 29 0d 0a 20  son.Ordinal)).. 
19bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19c00 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
19c10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
19c20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
19c30 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54            // NOT
19c40 45 3a 20 46 6f 72 20 74 68 65 20 43 4c 52 20 76  E: For the CLR v
19c50 32 2e 30 20 72 75 6e 74 69 6d 65 2c 20 6d 61 6b  2.0 runtime, mak
19c60 65 20 73 75 72 65 20 77 65 20 64 69 73 61 62 6c  e sure we disabl
19c70 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..             
19c80 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
19c90 20 20 20 20 61 6e 79 20 61 74 74 65 6d 70 74 20      any attempt 
19ca0 74 6f 20 75 73 65 20 69 74 20 66 6f 72 20 74 68  to use it for th
19cb0 69 6e 67 73 20 74 68 61 74 20 72 65 71 75 69 72  ings that requir
19cc0 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..             
19cd0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
19ce0 20 20 20 20 61 6e 20 61 73 73 65 6d 62 6c 79 20      an assembly 
19cf0 63 6f 6d 70 69 6c 65 64 20 66 6f 72 20 74 68 65  compiled for the
19d00 20 43 4c 52 20 76 34 2e 30 2e 20 20 49 74 20 69   CLR v4.0.  It i
19d10 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  s..             
19d20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
19d30 20 20 20 20 75 6e 63 65 72 74 61 69 6e 20 69 66      uncertain if
19d40 20 74 68 69 73 20 69 73 20 61 63 74 75 61 6c 6c   this is actuall
19d50 79 20 61 20 70 72 6f 62 6c 65 6d 20 69 6e 0d 0a  y a problem in..
19d60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19d70 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
19d80 20 70 72 61 63 74 69 63 65 20 61 73 20 74 68 65   practice as the
19d90 20 43 4c 52 20 76 34 2e 30 20 63 61 6e 20 6c 6f   CLR v4.0 can lo
19da0 61 64 20 61 6e 64 20 75 73 65 20 61 6e 0d 0a 20  ad and use an.. 
19db0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19dc0 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
19dd0 61 73 73 65 6d 62 6c 79 20 63 6f 6d 70 69 6c 65  assembly compile
19de0 64 20 77 69 74 68 20 74 68 65 20 43 4c 52 20 76  d with the CLR v
19df0 32 2e 30 3b 20 68 6f 77 65 76 65 72 2c 0d 0a 20  2.0; however,.. 
19e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19e10 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
19e20 73 69 6e 63 65 20 74 68 69 73 20 70 72 6f 6a 65  since this proje
19e30 63 74 20 6f 66 66 65 72 73 20 62 6f 74 68 20 63  ct offers both c
19e40 6f 6e 66 69 67 75 72 61 74 69 6f 6e 73 2c 0d 0a  onfigurations,..
19e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19e60 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
19e70 20 77 65 20 63 75 72 72 65 6e 74 6c 79 20 64 69   we currently di
19e80 73 61 6c 6c 6f 77 20 74 68 69 73 20 6d 69 73 6d  sallow this mism
19e90 61 74 63 68 2e 0d 0a 20 20 20 20 20 20 20 20 20  atch...         
19ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
19eb0 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
19ec0 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69             confi
19ed0 67 75 72 61 74 69 6f 6e 2e 6e 6f 4e 65 74 46 78  guration.noNetFx
19ee0 34 30 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20  40 = true;..    
19ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19f00 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f      configuratio
19f10 6e 2e 6e 6f 4e 65 74 46 78 34 35 20 3d 20 74 72  n.noNetFx45 = tr
19f20 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
19f30 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
19f40 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 56 73 32  figuration.noVs2
19f50 30 31 30 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20  010 = true;..   
19f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19f70 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69       configurati
19f80 6f 6e 2e 6e 6f 56 73 32 30 31 32 20 3d 20 74 72  on.noVs2012 = tr
19f90 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ue;....         
19fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
19fb0 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64  raceOps.DebugAnd
19fc0 54 72 61 63 65 28 54 72 61 63 65 50 72 69 6f 72  Trace(TracePrior
19fd0 69 74 79 2e 4d 65 64 69 75 6d 2c 0d 0a 20 20 20  ity.Medium,..   
19fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19ff0 20 20 20 20 20 20 20 20 20 64 65 62 75 67 43 61           debugCa
1a000 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c  llback, traceCal
1a010 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f  lback, String.Fo
1a020 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
1a030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a040 20 20 20 22 41 73 73 65 6d 62 6c 79 20 69 73 20     "Assembly is 
1a050 63 6f 6d 70 69 6c 65 64 20 66 6f 72 20 74 68 65  compiled for the
1a060 20 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b 20   .NET Framework 
1a070 7b 30 7d 2c 20 22 20 2b 0d 0a 20 20 20 20 20 20  {0}, " +..      
1a080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a090 20 20 20 20 20 20 22 73 75 70 70 6f 72 74 20 66        "support f
1a0a0 6f 72 20 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72  or .NET Framewor
1a0b0 6b 20 7b 31 7d 20 69 73 20 6e 6f 77 20 64 69 73  k {1} is now dis
1a0c0 61 62 6c 65 64 2e 22 2c 0d 0a 20 20 20 20 20 20  abled.",..      
1a0d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a0e0 20 20 20 20 20 20 43 4c 52 76 32 49 6d 61 67 65        CLRv2Image
1a0f0 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 2c 20  RuntimeVersion, 
1a100 43 4c 52 76 34 49 6d 61 67 65 52 75 6e 74 69 6d  CLRv4ImageRuntim
1a110 65 56 65 72 73 69 6f 6e 29 2c 0d 0a 20 20 20 20  eVersion),..    
1a120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a130 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74          traceCat
1a140 65 67 6f 72 79 29 3b 0d 0a 20 20 20 20 20 20 20  egory);..       
1a150 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
1a160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a170 20 20 20 20 65 6c 73 65 20 69 66 20 28 53 74 72      else if (Str
1a180 69 6e 67 2e 45 71 75 61 6c 73 28 0d 0a 20 20 20  ing.Equals(..   
1a190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a1a0 20 20 20 20 20 20 20 20 20 63 6f 72 65 49 6d 61           coreIma
1a1b0 67 65 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e  geRuntimeVersion
1a1c0 2c 20 43 4c 52 76 34 49 6d 61 67 65 52 75 6e 74  , CLRv4ImageRunt
1a1d0 69 6d 65 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20  imeVersion,..   
1a1e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a1f0 20 20 20 20 20 20 20 20 20 53 74 72 69 6e 67 43           StringC
1a200 6f 6d 70 61 72 69 73 6f 6e 2e 4f 72 64 69 6e 61  omparison.Ordina
1a210 6c 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  l))..           
1a220 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
1a230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a240 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
1a250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a260 2f 2f 20 4e 4f 54 45 3a 20 46 6f 72 20 74 68 65  // NOTE: For the
1a270 20 43 4c 52 20 76 34 2e 30 20 72 75 6e 74 69 6d   CLR v4.0 runtim
1a280 65 2c 20 6d 61 6b 65 20 73 75 72 65 20 77 65 20  e, make sure we 
1a290 64 69 73 61 62 6c 65 0d 0a 20 20 20 20 20 20 20  disable..       
1a2a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a2b0 20 2f 2f 20 20 20 20 20 20 20 61 6e 79 20 61 74   //       any at
1a2c0 74 65 6d 70 74 20 74 6f 20 75 73 65 20 69 74 20  tempt to use it 
1a2d0 66 6f 72 20 74 68 69 6e 67 73 20 74 68 61 74 20  for things that 
1a2e0 72 65 71 75 69 72 65 0d 0a 20 20 20 20 20 20 20  require..       
1a2f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a300 20 2f 2f 20 20 20 20 20 20 20 61 6e 20 61 73 73   //       an ass
1a310 65 6d 62 6c 79 20 63 6f 6d 70 69 6c 65 64 20 66  embly compiled f
1a320 6f 72 20 74 68 65 20 43 4c 52 20 76 32 2e 30 2e  or the CLR v2.0.
1a330 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1a340 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
1a350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a360 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74        configurat
1a370 69 6f 6e 2e 6e 6f 4e 65 74 46 78 32 30 20 3d 20  ion.noNetFx20 = 
1a380 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  true;..         
1a390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
1a3a0 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 56  onfiguration.noV
1a3b0 73 32 30 30 35 20 3d 20 74 72 75 65 3b 0d 0a 20  s2005 = true;.. 
1a3c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a3d0 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61         configura
1a3e0 74 69 6f 6e 2e 6e 6f 56 73 32 30 30 38 20 3d 20  tion.noVs2008 = 
1a3f0 74 72 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  true;....       
1a400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a410 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41   TraceOps.DebugA
1a420 6e 64 54 72 61 63 65 28 54 72 61 63 65 50 72 69  ndTrace(TracePri
1a430 6f 72 69 74 79 2e 4d 65 64 69 75 6d 2c 0d 0a 20  ority.Medium,.. 
1a440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a450 20 20 20 20 20 20 20 20 20 20 20 64 65 62 75 67             debug
1a460 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43  Callback, traceC
1a470 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e  allback, String.
1a480 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
1a490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a4a0 20 20 20 20 20 22 41 73 73 65 6d 62 6c 79 20 69       "Assembly i
1a4b0 73 20 63 6f 6d 70 69 6c 65 64 20 66 6f 72 20 74  s compiled for t
1a4c0 68 65 20 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72  he .NET Framewor
1a4d0 6b 20 7b 30 7d 2c 20 22 20 2b 0d 0a 20 20 20 20  k {0}, " +..    
1a4e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a4f0 20 20 20 20 20 20 20 20 22 73 75 70 70 6f 72 74          "support
1a500 20 66 6f 72 20 2e 4e 45 54 20 46 72 61 6d 65 77   for .NET Framew
1a510 6f 72 6b 20 7b 31 7d 20 69 73 20 6e 6f 77 20 64  ork {1} is now d
1a520 69 73 61 62 6c 65 64 2e 22 2c 0d 0a 20 20 20 20  isabled.",..    
1a530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a540 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c          ForDispl
1a550 61 79 28 43 4c 52 76 34 49 6d 61 67 65 52 75 6e  ay(CLRv4ImageRun
1a560 74 69 6d 65 56 65 72 73 69 6f 6e 29 2c 0d 0a 20  timeVersion),.. 
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 20 46 6f 72 44 69             ForDi
1a590 73 70 6c 61 79 28 43 4c 52 76 32 49 6d 61 67 65  splay(CLRv2Image
1a5a0 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 29 29  RuntimeVersion))
1a5b0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
1a5c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
1a5d0 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
1a5e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a5f0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
1a600 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d             else.
1a610 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1a620 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
1a630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a640 65 72 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46  error = String.F
1a650 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
1a660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a670 20 20 20 20 22 75 6e 73 75 70 70 6f 72 74 65 64      "unsupported
1a680 20 63 6f 72 65 20 66 69 6c 65 20 69 6d 61 67 65   core file image
1a690 20 72 75 6e 74 69 6d 65 20 76 65 72 73 69 6f 6e   runtime version
1a6a0 20 22 20 2b 0d 0a 20 20 20 20 20 20 20 20 20 20   " +..          
1a6b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a6c0 20 20 22 7b 30 7d 2c 20 6d 75 73 74 20 62 65 20    "{0}, must be 
1a6d0 7b 31 7d 20 6f 72 20 7b 32 7d 22 2c 0d 0a 20 20  {1} or {2}",..  
1a6e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a6f0 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73            ForDis
1a700 70 6c 61 79 28 63 6f 72 65 49 6d 61 67 65 52 75  play(coreImageRu
1a710 6e 74 69 6d 65 56 65 72 73 69 6f 6e 29 2c 0d 0a  ntimeVersion),..
1a720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a730 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44              ForD
1a740 69 73 70 6c 61 79 28 43 4c 52 76 32 49 6d 61 67  isplay(CLRv2Imag
1a750 65 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 29  eRuntimeVersion)
1a760 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
1a770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46                 F
1a780 6f 72 44 69 73 70 6c 61 79 28 43 4c 52 76 34 49  orDisplay(CLRv4I
1a790 6d 61 67 65 52 75 6e 74 69 6d 65 56 65 72 73 69  mageRuntimeVersi
1a7a0 6f 6e 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  on));....       
1a7b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a7c0 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
1a7d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a7e0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
1a7f0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
1a800 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20 20  urn true;..     
1a810 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
1a820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 61                ca
1a830 74 63 68 20 28 45 78 63 65 70 74 69 6f 6e 20 65  tch (Exception e
1a840 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
1a850 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
1a860 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f            TraceO
1a870 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65  ps.DebugAndTrace
1a880 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 48  (TracePriority.H
1a890 69 67 68 65 73 74 2c 0d 0a 20 20 20 20 20 20 20  ighest,..       
1a8a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a8b0 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20   debugCallback, 
1a8c0 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 65  traceCallback, e
1a8d0 2c 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29  , traceCategory)
1a8e0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
1a8f0 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
1a900 20 22 46 61 69 6c 65 64 20 74 6f 20 63 68 65 63   "Failed to chec
1a910 6b 20 69 6d 61 67 65 20 72 75 6e 74 69 6d 65 20  k image runtime 
1a920 76 65 72 73 69 6f 6e 2e 22 3b 0d 0a 20 20 20 20  version.";..    
1a930 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
1a940 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1a950 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
1a960 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
1a970 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 72             #endr
1a980 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20  egion....       
1a990 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
1a9a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a9b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a9c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a9d0 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
1a9e0 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20          #region 
1a9f0 50 75 62 6c 69 63 20 4d 65 74 68 6f 64 73 0d 0a  Public Methods..
1aa00 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
1aa10 69 63 20 62 6f 6f 6c 20 48 61 73 46 6c 61 67 73  ic bool HasFlags
1aa20 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
1aa30 20 20 20 49 6e 73 74 61 6c 6c 46 6c 61 67 73 20     InstallFlags 
1aa40 68 61 73 46 6c 61 67 73 2c 0d 0a 20 20 20 20 20  hasFlags,..     
1aa50 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
1aa60 61 6c 6c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  all..           
1aa70 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
1aa80 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
1aa90 20 20 20 20 20 20 20 69 66 20 28 61 6c 6c 29 0d         if (all).
1aaa0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1aab0 20 20 20 20 20 72 65 74 75 72 6e 20 28 28 69 6e       return ((in
1aac0 73 74 61 6c 6c 46 6c 61 67 73 20 26 20 68 61 73  stallFlags & has
1aad0 46 6c 61 67 73 29 20 3d 3d 20 68 61 73 46 6c 61  Flags) == hasFla
1aae0 67 73 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  gs);..          
1aaf0 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20        else..    
1ab00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ab10 72 65 74 75 72 6e 20 28 28 69 6e 73 74 61 6c 6c  return ((install
1ab20 46 6c 61 67 73 20 26 20 68 61 73 46 6c 61 67 73  Flags & hasFlags
1ab30 29 20 21 3d 20 49 6e 73 74 61 6c 6c 46 6c 61 67  ) != InstallFlag
1ab40 73 2e 4e 6f 6e 65 29 3b 0d 0a 20 20 20 20 20 20  s.None);..      
1ab50 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
1ab60 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
1ab70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ab80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ab90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1aba0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
1abb0 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
1abc0 20 76 6f 69 64 20 44 75 6d 70 28 0d 0a 20 20 20   void Dump(..   
1abd0 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61               Tra
1abe0 63 65 43 61 6c 6c 62 61 63 6b 20 74 72 61 63 65  ceCallback trace
1abf0 43 61 6c 6c 62 61 63 6b 0d 0a 20 20 20 20 20 20  Callback..      
1ac00 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
1ac10 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
1ac20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
1ac30 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 20 21 3d  traceCallback !=
1ac40 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
1ac50 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
1ac60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
1ac70 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72  raceCallback(Str
1ac80 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41  ing.Format(NameA
1ac90 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a  ndValueFormat,..
1aca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1acb0 20 20 20 20 20 20 20 20 22 41 73 73 65 6d 62 6c          "Assembl
1acc0 79 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 61  y", ForDisplay(a
1acd0 73 73 65 6d 62 6c 79 29 29 2c 0d 0a 20 20 20 20  ssembly)),..    
1ace0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1acf0 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72      traceCategor
1ad00 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
1ad10 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
1ad20 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e  Callback(String.
1ad30 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61  Format(NameAndVa
1ad40 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20  lueFormat,..    
1ad50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ad60 20 20 20 20 22 4c 6f 67 46 69 6c 65 4e 61 6d 65      "LogFileName
1ad70 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 6c 6f  ", ForDisplay(lo
1ad80 67 46 69 6c 65 4e 61 6d 65 29 29 2c 0d 0a 20 20  gFileName)),..  
1ad90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ada0 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67        traceCateg
1adb0 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
1adc0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
1add0 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e  ceCallback(Strin
1ade0 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64  g.Format(NameAnd
1adf0 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20  ValueFormat,..  
1ae00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ae10 20 20 20 20 20 20 22 44 69 72 65 63 74 6f 72 79        "Directory
1ae20 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 64 69  ", ForDisplay(di
1ae30 72 65 63 74 6f 72 79 29 29 2c 0d 0a 20 20 20 20  rectory)),..    
1ae40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ae50 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72      traceCategor
1ae60 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
1ae70 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
1ae80 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e  Callback(String.
1ae90 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61  Format(NameAndVa
1aea0 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20  lueFormat,..    
1aeb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1aec0 20 20 20 20 22 43 6f 72 65 46 69 6c 65 4e 61 6d      "CoreFileNam
1aed0 65 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 63  e", ForDisplay(c
1aee0 6f 72 65 46 69 6c 65 4e 61 6d 65 29 29 2c 0d 0a  oreFileName)),..
1aef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1af00 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74          traceCat
1af10 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  egory);....     
1af20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
1af30 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72  raceCallback(Str
1af40 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41  ing.Format(NameA
1af50 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a  ndValueFormat,..
1af60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1af70 20 20 20 20 20 20 20 20 22 4c 69 6e 71 46 69 6c          "LinqFil
1af80 65 4e 61 6d 65 22 2c 20 46 6f 72 44 69 73 70 6c  eName", ForDispl
1af90 61 79 28 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 29  ay(linqFileName)
1afa0 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
1afb0 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
1afc0 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
1afd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1afe0 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b     traceCallback
1aff0 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e  (String.Format(N
1b000 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61  ameAndValueForma
1b010 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t,..            
1b020 20 20 20 20 20 20 20 20 20 20 20 20 22 44 65 73              "Des
1b030 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 22 2c 20  ignerFileName", 
1b040 46 6f 72 44 69 73 70 6c 61 79 28 64 65 73 69 67  ForDisplay(desig
1b050 6e 65 72 46 69 6c 65 4e 61 6d 65 29 29 2c 0d 0a  nerFileName)),..
1b060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b070 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74          traceCat
1b080 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  egory);....     
1b090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
1b0a0 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72  raceCallback(Str
1b0b0 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41  ing.Format(NameA
1b0c0 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a  ndValueFormat,..
1b0d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b0e0 20 20 20 20 20 20 20 20 22 52 65 67 69 73 74 72          "Registr
1b0f0 79 56 65 72 73 69 6f 6e 22 2c 20 46 6f 72 44 69  yVersion", ForDi
1b100 73 70 6c 61 79 28 72 65 67 69 73 74 72 79 56 65  splay(registryVe
1b110 72 73 69 6f 6e 29 29 2c 0d 0a 20 20 20 20 20 20  rsion)),..      
1b120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b130 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29    traceCategory)
1b140 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
1b150 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
1b160 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f  llback(String.Fo
1b170 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75  rmat(NameAndValu
1b180 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20  eFormat,..      
1b190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b1a0 20 20 22 43 6f 6e 66 69 67 56 65 72 73 69 6f 6e    "ConfigVersion
1b1b0 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 63 6f  ", ForDisplay(co
1b1c0 6e 66 69 67 56 65 72 73 69 6f 6e 29 29 2c 0d 0a  nfigVersion)),..
1b1d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b1e0 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74          traceCat
1b1f0 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  egory);....     
1b200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
1b210 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72  raceCallback(Str
1b220 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41  ing.Format(NameA
1b230 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a  ndValueFormat,..
1b240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b250 20 20 20 20 20 20 20 20 22 44 65 62 75 67 46 6f          "DebugFo
1b260 72 6d 61 74 22 2c 20 46 6f 72 44 69 73 70 6c 61  rmat", ForDispla
1b270 79 28 64 65 62 75 67 46 6f 72 6d 61 74 29 29 2c  y(debugFormat)),
1b280 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1b290 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
1b2a0 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20  ategory);....   
1b2b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b2c0 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53   traceCallback(S
1b2d0 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d  tring.Format(Nam
1b2e0 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c  eAndValueFormat,
1b2f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1b300 20 20 20 20 20 20 20 20 20 20 22 54 72 61 63 65            "Trace
1b310 46 6f 72 6d 61 74 22 2c 20 46 6f 72 44 69 73 70  Format", ForDisp
1b320 6c 61 79 28 74 72 61 63 65 46 6f 72 6d 61 74 29  lay(traceFormat)
1b330 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
1b340 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
1b350 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
1b360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b370 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b     traceCallback
1b380 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e  (String.Format(N
1b390 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61  ameAndValueForma
1b3a0 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t,..            
1b3b0 20 20 20 20 20 20 20 20 20 20 20 20 22 49 6e 73              "Ins
1b3c0 74 61 6c 6c 46 6c 61 67 73 22 2c 20 46 6f 72 44  tallFlags", ForD
1b3d0 69 73 70 6c 61 79 28 69 6e 73 74 61 6c 6c 46 6c  isplay(installFl
1b3e0 61 67 73 29 29 2c 0d 0a 20 20 20 20 20 20 20 20  ags)),..        
1b3f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b400 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
1b410 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
1b420 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c         traceCall
1b430 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d  back(String.Form
1b440 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46  at(NameAndValueF
1b450 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20  ormat,..        
1b460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b470 22 44 65 62 75 67 50 72 69 6f 72 69 74 79 22 2c  "DebugPriority",
1b480 20 46 6f 72 44 69 73 70 6c 61 79 28 64 65 62 75   ForDisplay(debu
1b490 67 50 72 69 6f 72 69 74 79 29 29 2c 0d 0a 20 20  gPriority)),..  
1b4a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b4b0 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67        traceCateg
1b4c0 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
1b4d0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
1b4e0 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e  ceCallback(Strin
1b4f0 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64  g.Format(NameAnd
1b500 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20  ValueFormat,..  
1b510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b520 20 20 20 20 20 20 22 54 72 61 63 65 50 72 69 6f        "TracePrio
1b530 72 69 74 79 22 2c 20 46 6f 72 44 69 73 70 6c 61  rity", ForDispla
1b540 79 28 74 72 61 63 65 50 72 69 6f 72 69 74 79 29  y(tracePriority)
1b550 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
1b560 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
1b570 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
1b580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b590 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b     traceCallback
1b5a0 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e  (String.Format(N
1b5b0 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61  ameAndValueForma
1b5c0 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t,..            
1b5d0 20 20 20 20 20 20 20 20 20 20 20 20 22 49 6e 73              "Ins
1b5e0 74 61 6c 6c 22 2c 20 46 6f 72 44 69 73 70 6c 61  tall", ForDispla
1b5f0 79 28 69 6e 73 74 61 6c 6c 29 29 2c 0d 0a 20 20  y(install)),..  
1b600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b610 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67        traceCateg
1b620 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
1b630 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
1b640 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e  ceCallback(Strin
1b650 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64  g.Format(NameAnd
1b660 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20  ValueFormat,..  
1b670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b680 20 20 20 20 20 20 22 57 6f 77 36 34 22 2c 20 46        "Wow64", F
1b690 6f 72 44 69 73 70 6c 61 79 28 77 6f 77 36 34 29  orDisplay(wow64)
1b6a0 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
1b6b0 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
1b6c0 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
1b6d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b6e0 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b     traceCallback
1b6f0 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e  (String.Format(N
1b700 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61  ameAndValueForma
1b710 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t,..            
1b720 20 20 20 20 20 20 20 20 20 20 20 20 22 4e 6f 52              "NoR
1b730 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 22 2c 20  untimeVersion", 
1b740 46 6f 72 44 69 73 70 6c 61 79 28 6e 6f 52 75 6e  ForDisplay(noRun
1b750 74 69 6d 65 56 65 72 73 69 6f 6e 29 29 2c 0d 0a  timeVersion)),..
1b760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b770 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74          traceCat
1b780 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  egory);....     
1b790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
1b7a0 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72  raceCallback(Str
1b7b0 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41  ing.Format(NameA
1b7c0 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a  ndValueFormat,..
1b7d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b7e0 20 20 20 20 20 20 20 20 22 4e 6f 44 65 73 6b 74          "NoDeskt
1b7f0 6f 70 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28  op", ForDisplay(
1b800 6e 6f 44 65 73 6b 74 6f 70 29 29 2c 0d 0a 20 20  noDesktop)),..  
1b810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b820 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67        traceCateg
1b830 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
1b840 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
1b850 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e  ceCallback(Strin
1b860 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64  g.Format(NameAnd
1b870 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20  ValueFormat,..  
1b880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b890 20 20 20 20 20 20 22 4e 6f 43 6f 6d 70 61 63 74        "NoCompact
1b8a0 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 6e 6f  ", ForDisplay(no
1b8b0 43 6f 6d 70 61 63 74 29 29 2c 0d 0a 20 20 20 20  Compact)),..    
1b8c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b8d0 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72      traceCategor
1b8e0 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
1b8f0 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
1b900 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e  Callback(String.
1b910 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61  Format(NameAndVa
1b920 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20  lueFormat,..    
1b930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b940 20 20 20 20 22 4e 6f 4e 65 74 46 78 32 30 22 2c      "NoNetFx20",
1b950 20 46 6f 72 44 69 73 70 6c 61 79 28 6e 6f 4e 65   ForDisplay(noNe
1b960 74 46 78 32 30 29 29 2c 0d 0a 20 20 20 20 20 20  tFx20)),..      
1b970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b980 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29    traceCategory)
1b990 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
1b9a0 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
1b9b0 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f  llback(String.Fo
1b9c0 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75  rmat(NameAndValu
1b9d0 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20  eFormat,..      
1b9e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b9f0 20 20 22 4e 6f 4e 65 74 46 78 34 30 22 2c 20 46    "NoNetFx40", F
1ba00 6f 72 44 69 73 70 6c 61 79 28 6e 6f 4e 65 74 46  orDisplay(noNetF
1ba10 78 34 30 29 29 2c 0d 0a 20 20 20 20 20 20 20 20  x40)),..        
1ba20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ba30 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
1ba40 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
1ba50 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c         traceCall
1ba60 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d  back(String.Form
1ba70 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46  at(NameAndValueF
1ba80 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20  ormat,..        
1ba90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1baa0 22 4e 6f 4e 65 74 46 78 34 35 22 2c 20 46 6f 72  "NoNetFx45", For
1bab0 44 69 73 70 6c 61 79 28 6e 6f 4e 65 74 46 78 34  Display(noNetFx4
1bac0 35 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  5)),..          
1bad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
1bae0 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  aceCategory);...
1baf0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1bb00 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61       traceCallba
1bb10 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  ck(String.Format
1bb20 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72  (NameAndValueFor
1bb30 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  mat,..          
1bb40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 4e                "N
1bb50 6f 56 73 32 30 30 35 22 2c 20 46 6f 72 44 69 73  oVs2005", ForDis
1bb60 70 6c 61 79 28 6e 6f 56 73 32 30 30 35 29 29 2c  play(noVs2005)),
1bb70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1bb80 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
1bb90 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20  ategory);....   
1bba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bbb0 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53   traceCallback(S
1bbc0 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d  tring.Format(Nam
1bbd0 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c  eAndValueFormat,
1bbe0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1bbf0 20 20 20 20 20 20 20 20 20 20 22 4e 6f 56 73 32            "NoVs2
1bc00 30 30 38 22 2c 20 46 6f 72 44 69 73 70 6c 61 79  008", ForDisplay
1bc10 28 6e 6f 56 73 32 30 30 38 29 29 2c 0d 0a 20 20  (noVs2008)),..  
1bc20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bc30 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67        traceCateg
1bc40 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
1bc50 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
1bc60 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e  ceCallback(Strin
1bc70 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64  g.Format(NameAnd
1bc80 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20  ValueFormat,..  
1bc90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bca0 20 20 20 20 20 20 22 4e 6f 56 73 32 30 31 30 22        "NoVs2010"
1bcb0 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 6e 6f 56  , ForDisplay(noV
1bcc0 73 32 30 31 30 29 29 2c 0d 0a 20 20 20 20 20 20  s2010)),..      
1bcd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bce0 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29    traceCategory)
1bcf0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
1bd00 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
1bd10 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f  llback(String.Fo
1bd20 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75  rmat(NameAndValu
1bd30 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20  eFormat,..      
1bd40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bd50 20 20 22 4e 6f 56 73 32 30 31 32 22 2c 20 46 6f    "NoVs2012", Fo
1bd60 72 44 69 73 70 6c 61 79 28 6e 6f 56 73 32 30 31  rDisplay(noVs201
1bd70 32 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  2)),..          
1bd80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
1bd90 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  aceCategory);...
1bda0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1bdb0 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61       traceCallba
1bdc0 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  ck(String.Format
1bdd0 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72  (NameAndValueFor
1bde0 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  mat,..          
1bdf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 4e                "N
1be00 6f 54 72 61 63 65 22 2c 20 46 6f 72 44 69 73 70  oTrace", ForDisp
1be10 6c 61 79 28 6e 6f 54 72 61 63 65 29 29 2c 0d 0a  lay(noTrace)),..
1be20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1be30 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74          traceCat
1be40 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  egory);....     
1be50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
1be60 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72  raceCallback(Str
1be70 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41  ing.Format(NameA
1be80 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a  ndValueFormat,..
1be90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bea0 20 20 20 20 20 20 20 20 22 4e 6f 43 6f 6e 73 6f          "NoConso
1beb0 6c 65 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28  le", ForDisplay(
1bec0 6e 6f 43 6f 6e 73 6f 6c 65 29 29 2c 0d 0a 20 20  noConsole)),..  
1bed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bee0 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67        traceCateg
1bef0 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
1bf00 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
1bf10 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e  ceCallback(Strin
1bf20 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64  g.Format(NameAnd
1bf30 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20  ValueFormat,..  
1bf40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bf50 20 20 20 20 20 20 22 4e 6f 4c 6f 67 22 2c 20 46        "NoLog", F
1bf60 6f 72 44 69 73 70 6c 61 79 28 6e 6f 4c 6f 67 29  orDisplay(noLog)
1bf70 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
1bf80 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
1bf90 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
1bfa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bfb0 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b     traceCallback
1bfc0 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e  (String.Format(N
1bfd0 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61  ameAndValueForma
1bfe0 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t,..            
1bff0 20 20 20 20 20 20 20 20 20 20 20 20 22 54 68 72              "Thr
1c000 6f 77 4f 6e 4d 69 73 73 69 6e 67 22 2c 20 46 6f  owOnMissing", Fo
1c010 72 44 69 73 70 6c 61 79 28 74 68 72 6f 77 4f 6e  rDisplay(throwOn
1c020 4d 69 73 73 69 6e 67 29 29 2c 0d 0a 20 20 20 20  Missing)),..    
1c030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c040 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72      traceCategor
1c050 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
1c060 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
1c070 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e  Callback(String.
1c080 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61  Format(NameAndVa
1c090 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20  lueFormat,..    
1c0a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c0b0 20 20 20 20 22 57 68 61 74 49 66 22 2c 20 46 6f      "WhatIf", Fo
1c0c0 72 44 69 73 70 6c 61 79 28 77 68 61 74 49 66 29  rDisplay(whatIf)
1c0d0 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
1c0e0 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
1c0f0 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
1c100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c110 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b     traceCallback
1c120 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e  (String.Format(N
1c130 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61  ameAndValueForma
1c140 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t,..            
1c150 20 20 20 20 20 20 20 20 20 20 20 20 22 44 65 62              "Deb
1c160 75 67 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28  ug", ForDisplay(
1c170 64 65 62 75 67 29 29 2c 0d 0a 20 20 20 20 20 20  debug)),..      
1c180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c190 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29    traceCategory)
1c1a0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
1c1b0 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
1c1c0 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f  llback(String.Fo
1c1d0 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75  rmat(NameAndValu
1c1e0 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20  eFormat,..      
1c1f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c200 20 20 22 56 65 72 62 6f 73 65 22 2c 20 46 6f 72    "Verbose", For
1c210 44 69 73 70 6c 61 79 28 76 65 72 62 6f 73 65 29  Display(verbose)
1c220 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
1c230 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
1c240 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
1c250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c260 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b     traceCallback
1c270 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e  (String.Format(N
1c280 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61  ameAndValueForma
1c290 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t,..            
1c2a0 20 20 20 20 20 20 20 20 20 20 20 20 22 43 6f 6e              "Con
1c2b0 66 69 72 6d 22 2c 20 46 6f 72 44 69 73 70 6c 61  firm", ForDispla
1c2c0 79 28 63 6f 6e 66 69 72 6d 29 29 2c 0d 0a 20 20  y(confirm)),..  
1c2d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c2e0 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67        traceCateg
1c2f0 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
1c300 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f               ///
1c310 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c320 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c330 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c340 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
1c350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c360 69 66 20 28 61 73 73 65 6d 62 6c 79 20 21 3d 20  if (assembly != 
1c370 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
1c380 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
1c390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c3a0 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62        traceCallb
1c3b0 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ack(String.Forma
1c3c0 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f  t(NameAndValueFo
1c3d0 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20  rmat,..         
1c3e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c3f0 20 20 20 22 41 73 73 65 6d 62 6c 79 54 69 74 6c     "AssemblyTitl
1c400 65 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e",..           
1c410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c420 20 46 6f 72 44 69 73 70 6c 61 79 28 47 65 74 41   ForDisplay(GetA
1c430 73 73 65 6d 62 6c 79 54 69 74 6c 65 28 61 73 73  ssemblyTitle(ass
1c440 65 6d 62 6c 79 29 29 29 2c 0d 0a 20 20 20 20 20  embly))),..     
1c450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c460 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65         traceCate
1c470 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
1c480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c490 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28    traceCallback(
1c4a0 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61  String.Format(Na
1c4b0 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74  meAndValueFormat
1c4c0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
1c4d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
1c4e0 41 73 73 65 6d 62 6c 79 43 6f 6e 66 69 67 75 72  AssemblyConfigur
1c4f0 61 74 69 6f 6e 22 2c 0d 0a 20 20 20 20 20 20 20  ation",..       
1c500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c510 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28       ForDisplay(
1c520 47 65 74 41 73 73 65 6d 62 6c 79 43 6f 6e 66 69  GetAssemblyConfi
1c530 67 75 72 61 74 69 6f 6e 28 61 73 73 65 6d 62 6c  guration(assembl
1c540 79 29 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  y))),..         
1c550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c560 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
1c570 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
1c580 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
1c590 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
1c5a0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
1c5b0 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67           #endreg
1c5c0 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ion....         
1c5d0 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
1c5e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c5f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c600 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c610 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
1c620 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 75        #region Pu
1c630 62 6c 69 63 20 50 72 6f 70 65 72 74 69 65 73 0d  blic Properties.
1c640 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69  .            pri
1c650 76 61 74 65 20 41 73 73 65 6d 62 6c 79 20 61 73  vate Assembly as
1c660 73 65 6d 62 6c 79 3b 0d 0a 20 20 20 20 20 20 20  sembly;..       
1c670 20 20 20 20 20 70 75 62 6c 69 63 20 41 73 73 65       public Asse
1c680 6d 62 6c 79 20 41 73 73 65 6d 62 6c 79 0d 0a 20  mbly Assembly.. 
1c690 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
1c6a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65                ge
1c6b0 74 20 7b 20 72 65 74 75 72 6e 20 61 73 73 65 6d  t { return assem
1c6c0 62 6c 79 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  bly; }..        
1c6d0 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 61 73          set { as
1c6e0 73 65 6d 62 6c 79 20 3d 20 76 61 6c 75 65 3b 20  sembly = value; 
1c6f0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
1c700 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1c710 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c720 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c730 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c740 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c750 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
1c760 20 20 20 70 72 69 76 61 74 65 20 73 74 72 69 6e     private strin
1c770 67 20 6c 6f 67 46 69 6c 65 4e 61 6d 65 3b 0d 0a  g logFileName;..
1c780 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
1c790 69 63 20 73 74 72 69 6e 67 20 4c 6f 67 46 69 6c  ic string LogFil
1c7a0 65 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 20  eName..         
1c7b0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
1c7c0 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75        get { retu
1c7d0 72 6e 20 6c 6f 67 46 69 6c 65 4e 61 6d 65 3b 20  rn logFileName; 
1c7e0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
1c7f0 20 20 20 73 65 74 20 7b 20 6c 6f 67 46 69 6c 65     set { logFile
1c800 4e 61 6d 65 20 3d 20 76 61 6c 75 65 3b 20 7d 0d  Name = value; }.
1c810 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
1c820 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
1c830 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c840 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c850 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c860 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c870 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
1c880 20 70 72 69 76 61 74 65 20 73 74 72 69 6e 67 20   private string 
1c890 64 69 72 65 63 74 6f 72 79 3b 0d 0a 20 20 20 20  directory;..    
1c8a0 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73          public s
1c8b0 74 72 69 6e 67 20 44 69 72 65 63 74 6f 72 79 0d  tring Directory.
1c8c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
1c8d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c8e0 67 65 74 20 7b 20 72 65 74 75 72 6e 20 64 69 72  get { return dir
1c8f0 65 63 74 6f 72 79 3b 20 7d 0d 0a 20 20 20 20 20  ectory; }..     
1c900 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b             set {
1c910 20 64 69 72 65 63 74 6f 72 79 20 3d 20 76 61 6c   directory = val
1c920 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  ue; }..         
1c930 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
1c940 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
1c950 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c960 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c970 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c980 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
1c990 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
1c9a0 74 72 69 6e 67 20 63 6f 72 65 46 69 6c 65 4e 61  tring coreFileNa
1c9b0 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me;..           
1c9c0 20 70 75 62 6c 69 63 20 73 74 72 69 6e 67 20 43   public string C
1c9d0 6f 72 65 46 69 6c 65 4e 61 6d 65 0d 0a 20 20 20  oreFileName..   
1c9e0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
1c9f0 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20              get 
1ca00 7b 20 72 65 74 75 72 6e 20 63 6f 72 65 46 69 6c  { return coreFil
1ca10 65 4e 61 6d 65 3b 20 7d 0d 0a 20 20 20 20 20 20  eName; }..      
1ca20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20            set { 
1ca30 63 6f 72 65 46 69 6c 65 4e 61 6d 65 20 3d 20 76  coreFileName = v
1ca40 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20  alue; }..       
1ca50 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
1ca60 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
1ca70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ca80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ca90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1caa0 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
1cab0 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65           private
1cac0 20 73 74 72 69 6e 67 20 6c 69 6e 71 46 69 6c 65   string linqFile
1cad0 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  Name;..         
1cae0 20 20 20 70 75 62 6c 69 63 20 73 74 72 69 6e 67     public string
1caf0 20 4c 69 6e 71 46 69 6c 65 4e 61 6d 65 0d 0a 20   LinqFileName.. 
1cb00 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
1cb10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65                ge
1cb20 74 20 7b 20 72 65 74 75 72 6e 20 6c 69 6e 71 46  t { return linqF
1cb30 69 6c 65 4e 61 6d 65 3b 20 7d 0d 0a 20 20 20 20  ileName; }..    
1cb40 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20              set 
1cb50 7b 20 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 20 3d  { linqFileName =
1cb60 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20   value; }..     
1cb70 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
1cb80 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
1cb90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1cba0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1cbb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1cbc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
1cbd0 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
1cbe0 74 65 20 73 74 72 69 6e 67 20 64 65 73 69 67 6e  te string design
1cbf0 65 72 46 69 6c 65 4e 61 6d 65 3b 0d 0a 20 20 20  erFileName;..   
1cc00 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
1cc10 73 74 72 69 6e 67 20 44 65 73 69 67 6e 65 72 46  string DesignerF
1cc20 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20  ileName..       
1cc30 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
1cc40 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65          get { re
1cc50 74 75 72 6e 20 64 65 73 69 67 6e 65 72 46 69 6c  turn designerFil
1cc60 65 4e 61 6d 65 3b 20 7d 0d 0a 20 20 20 20 20 20  eName; }..      
1cc70 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20            set { 
1cc80 64 65 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65  designerFileName
1cc90 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20   = value; }..   
1cca0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
1ccb0 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
1ccc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ccd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1cce0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ccf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
1cd00 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69  .            pri
1cd10 76 61 74 65 20 73 74 72 69 6e 67 20 72 65 67 69  vate string regi
1cd20 73 74 72 79 56 65 72 73 69 6f 6e 3b 0d 0a 20 20  stryVersion;..  
1cd30 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
1cd40 20 73 74 72 69 6e 67 20 52 65 67 69 73 74 72 79   string Registry
1cd50 56 65 72 73 69 6f 6e 0d 0a 20 20 20 20 20 20 20  Version..       
1cd60 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
1cd70 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65          get { re
1cd80 74 75 72 6e 20 72 65 67 69 73 74 72 79 56 65 72  turn registryVer
1cd90 73 69 6f 6e 3b 20 7d 0d 0a 20 20 20 20 20 20 20  sion; }..       
1cda0 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 72           set { r
1cdb0 65 67 69 73 74 72 79 56 65 72 73 69 6f 6e 20 3d  egistryVersion =
1cdc0 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20   value; }..     
1cdd0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
1cde0 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
1cdf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ce00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ce10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ce20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
1ce30 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
1ce40 74 65 20 73 74 72 69 6e 67 20 63 6f 6e 66 69 67  te string config
1ce50 56 65 72 73 69 6f 6e 3b 0d 0a 20 20 20 20 20 20  Version;..      
1ce60 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 72        public str
1ce70 69 6e 67 20 43 6f 6e 66 69 67 56 65 72 73 69 6f  ing ConfigVersio
1ce80 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  n..            {
1ce90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1cea0 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 63    get { return c
1ceb0 6f 6e 66 69 67 56 65 72 73 69 6f 6e 3b 20 7d 0d  onfigVersion; }.
1cec0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1ced0 20 73 65 74 20 7b 20 63 6f 6e 66 69 67 56 65 72   set { configVer
1cee0 73 69 6f 6e 20 3d 20 76 61 6c 75 65 3b 20 7d 0d  sion = value; }.
1cef0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
1cf00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
1cf10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1cf20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1cf30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1cf40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1cf50 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
1cf60 20 70 72 69 76 61 74 65 20 73 74 72 69 6e 67 20   private string 
1cf70 64 65 62 75 67 46 6f 72 6d 61 74 3b 0d 0a 20 20  debugFormat;..  
1cf80 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
1cf90 20 73 74 72 69 6e 67 20 44 65 62 75 67 46 6f 72   string DebugFor
1cfa0 6d 61 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20  mat..           
1cfb0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
1cfc0 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e      get { return
1cfd0 20 64 65 62 75 67 46 6f 72 6d 61 74 3b 20 7d 0d   debugFormat; }.
1cfe0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1cff0 20 73 65 74 20 7b 20 64 65 62 75 67 46 6f 72 6d   set { debugForm
1d000 61 74 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20  at = value; }.. 
1d010 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
1d020 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
1d030 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d040 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d050 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d060 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
1d070 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
1d080 72 69 76 61 74 65 20 73 74 72 69 6e 67 20 74 72  rivate string tr
1d090 61 63 65 46 6f 72 6d 61 74 3b 0d 0a 20 20 20 20  aceFormat;..    
1d0a0 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73          public s
1d0b0 74 72 69 6e 67 20 54 72 61 63 65 46 6f 72 6d 61  tring TraceForma
1d0c0 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  t..            {
1d0d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1d0e0 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 74    get { return t
1d0f0 72 61 63 65 46 6f 72 6d 61 74 3b 20 7d 0d 0a 20  raceFormat; }.. 
1d100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
1d110 65 74 20 7b 20 74 72 61 63 65 46 6f 72 6d 61 74  et { traceFormat
1d120 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20   = value; }..   
1d130 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
1d140 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
1d150 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d  /////////////...
1d190 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69  .            pri
1d1a0 76 61 74 65 20 49 6e 73 74 61 6c 6c 46 6c 61 67  vate InstallFlag
1d1b0 73 20 69 6e 73 74 61 6c 6c 46 6c 61 67 73 3b 0d  s installFlags;.
1d1c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
1d1d0 6c 69 63 20 49 6e 73 74 61 6c 6c 46 6c 61 67 73  lic InstallFlags
1d1e0 20 49 6e 73 74 61 6c 6c 46 6c 61 67 73 0d 0a 20   InstallFlags.. 
1d1f0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
1d200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65                ge
1d210 74 20 7b 20 72 65 74 75 72 6e 20 69 6e 73 74 61  t { return insta
1d220 6c 6c 46 6c 61 67 73 3b 20 7d 0d 0a 20 20 20 20  llFlags; }..    
1d230 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20              set 
1d240 7b 20 69 6e 73 74 61 6c 6c 46 6c 61 67 73 20 3d  { installFlags =
1d250 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20   value; }..     
1d260 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
1d270 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
1d280 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d290 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d2a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d2b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
1d2c0 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
1d2d0 74 65 20 54 72 61 63 65 50 72 69 6f 72 69 74 79  te TracePriority
1d2e0 20 64 65 62 75 67 50 72 69 6f 72 69 74 79 3b 0d   debugPriority;.
1d2f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
1d300 6c 69 63 20 54 72 61 63 65 50 72 69 6f 72 69 74  lic TracePriorit
1d310 79 20 44 65 62 75 67 50 72 69 6f 72 69 74 79 0d  y DebugPriority.
1d320 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
1d330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d340 67 65 74 20 7b 20 72 65 74 75 72 6e 20 64 65 62  get { return deb
1d350 75 67 50 72 69 6f 72 69 74 79 3b 20 7d 0d 0a 20  ugPriority; }.. 
1d360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
1d370 65 74 20 7b 20 64 65 62 75 67 50 72 69 6f 72 69  et { debugPriori
1d380 74 79 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20  ty = value; }.. 
1d390 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
1d3a0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
1d3b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d3c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d3d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d3e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
1d3f0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
1d400 72 69 76 61 74 65 20 54 72 61 63 65 50 72 69 6f  rivate TracePrio
1d410 72 69 74 79 20 74 72 61 63 65 50 72 69 6f 72 69  rity tracePriori
1d420 74 79 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ty;..           
1d430 20 70 75 62 6c 69 63 20 54 72 61 63 65 50 72 69   public TracePri
1d440 6f 72 69 74 79 20 54 72 61 63 65 50 72 69 6f 72  ority TracePrior
1d450 69 74 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ity..           
1d460 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
1d470 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e      get { return
1d480 20 74 72 61 63 65 50 72 69 6f 72 69 74 79 3b 20   tracePriority; 
1d490 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
1d4a0 20 20 20 73 65 74 20 7b 20 74 72 61 63 65 50 72     set { tracePr
1d4b0 69 6f 72 69 74 79 20 3d 20 76 61 6c 75 65 3b 20  iority = value; 
1d4c0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
1d4d0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1d4e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d4f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d500 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d510 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d520 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
1d530 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20     private bool 
1d540 69 6e 73 74 61 6c 6c 3b 0d 0a 20 20 20 20 20 20  install;..      
1d550 20 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f        public boo
1d560 6c 20 49 6e 73 74 61 6c 6c 0d 0a 20 20 20 20 20  l Install..     
1d570 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
1d580 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20            get { 
1d590 72 65 74 75 72 6e 20 69 6e 73 74 61 6c 6c 3b 20  return install; 
1d5a0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
1d5b0 20 20 20 73 65 74 20 7b 20 69 6e 73 74 61 6c 6c     set { install
1d5c0 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20   = value; }..   
1d5d0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
1d5e0 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
1d5f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d600 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d610 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d620 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
1d630 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69  .            pri
1d640 76 61 74 65 20 62 6f 6f 6c 20 77 6f 77 36 34 3b  vate bool wow64;
1d650 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
1d660 62 6c 69 63 20 62 6f 6f 6c 20 57 6f 77 36 34 0d  blic bool Wow64.
1d670 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
1d680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d690 67 65 74 20 7b 20 72 65 74 75 72 6e 20 77 6f 77  get { return wow
1d6a0 36 34 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  64; }..         
1d6b0 20 20 20 20 20 20 20 73 65 74 20 7b 20 77 6f 77         set { wow
1d6c0 36 34 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20  64 = value; }.. 
1d6d0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
1d6e0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
1d6f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d700 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d710 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d720 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
1d730 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
1d740 72 69 76 61 74 65 20 62 6f 6f 6c 20 6e 6f 52 75  rivate bool noRu
1d750 6e 74 69 6d 65 56 65 72 73 69 6f 6e 3b 0d 0a 20  ntimeVersion;.. 
1d760 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
1d770 63 20 62 6f 6f 6c 20 4e 6f 52 75 6e 74 69 6d 65  c bool NoRuntime
1d780 56 65 72 73 69 6f 6e 0d 0a 20 20 20 20 20 20 20  Version..       
1d790 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
1d7a0 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65          get { re
1d7b0 74 75 72 6e 20 6e 6f 52 75 6e 74 69 6d 65 56 65  turn noRuntimeVe
1d7c0 72 73 69 6f 6e 3b 20 7d 0d 0a 20 20 20 20 20 20  rsion; }..      
1d7d0 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20            set { 
1d7e0 6e 6f 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e  noRuntimeVersion
1d7f0 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20   = value; }..   
1d800 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
1d810 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
1d820 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d830 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d840 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d850 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
1d860 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69  .            pri
1d870 76 61 74 65 20 62 6f 6f 6c 20 6e 6f 44 65 73 6b  vate bool noDesk
1d880 74 6f 70 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  top;..          
1d890 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 4e 6f    public bool No
1d8a0 44 65 73 6b 74 6f 70 0d 0a 20 20 20 20 20 20 20  Desktop..       
1d8b0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
1d8c0 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65          get { re
1d8d0 74 75 72 6e 20 6e 6f 44 65 73 6b 74 6f 70 3b 20  turn noDesktop; 
1d8e0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
1d8f0 20 20 20 73 65 74 20 7b 20 6e 6f 44 65 73 6b 74     set { noDeskt
1d900 6f 70 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20  op = value; }.. 
1d910 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
1d920 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
1d930 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d940 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d950 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d960 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
1d970 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
1d980 72 69 76 61 74 65 20 62 6f 6f 6c 20 6e 6f 43 6f  rivate bool noCo
1d990 6d 70 61 63 74 3b 0d 0a 20 20 20 20 20 20 20 20  mpact;..        
1d9a0 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20      public bool 
1d9b0 4e 6f 43 6f 6d 70 61 63 74 0d 0a 20 20 20 20 20  NoCompact..     
1d9c0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
1d9d0 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20            get { 
1d9e0 72 65 74 75 72 6e 20 6e 6f 43 6f 6d 70 61 63 74  return noCompact
1d9f0 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
1da00 20 20 20 20 20 73 65 74 20 7b 20 6e 6f 43 6f 6d       set { noCom
1da10 70 61 63 74 20 3d 20 76 61 6c 75 65 3b 20 7d 0d  pact = value; }.
1da20 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
1da30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
1da40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1da50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1da60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1da70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1da80 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
1da90 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 6e 6f   private bool no
1daa0 4e 65 74 46 78 32 30 3b 0d 0a 20 20 20 20 20 20  NetFx20;..      
1dab0 20 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f        public boo
1dac0 6c 20 4e 6f 4e 65 74 46 78 32 30 0d 0a 20 20 20  l NoNetFx20..   
1dad0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
1dae0 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20              get 
1daf0 7b 20 72 65 74 75 72 6e 20 6e 6f 4e 65 74 46 78  { return noNetFx
1db00 32 30 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  20; }..         
1db10 20 20 20 20 20 20 20 73 65 74 20 7b 20 6e 6f 4e         set { noN
1db20 65 74 46 78 32 30 20 3d 20 76 61 6c 75 65 3b 20  etFx20 = value; 
1db30 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
1db40 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1db50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1db60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1db70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1db80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1db90 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
1dba0 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20     private bool 
1dbb0 6e 6f 4e 65 74 46 78 34 30 3b 0d 0a 20 20 20 20  noNetFx40;..    
1dbc0 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 62          public b
1dbd0 6f 6f 6c 20 4e 6f 4e 65 74 46 78 34 30 0d 0a 20  ool NoNetFx40.. 
1dbe0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
1dbf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65                ge
1dc00 74 20 7b 20 72 65 74 75 72 6e 20 6e 6f 4e 65 74  t { return noNet
1dc10 46 78 34 30 3b 20 7d 0d 0a 20 20 20 20 20 20 20  Fx40; }..       
1dc20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 6e           set { n
1dc30 6f 4e 65 74 46 78 34 30 20 3d 20 76 61 6c 75 65  oNetFx40 = value
1dc40 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
1dc50 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
1dc60 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
1dc70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1dc80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1dc90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1dca0 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
1dcb0 20 20 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f       private boo
1dcc0 6c 20 6e 6f 4e 65 74 46 78 34 35 3b 0d 0a 20 20  l noNetFx45;..  
1dcd0 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
1dce0 20 62 6f 6f 6c 20 4e 6f 4e 65 74 46 78 34 35 0d   bool NoNetFx45.
1dcf0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
1dd00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dd10 67 65 74 20 7b 20 72 65 74 75 72 6e 20 6e 6f 4e  get { return noN
1dd20 65 74 46 78 34 35 3b 20 7d 0d 0a 20 20 20 20 20  etFx45; }..     
1dd30 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b             set {
1dd40 20 6e 6f 4e 65 74 46 78 34 35 20 3d 20 76 61 6c   noNetFx45 = val
1dd50 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  ue; }..         
1dd60 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
1dd70 20 20 20 20 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 2f 2f 2f 2f 2f  ////////////////
1dda0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ddb0 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
1ddc0 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 62         private b
1ddd0 6f 6f 6c 20 6e 6f 56 73 32 30 30 35 3b 0d 0a 20  ool noVs2005;.. 
1dde0 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
1ddf0 63 20 62 6f 6f 6c 20 4e 6f 56 73 32 30 30 35 0d  c bool NoVs2005.
1de00 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
1de10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1de20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 6e 6f 56  get { return noV
1de30 73 32 30 30 35 3b 20 7d 0d 0a 20 20 20 20 20 20  s2005; }..      
1de40 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20            set { 
1de50 6e 6f 56 73 32 30 30 35 20 3d 20 76 61 6c 75 65  noVs2005 = value
1de60 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
1de70 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
1de80 20 20 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 2f 2f 2f 2f 2f 2f 2f  ////////////////
1dec0 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
1ded0 20 20 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f       private boo
1dee0 6c 20 6e 6f 56 73 32 30 30 38 3b 0d 0a 20 20 20  l noVs2008;..   
1def0 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
1df00 62 6f 6f 6c 20 4e 6f 56 73 32 30 30 38 0d 0a 20  bool NoVs2008.. 
1df10 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
1df20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65                ge
1df30 74 20 7b 20 72 65 74 75 72 6e 20 6e 6f 56 73 32  t { return noVs2
1df40 30 30 38 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  008; }..        
1df50 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 6e 6f          set { no
1df60 56 73 32 30 30 38 20 3d 20 76 61 6c 75 65 3b 20  Vs2008 = value; 
1df70 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
1df80 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1df90 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
1dfe0 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20     private bool 
1dff0 6e 6f 56 73 32 30 31 30 3b 0d 0a 20 20 20 20 20  noVs2010;..     
1e000 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f         public bo
1e010 6f 6c 20 4e 6f 56 73 32 30 31 30 0d 0a 20 20 20  ol NoVs2010..   
1e020 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
1e030 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20              get 
1e040 7b 20 72 65 74 75 72 6e 20 6e 6f 56 73 32 30 31  { return noVs201
1e050 30 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  0; }..          
1e060 20 20 20 20 20 20 73 65 74 20 7b 20 6e 6f 56 73        set { noVs
1e070 32 30 31 30 20 3d 20 76 61 6c 75 65 3b 20 7d 0d  2010 = value; }.
1e080 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
1e090 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
1e0a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e0b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e0c0 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
1e0f0 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 6e 6f   private bool no
1e100 56 73 32 30 31 32 3b 0d 0a 20 20 20 20 20 20 20  Vs2012;..       
1e110 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c       public bool
1e120 20 4e 6f 56 73 32 30 31 32 0d 0a 20 20 20 20 20   NoVs2012..     
1e130 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
1e140 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20            get { 
1e150 72 65 74 75 72 6e 20 6e 6f 56 73 32 30 31 32 3b  return noVs2012;
1e160 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
1e170 20 20 20 20 73 65 74 20 7b 20 6e 6f 56 73 32 30      set { noVs20
1e180 31 32 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20  12 = value; }.. 
1e190 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
1e1a0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
1e1b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e1c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e1d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e1e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
1e1f0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
1e200 72 69 76 61 74 65 20 62 6f 6f 6c 20 6e 6f 54 72  rivate bool noTr
1e210 61 63 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ace;..          
1e220 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 4e 6f    public bool No
1e230 54 72 61 63 65 0d 0a 20 20 20 20 20 20 20 20 20  Trace..         
1e240 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
1e250 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75        get { retu
1e260 72 6e 20 6e 6f 54 72 61 63 65 3b 20 7d 0d 0a 20  rn noTrace; }.. 
1e270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
1e280 65 74 20 7b 20 6e 6f 54 72 61 63 65 20 3d 20 76  et { noTrace = v
1e290 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20  alue; }..       
1e2a0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
1e2b0 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
1e2c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e2d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e2e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e2f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
1e300 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65           private
1e310 20 62 6f 6f 6c 20 6e 6f 43 6f 6e 73 6f 6c 65 3b   bool noConsole;
1e320 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
1e330 62 6c 69 63 20 62 6f 6f 6c 20 4e 6f 43 6f 6e 73  blic bool NoCons
1e340 6f 6c 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ole..           
1e350 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
1e360 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e      get { return
1e370 20 6e 6f 43 6f 6e 73 6f 6c 65 3b 20 7d 0d 0a 20   noConsole; }.. 
1e380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
1e390 65 74 20 7b 20 6e 6f 43 6f 6e 73 6f 6c 65 20 3d  et { noConsole =
1e3a0 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20   value; }..     
1e3b0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
1e3c0 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
1e3d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e3e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e3f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e400 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
1e410 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
1e420 74 65 20 62 6f 6f 6c 20 6e 6f 4c 6f 67 3b 0d 0a  te bool noLog;..
1e430 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
1e440 69 63 20 62 6f 6f 6c 20 4e 6f 4c 6f 67 0d 0a 20  ic bool NoLog.. 
1e450 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
1e460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65                ge
1e470 74 20 7b 20 72 65 74 75 72 6e 20 6e 6f 4c 6f 67  t { return noLog
1e480 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
1e490 20 20 20 20 20 73 65 74 20 7b 20 6e 6f 4c 6f 67       set { noLog
1e4a0 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20   = value; }..   
1e4b0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
1e4c0 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
1e4d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e4e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e4f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e500 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
1e510 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69  .            pri
1e520 76 61 74 65 20 62 6f 6f 6c 20 74 68 72 6f 77 4f  vate bool throwO
1e530 6e 4d 69 73 73 69 6e 67 3b 0d 0a 20 20 20 20 20  nMissing;..     
1e540 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f         public bo
1e550 6f 6c 20 54 68 72 6f 77 4f 6e 4d 69 73 73 69 6e  ol ThrowOnMissin
1e560 67 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  g..            {
1e570 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1e580 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 74    get { return t
1e590 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 3b 20 7d  hrowOnMissing; }
1e5a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1e5b0 20 20 73 65 74 20 7b 20 74 68 72 6f 77 4f 6e 4d    set { throwOnM
1e5c0 69 73 73 69 6e 67 20 3d 20 76 61 6c 75 65 3b 20  issing = value; 
1e5d0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
1e5e0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1e5f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e600 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e610 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e620 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e630 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
1e640 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20     private bool 
1e650 77 68 61 74 49 66 3b 0d 0a 20 20 20 20 20 20 20  whatIf;..       
1e660 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c       public bool
1e670 20 57 68 61 74 49 66 0d 0a 20 20 20 20 20 20 20   WhatIf..       
1e680 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
1e690 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65          get { re
1e6a0 74 75 72 6e 20 77 68 61 74 49 66 3b 20 7d 0d 0a  turn whatIf; }..
1e6b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e6c0 73 65 74 20 7b 20 77 68 61 74 49 66 20 3d 20 76  set { whatIf = v
1e6d0 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20  alue; }..       
1e6e0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
1e6f0 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
1e700 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e710 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e720 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e730 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
1e740 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65           private
1e750 20 62 6f 6f 6c 20 64 65 62 75 67 3b 0d 0a 20 20   bool debug;..  
1e760 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
1e770 20 62 6f 6f 6c 20 44 65 62 75 67 0d 0a 20 20 20   bool Debug..   
1e780 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
1e790 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20              get 
1e7a0 7b 20 72 65 74 75 72 6e 20 64 65 62 75 67 3b 20  { return debug; 
1e7b0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
1e7c0 20 20 20 73 65 74 20 7b 20 64 65 62 75 67 20 3d     set { debug =
1e7d0 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20   value; }..     
1e7e0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
1e7f0 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
1e800 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e810 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e820 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e830 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
1e840 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
1e850 74 65 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 3b  te bool verbose;
1e860 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
1e870 62 6c 69 63 20 62 6f 6f 6c 20 56 65 72 62 6f 73  blic bool Verbos
1e880 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  e..            {
1e890 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1e8a0 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 76    get { return v
1e8b0 65 72 62 6f 73 65 3b 20 7d 0d 0a 20 20 20 20 20  erbose; }..     
1e8c0 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b             set {
1e8d0 20 76 65 72 62 6f 73 65 20 3d 20 76 61 6c 75 65   verbose = value
1e8e0 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
1e8f0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
1e900 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
1e910 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e920 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e930 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e940 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
1e950 20 20 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f       private boo
1e960 6c 20 63 6f 6e 66 69 72 6d 3b 0d 0a 20 20 20 20  l confirm;..    
1e970 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 62          public b
1e980 6f 6f 6c 20 43 6f 6e 66 69 72 6d 0d 0a 20 20 20  ool Confirm..   
1e990 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
1e9a0 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20              get 
1e9b0 7b 20 72 65 74 75 72 6e 20 63 6f 6e 66 69 72 6d  { return confirm
1e9c0 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
1e9d0 20 20 20 20 20 73 65 74 20 7b 20 63 6f 6e 66 69       set { confi
1e9e0 72 6d 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20  rm = value; }.. 
1e9f0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
1ea00 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65            #endre
1ea10 67 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20 7d 0d  gion..        }.
1ea20 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67  .        #endreg
1ea30 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  ion....        /
1ea40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ea50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ea60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ea70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ea80 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
1ea90 20 20 23 72 65 67 69 6f 6e 20 46 72 61 6d 65 77    #region Framew
1eaa0 6f 72 6b 4c 69 73 74 20 43 6c 61 73 73 0d 0a 20  orkList Class.. 
1eab0 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
1eac0 65 61 6c 65 64 20 63 6c 61 73 73 20 46 72 61 6d  ealed class Fram
1ead0 65 77 6f 72 6b 4c 69 73 74 0d 0a 20 20 20 20 20  eworkList..     
1eae0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
1eaf0 20 20 23 72 65 67 69 6f 6e 20 50 75 62 6c 69 63    #region Public
1eb00 20 43 6f 6e 73 74 72 75 63 74 6f 72 73 0d 0a 20   Constructors.. 
1eb10 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
1eb20 63 20 46 72 61 6d 65 77 6f 72 6b 4c 69 73 74 28  c FrameworkList(
1eb30 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
1eb40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1eb50 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e    // do nothing.
1eb60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
1eb70 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e  .            #en
1eb80 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
1eb90 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
1eba0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ebb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ebc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ebd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
1ebe0 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f            #regio
1ebf0 6e 20 50 75 62 6c 69 63 20 4d 65 74 68 6f 64 73  n Public Methods
1ec00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
1ec10 69 76 61 74 65 20 4d 6f 63 6b 52 65 67 69 73 74  ivate MockRegist
1ec20 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79 3b 0d 0a  ryKey rootKey;..
1ec30 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
1ec40 69 63 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b  ic MockRegistryK
1ec50 65 79 20 52 6f 6f 74 4b 65 79 0d 0a 20 20 20 20  ey RootKey..    
1ec60 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
1ec70 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b             get {
1ec80 20 72 65 74 75 72 6e 20 72 6f 6f 74 4b 65 79 3b   return rootKey;
1ec90 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
1eca0 20 20 20 20 73 65 74 20 7b 20 72 6f 6f 74 4b 65      set { rootKe
1ecb0 79 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20  y = value; }..  
1ecc0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
1ecd0 20 20 20 20 20 20 20 20 20 20 20 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 2f  ////////////////
1ed10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
1ed20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
1ed30 69 76 61 74 65 20 53 74 72 69 6e 67 4c 69 73 74  ivate StringList
1ed40 20 6e 61 6d 65 73 3b 0d 0a 20 20 20 20 20 20 20   names;..       
1ed50 20 20 20 20 20 70 75 62 6c 69 63 20 53 74 72 69       public Stri
1ed60 6e 67 4c 69 73 74 20 4e 61 6d 65 73 0d 0a 20 20  ngList Names..  
1ed70 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
1ed80 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74               get
1ed90 20 7b 20 72 65 74 75 72 6e 20 6e 61 6d 65 73 3b   { return names;
1eda0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
1edb0 20 20 20 20 73 65 74 20 7b 20 6e 61 6d 65 73 20      set { names 
1edc0 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20  = value; }..    
1edd0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
1ede0 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
1edf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ee00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ee10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ee20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
1ee30 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
1ee40 61 74 65 20 56 65 72 73 69 6f 6e 4d 61 70 20 76  ate VersionMap v
1ee50 65 72 73 69 6f 6e 73 3b 0d 0a 20 20 20 20 20 20  ersions;..      
1ee60 20 20 20 20 20 20 70 75 62 6c 69 63 20 56 65 72        public Ver
1ee70 73 69 6f 6e 4d 61 70 20 56 65 72 73 69 6f 6e 73  sionMap Versions
1ee80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
1ee90 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1eea0 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 76 65   get { return ve
1eeb0 72 73 69 6f 6e 73 3b 20 7d 0d 0a 20 20 20 20 20  rsions; }..     
1eec0 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b             set {
1eed0 20 76 65 72 73 69 6f 6e 73 20 3d 20 76 61 6c 75   versions = valu
1eee0 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  e; }..          
1eef0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
1ef00 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
1ef10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ef20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ef30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ef40 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
1ef50 20 20 20 20 20 20 70 72 69 76 61 74 65 20 53 74        private St
1ef60 72 69 6e 67 4c 69 73 74 20 70 6c 61 74 66 6f 72  ringList platfor
1ef70 6d 4e 61 6d 65 73 3b 0d 0a 20 20 20 20 20 20 20  mNames;..       
1ef80 20 20 20 20 20 70 75 62 6c 69 63 20 53 74 72 69       public Stri
1ef90 6e 67 4c 69 73 74 20 50 6c 61 74 66 6f 72 6d 4e  ngList PlatformN
1efa0 61 6d 65 73 0d 0a 20 20 20 20 20 20 20 20 20 20  ames..          
1efb0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
1efc0 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72       get { retur
1efd0 6e 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 73 3b  n platformNames;
1efe0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
1eff0 20 20 20 20 73 65 74 20 7b 20 70 6c 61 74 66 6f      set { platfo
1f000 72 6d 4e 61 6d 65 73 20 3d 20 76 61 6c 75 65 3b  rmNames = value;
1f010 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
1f020 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  }..            #
1f030 65 6e 64 72 65 67 69 6f 6e 0d 0a 20 20 20 20 20  endregion..     
1f040 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65     }..        #e
1f050 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20  ndregion....    
1f060 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
1f070 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f080 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f090 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f0a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
1f0b0 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 56         #region V
1f0c0 73 4c 69 73 74 20 43 6c 61 73 73 0d 0a 20 20 20  sList Class..   
1f0d0 20 20 20 20 20 70 72 69 76 61 74 65 20 73 65 61       private sea
1f0e0 6c 65 64 20 63 6c 61 73 73 20 56 73 4c 69 73 74  led class VsList
1f0f0 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
1f100 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e           #region
1f110 20 50 75 62 6c 69 63 20 43 6f 6e 73 74 72 75 63   Public Construc
1f120 74 6f 72 73 0d 0a 20 20 20 20 20 20 20 20 20 20  tors..          
1f130 20 20 70 75 62 6c 69 63 20 56 73 4c 69 73 74 28    public VsList(
1f140 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
1f150 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1f160 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e    // do nothing.
1f170 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
1f180 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e  .            #en
1f190 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
1f1a0 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
1f1b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f1c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f1d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f1e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
1f1f0 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f            #regio
1f200 6e 20 50 75 62 6c 69 63 20 50 72 6f 70 65 72 74  n Public Propert
1f210 69 65 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ies..           
1f220 20 70 72 69 76 61 74 65 20 4d 6f 63 6b 52 65 67   private MockReg
1f230 69 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79  istryKey rootKey
1f240 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ;..            p
1f250 75 62 6c 69 63 20 4d 6f 63 6b 52 65 67 69 73 74  ublic MockRegist
1f260 72 79 4b 65 79 20 52 6f 6f 74 4b 65 79 0d 0a 20  ryKey RootKey.. 
1f270 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
1f280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65                ge
1f290 74 20 7b 20 72 65 74 75 72 6e 20 72 6f 6f 74 4b  t { return rootK
1f2a0 65 79 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  ey; }..         
1f2b0 20 20 20 20 20 20 20 73 65 74 20 7b 20 72 6f 6f         set { roo
1f2c0 74 4b 65 79 20 3d 20 76 61 6c 75 65 3b 20 7d 0d  tKey = value; }.
1f2d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
1f2e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
1f2f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f300 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f310 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
1f340 20 70 72 69 76 61 74 65 20 56 65 72 73 69 6f 6e   private Version
1f350 4c 69 73 74 20 76 65 72 73 69 6f 6e 73 3b 0d 0a  List versions;..
1f360 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
1f370 69 63 20 56 65 72 73 69 6f 6e 4c 69 73 74 20 56  ic VersionList V
1f380 65 72 73 69 6f 6e 73 0d 0a 20 20 20 20 20 20 20  ersions..       
1f390 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
1f3a0 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65          get { re
1f3b0 74 75 72 6e 20 76 65 72 73 69 6f 6e 73 3b 20 7d  turn versions; }
1f3c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1f3d0 20 20 73 65 74 20 7b 20 76 65 72 73 69 6f 6e 73    set { versions
1f3e0 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20   = value; }..   
1f3f0 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
1f400 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
1f410 6f 6e 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20  on..        }.. 
1f420 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f         #endregio
1f430 6e 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72  n..        #endr
1f440 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20  egion....       
1f450 20 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 2f 2f 2f  ////////////////
1f480 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f490 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
1f4a0 20 20 20 20 23 72 65 67 69 6f 6e 20 50 72 69 76      #region Priv
1f4b0 61 74 65 20 43 6f 6e 73 74 61 6e 74 20 44 61 74  ate Constant Dat
1f4c0 61 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  a..        priva
1f4d0 74 65 20 63 6f 6e 73 74 20 73 74 72 69 6e 67 20  te const string 
1f4e0 43 6f 72 65 46 69 6c 65 4e 61 6d 65 20 3d 20 22  CoreFileName = "
1f4f0 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69  System.Data.SQLi
1f500 74 65 2e 64 6c 6c 22 3b 0d 0a 20 20 20 20 20 20  te.dll";..      
1f510 20 20 70 72 69 76 61 74 65 20 63 6f 6e 73 74 20    private const 
1f520 73 74 72 69 6e 67 20 4c 69 6e 71 46 69 6c 65 4e  string LinqFileN
1f530 61 6d 65 20 3d 20 22 53 79 73 74 65 6d 2e 44 61  ame = "System.Da
1f540 74 61 2e 53 51 4c 69 74 65 2e 4c 69 6e 71 2e 64  ta.SQLite.Linq.d
1f550 6c 6c 22 3b 0d 0a 20 20 20 20 20 20 20 20 70 72  ll";..        pr
1f560 69 76 61 74 65 20 63 6f 6e 73 74 20 73 74 72 69  ivate const stri
1f570 6e 67 20 44 65 73 69 67 6e 65 72 46 69 6c 65 4e  ng DesignerFileN
1f580 61 6d 65 20 3d 20 22 53 51 4c 69 74 65 2e 44 65  ame = "SQLite.De
1f590 73 69 67 6e 65 72 2e 64 6c 6c 22 3b 0d 0a 20 20  signer.dll";..  
1f5a0 20 20 20 20 20 20 70 72 69 76 61 74 65 20 63 6f        private co
1f5b0 6e 73 74 20 73 74 72 69 6e 67 20 50 72 6f 76 69  nst string Provi
1f5c0 64 65 72 4e 61 6d 65 20 3d 20 22 53 51 4c 69 74  derName = "SQLit
1f5d0 65 20 44 61 74 61 20 50 72 6f 76 69 64 65 72 22  e Data Provider"
1f5e0 3b 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  ;..        priva
1f5f0 74 65 20 63 6f 6e 73 74 20 73 74 72 69 6e 67 20  te const string 
1f600 50 72 6f 6a 65 63 74 4e 61 6d 65 20 3d 20 22 53  ProjectName = "S
1f610 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74  ystem.Data.SQLit
1f620 65 22 3b 0d 0a 20 20 20 20 20 20 20 20 70 72 69  e";..        pri
1f630 76 61 74 65 20 63 6f 6e 73 74 20 73 74 72 69 6e  vate const strin
1f640 67 20 4c 65 67 61 63 79 50 72 6f 6a 65 63 74 4e  g LegacyProjectN
1f650 61 6d 65 20 3d 20 22 53 51 4c 69 74 65 22 3b 0d  ame = "SQLite";.
1f660 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
1f670 20 63 6f 6e 73 74 20 73 74 72 69 6e 67 20 49 6e   const string In
1f680 76 61 72 69 61 6e 74 4e 61 6d 65 20 3d 20 22 53  variantName = "S
1f690 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74  ystem.Data.SQLit
1f6a0 65 22 3b 0d 0a 20 20 20 20 20 20 20 20 70 72 69  e";..        pri
1f6b0 76 61 74 65 20 63 6f 6e 73 74 20 73 74 72 69 6e  vate const strin
1f6c0 67 20 46 61 63 74 6f 72 79 54 79 70 65 4e 61 6d  g FactoryTypeNam
1f6d0 65 20 3d 20 22 53 79 73 74 65 6d 2e 44 61 74 61  e = "System.Data
1f6e0 2e 53 51 4c 69 74 65 2e 53 51 4c 69 74 65 46 61  .SQLite.SQLiteFa
1f6f0 63 74 6f 72 79 22 3b 0d 0a 20 20 20 20 20 20 20  ctory";..       
1f700 20 70 72 69 76 61 74 65 20 63 6f 6e 73 74 20 73   private const s
1f710 74 72 69 6e 67 20 44 65 73 63 72 69 70 74 69 6f  tring Descriptio
1f720 6e 20 3d 20 22 2e 4e 45 54 20 46 72 61 6d 65 77  n = ".NET Framew
1f730 6f 72 6b 20 44 61 74 61 20 50 72 6f 76 69 64 65  ork Data Provide
1f740 72 20 66 6f 72 20 53 51 4c 69 74 65 22 3b 0d 0a  r for SQLite";..
1f750 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
1f760 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f770 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f780 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f790 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f7a0 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69  /....        pri
1f7b0 76 61 74 65 20 63 6f 6e 73 74 20 73 74 72 69 6e  vate const strin
1f7c0 67 20 43 4c 52 76 32 49 6d 61 67 65 52 75 6e 74  g CLRv2ImageRunt
1f7d0 69 6d 65 56 65 72 73 69 6f 6e 20 3d 20 22 76 32  imeVersion = "v2
1f7e0 2e 30 2e 35 30 37 32 37 22 3b 0d 0a 20 20 20 20  .0.50727";..    
1f7f0 20 20 20 20 70 72 69 76 61 74 65 20 63 6f 6e 73      private cons
1f800 74 20 73 74 72 69 6e 67 20 43 4c 52 76 34 49 6d  t string CLRv4Im
1f810 61 67 65 52 75 6e 74 69 6d 65 56 65 72 73 69 6f  ageRuntimeVersio
1f820 6e 20 3d 20 22 76 34 2e 30 2e 33 30 33 31 39 22  n = "v4.0.30319"
1f830 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ;....        ///
1f840 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f850 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f860 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f870 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f880 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
1f890 70 72 69 76 61 74 65 20 63 6f 6e 73 74 20 73 74  private const st
1f8a0 72 69 6e 67 20 4e 61 6d 65 41 6e 64 56 61 6c 75  ring NameAndValu
1f8b0 65 46 6f 72 6d 61 74 20 3d 20 22 7b 30 7d 3a 20  eFormat = "{0}: 
1f8c0 7b 31 7d 22 3b 0d 0a 20 20 20 20 20 20 20 20 70  {1}";..        p
1f8d0 72 69 76 61 74 65 20 63 6f 6e 73 74 20 73 74 72  rivate const str
1f8e0 69 6e 67 20 4c 6f 67 46 69 6c 65 53 75 66 66 69  ing LogFileSuffi
1f8f0 78 20 3d 20 22 2e 6c 6f 67 22 3b 0d 0a 0d 0a 20  x = ".log";.... 
1f900 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
1f910 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f920 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f930 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f940 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
1f950 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
1f960 65 20 63 6f 6e 73 74 20 73 74 72 69 6e 67 20 52  e const string R
1f970 6f 6f 74 4b 65 79 4e 61 6d 65 20 3d 20 22 53 6f  ootKeyName = "So
1f980 66 74 77 61 72 65 22 3b 0d 0a 20 20 20 20 20 20  ftware";..      
1f990 20 20 70 72 69 76 61 74 65 20 63 6f 6e 73 74 20    private const 
1f9a0 73 74 72 69 6e 67 20 57 6f 77 36 34 53 75 62 4b  string Wow64SubK
1f9b0 65 79 4e 61 6d 65 20 3d 20 22 57 6f 77 36 34 33  eyName = "Wow643
1f9c0 32 4e 6f 64 65 22 3b 0d 0a 0d 0a 20 20 20 20 20  2Node";....     
1f9d0 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
1f9e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f9f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fa00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fa10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
1fa20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
1fa30 20 20 2f 2f 20 4e 4f 54 45 3a 20 54 68 65 20 2e    // NOTE: The .
1fa40 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b 20 68 61  NET Framework ha
1fa50 73 20 62 6f 74 68 20 33 32 2d 62 69 74 20 61 6e  s both 32-bit an
1fa60 64 20 36 34 2d 62 69 74 20 65 64 69 74 69 6f 6e  d 64-bit edition
1fa70 73 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 0d 0a  s...        //..
1fa80 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
1fa90 73 74 61 74 69 63 20 72 65 61 64 6f 6e 6c 79 20  static readonly 
1faa0 62 6f 6f 6c 20 4e 65 74 46 78 49 73 33 32 42 69  bool NetFxIs32Bi
1fab0 74 4f 6e 6c 79 20 3d 20 66 61 6c 73 65 3b 0d 0a  tOnly = false;..
1fac0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
1fad0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fae0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1faf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fb00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fb10 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 0d  /....        //.
1fb20 0a 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45  .        // NOTE
1fb30 3a 20 46 6f 72 20 6e 6f 77 2c 20 56 69 73 75 61  : For now, Visua
1fb40 6c 20 53 74 75 64 69 6f 20 69 73 20 61 6c 77 61  l Studio is alwa
1fb50 79 73 20 61 20 33 32 2d 62 69 74 20 61 70 70 6c  ys a 32-bit appl
1fb60 69 63 61 74 69 6f 6e 2e 0d 0a 20 20 20 20 20 20  ication...      
1fb70 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 70 72    //..        pr
1fb80 69 76 61 74 65 20 73 74 61 74 69 63 20 72 65 61  ivate static rea
1fb90 64 6f 6e 6c 79 20 62 6f 6f 6c 20 56 73 49 73 33  donly bool VsIs3
1fba0 32 42 69 74 4f 6e 6c 79 20 3d 20 74 72 75 65 3b  2BitOnly = true;
1fbb0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
1fbc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fbd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fbe0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fbf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fc00 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70  ///....        p
1fc10 72 69 76 61 74 65 20 73 74 61 74 69 63 20 72 65  rivate static re
1fc20 61 64 6f 6e 6c 79 20 73 74 72 69 6e 67 20 56 73  adonly string Vs
1fc30 49 64 46 6f 72 6d 61 74 20 3d 20 22 42 22 3b 0d  IdFormat = "B";.
1fc40 0a 0d 0a 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fc80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fc90 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72  //....        pr
1fca0 69 76 61 74 65 20 73 74 61 74 69 63 20 72 65 61  ivate static rea
1fcb0 64 6f 6e 6c 79 20 73 74 72 69 6e 67 20 58 50 61  donly string XPa
1fcc0 74 68 46 6f 72 41 64 64 45 6c 65 6d 65 6e 74 20  thForAddElement 
1fcd0 3d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22  =..            "
1fce0 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2f 73 79  configuration/sy
1fcf0 73 74 65 6d 2e 64 61 74 61 2f 44 62 50 72 6f 76  stem.data/DbProv
1fd00 69 64 65 72 46 61 63 74 6f 72 69 65 73 2f 61 64  iderFactories/ad
1fd10 64 5b 40 69 6e 76 61 72 69 61 6e 74 3d 5c 22 7b  d[@invariant=\"{
1fd20 30 7d 5c 22 5d 22 3b 0d 0a 0d 0a 20 20 20 20 20  0}\"]";....     
1fd30 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69     private stati
1fd40 63 20 72 65 61 64 6f 6e 6c 79 20 73 74 72 69 6e  c readonly strin
1fd50 67 20 58 50 61 74 68 46 6f 72 52 65 6d 6f 76 65  g XPathForRemove
1fd60 45 6c 65 6d 65 6e 74 20 3d 0d 0a 20 20 20 20 20  Element =..     
1fd70 20 20 20 20 20 20 20 22 63 6f 6e 66 69 67 75 72         "configur
1fd80 61 74 69 6f 6e 2f 73 79 73 74 65 6d 2e 64 61 74  ation/system.dat
1fd90 61 2f 44 62 50 72 6f 76 69 64 65 72 46 61 63 74  a/DbProviderFact
1fda0 6f 72 69 65 73 2f 72 65 6d 6f 76 65 5b 40 69 6e  ories/remove[@in
1fdb0 76 61 72 69 61 6e 74 3d 5c 22 7b 30 7d 5c 22 5d  variant=\"{0}\"]
1fdc0 22 3b 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64  ";..        #end
1fdd0 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20  region....      
1fde0 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
1fdf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fe00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fe10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fe20 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
1fe30 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 72 69       #region Pri
1fe40 76 61 74 65 20 53 74 61 74 69 63 20 44 61 74 61  vate Static Data
1fe50 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
1fe60 65 20 73 74 61 74 69 63 20 41 73 73 65 6d 62 6c  e static Assembl
1fe70 79 20 74 68 69 73 41 73 73 65 6d 62 6c 79 20 3d  y thisAssembly =
1fe80 20 41 73 73 65 6d 62 6c 79 2e 47 65 74 45 78 65   Assembly.GetExe
1fe90 63 75 74 69 6e 67 41 73 73 65 6d 62 6c 79 28 29  cutingAssembly()
1fea0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69  ;....        pri
1feb0 76 61 74 65 20 73 74 61 74 69 63 20 73 74 72 69  vate static stri
1fec0 6e 67 20 74 72 61 63 65 43 61 74 65 67 6f 72 79  ng traceCategory
1fed0 20 3d 20 50 61 74 68 2e 47 65 74 46 69 6c 65 4e   = Path.GetFileN
1fee0 61 6d 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ame(..          
1fef0 20 20 74 68 69 73 41 73 73 65 6d 62 6c 79 2e 4c    thisAssembly.L
1ff00 6f 63 61 74 69 6f 6e 29 3b 20 2f 2a 20 4e 4f 54  ocation); /* NOT
1ff10 45 3a 20 53 61 6d 65 20 66 6f 72 20 64 65 62 75  E: Same for debu
1ff20 67 20 61 6e 64 20 74 72 61 63 65 2e 20 2a 2f 0d  g and trace. */.
1ff30 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  ...        priva
1ff40 74 65 20 73 74 61 74 69 63 20 54 72 61 63 65 43  te static TraceC
1ff50 61 6c 6c 62 61 63 6b 20 64 65 62 75 67 43 61 6c  allback debugCal
1ff60 6c 62 61 63 6b 20 3d 20 41 70 70 44 65 62 75 67  lback = AppDebug
1ff70 3b 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  ;..        priva
1ff80 74 65 20 73 74 61 74 69 63 20 54 72 61 63 65 43  te static TraceC
1ff90 61 6c 6c 62 61 63 6b 20 74 72 61 63 65 43 61 6c  allback traceCal
1ffa0 6c 62 61 63 6b 20 3d 20 41 70 70 54 72 61 63 65  lback = AppTrace
1ffb0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ;....        ///
1ffc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ffd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ffe0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fff0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20000 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
20010 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 69  private static i
20020 6e 74 20 66 69 6c 65 73 43 72 65 61 74 65 64 20  nt filesCreated 
20030 3d 20 30 3b 0d 0a 20 20 20 20 20 20 20 20 70 72  = 0;..        pr
20040 69 76 61 74 65 20 73 74 61 74 69 63 20 69 6e 74  ivate static int
20050 20 66 69 6c 65 73 4d 6f 64 69 66 69 65 64 20 3d   filesModified =
20060 20 30 3b 0d 0a 20 20 20 20 20 20 20 20 70 72 69   0;..        pri
20070 76 61 74 65 20 73 74 61 74 69 63 20 69 6e 74 20  vate static int 
20080 66 69 6c 65 73 44 65 6c 65 74 65 64 20 3d 20 30  filesDeleted = 0
20090 3b 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72  ;..        #endr
200a0 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20  egion....       
200b0 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
200c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
200d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
200e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
200f0 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
20100 20 20 20 20 23 72 65 67 69 6f 6e 20 54 72 61 63      #region Trac
20110 65 20 48 61 6e 64 6c 69 6e 67 0d 0a 20 20 20 20  e Handling..    
20120 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74      private stat
20130 69 63 20 73 74 72 69 6e 67 20 47 65 74 4c 6f 67  ic string GetLog
20140 46 69 6c 65 4e 61 6d 65 28 0d 0a 20 20 20 20 20  FileName(..     
20150 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 74 79         string ty
20160 70 65 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20  peName..        
20170 20 20 20 20 29 20 2f 2a 20 74 68 72 6f 77 20 2a      ) /* throw *
20180 2f 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  /..        {..  
20190 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
201a0 20 66 69 6c 65 4e 61 6d 65 20 3d 20 50 61 74 68   fileName = Path
201b0 2e 47 65 74 54 65 6d 70 46 69 6c 65 4e 61 6d 65  .GetTempFileName
201c0 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ();..           
201d0 20 73 74 72 69 6e 67 20 64 69 72 65 63 74 6f 72   string director
201e0 79 20 3d 20 50 61 74 68 2e 47 65 74 44 69 72 65  y = Path.GetDire
201f0 63 74 6f 72 79 4e 61 6d 65 28 66 69 6c 65 4e 61  ctoryName(fileNa
20200 6d 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  me);..          
20210 20 20 73 74 72 69 6e 67 20 66 69 6c 65 4e 61 6d    string fileNam
20220 65 4f 6e 6c 79 20 3d 20 50 61 74 68 2e 47 65 74  eOnly = Path.Get
20230 46 69 6c 65 4e 61 6d 65 57 69 74 68 6f 75 74 45  FileNameWithoutE
20240 78 74 65 6e 73 69 6f 6e 28 66 69 6c 65 4e 61 6d  xtension(fileNam
20250 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e);....         
20260 20 20 20 73 74 72 69 6e 67 20 6e 65 77 46 69 6c     string newFil
20270 65 4e 61 6d 65 20 3d 20 50 61 74 68 2e 43 6f 6d  eName = Path.Com
20280 62 69 6e 65 28 64 69 72 65 63 74 6f 72 79 2c 20  bine(directory, 
20290 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
202a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
202b0 22 7b 30 7d 7b 31 7d 7b 32 7d 22 2c 20 74 72 61  "{0}{1}{2}", tra
202c0 63 65 43 61 74 65 67 6f 72 79 2c 20 21 53 74 72  ceCategory, !Str
202d0 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74  ing.IsNullOrEmpt
202e0 79 28 74 79 70 65 4e 61 6d 65 29 20 3f 0d 0a 20  y(typeName) ?.. 
202f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20300 20 20 20 22 2e 22 20 2b 20 74 79 70 65 4e 61 6d     "." + typeNam
20310 65 20 3a 20 53 74 72 69 6e 67 2e 45 6d 70 74 79  e : String.Empty
20320 2c 20 22 2e 22 20 2b 20 66 69 6c 65 4e 61 6d 65  , "." + fileName
20330 4f 6e 6c 79 20 2b 0d 0a 20 20 20 20 20 20 20 20  Only +..        
20340 20 20 20 20 20 20 20 20 20 20 20 20 4c 6f 67 46              LogF
20350 69 6c 65 53 75 66 66 69 78 29 29 3b 0d 0a 0d 0a  ileSuffix));....
20360 20 20 20 20 20 20 20 20 20 20 20 20 46 69 6c 65              File
20370 2e 4d 6f 76 65 28 66 69 6c 65 4e 61 6d 65 2c 20  .Move(fileName, 
20380 6e 65 77 46 69 6c 65 4e 61 6d 65 29 3b 0d 0a 0d  newFileName);...
20390 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
203a0 75 72 6e 20 6e 65 77 46 69 6c 65 4e 61 6d 65 3b  urn newFileName;
203b0 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
203c0 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
203d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
203e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
203f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20400 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
20410 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
20420 65 20 73 74 61 74 69 63 20 76 6f 69 64 20 41 70  e static void Ap
20430 70 44 65 62 75 67 28 0d 0a 20 20 20 20 20 20 20  pDebug(..       
20440 20 20 20 20 20 73 74 72 69 6e 67 20 6d 65 73 73       string mess
20450 61 67 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  age,..          
20460 20 20 73 74 72 69 6e 67 20 63 61 74 65 67 6f 72    string categor
20470 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29  y..            )
20480 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
20490 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70           TraceOp
204a0 73 2e 44 65 62 75 67 43 6f 72 65 28 53 74 72 69  s.DebugCore(Stri
204b0 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ng.Format(..    
204c0 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
204d0 65 4f 70 73 2e 44 65 62 75 67 46 6f 72 6d 61 74  eOps.DebugFormat
204e0 2c 20 54 72 61 63 65 4f 70 73 2e 4e 65 78 74 44  , TraceOps.NextD
204f0 65 62 75 67 49 64 28 29 2c 0d 0a 20 20 20 20 20  ebugId(),..     
20500 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
20510 4f 70 73 2e 54 69 6d 65 53 74 61 6d 70 28 44 61  Ops.TimeStamp(Da
20520 74 65 54 69 6d 65 2e 55 74 63 4e 6f 77 29 2c 20  teTime.UtcNow), 
20530 6d 65 73 73 61 67 65 29 2c 20 63 61 74 65 67 6f  message), catego
20540 72 79 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  ry);..        }.
20550 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
20560 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20570 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20580 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20590 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
205a0 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72  //....        pr
205b0 69 76 61 74 65 20 73 74 61 74 69 63 20 76 6f 69  ivate static voi
205c0 64 20 41 70 70 54 72 61 63 65 28 0d 0a 20 20 20  d AppTrace(..   
205d0 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
205e0 6d 65 73 73 61 67 65 2c 0d 0a 20 20 20 20 20 20  message,..      
205f0 20 20 20 20 20 20 73 74 72 69 6e 67 20 63 61 74        string cat
20600 65 67 6f 72 79 0d 0a 20 20 20 20 20 20 20 20 20  egory..         
20610 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d     )..        {.
20620 0a 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61  .            Tra
20630 63 65 4f 70 73 2e 54 72 61 63 65 43 6f 72 65 28  ceOps.TraceCore(
20640 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
20650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20660 54 72 61 63 65 4f 70 73 2e 54 72 61 63 65 46 6f  TraceOps.TraceFo
20670 72 6d 61 74 2c 20 54 72 61 63 65 4f 70 73 2e 4e  rmat, TraceOps.N
20680 65 78 74 54 72 61 63 65 49 64 28 29 2c 0d 0a 20  extTraceId(),.. 
20690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
206a0 72 61 63 65 4f 70 73 2e 54 69 6d 65 53 74 61 6d  raceOps.TimeStam
206b0 70 28 44 61 74 65 54 69 6d 65 2e 55 74 63 4e 6f  p(DateTime.UtcNo
206c0 77 29 2c 20 6d 65 73 73 61 67 65 29 2c 20 63 61  w), message), ca
206d0 74 65 67 6f 72 79 29 3b 0d 0a 20 20 20 20 20 20  tegory);..      
206e0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e    }..        #en
206f0 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
20700 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
20710 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20720 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20730 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20740 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
20750 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 47 65        #region Ge
20760 6e 65 72 69 63 20 50 6c 61 74 66 6f 72 6d 20 48  neric Platform H
20770 61 6e 64 6c 69 6e 67 0d 0a 20 20 20 20 20 20 20  andling..       
20780 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
20790 62 6f 6f 6c 20 49 73 36 34 42 69 74 50 72 6f 63  bool Is64BitProc
207a0 65 73 73 28 29 0d 0a 20 20 20 20 20 20 20 20 7b  ess()..        {
207b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
207c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
207d0 20 4e 4f 54 45 3a 20 52 65 74 75 72 6e 73 20 74   NOTE: Returns t
207e0 72 75 65 20 69 66 20 74 68 65 20 63 75 72 72 65  rue if the curre
207f0 6e 74 20 70 72 6f 63 65 73 73 20 69 73 20 36 34  nt process is 64
20800 2d 62 69 74 2e 20 20 49 66 20 74 68 69 73 0d 0a  -bit.  If this..
20810 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
20820 20 20 20 20 20 69 73 20 74 72 75 65 2c 20 77 65       is true, we
20830 20 2a 6b 6e 6f 77 2a 20 74 68 61 74 20 77 65 20   *know* that we 
20840 6d 75 73 74 20 62 65 20 72 75 6e 6e 69 6e 67 20  must be running 
20850 6f 6e 20 61 20 36 34 2d 62 69 74 0d 0a 20 20 20  on a 64-bit..   
20860 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
20870 20 20 6f 70 65 72 61 74 69 6e 67 20 73 79 73 74    operating syst
20880 65 6d 20 61 73 20 77 65 6c 6c 2e 20 20 48 6f 77  em as well.  How
20890 65 76 65 72 2c 20 69 66 20 74 68 69 73 20 69 73  ever, if this is
208a0 20 66 61 6c 73 65 2c 20 77 65 0d 0a 20 20 20 20   false, we..    
208b0 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
208c0 20 64 6f 20 6e 6f 74 20 6e 65 63 65 73 73 61 72   do not necessar
208d0 69 6c 79 20 6b 6e 6f 77 20 74 68 61 74 20 77 65  ily know that we
208e0 20 61 72 65 20 72 75 6e 6e 69 6e 67 20 6f 6e 20   are running on 
208f0 61 20 33 32 2d 62 69 74 0d 0a 20 20 20 20 20 20  a 32-bit..      
20900 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 6f        //       o
20910 70 65 72 61 74 69 6e 67 20 73 79 73 74 65 6d 2c  perating system,
20920 20 64 75 65 20 74 6f 20 57 6f 57 36 34 20 28 57   due to WoW64 (W
20930 69 6e 33 32 2d 6f 6e 2d 57 69 6e 36 34 29 2c 20  in32-on-Win64), 
20940 65 74 63 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  etc...          
20950 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
20960 20 20 72 65 74 75 72 6e 20 28 49 6e 74 50 74 72    return (IntPtr
20970 2e 53 69 7a 65 20 3d 3d 20 73 69 7a 65 6f 66 28  .Size == sizeof(
20980 6c 6f 6e 67 29 29 3b 20 2f 2f 20 4e 4f 54 45 3a  long)); // NOTE:
20990 20 50 6f 69 6e 74 65 72 20 69 73 20 36 34 2d 62   Pointer is 64-b
209a0 69 74 73 3f 0d 0a 20 20 20 20 20 20 20 20 7d 0d  its?..        }.
209b0 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
209c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
209d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
209e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
209f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20a00 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72  //....        pr
20a10 69 76 61 74 65 20 73 74 61 74 69 63 20 73 74 72  ivate static str
20a20 69 6e 67 20 47 65 74 52 6f 6f 74 4b 65 79 4e 61  ing GetRootKeyNa
20a30 6d 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me(..           
20a40 20 62 6f 6f 6c 20 77 6f 77 36 34 0d 0a 20 20 20   bool wow64..   
20a50 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
20a60 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
20a70 20 20 20 72 65 74 75 72 6e 20 53 74 72 69 6e 67     return String
20a80 2e 46 6f 72 6d 61 74 28 22 7b 30 7d 7b 31 7d 22  .Format("{0}{1}"
20a90 2c 20 52 6f 6f 74 4b 65 79 4e 61 6d 65 2c 0d 0a  , RootKeyName,..
20aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20ab0 77 6f 77 36 34 20 26 26 20 49 73 36 34 42 69 74  wow64 && Is64Bit
20ac0 50 72 6f 63 65 73 73 28 29 20 3f 0d 0a 20 20 20  Process() ?..   
20ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20ae0 20 22 5c 5c 22 20 2b 20 57 6f 77 36 34 53 75 62   "\\" + Wow64Sub
20af0 4b 65 79 4e 61 6d 65 20 3a 20 53 74 72 69 6e 67  KeyName : String
20b00 2e 45 6d 70 74 79 29 3b 0d 0a 20 20 20 20 20 20  .Empty);..      
20b10 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e    }..        #en
20b20 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
20b30 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
20b40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20b50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20b60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20b70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
20b80 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 47 65        #region Ge
20b90 6e 65 72 69 63 20 53 74 72 69 6e 67 20 48 61 6e  neric String Han
20ba0 64 6c 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 70  dling..        p
20bb0 72 69 76 61 74 65 20 73 74 61 74 69 63 20 73 74  rivate static st
20bc0 72 69 6e 67 20 46 6f 72 44 69 73 70 6c 61 79 28  ring ForDisplay(
20bd0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6f 62  ..            ob
20be0 6a 65 63 74 20 76 61 6c 75 65 0d 0a 20 20 20 20  ject value..    
20bf0 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
20c00 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
20c10 20 20 69 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e    if (value == n
20c20 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
20c30 20 20 20 20 20 20 72 65 74 75 72 6e 20 22 3c 6e        return "<n
20c40 75 6c 6c 3e 22 3b 0d 0a 0d 0a 20 20 20 20 20 20  ull>";....      
20c50 20 20 20 20 20 20 73 74 72 69 6e 67 20 72 65 73        string res
20c60 75 6c 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ult;..          
20c70 20 20 54 79 70 65 20 74 79 70 65 20 3d 20 76 61    Type type = va
20c80 6c 75 65 2e 47 65 74 54 79 70 65 28 29 3b 0d 0a  lue.GetType();..
20c90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
20ca0 20 28 74 79 70 65 20 3d 3d 20 74 79 70 65 6f 66   (type == typeof
20cb0 28 58 6d 6c 45 6c 65 6d 65 6e 74 29 29 0d 0a 20  (XmlElement)).. 
20cc0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
20cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 58 6d                Xm
20ce0 6c 45 6c 65 6d 65 6e 74 20 65 6c 65 6d 65 6e 74  lElement element
20cf0 20 3d 20 28 58 6d 6c 45 6c 65 6d 65 6e 74 29 76   = (XmlElement)v
20d00 61 6c 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  alue;....       
20d10 20 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 20           result 
20d20 3d 20 65 6c 65 6d 65 6e 74 2e 4f 75 74 65 72 58  = element.OuterX
20d30 6d 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ml;..           
20d40 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
20d50 65 6c 73 65 20 69 66 20 28 74 79 70 65 20 3d 3d  else if (type ==
20d60 20 74 79 70 65 6f 66 28 56 65 72 73 69 6f 6e 29   typeof(Version)
20d70 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
20d80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
20d90 20 20 56 65 72 73 69 6f 6e 20 76 65 72 73 69 6f    Version versio
20da0 6e 20 3d 20 28 56 65 72 73 69 6f 6e 29 76 61 6c  n = (Version)val
20db0 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ue;....         
20dc0 20 20 20 20 20 20 20 72 65 73 75 6c 74 20 3d 20         result = 
20dd0 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 22 76  String.Format("v
20de0 7b 30 7d 22 2c 20 76 65 72 73 69 6f 6e 29 3b 0d  {0}", version);.
20df0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
20e00 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65              else
20e10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
20e20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
20e30 20 72 65 73 75 6c 74 20 3d 20 76 61 6c 75 65 2e   result = value.
20e40 54 6f 53 74 72 69 6e 67 28 29 3b 0d 0a 0d 0a 20  ToString();.... 
20e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
20e60 66 20 28 72 65 73 75 6c 74 2e 4c 65 6e 67 74 68  f (result.Length
20e70 20 3d 3d 20 30 29 0d 0a 20 20 20 20 20 20 20 20   == 0)..        
20e80 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
20e90 72 6e 20 22 3c 65 6d 70 74 79 3e 22 3b 0d 0a 0d  rn "<empty>";...
20ea0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
20eb0 20 72 65 73 75 6c 74 20 3d 20 53 74 72 69 6e 67   result = String
20ec0 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  .Format(..      
20ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 79                ty
20ee0 70 65 2e 49 73 53 75 62 63 6c 61 73 73 4f 66 28  pe.IsSubclassOf(
20ef0 74 79 70 65 6f 66 28 56 61 6c 75 65 54 79 70 65  typeof(ValueType
20f00 29 29 20 3f 20 22 7b 30 7d 22 20 3a 20 22 5c 22  )) ? "{0}" : "\"
20f10 7b 30 7d 5c 22 22 2c 0d 0a 20 20 20 20 20 20 20  {0}\"",..       
20f20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 73               res
20f30 75 6c 74 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ult);..         
20f40 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
20f50 20 20 20 20 72 65 74 75 72 6e 20 72 65 73 75 6c      return resul
20f60 74 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20  t;..        }.. 
20f70 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f         #endregio
20f80 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  n....        ///
20f90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20fa0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20fb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20fc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20fd0 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
20fe0 23 72 65 67 69 6f 6e 20 41 73 73 65 6d 62 6c 79  #region Assembly
20ff0 20 41 74 74 72 69 62 75 74 65 20 48 61 6e 64 6c   Attribute Handl
21000 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 70 75 62  ing..        pub
21010 6c 69 63 20 73 74 61 74 69 63 20 73 74 72 69 6e  lic static strin
21020 67 20 47 65 74 41 73 73 65 6d 62 6c 79 43 6f 6e  g GetAssemblyCon
21030 66 69 67 75 72 61 74 69 6f 6e 28 0d 0a 20 20 20  figuration(..   
21040 20 20 20 20 20 20 20 20 20 41 73 73 65 6d 62 6c           Assembl
21050 79 20 61 73 73 65 6d 62 6c 79 0d 0a 20 20 20 20  y assembly..    
21060 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
21070 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
21080 20 20 69 66 20 28 61 73 73 65 6d 62 6c 79 20 21    if (assembly !
21090 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
210a0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
210b0 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20          try..   
210c0 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
210d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
210e0 20 20 20 20 69 66 20 28 61 73 73 65 6d 62 6c 79      if (assembly
210f0 2e 49 73 44 65 66 69 6e 65 64 28 0d 0a 20 20 20  .IsDefined(..   
21100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21110 20 20 20 20 20 20 20 20 20 74 79 70 65 6f 66 28           typeof(
21120 41 73 73 65 6d 62 6c 79 43 6f 6e 66 69 67 75 72  AssemblyConfigur
21130 61 74 69 6f 6e 41 74 74 72 69 62 75 74 65 29 2c  ationAttribute),
21140 20 66 61 6c 73 65 29 29 0d 0a 20 20 20 20 20 20   false))..      
21150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
21160 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
21170 20 20 20 20 20 20 20 20 20 41 73 73 65 6d 62 6c           Assembl
21180 79 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 41 74  yConfigurationAt
21190 74 72 69 62 75 74 65 20 63 6f 6e 66 69 67 75 72  tribute configur
211a0 61 74 69 6f 6e 20 3d 0d 0a 20 20 20 20 20 20 20  ation =..       
211b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
211c0 20 20 20 20 20 28 41 73 73 65 6d 62 6c 79 43 6f       (AssemblyCo
211d0 6e 66 69 67 75 72 61 74 69 6f 6e 41 74 74 72 69  nfigurationAttri
211e0 62 75 74 65 29 0d 0a 20 20 20 20 20 20 20 20 20  bute)..         
211f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21200 20 20 20 61 73 73 65 6d 62 6c 79 2e 47 65 74 43     assembly.GetC
21210 75 73 74 6f 6d 41 74 74 72 69 62 75 74 65 73 28  ustomAttributes(
21220 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
21230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21240 20 20 74 79 70 65 6f 66 28 41 73 73 65 6d 62 6c    typeof(Assembl
21250 79 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 41 74  yConfigurationAt
21260 74 72 69 62 75 74 65 29 2c 0d 0a 20 20 20 20 20  tribute),..     
21270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21280 20 20 20 20 20 20 20 20 20 20 20 66 61 6c 73 65             false
21290 29 5b 30 5d 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  )[0];....       
212a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
212b0 20 72 65 74 75 72 6e 20 63 6f 6e 66 69 67 75 72   return configur
212c0 61 74 69 6f 6e 2e 43 6f 6e 66 69 67 75 72 61 74  ation.Configurat
212d0 69 6f 6e 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ion;..          
212e0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
212f0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
21300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21310 63 61 74 63 68 0d 0a 20 20 20 20 20 20 20 20 20  catch..         
21320 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
21330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
21340 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20   do nothing...  
21350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
21360 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
21370 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
21380 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20  turn null;..    
21390 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
213a0 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
213b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
213c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
213d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
213e0 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
213f0 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69      public stati
21400 63 20 73 74 72 69 6e 67 20 47 65 74 41 73 73 65  c string GetAsse
21410 6d 62 6c 79 54 69 74 6c 65 28 0d 0a 20 20 20 20  mblyTitle(..    
21420 20 20 20 20 20 20 20 20 41 73 73 65 6d 62 6c 79          Assembly
21430 20 61 73 73 65 6d 62 6c 79 0d 0a 20 20 20 20 20   assembly..     
21440 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
21450 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
21460 20 69 66 20 28 61 73 73 65 6d 62 6c 79 20 21 3d   if (assembly !=
21470 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
21480 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
21490 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20         try..    
214a0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
214b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
214c0 20 20 20 69 66 20 28 61 73 73 65 6d 62 6c 79 2e     if (assembly.
214d0 49 73 44 65 66 69 6e 65 64 28 0d 0a 20 20 20 20  IsDefined(..    
214e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
214f0 20 20 20 20 20 20 20 20 74 79 70 65 6f 66 28 41          typeof(A
21500 73 73 65 6d 62 6c 79 54 69 74 6c 65 41 74 74 72  ssemblyTitleAttr
21510 69 62 75 74 65 29 2c 20 66 61 6c 73 65 29 29 0d  ibute), false)).
21520 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
21530 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
21540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21550 41 73 73 65 6d 62 6c 79 54 69 74 6c 65 41 74 74  AssemblyTitleAtt
21560 72 69 62 75 74 65 20 74 69 74 6c 65 20 3d 0d 0a  ribute title =..
21570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21580 20 20 20 20 20 20 20 20 20 20 20 20 28 41 73 73              (Ass
21590 65 6d 62 6c 79 54 69 74 6c 65 41 74 74 72 69 62  emblyTitleAttrib
215a0 75 74 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ute)..          
215b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
215c0 20 20 61 73 73 65 6d 62 6c 79 2e 47 65 74 43 75    assembly.GetCu
215d0 73 74 6f 6d 41 74 74 72 69 62 75 74 65 73 28 0d  stomAttributes(.
215e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
215f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21600 20 74 79 70 65 6f 66 28 41 73 73 65 6d 62 6c 79   typeof(Assembly
21610 54 69 74 6c 65 41 74 74 72 69 62 75 74 65 29 2c  TitleAttribute),
21620 20 66 61 6c 73 65 29 5b 30 5d 3b 0d 0a 0d 0a 20   false)[0];.... 
21630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21640 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 69         return ti
21650 74 6c 65 2e 54 69 74 6c 65 3b 0d 0a 20 20 20 20  tle.Title;..    
21660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21670 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
21680 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
21690 20 20 20 20 20 20 63 61 74 63 68 0d 0a 20 20 20        catch..   
216a0 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
216b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
216c0 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e      // do nothin
216d0 67 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  g...            
216e0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
216f0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
21700 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b      return null;
21710 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..   
21720 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d       #endregion.
21730 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
21740 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21750 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21760 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21770 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21780 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72  //....        #r
21790 65 67 69 6f 6e 20 2e 4e 45 54 20 46 72 61 6d 65  egion .NET Frame
217a0 77 6f 72 6b 20 48 61 6e 64 6c 69 6e 67 0d 0a 20  work Handling.. 
217b0 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
217c0 74 61 74 69 63 20 73 74 72 69 6e 67 20 47 65 74  tatic string Get
217d0 46 72 61 6d 65 77 6f 72 6b 52 6f 6f 74 4b 65 79  FrameworkRootKey
217e0 4e 61 6d 65 28 0d 0a 20 20 20 20 20 20 20 20 20  Name(..         
217f0 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34 0d 0a 20     bool wow64.. 
21800 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
21810 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
21820 20 20 20 20 20 72 65 74 75 72 6e 20 53 74 72 69       return Stri
21830 6e 67 2e 46 6f 72 6d 61 74 28 22 7b 30 7d 5c 5c  ng.Format("{0}\\
21840 4d 69 63 72 6f 73 6f 66 74 5c 5c 2e 4e 45 54 46  Microsoft\\.NETF
21850 72 61 6d 65 77 6f 72 6b 22 2c 0d 0a 20 20 20 20  ramework",..    
21860 20 20 20 20 20 20 20 20 20 20 20 20 47 65 74 52              GetR
21870 6f 6f 74 4b 65 79 4e 61 6d 65 28 77 6f 77 36 34  ootKeyName(wow64
21880 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  ));..        }..
21890 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
218a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
218b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
218c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
218d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
218e0 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69  /....        pri
218f0 76 61 74 65 20 73 74 61 74 69 63 20 73 74 72 69  vate static stri
21900 6e 67 20 47 65 74 46 72 61 6d 65 77 6f 72 6b 4b  ng GetFrameworkK
21910 65 79 4e 61 6d 65 28 0d 0a 20 20 20 20 20 20 20  eyName(..       
21920 20 20 20 20 20 73 74 72 69 6e 67 20 66 72 61 6d       string fram
21930 65 77 6f 72 6b 4e 61 6d 65 2c 0d 0a 20 20 20 20  eworkName,..    
21940 20 20 20 20 20 20 20 20 56 65 72 73 69 6f 6e 20          Version 
21950 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e  frameworkVersion
21960 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  ,..            s
21970 74 72 69 6e 67 20 70 6c 61 74 66 6f 72 6d 4e 61  tring platformNa
21980 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me,..           
21990 20 62 6f 6f 6c 20 77 6f 77 36 34 0d 0a 20 20 20   bool wow64..   
219a0 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
219b0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
219c0 20 20 20 73 74 72 69 6e 67 20 66 6f 72 6d 61 74     string format
219d0 20 3d 20 21 53 74 72 69 6e 67 2e 49 73 4e 75 6c   = !String.IsNul
219e0 6c 4f 72 45 6d 70 74 79 28 70 6c 61 74 66 6f 72  lOrEmpty(platfor
219f0 6d 4e 61 6d 65 29 20 3f 0d 0a 20 20 20 20 20 20  mName) ?..      
21a00 20 20 20 20 20 20 20 20 20 20 22 7b 30 7d 5c 5c            "{0}\\
21a10 4d 69 63 72 6f 73 6f 66 74 5c 5c 7b 31 7d 5c 5c  Microsoft\\{1}\\
21a20 76 7b 32 7d 5c 5c 7b 33 7d 22 20 3a 0d 0a 20 20  v{2}\\{3}" :..  
21a30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 7b                "{
21a40 30 7d 5c 5c 4d 69 63 72 6f 73 6f 66 74 5c 5c 7b  0}\\Microsoft\\{
21a50 31 7d 5c 5c 76 7b 32 7d 22 3b 0d 0a 0d 0a 20 20  1}\\v{2}";....  
21a60 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
21a70 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 66   String.Format(f
21a80 6f 72 6d 61 74 2c 20 47 65 74 52 6f 6f 74 4b 65  ormat, GetRootKe
21a90 79 4e 61 6d 65 28 77 6f 77 36 34 29 2c 0d 0a 20  yName(wow64),.. 
21aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66                 f
21ab0 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c 20 66 72  rameworkName, fr
21ac0 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 2c 20  ameworkVersion, 
21ad0 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 29 3b 0d 0a  platformName);..
21ae0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
21af0 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
21b00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21b10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21b20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21b30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
21b40 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
21b50 73 74 61 74 69 63 20 73 74 72 69 6e 67 20 47 65  static string Ge
21b60 74 49 6d 61 67 65 52 75 6e 74 69 6d 65 56 65 72  tImageRuntimeVer
21b70 73 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20  sion(..         
21b80 20 20 20 73 74 72 69 6e 67 20 66 69 6c 65 4e 61     string fileNa
21b90 6d 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  me..            
21ba0 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
21bb0 20 20 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20            try.. 
21bc0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
21bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 41 73                As
21be0 73 65 6d 62 6c 79 20 61 73 73 65 6d 62 6c 79 20  sembly assembly 
21bf0 3d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  =..             
21c00 20 20 20 20 20 20 20 41 73 73 65 6d 62 6c 79 2e         Assembly.
21c10 52 65 66 6c 65 63 74 69 6f 6e 4f 6e 6c 79 4c 6f  ReflectionOnlyLo
21c20 61 64 46 72 6f 6d 28 66 69 6c 65 4e 61 6d 65 29  adFrom(fileName)
21c30 3b 20 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a 0d  ; /* throw */...
21c40 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
21c50 20 69 66 20 28 61 73 73 65 6d 62 6c 79 20 21 3d   if (assembly !=
21c60 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
21c70 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
21c80 72 6e 20 61 73 73 65 6d 62 6c 79 2e 49 6d 61 67  rn assembly.Imag
21c90 65 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 3b  eRuntimeVersion;
21ca0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
21cb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 61 74  .            cat
21cc0 63 68 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ch..            
21cd0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
21ce0 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67     // do nothing
21cf0 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ...            }
21d00 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
21d10 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 20 20  return null;..  
21d20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
21d30 20 20 20 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 2f 2f 0d 0a 0d 0a 20 20  //////////....  
21d80 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74        private st
21d90 61 74 69 63 20 73 74 72 69 6e 67 20 47 65 74 46  atic string GetF
21da0 72 61 6d 65 77 6f 72 6b 44 69 72 65 63 74 6f 72  rameworkDirector
21db0 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y(..            
21dc0 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20  MockRegistryKey 
21dd0 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20 20 20 20  rootKey,..      
21de0 20 20 20 20 20 20 56 65 72 73 69 6f 6e 20 66 72        Version fr
21df0 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 2c 0d  ameworkVersion,.
21e00 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f  .            boo
21e10 6c 20 77 6f 77 36 34 2c 0d 0a 20 20 20 20 20 20  l wow64,..      
21e20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49        bool whatI
21e30 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  f,..            
21e40 62 6f 6f 6c 20 76 65 72 62 6f 73 65 0d 0a 20 20  bool verbose..  
21e50 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
21e60 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
21e70 20 20 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52      using (MockR
21e80 65 67 69 73 74 72 79 4b 65 79 20 6b 65 79 20 3d  egistryKey key =
21e90 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e   RegistryHelper.
21ea0 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20  OpenSubKey(..   
21eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21ec0 20 72 6f 6f 74 4b 65 79 2c 20 47 65 74 46 72 61   rootKey, GetFra
21ed0 6d 65 77 6f 72 6b 52 6f 6f 74 4b 65 79 4e 61 6d  meworkRootKeyNam
21ee0 65 28 77 6f 77 36 34 29 2c 20 66 61 6c 73 65 2c  e(wow64), false,
21ef0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
21f00 20 20 20 20 20 20 77 68 61 74 49 66 2c 20 76 65        whatIf, ve
21f10 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 20  rbose))..       
21f20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
21f30 20 20 20 20 20 20 20 20 69 66 20 28 6b 65 79 20          if (key 
21f40 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
21f50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
21f60 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20  turn null;....  
21f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6f 62                ob
21f80 6a 65 63 74 20 76 61 6c 75 65 20 3d 20 52 65 67  ject value = Reg
21f90 69 73 74 72 79 48 65 6c 70 65 72 2e 47 65 74 56  istryHelper.GetV
21fa0 61 6c 75 65 28 0d 0a 20 20 20 20 20 20 20 20 20  alue(..         
21fb0 20 20 20 20 20 20 20 20 20 20 20 6b 65 79 2c 20             key, 
21fc0 22 49 6e 73 74 61 6c 6c 52 6f 6f 74 22 2c 20 6e  "InstallRoot", n
21fd0 75 6c 6c 2c 20 77 68 61 74 49 66 2c 20 76 65 72  ull, whatIf, ver
21fe0 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  bose);....      
21ff0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21 28            if (!(
22000 76 61 6c 75 65 20 69 73 20 73 74 72 69 6e 67 29  value is string)
22010 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
22020 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 75         return nu
22030 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ll;....         
22040 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 50 61         return Pa
22050 74 68 2e 43 6f 6d 62 69 6e 65 28 0d 0a 20 20 20  th.Combine(..   
22060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22070 20 28 73 74 72 69 6e 67 29 76 61 6c 75 65 2c 20   (string)value, 
22080 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 22 76  String.Format("v
22090 7b 30 7d 22 2c 20 66 72 61 6d 65 77 6f 72 6b 56  {0}", frameworkV
220a0 65 72 73 69 6f 6e 29 29 3b 0d 0a 20 20 20 20 20  ersion));..     
220b0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
220c0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e    }..        #en
220d0 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
220e0 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
220f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22100 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22110 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22120 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
22130 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 65        #region Pe
22140 72 2d 46 72 61 6d 65 77 6f 72 6b 2f 50 6c 61 74  r-Framework/Plat
22150 66 6f 72 6d 20 48 61 6e 64 6c 69 6e 67 0d 0a 20  form Handling.. 
22160 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
22170 74 61 74 69 63 20 76 6f 69 64 20 49 6e 69 74 69  tatic void Initi
22180 61 6c 69 7a 65 46 72 61 6d 65 77 6f 72 6b 4c 69  alizeFrameworkLi
22190 73 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  st(..           
221a0 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79   MockRegistryKey
221b0 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20 20 20   rootKey,..     
221c0 20 20 20 20 20 20 20 43 6f 6e 66 69 67 75 72 61         Configura
221d0 74 69 6f 6e 20 63 6f 6e 66 69 67 75 72 61 74 69  tion configurati
221e0 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  on,..           
221f0 20 72 65 66 20 46 72 61 6d 65 77 6f 72 6b 4c 69   ref FrameworkLi
22200 73 74 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74  st frameworkList
22210 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d  ..            ).
22220 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
22230 20 20 20 20 20 20 20 20 69 66 20 28 66 72 61 6d          if (fram
22240 65 77 6f 72 6b 4c 69 73 74 20 3d 3d 20 6e 75 6c  eworkList == nul
22250 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
22260 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73      frameworkLis
22270 74 20 3d 20 6e 65 77 20 46 72 61 6d 65 77 6f 72  t = new Framewor
22280 6b 4c 69 73 74 28 29 3b 0d 0a 0d 0a 20 20 20 20  kList();....    
22290 20 20 20 20 20 20 20 20 69 66 20 28 66 72 61 6d          if (fram
222a0 65 77 6f 72 6b 4c 69 73 74 2e 52 6f 6f 74 4b 65  eworkList.RootKe
222b0 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  y == null)..    
222c0 20 20 20 20 20 20 20 20 20 20 20 20 66 72 61 6d              fram
222d0 65 77 6f 72 6b 4c 69 73 74 2e 52 6f 6f 74 4b 65  eworkList.RootKe
222e0 79 20 3d 20 72 6f 6f 74 4b 65 79 3b 0d 0a 0d 0a  y = rootKey;....
222f0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
22300 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22310 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22320 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22330 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
22340 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
22350 66 20 28 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74  f (frameworkList
22360 2e 4e 61 6d 65 73 20 3d 3d 20 6e 75 6c 6c 29 0d  .Names == null).
22370 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
22380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22390 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 4e 61  frameworkList.Na
223a0 6d 65 73 20 3d 20 6e 65 77 20 53 74 72 69 6e 67  mes = new String
223b0 4c 69 73 74 28 29 3b 0d 0a 0d 0a 20 20 20 20 20  List();....     
223c0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 28             if ((
223d0 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 3d 3d  configuration ==
223e0 20 6e 75 6c 6c 29 20 7c 7c 20 21 63 6f 6e 66 69   null) || !confi
223f0 67 75 72 61 74 69 6f 6e 2e 4e 6f 44 65 73 6b 74  guration.NoDeskt
22400 6f 70 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  op)..           
22410 20 20 20 20 20 20 20 20 20 66 72 61 6d 65 77 6f           framewo
22420 72 6b 4c 69 73 74 2e 4e 61 6d 65 73 2e 41 64 64  rkList.Names.Add
22430 28 22 2e 4e 45 54 46 72 61 6d 65 77 6f 72 6b 22  (".NETFramework"
22440 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
22450 20 20 20 20 20 20 69 66 20 28 28 63 6f 6e 66 69        if ((confi
22460 67 75 72 61 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c  guration == null
22470 29 20 7c 7c 20 21 63 6f 6e 66 69 67 75 72 61 74  ) || !configurat
22480 69 6f 6e 2e 4e 6f 43 6f 6d 70 61 63 74 29 0d 0a  ion.NoCompact)..
22490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
224a0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
224b0 20 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b         framework
224c0 4c 69 73 74 2e 4e 61 6d 65 73 2e 41 64 64 28 22  List.Names.Add("
224d0 2e 4e 45 54 43 6f 6d 70 61 63 74 46 72 61 6d 65  .NETCompactFrame
224e0 77 6f 72 6b 22 29 3b 0d 0a 20 20 20 20 20 20 20  work");..       
224f0 20 20 20 20 20 20 20 20 20 20 20 20 20 66 72 61               fra
22500 6d 65 77 6f 72 6b 4c 69 73 74 2e 4e 61 6d 65 73  meworkList.Names
22510 2e 41 64 64 28 22 2e 4e 45 54 43 6f 6d 70 61 63  .Add(".NETCompac
22520 74 46 72 61 6d 65 77 6f 72 6b 22 29 3b 0d 0a 20  tFramework");.. 
22530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22540 20 20 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74     frameworkList
22550 2e 4e 61 6d 65 73 2e 41 64 64 28 22 2e 4e 45 54  .Names.Add(".NET
22560 43 6f 6d 70 61 63 74 46 72 61 6d 65 77 6f 72 6b  CompactFramework
22570 22 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ");..           
22580 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
22590 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
225a0 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
225b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
225c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
225d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
225e0 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
225f0 20 20 20 20 20 20 20 20 69 66 20 28 66 72 61 6d          if (fram
22600 65 77 6f 72 6b 4c 69 73 74 2e 56 65 72 73 69 6f  eworkList.Versio
22610 6e 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ns == null)..   
22620 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
22630 20 20 20 20 20 20 20 20 20 20 20 20 66 72 61 6d              fram
22640 65 77 6f 72 6b 4c 69 73 74 2e 56 65 72 73 69 6f  eworkList.Versio
22650 6e 73 20 3d 20 6e 65 77 20 56 65 72 73 69 6f 6e  ns = new Version
22660 4d 61 70 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  Map();....      
22670 20 20 20 20 20 20 20 20 20 20 69 66 20 28 28 63            if ((c
22680 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 3d 3d 20  onfiguration == 
22690 6e 75 6c 6c 29 20 7c 7c 20 21 63 6f 6e 66 69 67  null) || !config
226a0 75 72 61 74 69 6f 6e 2e 4e 6f 44 65 73 6b 74 6f  uration.NoDeskto
226b0 70 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  p)..            
226c0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
226d0 20 20 20 20 20 20 20 20 20 20 20 56 65 72 73 69             Versi
226e0 6f 6e 4c 69 73 74 20 64 65 73 6b 74 6f 70 56 65  onList desktopVe
226f0 72 73 69 6f 6e 4c 69 73 74 20 3d 20 6e 65 77 20  rsionList = new 
22700 56 65 72 73 69 6f 6e 4c 69 73 74 28 29 3b 0d 0a  VersionList();..
22710 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
22720 20 20 20 20 20 20 69 66 20 28 28 63 6f 6e 66 69        if ((confi
22730 67 75 72 61 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c  guration == null
22740 29 20 7c 7c 20 21 63 6f 6e 66 69 67 75 72 61 74  ) || !configurat
22750 69 6f 6e 2e 4e 6f 4e 65 74 46 78 32 30 29 0d 0a  ion.NoNetFx20)..
22760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22770 20 20 20 20 20 20 20 20 64 65 73 6b 74 6f 70 56          desktopV
22780 65 72 73 69 6f 6e 4c 69 73 74 2e 41 64 64 28 6e  ersionList.Add(n
22790 65 77 20 56 65 72 73 69 6f 6e 28 32 2c 20 30 2c  ew Version(2, 0,
227a0 20 35 30 37 32 37 29 29 3b 0d 0a 0d 0a 20 20 20   50727));....   
227b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
227c0 20 69 66 20 28 28 63 6f 6e 66 69 67 75 72 61 74   if ((configurat
227d0 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20  ion == null) || 
227e0 21 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 4e  !configuration.N
227f0 6f 4e 65 74 46 78 34 30 29 0d 0a 20 20 20 20 20  oNetFx40)..     
22800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22810 20 20 20 64 65 73 6b 74 6f 70 56 65 72 73 69 6f     desktopVersio
22820 6e 4c 69 73 74 2e 41 64 64 28 6e 65 77 20 56 65  nList.Add(new Ve
22830 72 73 69 6f 6e 28 34 2c 20 30 2c 20 33 30 33 31  rsion(4, 0, 3031
22840 39 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  9));....        
22850 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
22860 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 3d  (configuration =
22870 3d 20 6e 75 6c 6c 29 20 7c 7c 20 21 63 6f 6e 66  = null) || !conf
22880 69 67 75 72 61 74 69 6f 6e 2e 4e 6f 4e 65 74 46  iguration.NoNetF
22890 78 34 35 29 0d 0a 20 20 20 20 20 20 20 20 20 20  x45)..          
228a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65                de
228b0 73 6b 74 6f 70 56 65 72 73 69 6f 6e 4c 69 73 74  sktopVersionList
228c0 2e 41 64 64 28 6e 65 77 20 56 65 72 73 69 6f 6e  .Add(new Version
228d0 28 34 2c 20 35 2c 20 35 30 37 30 39 29 29 3b 0d  (4, 5, 50709));.
228e0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
228f0 20 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b         framework
22900 4c 69 73 74 2e 56 65 72 73 69 6f 6e 73 2e 41 64  List.Versions.Ad
22910 64 28 22 2e 4e 45 54 46 72 61 6d 65 77 6f 72 6b  d(".NETFramework
22920 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
22930 20 20 20 20 20 20 20 20 20 20 20 20 64 65 73 6b              desk
22940 74 6f 70 56 65 72 73 69 6f 6e 4c 69 73 74 29 3b  topVersionList);
22950 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
22960 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
22970 20 20 20 20 20 20 20 69 66 20 28 28 63 6f 6e 66         if ((conf
22980 69 67 75 72 61 74 69 6f 6e 20 3d 3d 20 6e 75 6c  iguration == nul
22990 6c 29 20 7c 7c 20 21 63 6f 6e 66 69 67 75 72 61  l) || !configura
229a0 74 69 6f 6e 2e 4e 6f 43 6f 6d 70 61 63 74 29 0d  tion.NoCompact).
229b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
229c0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
229d0 20 20 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72          framewor
229e0 6b 4c 69 73 74 2e 56 65 72 73 69 6f 6e 73 2e 41  kList.Versions.A
229f0 64 64 28 22 2e 4e 45 54 43 6f 6d 70 61 63 74 46  dd(".NETCompactF
22a00 72 61 6d 65 77 6f 72 6b 22 2c 0d 0a 20 20 20 20  ramework",..    
22a10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22a20 20 20 20 20 6e 65 77 20 56 65 72 73 69 6f 6e 4c      new VersionL
22a30 69 73 74 28 6e 65 77 20 56 65 72 73 69 6f 6e 5b  ist(new Version[
22a40 5d 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ] {..           
22a50 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 65 77               new
22a60 20 56 65 72 73 69 6f 6e 28 32 2c 20 30 2c 20 30   Version(2, 0, 0
22a70 2c 20 30 29 2c 20 6e 65 77 20 56 65 72 73 69 6f  , 0), new Versio
22a80 6e 28 33 2c 20 35 2c 20 30 2c 20 30 29 0d 0a 20  n(3, 5, 0, 0).. 
22a90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22aa0 20 20 20 7d 29 29 3b 0d 0a 20 20 20 20 20 20 20     }));..       
22ab0 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
22ac0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
22ad0 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
22ae0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22af0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22b00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22b10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
22b20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
22b30 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 50 6c  frameworkList.Pl
22b40 61 74 66 6f 72 6d 4e 61 6d 65 73 20 3d 3d 20 6e  atformNames == n
22b50 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
22b60 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
22b70 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 4c 69       frameworkLi
22b80 73 74 2e 50 6c 61 74 66 6f 72 6d 4e 61 6d 65 73  st.PlatformNames
22b90 20 3d 20 6e 65 77 20 53 74 72 69 6e 67 4c 69 73   = new StringLis
22ba0 74 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  t();....        
22bb0 20 20 20 20 20 20 20 20 69 66 20 28 28 63 6f 6e          if ((con
22bc0 66 69 67 75 72 61 74 69 6f 6e 20 3d 3d 20 6e 75  figuration == nu
22bd0 6c 6c 29 20 7c 7c 20 21 63 6f 6e 66 69 67 75 72  ll) || !configur
22be0 61 74 69 6f 6e 2e 4e 6f 44 65 73 6b 74 6f 70 29  ation.NoDesktop)
22bf0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
22c00 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 4c        frameworkL
22c10 69 73 74 2e 50 6c 61 74 66 6f 72 6d 4e 61 6d 65  ist.PlatformName
22c20 73 2e 41 64 64 28 6e 75 6c 6c 29 3b 0d 0a 0d 0a  s.Add(null);....
22c30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22c40 69 66 20 28 28 63 6f 6e 66 69 67 75 72 61 74 69  if ((configurati
22c50 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20 21  on == null) || !
22c60 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 4e 6f  configuration.No
22c70 43 6f 6d 70 61 63 74 29 0d 0a 20 20 20 20 20 20  Compact)..      
22c80 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
22c90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22ca0 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 50   frameworkList.P
22cb0 6c 61 74 66 6f 72 6d 4e 61 6d 65 73 2e 41 64 64  latformNames.Add
22cc0 28 22 50 6f 63 6b 65 74 50 43 22 29 3b 0d 0a 20  ("PocketPC");.. 
22cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22ce0 20 20 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74     frameworkList
22cf0 2e 50 6c 61 74 66 6f 72 6d 4e 61 6d 65 73 2e 41  .PlatformNames.A
22d00 64 64 28 22 53 6d 61 72 74 70 68 6f 6e 65 22 29  dd("Smartphone")
22d10 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
22d20 20 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b         framework
22d30 4c 69 73 74 2e 50 6c 61 74 66 6f 72 6d 4e 61 6d  List.PlatformNam
22d40 65 73 2e 41 64 64 28 22 57 69 6e 64 6f 77 73 43  es.Add("WindowsC
22d50 45 22 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  E");..          
22d60 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
22d70 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
22d80 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  }....        ///
22d90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22da0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22db0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22dc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22dd0 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
22de0 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 62  private static b
22df0 6f 6f 6c 20 48 61 76 65 46 72 61 6d 65 77 6f 72  ool HaveFramewor
22e00 6b 44 69 72 65 63 74 6f 72 79 28 0d 0a 20 20 20  kDirectory(..   
22e10 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65 67           MockReg
22e20 69 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79  istryKey rootKey
22e30 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  ,..            s
22e40 74 72 69 6e 67 20 66 72 61 6d 65 77 6f 72 6b 4e  tring frameworkN
22e50 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ame,..          
22e60 20 20 56 65 72 73 69 6f 6e 20 66 72 61 6d 65 77    Version framew
22e70 6f 72 6b 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20  orkVersion,..   
22e80 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
22e90 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 2c 0d 0a 20  platformName,.. 
22ea0 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
22eb0 77 6f 77 36 34 2c 0d 0a 20 20 20 20 20 20 20 20  wow64,..        
22ec0 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c      bool whatIf,
22ed0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
22ee0 6f 6c 20 76 65 72 62 6f 73 65 0d 0a 20 20 20 20  ol verbose..    
22ef0 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
22f00 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
22f10 20 20 73 74 72 69 6e 67 20 6b 65 79 4e 61 6d 65    string keyName
22f20 20 3d 20 47 65 74 46 72 61 6d 65 77 6f 72 6b 4b   = GetFrameworkK
22f30 65 79 4e 61 6d 65 28 0d 0a 20 20 20 20 20 20 20  eyName(..       
22f40 20 20 20 20 20 20 20 20 20 66 72 61 6d 65 77 6f           framewo
22f50 72 6b 4e 61 6d 65 2c 20 66 72 61 6d 65 77 6f 72  rkName, framewor
22f60 6b 56 65 72 73 69 6f 6e 2c 20 70 6c 61 74 66 6f  kVersion, platfo
22f70 72 6d 4e 61 6d 65 2c 20 77 6f 77 36 34 29 3b 0d  rmName, wow64);.
22f80 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 75  ...            u
22f90 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73 74  sing (MockRegist
22fa0 72 79 4b 65 79 20 6b 65 79 20 3d 20 52 65 67 69  ryKey key = Regi
22fb0 73 74 72 79 48 65 6c 70 65 72 2e 4f 70 65 6e 53  stryHelper.OpenS
22fc0 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20  ubKey(..        
22fd0 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74              root
22fe0 4b 65 79 2c 20 6b 65 79 4e 61 6d 65 2c 20 66 61  Key, keyName, fa
22ff0 6c 73 65 2c 20 77 68 61 74 49 66 2c 20 76 65 72  lse, whatIf, ver
23000 62 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20  bose))..        
23010 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
23020 20 20 20 20 20 20 20 69 66 20 28 6b 65 79 20 3d         if (key =
23030 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
23040 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
23050 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20  urn false;....  
23060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
23070 20 28 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 20 21   (platformName !
23080 3d 20 6e 75 6c 6c 29 20 2f 2f 20 4e 4f 54 45 3a  = null) // NOTE:
23090 20 53 6b 69 70 20 6e 6f 6e 2d 64 65 73 6b 74 6f   Skip non-deskto
230a0 70 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  p...            
230b0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74          return t
230c0 72 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  rue;....        
230d0 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 64          string d
230e0 69 72 65 63 74 6f 72 79 20 3d 20 47 65 74 46 72  irectory = GetFr
230f0 61 6d 65 77 6f 72 6b 44 69 72 65 63 74 6f 72 79  ameworkDirectory
23100 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
23110 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20         rootKey, 
23120 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e  frameworkVersion
23130 2c 20 77 6f 77 36 34 2c 20 77 68 61 74 49 66 2c  , wow64, whatIf,
23140 20 76 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20   verbose);....  
23150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
23160 20 28 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f   (String.IsNullO
23170 72 45 6d 70 74 79 28 64 69 72 65 63 74 6f 72 79  rEmpty(directory
23180 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
23190 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
231a0 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  alse;....       
231b0 20 20 20 20 20 20 20 20 20 69 66 20 28 21 44 69           if (!Di
231c0 72 65 63 74 6f 72 79 2e 45 78 69 73 74 73 28 64  rectory.Exists(d
231d0 69 72 65 63 74 6f 72 79 29 29 0d 0a 20 20 20 20  irectory))..    
231e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
231f0 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d  return false;...
23200 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
23210 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41   TraceOps.DebugA
23220 6e 64 54 72 61 63 65 28 54 72 61 63 65 50 72 69  ndTrace(TracePri
23230 6f 72 69 74 79 2e 4c 6f 77 65 72 2c 0d 0a 20 20  ority.Lower,..  
23240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23250 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c    debugCallback,
23260 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20   traceCallback, 
23270 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
23280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23290 20 20 20 20 22 2e 4e 45 54 20 46 72 61 6d 65 77      ".NET Framew
232a0 6f 72 6b 20 7b 30 7d 20 66 6f 75 6e 64 20 76 69  ork {0} found vi
232b0 61 20 64 69 72 65 63 74 6f 72 79 20 7b 31 7d 2e  a directory {1}.
232c0 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
232d0 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c          ForDispl
232e0 61 79 28 66 72 61 6d 65 77 6f 72 6b 56 65 72 73  ay(frameworkVers
232f0 69 6f 6e 29 2c 20 46 6f 72 44 69 73 70 6c 61 79  ion), ForDisplay
23300 28 64 69 72 65 63 74 6f 72 79 29 29 2c 0d 0a 20  (directory)),.. 
23310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23320 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
23330 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
23340 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75        return tru
23350 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
23360 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  }..        }....
23370 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
23380 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23390 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
233a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
233b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
233c0 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  ...        priva
233d0 74 65 20 73 74 61 74 69 63 20 62 6f 6f 6c 20 48  te static bool H
233e0 61 76 65 46 72 61 6d 65 77 6f 72 6b 52 65 67 69  aveFrameworkRegi
233f0 73 74 72 79 28 0d 0a 20 20 20 20 20 20 20 20 20  stry(..         
23400 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b     MockRegistryK
23410 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20  ey rootKey,..   
23420 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
23430 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c 0d 0a  frameworkName,..
23440 20 20 20 20 20 20 20 20 20 20 20 20 56 65 72 73              Vers
23450 69 6f 6e 20 66 72 61 6d 65 77 6f 72 6b 56 65 72  ion frameworkVer
23460 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20  sion,..         
23470 20 20 20 73 74 72 69 6e 67 20 70 6c 61 74 66 6f     string platfo
23480 72 6d 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20  rmName,..       
23490 20 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34 2c       bool wow64,
234a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
234b0 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20  ol whatIf,..    
234c0 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65 72          bool ver
234d0 62 6f 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20  bose..          
234e0 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a    )..        {..
234f0 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
23500 6e 67 20 6b 65 79 4e 61 6d 65 20 3d 20 47 65 74  ng keyName = Get
23510 46 72 61 6d 65 77 6f 72 6b 4b 65 79 4e 61 6d 65  FrameworkKeyName
23520 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
23530 20 20 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65     frameworkName
23540 2c 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69  , frameworkVersi
23550 6f 6e 2c 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65  on, platformName
23560 2c 20 77 6f 77 36 34 29 3b 0d 0a 0d 0a 20 20 20  , wow64);....   
23570 20 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28           using (
23580 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20  MockRegistryKey 
23590 6b 65 79 20 3d 20 52 65 67 69 73 74 72 79 48 65  key = RegistryHe
235a0 6c 70 65 72 2e 4f 70 65 6e 53 75 62 4b 65 79 28  lper.OpenSubKey(
235b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
235c0 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 6b        rootKey, k
235d0 65 79 4e 61 6d 65 2c 20 66 61 6c 73 65 2c 20 77  eyName, false, w
235e0 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 29  hatIf, verbose))
235f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
23600 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
23610 20 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c   if (key == null
23620 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
23630 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
23640 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  lse;....        
23650 20 20 20 20 20 20 20 20 69 66 20 28 70 6c 61 74          if (plat
23660 66 6f 72 6d 4e 61 6d 65 20 21 3d 20 6e 75 6c 6c  formName != null
23670 29 20 2f 2f 20 4e 4f 54 45 3a 20 53 6b 69 70 20  ) // NOTE: Skip 
23680 6e 6f 6e 2d 64 65 73 6b 74 6f 70 2e 0d 0a 20 20  non-desktop...  
23690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
236a0 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a    return true;..
236b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
236c0 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67    TraceOps.Debug
236d0 41 6e 64 54 72 61 63 65 28 54 72 61 63 65 50 72  AndTrace(TracePr
236e0 69 6f 72 69 74 79 2e 4c 6f 77 65 72 2c 0d 0a 20  iority.Lower,.. 
236f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23700 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b     debugCallback
23710 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c  , traceCallback,
23720 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d   String.Format(.
23730 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
23740 20 20 20 20 20 22 2e 4e 45 54 20 46 72 61 6d 65       ".NET Frame
23750 77 6f 72 6b 20 7b 30 7d 20 66 6f 75 6e 64 20 76  work {0} found v
23760 69 61 20 72 65 67 69 73 74 72 79 20 7b 31 7d 2e  ia registry {1}.
23770 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
23780 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c          ForDispl
23790 61 79 28 66 72 61 6d 65 77 6f 72 6b 56 65 72 73  ay(frameworkVers
237a0 69 6f 6e 29 2c 20 46 6f 72 44 69 73 70 6c 61 79  ion), ForDisplay
237b0 28 6b 65 79 4e 61 6d 65 29 29 2c 0d 0a 20 20 20  (keyName)),..   
237c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
237d0 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
237e0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
237f0 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b      return true;
23800 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
23810 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....  
23820 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
23830 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23840 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23850 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23860 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
23870 0a 20 20 20 20 20 20 20 20 5b 4d 65 74 68 6f 64  .        [Method
23880 49 6d 70 6c 28 4d 65 74 68 6f 64 49 6d 70 6c 4f  Impl(MethodImplO
23890 70 74 69 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e 69 6e  ptions.NoInlinin
238a0 67 29 5d 0d 0a 20 20 20 20 20 20 20 20 70 72 69  g)]..        pri
238b0 76 61 74 65 20 73 74 61 74 69 63 20 62 6f 6f 6c  vate static bool
238c0 20 46 6f 72 45 61 63 68 46 72 61 6d 65 77 6f 72   ForEachFramewor
238d0 6b 43 6f 6e 66 69 67 28 0d 0a 20 20 20 20 20 20  kConfig(..      
238e0 20 20 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 74        MockRegist
238f0 72 79 20 72 65 67 69 73 74 72 79 2c 0d 0a 20 20  ry registry,..  
23900 20 20 20 20 20 20 20 20 20 20 46 72 61 6d 65 77            Framew
23910 6f 72 6b 4c 69 73 74 20 66 72 61 6d 65 77 6f 72  orkList framewor
23920 6b 4c 69 73 74 2c 0d 0a 20 20 20 20 20 20 20 20  kList,..        
23930 20 20 20 20 46 72 61 6d 65 77 6f 72 6b 43 6f 6e      FrameworkCon
23940 66 69 67 43 61 6c 6c 62 61 63 6b 20 63 61 6c 6c  figCallback call
23950 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20  back,..         
23960 20 20 20 73 74 72 69 6e 67 20 76 65 72 73 69 6f     string versio
23970 6e 2c 20 2f 2a 20 4e 4f 54 45 3a 20 4f 70 74 69  n, /* NOTE: Opti
23980 6f 6e 61 6c 2e 20 2a 2f 0d 0a 20 20 20 20 20 20  onal. */..      
23990 20 20 20 20 20 20 73 74 72 69 6e 67 20 69 6e 76        string inv
239a0 61 72 69 61 6e 74 2c 0d 0a 20 20 20 20 20 20 20  ariant,..       
239b0 20 20 20 20 20 73 74 72 69 6e 67 20 6e 61 6d 65       string name
239c0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  ,..            s
239d0 74 72 69 6e 67 20 64 65 73 63 72 69 70 74 69 6f  tring descriptio
239e0 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n,..            
239f0 73 74 72 69 6e 67 20 74 79 70 65 4e 61 6d 65 2c  string typeName,
23a00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 41 73  ..            As
23a10 73 65 6d 62 6c 79 4e 61 6d 65 20 61 73 73 65 6d  semblyName assem
23a20 62 6c 79 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20  blyName,..      
23a30 20 20 20 20 20 20 6f 62 6a 65 63 74 20 63 6c 69        object cli
23a40 65 6e 74 44 61 74 61 2c 0d 0a 20 20 20 20 20 20  entData,..      
23a50 20 20 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34        bool wow64
23a60 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  ,..            b
23a70 6f 6f 6c 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69  ool throwOnMissi
23a80 6e 67 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ng,..           
23a90 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20   bool whatIf,.. 
23aa0 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
23ab0 76 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20  verbose,..      
23ac0 20 20 20 20 20 20 72 65 66 20 62 6f 6f 6c 20 73        ref bool s
23ad0 61 76 65 64 2c 0d 0a 20 20 20 20 20 20 20 20 20  aved,..         
23ae0 20 20 20 72 65 66 20 73 74 72 69 6e 67 20 65 72     ref string er
23af0 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ror..           
23b00 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20   )..        {.. 
23b10 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 72             if (r
23b20 65 67 69 73 74 72 79 20 3d 3d 20 6e 75 6c 6c 29  egistry == null)
23b30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
23b40 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
23b50 20 65 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69   error = "invali
23b60 64 20 72 65 67 69 73 74 72 79 22 3b 0d 0a 20 20  d registry";..  
23b70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
23b80 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20  turn false;..   
23b90 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
23ba0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 66 72            if (fr
23bb0 61 6d 65 77 6f 72 6b 4c 69 73 74 20 3d 3d 20 6e  ameworkList == n
23bc0 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
23bd0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
23be0 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 69 6e       error = "in
23bf0 76 61 6c 69 64 20 66 72 61 6d 65 77 6f 72 6b 20  valid framework 
23c00 6c 69 73 74 22 3b 0d 0a 20 20 20 20 20 20 20 20  list";..        
23c10 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
23c20 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alse;..         
23c30 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
23c40 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79      MockRegistry
23c50 4b 65 79 20 72 6f 6f 74 4b 65 79 20 3d 20 66 72  Key rootKey = fr
23c60 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 52 6f 6f 74  ameworkList.Root
23c70 4b 65 79 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  Key;....        
23c80 20 20 20 20 69 66 20 28 72 6f 6f 74 4b 65 79 20      if (rootKey 
23c90 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
23ca0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
23cb0 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
23cc0 20 22 69 6e 76 61 6c 69 64 20 72 6f 6f 74 20 6b   "invalid root k
23cd0 65 79 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ey";..          
23ce0 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
23cf0 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se;..           
23d00 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
23d10 20 20 69 66 20 28 21 4f 62 6a 65 63 74 2e 52 65    if (!Object.Re
23d20 66 65 72 65 6e 63 65 45 71 75 61 6c 73 28 72 6f  ferenceEquals(ro
23d30 6f 74 4b 65 79 2c 20 72 65 67 69 73 74 72 79 2e  otKey, registry.
23d40 43 75 72 72 65 6e 74 55 73 65 72 29 20 26 26 0d  CurrentUser) &&.
23d50 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
23d60 20 21 4f 62 6a 65 63 74 2e 52 65 66 65 72 65 6e   !Object.Referen
23d70 63 65 45 71 75 61 6c 73 28 72 6f 6f 74 4b 65 79  ceEquals(rootKey
23d80 2c 20 72 65 67 69 73 74 72 79 2e 4c 6f 63 61 6c  , registry.Local
23d90 4d 61 63 68 69 6e 65 29 29 0d 0a 20 20 20 20 20  Machine))..     
23da0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
23db0 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20            error 
23dc0 3d 20 22 72 6f 6f 74 20 6b 65 79 20 6d 75 73 74  = "root key must
23dd0 20 62 65 20 70 65 72 2d 75 73 65 72 20 6f 72 20   be per-user or 
23de0 70 65 72 2d 6d 61 63 68 69 6e 65 22 3b 0d 0a 20  per-machine";.. 
23df0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
23e00 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20  eturn false;..  
23e10 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
23e20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 66             if (f
23e30 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 4e 61 6d  rameworkList.Nam
23e40 65 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  es == null)..   
23e50 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
23e60 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
23e70 72 20 3d 20 22 6e 6f 20 66 72 61 6d 65 77 6f 72  r = "no framewor
23e80 6b 20 6e 61 6d 65 73 20 66 6f 75 6e 64 22 3b 0d  k names found";.
23e90 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
23ea0 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
23eb0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
23ec0 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
23ed0 28 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 56  (frameworkList.V
23ee0 65 72 73 69 6f 6e 73 20 3d 3d 20 6e 75 6c 6c 29  ersions == null)
23ef0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
23f00 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
23f10 20 65 72 72 6f 72 20 3d 20 22 6e 6f 20 66 72 61   error = "no fra
23f20 6d 65 77 6f 72 6b 20 76 65 72 73 69 6f 6e 73 20  mework versions 
23f30 66 6f 75 6e 64 22 3b 0d 0a 20 20 20 20 20 20 20  found";..       
23f40 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
23f50 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20  false;..        
23f60 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
23f70 20 20 20 20 20 69 66 20 28 66 72 61 6d 65 77 6f       if (framewo
23f80 72 6b 4c 69 73 74 2e 50 6c 61 74 66 6f 72 6d 4e  rkList.PlatformN
23f90 61 6d 65 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  ames == null).. 
23fa0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
23fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72                er
23fc0 72 6f 72 20 3d 20 22 6e 6f 20 70 6c 61 74 66 6f  ror = "no platfo
23fd0 72 6d 20 6e 61 6d 65 73 20 66 6f 75 6e 64 22 3b  rm names found";
23fe0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
23ff0 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
24000 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
24010 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
24020 20 28 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e   (frameworkList.
24030 4e 61 6d 65 73 2e 43 6f 75 6e 74 20 21 3d 20 66  Names.Count != f
24040 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 50 6c 61  rameworkList.Pla
24050 74 66 6f 72 6d 4e 61 6d 65 73 2e 43 6f 75 6e 74  tformNames.Count
24060 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
24070 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
24080 20 20 65 72 72 6f 72 20 3d 20 53 74 72 69 6e 67    error = String
24090 2e 46 6f 72 6d 61 74 28 22 66 72 61 6d 65 77 6f  .Format("framewo
240a0 72 6b 20 6e 61 6d 65 20 63 6f 75 6e 74 20 7b 30  rk name count {0
240b0 7d 20 64 6f 65 73 20 6e 6f 74 20 22 20 2b 0d 0a  } does not " +..
240c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
240d0 20 20 20 20 22 6d 61 74 63 68 20 70 6c 61 74 66      "match platf
240e0 6f 72 6d 20 6e 61 6d 65 20 63 6f 75 6e 74 20 7b  orm name count {
240f0 31 7d 22 2c 20 66 72 61 6d 65 77 6f 72 6b 4c 69  1}", frameworkLi
24100 73 74 2e 4e 61 6d 65 73 2e 43 6f 75 6e 74 2c 0d  st.Names.Count,.
24110 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
24120 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 4c 69       frameworkLi
24130 73 74 2e 50 6c 61 74 66 6f 72 6d 4e 61 6d 65 73  st.PlatformNames
24140 2e 43 6f 75 6e 74 29 3b 0d 0a 0d 0a 20 20 20 20  .Count);....    
24150 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
24160 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20  rn false;..     
24170 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
24180 20 20 20 20 20 20 20 20 66 6f 72 20 28 69 6e 74          for (int
24190 20 69 6e 64 65 78 20 3d 20 30 3b 20 69 6e 64 65   index = 0; inde
241a0 78 20 3c 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73  x < frameworkLis
241b0 74 2e 4e 61 6d 65 73 2e 43 6f 75 6e 74 3b 20 69  t.Names.Count; i
241c0 6e 64 65 78 2b 2b 29 0d 0a 20 20 20 20 20 20 20  ndex++)..       
241d0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
241e0 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
241f0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e              // N
24200 4f 54 45 3a 20 47 72 61 62 20 74 68 65 20 6e 61  OTE: Grab the na
24210 6d 65 20 6f 66 20 74 68 65 20 66 72 61 6d 65 77  me of the framew
24220 6f 72 6b 20 28 65 2e 67 2e 20 22 2e 4e 45 54 46  ork (e.g. ".NETF
24230 72 61 6d 65 77 6f 72 6b 22 29 0d 0a 20 20 20 20  ramework")..    
24240 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
24250 20 20 20 20 20 61 6e 64 20 74 68 65 20 6e 61 6d       and the nam
24260 65 20 6f 66 20 74 68 65 20 70 6c 61 74 66 6f 72  e of the platfor
24270 6d 20 28 65 2e 67 2e 20 22 57 69 6e 64 6f 77 73  m (e.g. "Windows
24280 43 45 22 29 2e 0d 0a 20 20 20 20 20 20 20 20 20  CE")...         
24290 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
242a0 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
242b0 67 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 20  g frameworkName 
242c0 3d 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e  = frameworkList.
242d0 4e 61 6d 65 73 5b 69 6e 64 65 78 5d 3b 0d 0a 20  Names[index];.. 
242e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
242f0 74 72 69 6e 67 20 70 6c 61 74 66 6f 72 6d 4e 61  tring platformNa
24300 6d 65 20 3d 20 66 72 61 6d 65 77 6f 72 6b 4c 69  me = frameworkLi
24310 73 74 2e 50 6c 61 74 66 6f 72 6d 4e 61 6d 65 73  st.PlatformNames
24320 5b 69 6e 64 65 78 5d 3b 0d 0a 0d 0a 20 20 20 20  [index];....    
24330 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
24340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24350 2f 2f 20 4e 4f 54 45 3a 20 53 6b 69 70 20 61 6c  // NOTE: Skip al
24360 6c 20 6e 6f 6e 2d 64 65 73 6b 74 6f 70 20 66 72  l non-desktop fr
24370 61 6d 65 77 6f 72 6b 73 20 28 69 2e 65 2e 20 69  ameworks (i.e. i
24380 66 20 74 68 65 20 70 6c 61 74 66 6f 72 6d 0d 0a  f the platform..
24390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
243a0 2f 2f 20 20 20 20 20 20 20 6e 61 6d 65 20 69 73  //       name is
243b0 20 6e 6f 74 20 6e 75 6c 6c 29 2e 0d 0a 20 20 20   not null)...   
243c0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
243d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
243e0 20 69 66 20 28 70 6c 61 74 66 6f 72 6d 4e 61 6d   if (platformNam
243f0 65 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  e != null)..    
24400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24410 63 6f 6e 74 69 6e 75 65 3b 0d 0a 0d 0a 20 20 20  continue;....   
24420 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
24430 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
24440 20 2f 2f 20 4e 4f 54 45 3a 20 47 72 61 62 20 74   // NOTE: Grab t
24450 68 65 20 73 75 70 70 6f 72 74 65 64 20 76 65 72  he supported ver
24460 73 69 6f 6e 73 20 6f 66 20 74 68 69 73 20 70 61  sions of this pa
24470 72 74 69 63 75 6c 61 72 0d 0a 20 20 20 20 20 20  rticular..      
24480 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
24490 20 20 20 66 72 61 6d 65 77 6f 72 6b 2e 0d 0a 20     framework... 
244a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
244b0 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
244c0 20 20 20 56 65 72 73 69 6f 6e 4c 69 73 74 20 66     VersionList f
244d0 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 4c  rameworkVersionL
244e0 69 73 74 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ist;....        
244f0 20 20 20 20 20 20 20 20 69 66 20 28 76 65 72 73          if (vers
24500 69 6f 6e 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20  ion != null)..  
24510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
24520 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
24530 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
24540 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
24550 4e 4f 54 45 3a 20 4d 61 6e 75 61 6c 20 6f 76 65  NOTE: Manual ove
24560 72 72 69 64 65 20 6f 66 20 74 68 65 20 2a 4f 4e  rride of the *ON
24570 45 2a 20 66 72 61 6d 65 77 6f 72 6b 20 76 65 72  E* framework ver
24580 73 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20 20 20  sion..          
24590 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
245a0 20 20 20 74 6f 20 70 72 6f 63 65 73 73 2e 0d 0a     to process...
245b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
245c0 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
245d0 20 20 20 20 20 20 20 20 20 20 20 20 66 72 61 6d              fram
245e0 65 77 6f 72 6b 56 65 72 73 69 6f 6e 4c 69 73 74  eworkVersionList
245f0 20 3d 20 6e 65 77 20 56 65 72 73 69 6f 6e 4c 69   = new VersionLi
24600 73 74 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  st();..         
24610 20 20 20 20 20 20 20 20 20 20 20 66 72 61 6d 65             frame
24620 77 6f 72 6b 56 65 72 73 69 6f 6e 4c 69 73 74 2e  workVersionList.
24630 41 64 64 28 6e 65 77 20 56 65 72 73 69 6f 6e 28  Add(new Version(
24640 76 65 72 73 69 6f 6e 29 29 3b 0d 0a 20 20 20 20  version));..    
24650 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
24660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
24670 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  lse..           
24680 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
24690 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
246a0 21 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 56  !frameworkList.V
246b0 65 72 73 69 6f 6e 73 2e 54 72 79 47 65 74 56 61  ersions.TryGetVa
246c0 6c 75 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  lue(..          
246d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
246e0 20 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c    frameworkName,
246f0 20 6f 75 74 20 66 72 61 6d 65 77 6f 72 6b 56 65   out frameworkVe
24700 72 73 69 6f 6e 4c 69 73 74 29 20 7c 7c 0d 0a 20  rsionList) ||.. 
24710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24720 20 20 20 20 20 20 20 28 66 72 61 6d 65 77 6f 72         (framewor
24730 6b 56 65 72 73 69 6f 6e 4c 69 73 74 20 3d 3d 20  kVersionList == 
24740 6e 75 6c 6c 29 29 0d 0a 20 20 20 20 20 20 20 20  null))..        
24750 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
24760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24770 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b         continue;
24780 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
24790 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
247a0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
247b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 6f                fo
247c0 72 65 61 63 68 20 28 56 65 72 73 69 6f 6e 20 66  reach (Version f
247d0 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 20  rameworkVersion 
247e0 69 6e 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73  in frameworkVers
247f0 69 6f 6e 4c 69 73 74 29 0d 0a 20 20 20 20 20 20  ionList)..      
24800 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
24810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24820 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41   TraceOps.DebugA
24830 6e 64 54 72 61 63 65 28 54 72 61 63 65 50 72 69  ndTrace(TracePri
24840 6f 72 69 74 79 2e 4c 6f 77 65 72 2c 0d 0a 20 20  ority.Lower,..  
24850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24860 20 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62        debugCallb
24870 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61  ack, traceCallba
24880 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ck, String.Forma
24890 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
248a0 20 20 20 20 20 20 20 20 20 20 20 20 22 66 72 61              "fra
248b0 6d 65 77 6f 72 6b 4e 61 6d 65 20 3d 20 7b 30 7d  meworkName = {0}
248c0 2c 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69  , frameworkVersi
248d0 6f 6e 20 3d 20 7b 31 7d 2c 20 22 20 2b 0d 0a 20  on = {1}, " +.. 
248e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
248f0 20 20 20 20 20 20 20 22 70 6c 61 74 66 6f 72 6d         "platform
24900 4e 61 6d 65 20 3d 20 7b 32 7d 22 2c 20 46 6f 72  Name = {2}", For
24910 44 69 73 70 6c 61 79 28 66 72 61 6d 65 77 6f 72  Display(framewor
24920 6b 4e 61 6d 65 29 2c 0d 0a 20 20 20 20 20 20 20  kName),..       
24930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24940 20 46 6f 72 44 69 73 70 6c 61 79 28 66 72 61 6d   ForDisplay(fram
24950 65 77 6f 72 6b 56 65 72 73 69 6f 6e 29 2c 0d 0a  eworkVersion),..
24960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24970 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c          ForDispl
24980 61 79 28 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 29  ay(platformName)
24990 29 2c 20 74 72 61 63 65 43 61 74 65 67 6f 72 79  ), traceCategory
249a0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
249b0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21 48            if (!H
249c0 61 76 65 46 72 61 6d 65 77 6f 72 6b 44 69 72 65  aveFrameworkDire
249d0 63 74 6f 72 79 28 0d 0a 20 20 20 20 20 20 20 20  ctory(..        
249e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
249f0 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 66 72 61      rootKey, fra
24a00 6d 65 77 6f 72 6b 4e 61 6d 65 2c 20 66 72 61 6d  meworkName, fram
24a10 65 77 6f 72 6b 56 65 72 73 69 6f 6e 2c 0d 0a 20  eworkVersion,.. 
24a20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24a30 20 20 20 20 20 20 20 20 20 20 20 70 6c 61 74 66             platf
24a40 6f 72 6d 4e 61 6d 65 2c 20 77 6f 77 36 34 2c 20  ormName, wow64, 
24a50 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29  whatIf, verbose)
24a60 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
24a70 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
24a80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24a90 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67    TraceOps.Debug
24aa0 41 6e 64 54 72 61 63 65 28 54 72 61 63 65 50 72  AndTrace(TracePr
24ab0 69 6f 72 69 74 79 2e 4c 6f 77 2c 0d 0a 20 20 20  iority.Low,..   
24ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24ad0 20 20 20 20 20 20 20 20 20 64 65 62 75 67 43 61           debugCa
24ae0 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c  llback, traceCal
24af0 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20  lback,..        
24b00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24b10 20 20 20 20 22 2e 4e 45 54 20 46 72 61 6d 65 77      ".NET Framew
24b20 6f 72 6b 20 64 69 72 65 63 74 6f 72 79 20 6e 6f  ork directory no
24b30 74 20 66 6f 75 6e 64 2c 20 73 6b 69 70 70 69 6e  t found, skippin
24b40 67 2e 2e 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20  g...",..        
24b50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24b60 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72      traceCategor
24b70 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
24b80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
24b90 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20  ontinue;..      
24ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
24bb0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
24bc0 20 20 20 20 20 20 20 69 66 20 28 63 61 6c 6c 62         if (callb
24bd0 61 63 6b 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  ack == null)..  
24be0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24bf0 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d        continue;.
24c00 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
24c10 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 64 69         string di
24c20 72 65 63 74 6f 72 79 20 3d 20 47 65 74 46 72 61  rectory = GetFra
24c30 6d 65 77 6f 72 6b 44 69 72 65 63 74 6f 72 79 28  meworkDirectory(
24c40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
24c50 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65            rootKe
24c60 79 2c 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73  y, frameworkVers
24c70 69 6f 6e 2c 20 77 6f 77 36 34 2c 20 77 68 61 74  ion, wow64, what
24c80 49 66 2c 20 76 65 72 62 6f 73 65 29 3b 0d 0a 0d  If, verbose);...
24c90 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
24ca0 20 20 20 20 20 69 66 20 28 53 74 72 69 6e 67 2e       if (String.
24cb0 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 64 69  IsNullOrEmpty(di
24cc0 72 65 63 74 6f 72 79 29 29 0d 0a 20 20 20 20 20  rectory))..     
24cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
24ce0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
24cf0 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f            TraceO
24d00 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65  ps.DebugAndTrace
24d10 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c  (TracePriority.L
24d20 6f 77 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ow,..           
24d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24d40 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20   debugCallback, 
24d50 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53  traceCallback, S
24d60 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
24d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24d80 20 20 20 20 20 20 20 20 20 20 20 22 2e 4e 45 54             ".NET
24d90 20 46 72 61 6d 65 77 6f 72 6b 20 7b 30 7d 20 64   Framework {0} d
24da0 69 72 65 63 74 6f 72 79 20 69 73 20 69 6e 76 61  irectory is inva
24db0 6c 69 64 2c 20 22 20 2b 0d 0a 20 20 20 20 20 20  lid, " +..      
24dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24dd0 20 20 20 20 20 20 22 73 6b 69 70 70 69 6e 67 2e        "skipping.
24de0 2e 2e 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28  ..", ForDisplay(
24df0 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e  frameworkVersion
24e00 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  )),..           
24e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24e20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
24e30 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
24e40 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74              cont
24e50 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  inue;..         
24e60 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
24e70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24e80 20 20 20 20 64 69 72 65 63 74 6f 72 79 20 3d 20      directory = 
24e90 50 61 74 68 2e 43 6f 6d 62 69 6e 65 28 64 69 72  Path.Combine(dir
24ea0 65 63 74 6f 72 79 2c 20 22 43 6f 6e 66 69 67 22  ectory, "Config"
24eb0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
24ec0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21 44            if (!D
24ed0 69 72 65 63 74 6f 72 79 2e 45 78 69 73 74 73 28  irectory.Exists(
24ee0 64 69 72 65 63 74 6f 72 79 29 29 0d 0a 20 20 20  directory))..   
24ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24f00 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
24f10 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
24f20 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61  eOps.DebugAndTra
24f30 63 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 79  ce(TracePriority
24f40 2e 4c 6f 77 2c 0d 0a 20 20 20 20 20 20 20 20 20  .Low,..         
24f50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24f60 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b     debugCallback
24f70 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c  , traceCallback,
24f80 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d   String.Format(.
24f90 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
24fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2e 4e               ".N
24fb0 45 54 20 46 72 61 6d 65 77 6f 72 6b 20 7b 30 7d  ET Framework {0}
24fc0 20 64 69 72 65 63 74 6f 72 79 20 7b 31 7d 20 64   directory {1} d
24fd0 6f 65 73 20 6e 6f 74 20 22 20 2b 0d 0a 20 20 20  oes not " +..   
24fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24ff0 20 20 20 20 20 20 20 20 20 22 65 78 69 73 74 2c           "exist,
25000 20 73 6b 69 70 70 69 6e 67 2e 2e 2e 22 2c 20 46   skipping...", F
25010 6f 72 44 69 73 70 6c 61 79 28 66 72 61 6d 65 77  orDisplay(framew
25020 6f 72 6b 56 65 72 73 69 6f 6e 29 2c 0d 0a 20 20  orkVersion),..  
25030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25040 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73            ForDis
25050 70 6c 61 79 28 64 69 72 65 63 74 6f 72 79 29 29  play(directory))
25060 2c 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29  , traceCategory)
25070 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
25080 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
25090 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20  tinue;..        
250a0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
250b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
250c0 20 20 20 20 20 73 74 72 69 6e 67 20 66 69 6c 65       string file
250d0 4e 61 6d 65 20 3d 20 50 61 74 68 2e 43 6f 6d 62  Name = Path.Comb
250e0 69 6e 65 28 64 69 72 65 63 74 6f 72 79 2c 20 22  ine(directory, "
250f0 6d 61 63 68 69 6e 65 2e 63 6f 6e 66 69 67 22 29  machine.config")
25100 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
25110 20 20 20 20 20 20 20 20 20 69 66 20 28 21 46 69           if (!Fi
25120 6c 65 2e 45 78 69 73 74 73 28 66 69 6c 65 4e 61  le.Exists(fileNa
25130 6d 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  me))..          
25140 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
25150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25160 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65       TraceOps.De
25170 62 75 67 41 6e 64 54 72 61 63 65 28 54 72 61 63  bugAndTrace(Trac
25180 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 2c 0d 0a  ePriority.Low,..
25190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
251a0 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62 75              debu
251b0 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65  gCallback, trace
251c0 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67  Callback, String
251d0 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  .Format(..      
251e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
251f0 20 20 20 20 20 20 22 2e 4e 45 54 20 46 72 61 6d        ".NET Fram
25200 65 77 6f 72 6b 20 7b 30 7d 20 66 69 6c 65 20 7b  ework {0} file {
25210 31 7d 20 64 6f 65 73 20 6e 6f 74 20 65 78 69 73  1} does not exis
25220 74 2c 20 22 20 2b 0d 0a 20 20 20 20 20 20 20 20  t, " +..        
25230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25240 20 20 20 20 22 73 6b 69 70 70 69 6e 67 2e 2e 2e      "skipping...
25250 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 66 72  ", ForDisplay(fr
25260 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 29 2c  ameworkVersion),
25270 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
25280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f                Fo
25290 72 44 69 73 70 6c 61 79 28 66 69 6c 65 4e 61 6d  rDisplay(fileNam
252a0 65 29 29 2c 20 74 72 61 63 65 43 61 74 65 67 6f  e)), traceCatego
252b0 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
252c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
252d0 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20  continue;..     
252e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
252f0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
25300 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 6c 6f 63          bool loc
25310 61 6c 53 61 76 65 64 20 3d 20 66 61 6c 73 65 3b  alSaved = false;
25320 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
25330 20 20 20 20 20 20 20 20 69 66 20 28 21 63 61 6c          if (!cal
25340 6c 62 61 63 6b 28 0d 0a 20 20 20 20 20 20 20 20  lback(..        
25350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25360 20 20 20 20 66 69 6c 65 4e 61 6d 65 2c 20 69 6e      fileName, in
25370 76 61 72 69 61 6e 74 2c 20 6e 61 6d 65 2c 20 64  variant, name, d
25380 65 73 63 72 69 70 74 69 6f 6e 2c 20 74 79 70 65  escription, type
25390 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  Name,..         
253a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
253b0 20 20 20 61 73 73 65 6d 62 6c 79 4e 61 6d 65 2c     assemblyName,
253c0 20 63 6c 69 65 6e 74 44 61 74 61 2c 20 77 6f 77   clientData, wow
253d0 36 34 2c 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69  64, throwOnMissi
253e0 6e 67 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ng,..           
253f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25400 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65   whatIf, verbose
25410 2c 20 72 65 66 20 6c 6f 63 61 6c 53 61 76 65 64  , ref localSaved
25420 2c 20 72 65 66 20 65 72 72 6f 72 29 29 0d 0a 20  , ref error)).. 
25430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25440 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
25450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
25460 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20  turn false;..   
25470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25480 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
25490 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20          else..  
254a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
254b0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
254c0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
254d0 28 6c 6f 63 61 6c 53 61 76 65 64 20 26 26 20 21  (localSaved && !
254e0 73 61 76 65 64 29 0d 0a 20 20 20 20 20 20 20 20  saved)..        
254f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25500 20 20 20 20 73 61 76 65 64 20 3d 20 74 72 75 65      saved = true
25510 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
25520 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
25530 28 76 65 72 62 6f 73 65 29 0d 0a 20 20 20 20 20  (verbose)..     
25540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25550 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e         TraceOps.
25560 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 54 72  DebugAndTrace(Tr
25570 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65  acePriority.Lowe
25580 73 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  st,..           
25590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
255a0 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61       debugCallba
255b0 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63  ck, traceCallbac
255c0 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  k, String.Format
255d0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
255e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
255f0 20 20 20 22 6c 6f 63 61 6c 53 61 76 65 64 20 3d     "localSaved =
25600 20 7b 30 7d 2c 20 73 61 76 65 64 20 3d 20 7b 31   {0}, saved = {1
25610 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }",..           
25620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25630 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28       ForDisplay(
25640 6c 6f 63 61 6c 53 61 76 65 64 29 2c 20 46 6f 72  localSaved), For
25650 44 69 73 70 6c 61 79 28 73 61 76 65 64 29 29 2c  Display(saved)),
25660 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
25670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25680 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29    traceCategory)
25690 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
256a0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
256b0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
256c0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
256d0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
256e0 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20   true;..        
256f0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  }....        ///
25700 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25710 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25720 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25730 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25740 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
25750 5b 4d 65 74 68 6f 64 49 6d 70 6c 28 4d 65 74 68  [MethodImpl(Meth
25760 6f 64 49 6d 70 6c 4f 70 74 69 6f 6e 73 2e 4e 6f  odImplOptions.No
25770 49 6e 6c 69 6e 69 6e 67 29 5d 0d 0a 20 20 20 20  Inlining)]..    
25780 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74      private stat
25790 69 63 20 62 6f 6f 6c 20 46 6f 72 45 61 63 68 46  ic bool ForEachF
257a0 72 61 6d 65 77 6f 72 6b 52 65 67 69 73 74 72 79  rameworkRegistry
257b0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 4d  (..            M
257c0 6f 63 6b 52 65 67 69 73 74 72 79 20 72 65 67 69  ockRegistry regi
257d0 73 74 72 79 2c 0d 0a 20 20 20 20 20 20 20 20 20  stry,..         
257e0 20 20 20 46 72 61 6d 65 77 6f 72 6b 4c 69 73 74     FrameworkList
257f0 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2c 0d   frameworkList,.
25800 0a 20 20 20 20 20 20 20 20 20 20 20 20 46 72 61  .            Fra
25810 6d 65 77 6f 72 6b 52 65 67 69 73 74 72 79 43 61  meworkRegistryCa
25820 6c 6c 62 61 63 6b 20 63 61 6c 6c 62 61 63 6b 2c  llback callback,
25830 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74  ..            st
25840 72 69 6e 67 20 76 65 72 73 69 6f 6e 2c 20 2f 2a  ring version, /*
25850 20 4e 4f 54 45 3a 20 4f 70 74 69 6f 6e 61 6c 2e   NOTE: Optional.
25860 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   */..           
25870 20 6f 62 6a 65 63 74 20 63 6c 69 65 6e 74 44 61   object clientDa
25880 74 61 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ta,..           
25890 20 62 6f 6f 6c 20 77 6f 77 36 34 2c 0d 0a 20 20   bool wow64,..  
258a0 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 74            bool t
258b0 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 2c 0d 0a  hrowOnMissing,..
258c0 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
258d0 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20   whatIf,..      
258e0 20 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f        bool verbo
258f0 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se,..           
25900 20 72 65 66 20 73 74 72 69 6e 67 20 65 72 72 6f   ref string erro
25910 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29  r..            )
25920 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
25930 20 20 20 20 20 20 20 20 20 69 66 20 28 72 65 67           if (reg
25940 69 73 74 72 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  istry == null)..
25950 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
25960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
25970 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64 20  rror = "invalid 
25980 72 65 67 69 73 74 72 79 22 3b 0d 0a 20 20 20 20  registry";..    
25990 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
259a0 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20  rn false;..     
259b0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
259c0 20 20 20 20 20 20 20 20 69 66 20 28 66 72 61 6d          if (fram
259d0 65 77 6f 72 6b 4c 69 73 74 20 3d 3d 20 6e 75 6c  eworkList == nul
259e0 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
259f0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
25a00 20 20 20 65 72 72 6f 72 20 3d 20 22 69 6e 76 61     error = "inva
25a10 6c 69 64 20 66 72 61 6d 65 77 6f 72 6b 20 6c 69  lid framework li
25a20 73 74 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  st";..          
25a30 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
25a40 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se;..           
25a50 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
25a60 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65    MockRegistryKe
25a70 79 20 72 6f 6f 74 4b 65 79 20 3d 20 66 72 61 6d  y rootKey = fram
25a80 65 77 6f 72 6b 4c 69 73 74 2e 52 6f 6f 74 4b 65  eworkList.RootKe
25a90 79 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  y;....          
25aa0 20 20 69 66 20 28 72 6f 6f 74 4b 65 79 20 3d 3d    if (rootKey ==
25ab0 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
25ac0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
25ad0 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22         error = "
25ae0 69 6e 76 61 6c 69 64 20 72 6f 6f 74 20 6b 65 79  invalid root key
25af0 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ";..            
25b00 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
25b10 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
25b20 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
25b30 69 66 20 28 21 4f 62 6a 65 63 74 2e 52 65 66 65  if (!Object.Refe
25b40 72 65 6e 63 65 45 71 75 61 6c 73 28 72 6f 6f 74  renceEquals(root
25b50 4b 65 79 2c 20 72 65 67 69 73 74 72 79 2e 43 75  Key, registry.Cu
25b60 72 72 65 6e 74 55 73 65 72 29 20 26 26 0d 0a 20  rrentUser) &&.. 
25b70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 21                 !
25b80 4f 62 6a 65 63 74 2e 52 65 66 65 72 65 6e 63 65  Object.Reference
25b90 45 71 75 61 6c 73 28 72 6f 6f 74 4b 65 79 2c 20  Equals(rootKey, 
25ba0 72 65 67 69 73 74 72 79 2e 4c 6f 63 61 6c 4d 61  registry.LocalMa
25bb0 63 68 69 6e 65 29 29 0d 0a 20 20 20 20 20 20 20  chine))..       
25bc0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
25bd0 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
25be0 22 72 6f 6f 74 20 6b 65 79 20 6d 75 73 74 20 62  "root key must b
25bf0 65 20 70 65 72 2d 75 73 65 72 20 6f 72 20 70 65  e per-user or pe
25c00 72 2d 6d 61 63 68 69 6e 65 22 3b 0d 0a 20 20 20  r-machine";..   
25c10 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
25c20 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20  urn false;..    
25c30 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
25c40 20 20 20 20 20 20 20 20 20 69 66 20 28 66 72 61           if (fra
25c50 6d 65 77 6f 72 6b 4c 69 73 74 2e 4e 61 6d 65 73  meworkList.Names
25c60 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
25c70 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
25c80 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20            error 
25c90 3d 20 22 6e 6f 20 66 72 61 6d 65 77 6f 72 6b 20  = "no framework 
25ca0 6e 61 6d 65 73 20 66 6f 75 6e 64 22 3b 0d 0a 20  names found";.. 
25cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
25cc0 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20  eturn false;..  
25cd0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
25ce0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 66             if (f
25cf0 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 56 65 72  rameworkList.Ver
25d00 73 69 6f 6e 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  sions == null)..
25d10 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
25d20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
25d30 72 72 6f 72 20 3d 20 22 6e 6f 20 66 72 61 6d 65  rror = "no frame
25d40 77 6f 72 6b 20 76 65 72 73 69 6f 6e 73 20 66 6f  work versions fo
25d50 75 6e 64 22 3b 0d 0a 20 20 20 20 20 20 20 20 20  und";..         
25d60 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
25d70 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lse;..          
25d80 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
25d90 20 20 20 69 66 20 28 66 72 61 6d 65 77 6f 72 6b     if (framework
25da0 4c 69 73 74 2e 50 6c 61 74 66 6f 72 6d 4e 61 6d  List.PlatformNam
25db0 65 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  es == null)..   
25dc0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
25dd0 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
25de0 72 20 3d 20 22 6e 6f 20 70 6c 61 74 66 6f 72 6d  r = "no platform
25df0 20 6e 61 6d 65 73 20 66 6f 75 6e 64 22 3b 0d 0a   names found";..
25e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25e10 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20  return false;.. 
25e20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
25e30 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
25e40 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 4e 61  frameworkList.Na
25e50 6d 65 73 2e 43 6f 75 6e 74 20 21 3d 20 66 72 61  mes.Count != fra
25e60 6d 65 77 6f 72 6b 4c 69 73 74 2e 50 6c 61 74 66  meworkList.Platf
25e70 6f 72 6d 4e 61 6d 65 73 2e 43 6f 75 6e 74 29 0d  ormNames.Count).
25e80 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
25e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25ea0 65 72 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46  error = String.F
25eb0 6f 72 6d 61 74 28 22 66 72 61 6d 65 77 6f 72 6b  ormat("framework
25ec0 20 6e 61 6d 65 20 63 6f 75 6e 74 20 7b 30 7d 20   name count {0} 
25ed0 64 6f 65 73 20 6e 6f 74 20 22 20 2b 0d 0a 20 20  does not " +..  
25ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25ef0 20 20 22 6d 61 74 63 68 20 70 6c 61 74 66 6f 72    "match platfor
25f00 6d 20 6e 61 6d 65 20 63 6f 75 6e 74 20 7b 31 7d  m name count {1}
25f10 22 2c 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74  ", frameworkList
25f20 2e 4e 61 6d 65 73 2e 43 6f 75 6e 74 2c 0d 0a 20  .Names.Count,.. 
25f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25f40 20 20 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74     frameworkList
25f50 2e 50 6c 61 74 66 6f 72 6d 4e 61 6d 65 73 2e 43  .PlatformNames.C
25f60 6f 75 6e 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  ount);....      
25f70 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
25f80 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20   false;..       
25f90 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
25fa0 20 20 20 20 20 20 66 6f 72 20 28 69 6e 74 20 69        for (int i
25fb0 6e 64 65 78 20 3d 20 30 3b 20 69 6e 64 65 78 20  ndex = 0; index 
25fc0 3c 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e  < frameworkList.
25fd0 4e 61 6d 65 73 2e 43 6f 75 6e 74 3b 20 69 6e 64  Names.Count; ind
25fe0 65 78 2b 2b 29 0d 0a 20 20 20 20 20 20 20 20 20  ex++)..         
25ff0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
26000 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
26010 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54            // NOT
26020 45 3a 20 47 72 61 62 20 74 68 65 20 6e 61 6d 65  E: Grab the name
26030 20 6f 66 20 74 68 65 20 66 72 61 6d 65 77 6f 72   of the framewor
26040 6b 20 28 65 2e 67 2e 20 22 2e 4e 45 54 46 72 61  k (e.g. ".NETFra
26050 6d 65 77 6f 72 6b 22 29 0d 0a 20 20 20 20 20 20  mework")..      
26060 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
26070 20 20 20 61 6e 64 20 74 68 65 20 6e 61 6d 65 20     and the name 
26080 6f 66 20 74 68 65 20 70 6c 61 74 66 6f 72 6d 20  of the platform 
26090 28 65 2e 67 2e 20 22 57 69 6e 64 6f 77 73 43 45  (e.g. "WindowsCE
260a0 22 29 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ")...           
260b0 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
260c0 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
260d0 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 20 3d 20  frameworkName = 
260e0 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 4e 61  frameworkList.Na
260f0 6d 65 73 5b 69 6e 64 65 78 5d 3b 0d 0a 20 20 20  mes[index];..   
26100 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72               str
26110 69 6e 67 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65  ing platformName
26120 20 3d 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74   = frameworkList
26130 2e 50 6c 61 74 66 6f 72 6d 4e 61 6d 65 73 5b 69  .PlatformNames[i
26140 6e 64 65 78 5d 3b 0d 0a 0d 0a 20 20 20 20 20 20  ndex];....      
26150 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
26160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
26170 20 4e 4f 54 45 3a 20 47 72 61 62 20 74 68 65 20   NOTE: Grab the 
26180 73 75 70 70 6f 72 74 65 64 20 76 65 72 73 69 6f  supported versio
26190 6e 73 20 6f 66 20 74 68 69 73 20 70 61 72 74 69  ns of this parti
261a0 63 75 6c 61 72 0d 0a 20 20 20 20 20 20 20 20 20  cular..         
261b0 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
261c0 66 72 61 6d 65 77 6f 72 6b 2e 0d 0a 20 20 20 20  framework...    
261d0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
261e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
261f0 56 65 72 73 69 6f 6e 4c 69 73 74 20 66 72 61 6d  VersionList fram
26200 65 77 6f 72 6b 56 65 72 73 69 6f 6e 4c 69 73 74  eworkVersionList
26210 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
26220 20 20 20 20 20 69 66 20 28 76 65 72 73 69 6f 6e       if (version
26230 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   != null)..     
26240 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
26250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26260 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
26270 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54            // NOT
26280 45 3a 20 4d 61 6e 75 61 6c 20 6f 76 65 72 72 69  E: Manual overri
26290 64 65 20 6f 66 20 74 68 65 20 2a 4f 4e 45 2a 20  de of the *ONE* 
262a0 66 72 61 6d 65 77 6f 72 6b 20 76 65 72 73 69 6f  framework versio
262b0 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  n..             
262c0 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
262d0 74 6f 20 70 72 6f 63 65 73 73 2e 0d 0a 20 20 20  to process...   
262e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
262f0 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
26300 20 20 20 20 20 20 20 20 20 66 72 61 6d 65 77 6f           framewo
26310 72 6b 56 65 72 73 69 6f 6e 4c 69 73 74 20 3d 20  rkVersionList = 
26320 6e 65 77 20 56 65 72 73 69 6f 6e 4c 69 73 74 28  new VersionList(
26330 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
26340 20 20 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72          framewor
26350 6b 56 65 72 73 69 6f 6e 4c 69 73 74 2e 41 64 64  kVersionList.Add
26360 28 6e 65 77 20 56 65 72 73 69 6f 6e 28 76 65 72  (new Version(ver
26370 73 69 6f 6e 29 29 3b 0d 0a 20 20 20 20 20 20 20  sion));..       
26380 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
26390 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65              else
263a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
263b0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
263c0 20 20 20 20 20 20 20 20 20 69 66 20 28 21 66 72           if (!fr
263d0 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 56 65 72 73  ameworkList.Vers
263e0 69 6f 6e 73 2e 54 72 79 47 65 74 56 61 6c 75 65  ions.TryGetValue
263f0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
26400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66                 f
26410 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c 20 6f 75  rameworkName, ou
26420 74 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69  t frameworkVersi
26430 6f 6e 4c 69 73 74 29 20 7c 7c 0d 0a 20 20 20 20  onList) ||..    
26440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26450 20 20 20 20 28 66 72 61 6d 65 77 6f 72 6b 56 65      (frameworkVe
26460 72 73 69 6f 6e 4c 69 73 74 20 3d 3d 20 6e 75 6c  rsionList == nul
26470 6c 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  l))..           
26480 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
26490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
264a0 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20      continue;.. 
264b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
264c0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
264d0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
264e0 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 65 61             forea
264f0 63 68 20 28 56 65 72 73 69 6f 6e 20 66 72 61 6d  ch (Version fram
26500 65 77 6f 72 6b 56 65 72 73 69 6f 6e 20 69 6e 20  eworkVersion in 
26510 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e  frameworkVersion
26520 4c 69 73 74 29 0d 0a 20 20 20 20 20 20 20 20 20  List)..         
26530 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
26540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
26550 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54  aceOps.DebugAndT
26560 72 61 63 65 28 54 72 61 63 65 50 72 69 6f 72 69  race(TracePriori
26570 74 79 2e 4c 6f 77 65 72 2c 0d 0a 20 20 20 20 20  ty.Lower,..     
26580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26590 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b     debugCallback
265a0 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c  , traceCallback,
265b0 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d   String.Format(.
265c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
265d0 20 20 20 20 20 20 20 20 20 22 66 72 61 6d 65 77           "framew
265e0 6f 72 6b 4e 61 6d 65 20 3d 20 7b 30 7d 2c 20 66  orkName = {0}, f
265f0 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 20  rameworkVersion 
26600 3d 20 7b 31 7d 2c 20 22 20 2b 0d 0a 20 20 20 20  = {1}, " +..    
26610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26620 20 20 20 20 22 70 6c 61 74 66 6f 72 6d 4e 61 6d      "platformNam
26630 65 20 3d 20 7b 32 7d 22 2c 20 46 6f 72 44 69 73  e = {2}", ForDis
26640 70 6c 61 79 28 66 72 61 6d 65 77 6f 72 6b 4e 61  play(frameworkNa
26650 6d 65 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  me),..          
26660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f                Fo
26670 72 44 69 73 70 6c 61 79 28 66 72 61 6d 65 77 6f  rDisplay(framewo
26680 72 6b 56 65 72 73 69 6f 6e 29 2c 0d 0a 20 20 20  rkVersion),..   
26690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
266a0 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28       ForDisplay(
266b0 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 29 29 2c 20  platformName)), 
266c0 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
266d0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
266e0 20 20 20 20 20 20 20 69 66 20 28 21 48 61 76 65         if (!Have
266f0 46 72 61 6d 65 77 6f 72 6b 52 65 67 69 73 74 72  FrameworkRegistr
26700 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y(..            
26710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26720 72 6f 6f 74 4b 65 79 2c 20 66 72 61 6d 65 77 6f  rootKey, framewo
26730 72 6b 4e 61 6d 65 2c 20 66 72 61 6d 65 77 6f 72  rkName, framewor
26740 6b 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20  kVersion,..     
26750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26760 20 20 20 20 20 20 20 70 6c 61 74 66 6f 72 6d 4e         platformN
26770 61 6d 65 2c 20 77 6f 77 36 34 2c 20 77 68 61 74  ame, wow64, what
26780 49 66 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a 20  If, verbose)).. 
26790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
267a0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
267b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
267c0 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54  aceOps.DebugAndT
267d0 72 61 63 65 28 54 72 61 63 65 50 72 69 6f 72 69  race(TracePriori
267e0 74 79 2e 4c 6f 77 2c 0d 0a 20 20 20 20 20 20 20  ty.Low,..       
267f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26800 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61       debugCallba
26810 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63  ck, traceCallbac
26820 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  k,..            
26830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26840 22 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b 20  ".NET Framework 
26850 72 65 67 69 73 74 72 79 20 6e 6f 74 20 66 6f 75  registry not fou
26860 6e 64 2c 20 73 6b 69 70 70 69 6e 67 2e 2e 2e 22  nd, skipping..."
26870 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
26880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
26890 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
268a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
268b0 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e            contin
268c0 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
268d0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
268e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
268f0 20 20 69 66 20 28 63 61 6c 6c 62 61 63 6b 20 3d    if (callback =
26900 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
26910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26920 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 0d 0a 20 20   continue;....  
26930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26940 20 20 69 66 20 28 21 63 61 6c 6c 62 61 63 6b 28    if (!callback(
26950 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
26960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f                ro
26970 6f 74 4b 65 79 2c 20 66 72 61 6d 65 77 6f 72 6b  otKey, framework
26980 4e 61 6d 65 2c 20 66 72 61 6d 65 77 6f 72 6b 56  Name, frameworkV
26990 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20  ersion,..       
269a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
269b0 20 20 20 20 20 70 6c 61 74 66 6f 72 6d 4e 61 6d       platformNam
269c0 65 2c 20 63 6c 69 65 6e 74 44 61 74 61 2c 20 77  e, clientData, w
269d0 6f 77 36 34 2c 20 74 68 72 6f 77 4f 6e 4d 69 73  ow64, throwOnMis
269e0 73 69 6e 67 2c 0d 0a 20 20 20 20 20 20 20 20 20  sing,..         
269f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26a00 20 20 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f     whatIf, verbo
26a10 73 65 2c 20 72 65 66 20 65 72 72 6f 72 29 29 0d  se, ref error)).
26a20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
26a30 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
26a40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26a50 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20  return false;.. 
26a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26a70 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
26a80 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
26a90 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
26aa0 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75        return tru
26ab0 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20  e;..        }.. 
26ac0 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f         #endregio
26ad0 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  n....        ///
26ae0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26af0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26b00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26b10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26b20 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
26b30 23 72 65 67 69 6f 6e 20 50 65 72 2d 56 69 73 75  #region Per-Visu
26b40 61 6c 20 53 74 75 64 69 6f 20 56 65 72 73 69 6f  al Studio Versio
26b50 6e 20 48 61 6e 64 6c 69 6e 67 0d 0a 20 20 20 20  n Handling..    
26b60 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74      private stat
26b70 69 63 20 76 6f 69 64 20 49 6e 69 74 69 61 6c 69  ic void Initiali
26b80 7a 65 56 73 4c 69 73 74 28 0d 0a 20 20 20 20 20  zeVsList(..     
26b90 20 20 20 20 20 20 20 4d 6f 63 6b 52 65 67 69 73         MockRegis
26ba0 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79 2c 0d  tryKey rootKey,.
26bb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 43 6f 6e  .            Con
26bc0 66 69 67 75 72 61 74 69 6f 6e 20 63 6f 6e 66 69  figuration confi
26bd0 67 75 72 61 74 69 6f 6e 2c 0d 0a 20 20 20 20 20  guration,..     
26be0 20 20 20 20 20 20 20 72 65 66 20 56 73 4c 69 73         ref VsLis
26bf0 74 20 76 73 4c 69 73 74 0d 0a 20 20 20 20 20 20  t vsList..      
26c00 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
26c10 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
26c20 69 66 20 28 76 73 4c 69 73 74 20 3d 3d 20 6e 75  if (vsList == nu
26c30 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
26c40 20 20 20 20 20 76 73 4c 69 73 74 20 3d 20 6e 65       vsList = ne
26c50 77 20 56 73 4c 69 73 74 28 29 3b 0d 0a 0d 0a 20  w VsList();.... 
26c60 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76             if (v
26c70 73 4c 69 73 74 2e 52 6f 6f 74 4b 65 79 20 3d 3d  sList.RootKey ==
26c80 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
26c90 20 20 20 20 20 20 20 20 76 73 4c 69 73 74 2e 52          vsList.R
26ca0 6f 6f 74 4b 65 79 20 3d 20 72 6f 6f 74 4b 65 79  ootKey = rootKey
26cb0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
26cc0 20 69 66 20 28 76 73 4c 69 73 74 2e 56 65 72 73   if (vsList.Vers
26cd0 69 6f 6e 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  ions == null).. 
26ce0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
26cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 76 73                vs
26d00 4c 69 73 74 2e 56 65 72 73 69 6f 6e 73 20 3d 20  List.Versions = 
26d10 6e 65 77 20 56 65 72 73 69 6f 6e 4c 69 73 74 28  new VersionList(
26d20 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
26d30 20 20 20 20 20 20 69 66 20 28 28 63 6f 6e 66 69        if ((confi
26d40 67 75 72 61 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c  guration == null
26d50 29 20 7c 7c 20 21 63 6f 6e 66 69 67 75 72 61 74  ) || !configurat
26d60 69 6f 6e 2e 4e 6f 56 73 32 30 30 35 29 0d 0a 20  ion.NoVs2005).. 
26d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26d80 20 20 20 76 73 4c 69 73 74 2e 56 65 72 73 69 6f     vsList.Versio
26d90 6e 73 2e 41 64 64 28 6e 65 77 20 56 65 72 73 69  ns.Add(new Versi
26da0 6f 6e 28 38 2c 20 30 29 29 3b 20 2f 2f 20 32 30  on(8, 0)); // 20
26db0 30 35 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  05....          
26dc0 20 20 20 20 20 20 69 66 20 28 28 63 6f 6e 66 69        if ((confi
26dd0 67 75 72 61 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c  guration == null
26de0 29 20 7c 7c 20 21 63 6f 6e 66 69 67 75 72 61 74  ) || !configurat
26df0 69 6f 6e 2e 4e 6f 56 73 32 30 30 38 29 0d 0a 20  ion.NoVs2008).. 
26e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26e10 20 20 20 76 73 4c 69 73 74 2e 56 65 72 73 69 6f     vsList.Versio
26e20 6e 73 2e 41 64 64 28 6e 65 77 20 56 65 72 73 69  ns.Add(new Versi
26e30 6f 6e 28 39 2c 20 30 29 29 3b 20 2f 2f 20 32 30  on(9, 0)); // 20
26e40 30 38 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  08....          
26e50 20 20 20 20 20 20 69 66 20 28 28 63 6f 6e 66 69        if ((confi
26e60 67 75 72 61 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c  guration == null
26e70 29 20 7c 7c 20 21 63 6f 6e 66 69 67 75 72 61 74  ) || !configurat
26e80 69 6f 6e 2e 4e 6f 56 73 32 30 31 30 29 0d 0a 20  ion.NoVs2010).. 
26e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26ea0 20 20 20 76 73 4c 69 73 74 2e 56 65 72 73 69 6f     vsList.Versio
26eb0 6e 73 2e 41 64 64 28 6e 65 77 20 56 65 72 73 69  ns.Add(new Versi
26ec0 6f 6e 28 31 30 2c 20 30 29 29 3b 2f 2f 20 32 30  on(10, 0));// 20
26ed0 31 30 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  10....          
26ee0 20 20 20 20 20 20 69 66 20 28 28 63 6f 6e 66 69        if ((confi
26ef0 67 75 72 61 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c  guration == null
26f00 29 20 7c 7c 20 21 63 6f 6e 66 69 67 75 72 61 74  ) || !configurat
26f10 69 6f 6e 2e 4e 6f 56 73 32 30 31 32 29 0d 0a 20  ion.NoVs2012).. 
26f20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26f30 20 20 20 76 73 4c 69 73 74 2e 56 65 72 73 69 6f     vsList.Versio
26f40 6e 73 2e 41 64 64 28 6e 65 77 20 56 65 72 73 69  ns.Add(new Versi
26f50 6f 6e 28 31 31 2c 20 30 29 29 3b 2f 2f 20 32 30  on(11, 0));// 20
26f60 31 32 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  12..            
26f70 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  }..        }....
26f80 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
26f90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26fa0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26fb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26fc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
26fd0 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  ...        priva
26fe0 74 65 20 73 74 61 74 69 63 20 62 6f 6f 6c 20 48  te static bool H
26ff0 61 76 65 56 73 56 65 72 73 69 6f 6e 28 0d 0a 20  aveVsVersion(.. 
27000 20 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52             MockR
27010 65 67 69 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b  egistryKey rootK
27020 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ey,..           
27030 20 56 65 72 73 69 6f 6e 20 76 73 56 65 72 73 69   Version vsVersi
27040 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  on,..           
27050 20 62 6f 6f 6c 20 77 6f 77 36 34 2c 0d 0a 20 20   bool wow64,..  
27060 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77            bool w
27070 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20  hatIf,..        
27080 20 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65      bool verbose
27090 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d  ..            ).
270a0 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
270b0 20 20 20 20 20 20 20 20 69 66 20 28 76 73 56 65          if (vsVe
270c0 72 73 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  rsion == null)..
270d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
270e0 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d  return false;...
270f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72  .            str
27100 69 6e 67 20 6b 65 79 4e 61 6d 65 20 3d 20 47 65  ing keyName = Ge
27110 74 56 73 4b 65 79 4e 61 6d 65 28 76 73 56 65 72  tVsKeyName(vsVer
27120 73 69 6f 6e 2c 20 77 6f 77 36 34 29 3b 0d 0a 0d  sion, wow64);...
27130 0a 20 20 20 20 20 20 20 20 20 20 20 20 75 73 69  .            usi
27140 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73 74 72 79  ng (MockRegistry
27150 4b 65 79 20 6b 65 79 20 3d 20 52 65 67 69 73 74  Key key = Regist
27160 72 79 48 65 6c 70 65 72 2e 4f 70 65 6e 53 75 62  ryHelper.OpenSub
27170 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20  Key(..          
27180 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65            rootKe
27190 79 2c 20 6b 65 79 4e 61 6d 65 2c 20 66 61 6c 73  y, keyName, fals
271a0 65 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f  e, whatIf, verbo
271b0 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  se))..          
271c0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
271d0 20 20 20 20 20 69 66 20 28 6b 65 79 20 3d 3d 20       if (key == 
271e0 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
271f0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
27200 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20  n false;....    
27210 20 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65              obje
27220 63 74 20 76 61 6c 75 65 20 3d 20 52 65 67 69 73  ct value = Regis
27230 74 72 79 48 65 6c 70 65 72 2e 47 65 74 56 61 6c  tryHelper.GetVal
27240 75 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue(..           
27250 20 20 20 20 20 20 20 20 20 6b 65 79 2c 20 22 49           key, "I
27260 6e 73 74 61 6c 6c 44 69 72 22 2c 20 6e 75 6c 6c  nstallDir", null
27270 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73  , whatIf, verbos
27280 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e);....         
27290 20 20 20 20 20 20 20 69 66 20 28 21 28 76 61 6c         if (!(val
272a0 75 65 20 69 73 20 73 74 72 69 6e 67 29 29 0d 0a  ue is string))..
272b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
272c0 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
272d0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
272e0 20 20 20 20 20 73 74 72 69 6e 67 20 64 69 72 65       string dire
272f0 63 74 6f 72 79 20 3d 20 28 73 74 72 69 6e 67 29  ctory = (string)
27300 76 61 6c 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  value;....      
27310 20 20 20 20 20 20 20 20 20 20 69 66 20 28 53 74            if (St
27320 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70  ring.IsNullOrEmp
27330 74 79 28 64 69 72 65 63 74 6f 72 79 29 29 0d 0a  ty(directory))..
27340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27350 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
27360 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
27370 20 20 20 20 20 69 66 20 28 21 44 69 72 65 63 74       if (!Direct
27380 6f 72 79 2e 45 78 69 73 74 73 28 64 69 72 65 63  ory.Exists(direc
27390 74 6f 72 79 29 29 0d 0a 20 20 20 20 20 20 20 20  tory))..        
273a0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
273b0 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20  rn false;....   
273c0 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61               Tra
273d0 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72  ceOps.DebugAndTr
273e0 61 63 65 28 54 72 61 63 65 50 72 69 6f 72 69 74  ace(TracePriorit
273f0 79 2e 4c 6f 77 65 72 2c 0d 0a 20 20 20 20 20 20  y.Lower,..      
27400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65                de
27410 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61  bugCallback, tra
27420 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69  ceCallback, Stri
27430 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ng.Format(..    
27440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27450 22 56 69 73 75 61 6c 20 53 74 75 64 69 6f 20 7b  "Visual Studio {
27460 30 7d 20 66 6f 75 6e 64 20 69 6e 20 64 69 72 65  0} found in dire
27470 63 74 6f 72 79 20 7b 31 7d 2e 22 2c 0d 0a 20 20  ctory {1}.",..  
27480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27490 20 20 46 6f 72 44 69 73 70 6c 61 79 28 76 73 56    ForDisplay(vsV
274a0 65 72 73 69 6f 6e 29 2c 20 46 6f 72 44 69 73 70  ersion), ForDisp
274b0 6c 61 79 28 64 69 72 65 63 74 6f 72 79 29 29 2c  lay(directory)),
274c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
274d0 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67        traceCateg
274e0 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
274f0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
27500 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  true;..         
27510 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d     }..        }.
27520 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
27530 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27540 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27550 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27560 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27570 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 5b 4d  //....        [M
27580 65 74 68 6f 64 49 6d 70 6c 28 4d 65 74 68 6f 64  ethodImpl(Method
27590 49 6d 70 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e  ImplOptions.NoIn
275a0 6c 69 6e 69 6e 67 29 5d 0d 0a 20 20 20 20 20 20  lining)]..      
275b0 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63    private static
275c0 20 62 6f 6f 6c 20 46 6f 72 45 61 63 68 56 73 56   bool ForEachVsV
275d0 65 72 73 69 6f 6e 52 65 67 69 73 74 72 79 28 0d  ersionRegistry(.
275e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 4d 6f 63  .            Moc
275f0 6b 52 65 67 69 73 74 72 79 20 72 65 67 69 73 74  kRegistry regist
27600 72 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ry,..           
27610 20 56 73 4c 69 73 74 20 76 73 4c 69 73 74 2c 0d   VsList vsList,.
27620 0a 20 20 20 20 20 20 20 20 20 20 20 20 56 69 73  .            Vis
27630 75 61 6c 53 74 75 64 69 6f 52 65 67 69 73 74 72  ualStudioRegistr
27640 79 43 61 6c 6c 62 61 63 6b 20 63 61 6c 6c 62 61  yCallback callba
27650 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ck,..           
27660 20 50 61 63 6b 61 67 65 20 70 61 63 6b 61 67 65   Package package
27670 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6f  ,..            o
27680 62 6a 65 63 74 20 63 6c 69 65 6e 74 44 61 74 61  bject clientData
27690 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  ,..            b
276a0 6f 6f 6c 20 77 6f 77 36 34 2c 0d 0a 20 20 20 20  ool wow64,..    
276b0 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 74 68 72          bool thr
276c0 6f 77 4f 6e 4d 69 73 73 69 6e 67 2c 0d 0a 20 20  owOnMissing,..  
276d0 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77            bool w
276e0 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20  hatIf,..        
276f0 20 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65      bool verbose
27700 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  ,..            r
27710 65 66 20 73 74 72 69 6e 67 20 65 72 72 6f 72 0d  ef string error.
27720 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a  .            )..
27730 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
27740 20 20 20 20 20 20 20 69 66 20 28 72 65 67 69 73         if (regis
27750 74 72 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  try == null)..  
27760 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
27770 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
27780 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64 20 72 65  or = "invalid re
27790 67 69 73 74 72 79 22 3b 0d 0a 20 20 20 20 20 20  gistry";..      
277a0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
277b0 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20   false;..       
277c0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
277d0 20 20 20 20 20 20 69 66 20 28 76 73 4c 69 73 74        if (vsList
277e0 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
277f0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
27800 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20            error 
27810 3d 20 22 69 6e 76 61 6c 69 64 20 56 53 20 6c 69  = "invalid VS li
27820 73 74 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  st";..          
27830 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
27840 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se;..           
27850 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
27860 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65    MockRegistryKe
27870 79 20 72 6f 6f 74 4b 65 79 20 3d 20 76 73 4c 69  y rootKey = vsLi
27880 73 74 2e 52 6f 6f 74 4b 65 79 3b 0d 0a 0d 0a 20  st.RootKey;.... 
27890 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 72             if (r
278a0 6f 6f 74 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d  ootKey == null).
278b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
278c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
278d0 65 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64  error = "invalid
278e0 20 72 6f 6f 74 20 6b 65 79 22 3b 0d 0a 20 20 20   root key";..   
278f0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
27900 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20  urn false;..    
27910 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
27920 20 20 20 20 20 20 20 20 20 69 66 20 28 21 4f 62           if (!Ob
27930 6a 65 63 74 2e 52 65 66 65 72 65 6e 63 65 45 71  ject.ReferenceEq
27940 75 61 6c 73 28 72 6f 6f 74 4b 65 79 2c 20 72 65  uals(rootKey, re
27950 67 69 73 74 72 79 2e 43 75 72 72 65 6e 74 55 73  gistry.CurrentUs
27960 65 72 29 20 26 26 0d 0a 20 20 20 20 20 20 20 20  er) &&..        
27970 20 20 20 20 20 20 20 20 21 4f 62 6a 65 63 74 2e          !Object.
27980 52 65 66 65 72 65 6e 63 65 45 71 75 61 6c 73 28  ReferenceEquals(
27990 72 6f 6f 74 4b 65 79 2c 20 72 65 67 69 73 74 72  rootKey, registr
279a0 79 2e 4c 6f 63 61 6c 4d 61 63 68 69 6e 65 29 29  y.LocalMachine))
279b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
279c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
279d0 20 65 72 72 6f 72 20 3d 20 22 72 6f 6f 74 20 6b   error = "root k
279e0 65 79 20 6d 75 73 74 20 62 65 20 70 65 72 2d 75  ey must be per-u
279f0 73 65 72 20 6f 72 20 70 65 72 2d 6d 61 63 68 69  ser or per-machi
27a00 6e 65 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ne";..          
27a10 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
27a20 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se;..           
27a30 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
27a40 20 20 69 66 20 28 76 73 4c 69 73 74 2e 56 65 72    if (vsList.Ver
27a50 73 69 6f 6e 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  sions == null)..
27a60 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
27a70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
27a80 72 72 6f 72 20 3d 20 22 6e 6f 20 56 53 20 76 65  rror = "no VS ve
27a90 72 73 69 6f 6e 73 20 66 6f 75 6e 64 22 3b 0d 0a  rsions found";..
27aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27ab0 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20  return false;.. 
27ac0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
27ad0 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 65              fore
27ae0 61 63 68 20 28 56 65 72 73 69 6f 6e 20 76 73 56  ach (Version vsV
27af0 65 72 73 69 6f 6e 20 69 6e 20 76 73 4c 69 73 74  ersion in vsList
27b00 2e 56 65 72 73 69 6f 6e 73 29 0d 0a 20 20 20 20  .Versions)..    
27b10 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
27b20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
27b30 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63  Ops.DebugAndTrac
27b40 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e  e(TracePriority.
27b50 4c 6f 77 65 72 2c 0d 0a 20 20 20 20 20 20 20 20  Lower,..        
27b60 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62 75              debu
27b70 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65  gCallback, trace
27b80 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67  Callback, String
27b90 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  .Format(..      
27ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 76                "v
27bb0 73 56 65 72 73 69 6f 6e 20 3d 20 7b 30 7d 22 2c  sVersion = {0}",
27bc0 20 46 6f 72 44 69 73 70 6c 61 79 28 76 73 56 65   ForDisplay(vsVe
27bd0 72 73 69 6f 6e 29 29 2c 0d 0a 20 20 20 20 20 20  rsion)),..      
27be0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
27bf0 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  aceCategory);...
27c00 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
27c10 20 69 66 20 28 21 48 61 76 65 56 73 56 65 72 73   if (!HaveVsVers
27c20 69 6f 6e 28 72 6f 6f 74 4b 65 79 2c 20 76 73 56  ion(rootKey, vsV
27c30 65 72 73 69 6f 6e 2c 20 77 6f 77 36 34 2c 20 77  ersion, wow64, w
27c40 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 29  hatIf, verbose))
27c50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
27c60 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
27c70 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70           TraceOp
27c80 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28  s.DebugAndTrace(
27c90 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f  TracePriority.Lo
27ca0 77 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  w,..            
27cb0 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62 75              debu
27cc0 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65  gCallback, trace
27cd0 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20  Callback,..     
27ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27cf0 20 20 20 22 56 69 73 75 61 6c 20 53 74 75 64 69     "Visual Studi
27d00 6f 20 76 65 72 73 69 6f 6e 20 6e 6f 74 20 66 6f  o version not fo
27d10 75 6e 64 2c 20 73 6b 69 70 70 69 6e 67 2e 2e 2e  und, skipping...
27d20 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
27d30 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
27d40 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
27d50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27d60 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20     continue;..  
27d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
27d80 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
27d90 20 20 20 69 66 20 28 63 61 6c 6c 62 61 63 6b 20     if (callback 
27da0 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
27db0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
27dc0 6e 74 69 6e 75 65 3b 0d 0a 0d 0a 20 20 20 20 20  ntinue;....     
27dd0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21             if (!
27de0 63 61 6c 6c 62 61 63 6b 28 0d 0a 20 20 20 20 20  callback(..     
27df0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27e00 20 20 20 72 6f 6f 74 4b 65 79 2c 20 76 73 56 65     rootKey, vsVe
27e10 72 73 69 6f 6e 2c 20 70 61 63 6b 61 67 65 2c 20  rsion, package, 
27e20 63 6c 69 65 6e 74 44 61 74 61 2c 20 77 6f 77 36  clientData, wow6
27e30 34 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  4,..            
27e40 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f              thro
27e50 77 4f 6e 4d 69 73 73 69 6e 67 2c 20 77 68 61 74  wOnMissing, what
27e60 49 66 2c 20 76 65 72 62 6f 73 65 2c 20 72 65 66  If, verbose, ref
27e70 20 65 72 72 6f 72 29 29 0d 0a 20 20 20 20 20 20   error))..      
27e80 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
27e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27ea0 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
27eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27ec0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
27ed0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
27ee0 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20  return true;..  
27ef0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
27f00 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20   #endregion.... 
27f10 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
27f20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27f30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27f40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27f50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
27f60 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f  ..        #regio
27f70 6e 20 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20  n Configuration 
27f80 46 69 6c 65 20 48 61 6e 64 6c 69 6e 67 0d 0a 20  File Handling.. 
27f90 20 20 20 20 20 20 20 5b 4d 65 74 68 6f 64 49 6d         [MethodIm
27fa0 70 6c 28 4d 65 74 68 6f 64 49 6d 70 6c 4f 70 74  pl(MethodImplOpt
27fb0 69 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e 69 6e 67 29  ions.NoInlining)
27fc0 5d 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  ]..        priva
27fd0 74 65 20 73 74 61 74 69 63 20 62 6f 6f 6c 20 41  te static bool A
27fe0 64 64 44 62 50 72 6f 76 69 64 65 72 46 61 63 74  ddDbProviderFact
27ff0 6f 72 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ory(..          
28000 20 20 73 74 72 69 6e 67 20 66 69 6c 65 4e 61 6d    string fileNam
28010 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
28020 73 74 72 69 6e 67 20 69 6e 76 61 72 69 61 6e 74  string invariant
28030 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  ,..            s
28040 74 72 69 6e 67 20 6e 61 6d 65 2c 0d 0a 20 20 20  tring name,..   
28050 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
28060 64 65 73 63 72 69 70 74 69 6f 6e 2c 0d 0a 20 20  description,..  
28070 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
28080 20 74 79 70 65 4e 61 6d 65 2c 0d 0a 20 20 20 20   typeName,..    
28090 20 20 20 20 20 20 20 20 41 73 73 65 6d 62 6c 79          Assembly
280a0 4e 61 6d 65 20 61 73 73 65 6d 62 6c 79 4e 61 6d  Name assemblyNam
280b0 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
280c0 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20  bool whatIf,..  
280d0 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76            bool v
280e0 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20  erbose,..       
280f0 20 20 20 20 20 72 65 66 20 62 6f 6f 6c 20 73 61       ref bool sa
28100 76 65 64 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ved,..          
28110 20 20 72 65 66 20 73 74 72 69 6e 67 20 65 72 72    ref string err
28120 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  or..            
28130 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
28140 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 64            bool d
28150 69 72 74 79 20 3d 20 66 61 6c 73 65 3b 0d 0a 20  irty = false;.. 
28160 20 20 20 20 20 20 20 20 20 20 20 58 6d 6c 44 6f             XmlDo
28170 63 75 6d 65 6e 74 20 64 6f 63 75 6d 65 6e 74 20  cument document 
28180 3d 20 6e 65 77 20 58 6d 6c 44 6f 63 75 6d 65 6e  = new XmlDocumen
28190 74 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  t();....        
281a0 20 20 20 20 64 6f 63 75 6d 65 6e 74 2e 50 72 65      document.Pre
281b0 73 65 72 76 65 57 68 69 74 65 73 70 61 63 65 20  serveWhitespace 
281c0 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20  = true;..       
281d0 20 20 20 20 20 64 6f 63 75 6d 65 6e 74 2e 4c 6f       document.Lo
281e0 61 64 28 66 69 6c 65 4e 61 6d 65 29 3b 0d 0a 0d  ad(fileName);...
281f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 58 6d 6c  .            Xml
28200 45 6c 65 6d 65 6e 74 20 61 64 64 45 6c 65 6d 65  Element addEleme
28210 6e 74 20 3d 20 64 6f 63 75 6d 65 6e 74 2e 53 65  nt = document.Se
28220 6c 65 63 74 53 69 6e 67 6c 65 4e 6f 64 65 28 0d  lectSingleNode(.
28230 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
28240 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 58   String.Format(X
28250 50 61 74 68 46 6f 72 41 64 64 45 6c 65 6d 65 6e  PathForAddElemen
28260 74 2c 20 69 6e 76 61 72 69 61 6e 74 29 29 20 61  t, invariant)) a
28270 73 20 58 6d 6c 45 6c 65 6d 65 6e 74 3b 0d 0a 0d  s XmlElement;...
28280 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
28290 28 61 64 64 45 6c 65 6d 65 6e 74 20 3d 3d 20 6e  (addElement == n
282a0 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
282b0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
282c0 20 20 20 20 20 73 74 72 69 6e 67 5b 5d 20 65 6c       string[] el
282d0 65 6d 65 6e 74 4e 61 6d 65 73 20 3d 20 7b 0d 0a  ementNames = {..
282e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
282f0 20 20 20 20 22 73 79 73 74 65 6d 2e 64 61 74 61      "system.data
28300 22 2c 20 22 44 62 50 72 6f 76 69 64 65 72 46 61  ", "DbProviderFa
28310 63 74 6f 72 69 65 73 22 0d 0a 20 20 20 20 20 20  ctories"..      
28320 20 20 20 20 20 20 20 20 20 20 7d 3b 0d 0a 0d 0a            };....
28330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28340 58 6d 6c 45 6c 65 6d 65 6e 74 20 70 72 65 76 69  XmlElement previ
28350 6f 75 73 45 6c 65 6d 65 6e 74 20 3d 0d 0a 20 20  ousElement =..  
28360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28370 20 20 64 6f 63 75 6d 65 6e 74 2e 44 6f 63 75 6d    document.Docum
28380 65 6e 74 45 6c 65 6d 65 6e 74 3b 20 2f 2a 20 63  entElement; /* c
28390 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 2a 2f 0d  onfiguration */.
283a0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
283b0 20 20 20 66 6f 72 65 61 63 68 20 28 73 74 72 69     foreach (stri
283c0 6e 67 20 65 6c 65 6d 65 6e 74 4e 61 6d 65 20 69  ng elementName i
283d0 6e 20 65 6c 65 6d 65 6e 74 4e 61 6d 65 73 29 0d  n elementNames).
283e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
283f0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
28400 20 20 20 20 20 20 20 20 61 64 64 45 6c 65 6d 65          addEleme
28410 6e 74 20 3d 20 70 72 65 76 69 6f 75 73 45 6c 65  nt = previousEle
28420 6d 65 6e 74 2e 53 65 6c 65 63 74 53 69 6e 67 6c  ment.SelectSingl
28430 65 4e 6f 64 65 28 0d 0a 20 20 20 20 20 20 20 20  eNode(..        
28440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28450 65 6c 65 6d 65 6e 74 4e 61 6d 65 29 20 61 73 20  elementName) as 
28460 58 6d 6c 45 6c 65 6d 65 6e 74 3b 0d 0a 0d 0a 20  XmlElement;.... 
28470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28480 20 20 20 69 66 20 28 61 64 64 45 6c 65 6d 65 6e     if (addElemen
28490 74 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  t == null)..    
284a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
284b0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
284c0 20 20 20 20 20 20 20 20 20 20 20 61 64 64 45 6c             addEl
284d0 65 6d 65 6e 74 20 3d 20 64 6f 63 75 6d 65 6e 74  ement = document
284e0 2e 43 72 65 61 74 65 45 6c 65 6d 65 6e 74 28 0d  .CreateElement(.
284f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
28500 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 65               ele
28510 6d 65 6e 74 4e 61 6d 65 2c 20 53 74 72 69 6e 67  mentName, String
28520 2e 45 6d 70 74 79 29 3b 0d 0a 0d 0a 20 20 20 20  .Empty);....    
28530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28540 20 20 20 20 70 72 65 76 69 6f 75 73 45 6c 65 6d      previousElem
28550 65 6e 74 2e 41 70 70 65 6e 64 43 68 69 6c 64 28  ent.AppendChild(
28560 61 64 64 45 6c 65 6d 65 6e 74 29 3b 0d 0a 20 20  addElement);..  
28570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28580 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
28590 20 20 20 20 20 20 20 20 20 20 20 70 72 65 76 69             previ
285a0 6f 75 73 45 6c 65 6d 65 6e 74 20 3d 20 61 64 64  ousElement = add
285b0 45 6c 65 6d 65 6e 74 3b 0d 0a 20 20 20 20 20 20  Element;..      
285c0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
285d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61                 a
285e0 64 64 45 6c 65 6d 65 6e 74 20 3d 20 64 6f 63 75  ddElement = docu
285f0 6d 65 6e 74 2e 43 72 65 61 74 65 45 6c 65 6d 65  ment.CreateEleme
28600 6e 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  nt(..           
28610 20 20 20 20 20 20 20 20 20 22 61 64 64 22 2c 20           "add", 
28620 53 74 72 69 6e 67 2e 45 6d 70 74 79 29 3b 0d 0a  String.Empty);..
28630 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
28640 20 20 70 72 65 76 69 6f 75 73 45 6c 65 6d 65 6e    previousElemen
28650 74 2e 41 70 70 65 6e 64 43 68 69 6c 64 28 61 64  t.AppendChild(ad
28660 64 45 6c 65 6d 65 6e 74 29 3b 0d 0a 0d 0a 20 20  dElement);....  
28670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 69                di
28680 72 74 79 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20  rty = true;..   
28690 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
286a0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21 53            if (!S
286b0 74 72 69 6e 67 2e 45 71 75 61 6c 73 28 61 64 64  tring.Equals(add
286c0 45 6c 65 6d 65 6e 74 2e 47 65 74 41 74 74 72 69  Element.GetAttri
286d0 62 75 74 65 28 22 6e 61 6d 65 22 29 2c 0d 0a 20  bute("name"),.. 
286e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
286f0 20 20 20 6e 61 6d 65 2c 20 53 74 72 69 6e 67 43     name, StringC
28700 6f 6d 70 61 72 69 73 6f 6e 2e 4f 72 64 69 6e 61  omparison.Ordina
28710 6c 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  l))..           
28720 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
28730 20 20 20 20 61 64 64 45 6c 65 6d 65 6e 74 2e 53      addElement.S
28740 65 74 41 74 74 72 69 62 75 74 65 28 22 6e 61 6d  etAttribute("nam
28750 65 22 2c 20 6e 61 6d 65 29 3b 0d 0a 20 20 20 20  e", name);..    
28760 20 20 20 20 20 20 20 20 20 20 20 20 64 69 72 74              dirt
28770 79 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20  y = true;..     
28780 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
28790 20 20 20 20 20 20 20 20 69 66 20 28 21 53 74 72          if (!Str
287a0 69 6e 67 2e 45 71 75 61 6c 73 28 61 64 64 45 6c  ing.Equals(addEl
287b0 65 6d 65 6e 74 2e 47 65 74 41 74 74 72 69 62 75  ement.GetAttribu
287c0 74 65 28 22 69 6e 76 61 72 69 61 6e 74 22 29 2c  te("invariant"),
287d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
287e0 20 20 20 20 20 20 69 6e 76 61 72 69 61 6e 74 2c        invariant,
287f0 20 53 74 72 69 6e 67 43 6f 6d 70 61 72 69 73 6f   StringCompariso
28800 6e 2e 4f 72 64 69 6e 61 6c 29 29 0d 0a 20 20 20  n.Ordinal))..   
28810 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
28820 20 20 20 20 20 20 20 20 20 20 20 20 61 64 64 45              addE
28830 6c 65 6d 65 6e 74 2e 53 65 74 41 74 74 72 69 62  lement.SetAttrib
28840 75 74 65 28 22 69 6e 76 61 72 69 61 6e 74 22 2c  ute("invariant",
28850 20 69 6e 76 61 72 69 61 6e 74 29 3b 0d 0a 20 20   invariant);..  
28860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 69                di
28870 72 74 79 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20  rty = true;..   
28880 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
28890 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21 53            if (!S
288a0 74 72 69 6e 67 2e 45 71 75 61 6c 73 28 61 64 64  tring.Equals(add
288b0 45 6c 65 6d 65 6e 74 2e 47 65 74 41 74 74 72 69  Element.GetAttri
288c0 62 75 74 65 28 22 64 65 73 63 72 69 70 74 69 6f  bute("descriptio
288d0 6e 22 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  n"),..          
288e0 20 20 20 20 20 20 20 20 20 20 64 65 73 63 72 69            descri
288f0 70 74 69 6f 6e 2c 20 53 74 72 69 6e 67 43 6f 6d  ption, StringCom
28900 70 61 72 69 73 6f 6e 2e 4f 72 64 69 6e 61 6c 29  parison.Ordinal)
28910 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
28920 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
28930 20 20 61 64 64 45 6c 65 6d 65 6e 74 2e 53 65 74    addElement.Set
28940 41 74 74 72 69 62 75 74 65 28 22 64 65 73 63 72  Attribute("descr
28950 69 70 74 69 6f 6e 22 2c 20 64 65 73 63 72 69 70  iption", descrip
28960 74 69 6f 6e 29 3b 0d 0a 20 20 20 20 20 20 20 20  tion);..        
28970 20 20 20 20 20 20 20 20 64 69 72 74 79 20 3d 20          dirty = 
28980 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  true;..         
28990 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
289a0 20 20 20 20 73 74 72 69 6e 67 20 66 75 6c 6c 54      string fullT
289b0 79 70 65 4e 61 6d 65 20 3d 20 53 74 72 69 6e 67  ypeName = String
289c0 2e 46 6f 72 6d 61 74 28 22 7b 30 7d 2c 20 7b 31  .Format("{0}, {1
289d0 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }",..           
289e0 20 20 20 20 20 74 79 70 65 4e 61 6d 65 2c 20 61       typeName, a
289f0 73 73 65 6d 62 6c 79 4e 61 6d 65 29 3b 0d 0a 0d  ssemblyName);...
28a00 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
28a10 28 21 53 74 72 69 6e 67 2e 45 71 75 61 6c 73 28  (!String.Equals(
28a20 61 64 64 45 6c 65 6d 65 6e 74 2e 47 65 74 41 74  addElement.GetAt
28a30 74 72 69 62 75 74 65 28 22 74 79 70 65 22 29 2c  tribute("type"),
28a40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
28a50 20 20 20 20 20 20 66 75 6c 6c 54 79 70 65 4e 61        fullTypeNa
28a60 6d 65 2c 20 53 74 72 69 6e 67 43 6f 6d 70 61 72  me, StringCompar
28a70 69 73 6f 6e 2e 4f 72 64 69 6e 61 6c 29 29 0d 0a  ison.Ordinal))..
28a80 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
28a90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61                 a
28aa0 64 64 45 6c 65 6d 65 6e 74 2e 53 65 74 41 74 74  ddElement.SetAtt
28ab0 72 69 62 75 74 65 28 22 74 79 70 65 22 2c 20 66  ribute("type", f
28ac0 75 6c 6c 54 79 70 65 4e 61 6d 65 29 3b 0d 0a 20  ullTypeName);.. 
28ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
28ae0 69 72 74 79 20 3d 20 74 72 75 65 3b 0d 0a 20 20  irty = true;..  
28af0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
28b00 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 64             if (d
28b10 69 72 74 79 20 7c 7c 20 77 68 61 74 49 66 29 0d  irty || whatIf).
28b20 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
28b30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28b40 69 66 20 28 76 65 72 62 6f 73 65 29 0d 0a 20 20  if (verbose)..  
28b50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28b60 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67    TraceOps.Debug
28b70 41 6e 64 54 72 61 63 65 28 54 72 61 63 65 50 72  AndTrace(TracePr
28b80 69 6f 72 69 74 79 2e 48 69 67 68 65 73 74 2c 0d  iority.Highest,.
28b90 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
28ba0 20 20 20 20 20 20 20 20 20 64 65 62 75 67 43 61           debugCa
28bb0 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c  llback, traceCal
28bc0 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f  lback, String.Fo
28bd0 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
28be0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
28bf0 61 64 64 45 6c 65 6d 65 6e 74 20 3d 20 7b 30 7d  addElement = {0}
28c00 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 61 64  ", ForDisplay(ad
28c10 64 45 6c 65 6d 65 6e 74 29 29 2c 0d 0a 20 20 20  dElement)),..   
28c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28c30 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f       traceCatego
28c40 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
28c50 20 20 20 20 20 20 20 20 69 66 20 28 21 77 68 61          if (!wha
28c60 74 49 66 29 0d 0a 20 20 20 20 20 20 20 20 20 20  tIf)..          
28c70 20 20 20 20 20 20 20 20 20 20 64 6f 63 75 6d 65            docume
28c80 6e 74 2e 53 61 76 65 28 66 69 6c 65 4e 61 6d 65  nt.Save(fileName
28c90 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
28ca0 20 20 20 20 20 20 66 69 6c 65 73 4d 6f 64 69 66        filesModif
28cb0 69 65 64 2b 2b 3b 0d 0a 0d 0a 20 20 20 20 20 20  ied++;....      
28cc0 20 20 20 20 20 20 20 20 20 20 73 61 76 65 64 20            saved 
28cd0 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20  = true;..       
28ce0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
28cf0 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75        return tru
28d00 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d  e;..        }...
28d10 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
28d20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28d30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28d40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28d50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28d60 0d 0a 0d 0a 20 20 20 20 20 20 20 20 5b 4d 65 74  ....        [Met
28d70 68 6f 64 49 6d 70 6c 28 4d 65 74 68 6f 64 49 6d  hodImpl(MethodIm
28d80 70 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e 6c 69  plOptions.NoInli
28d90 6e 69 6e 67 29 5d 0d 0a 20 20 20 20 20 20 20 20  ning)]..        
28da0 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 62  private static b
28db0 6f 6f 6c 20 52 65 6d 6f 76 65 44 62 50 72 6f 76  ool RemoveDbProv
28dc0 69 64 65 72 46 61 63 74 6f 72 79 28 0d 0a 20 20  iderFactory(..  
28dd0 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
28de0 20 66 69 6c 65 4e 61 6d 65 2c 0d 0a 20 20 20 20   fileName,..    
28df0 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 69          string i
28e00 6e 76 61 72 69 61 6e 74 2c 0d 0a 20 20 20 20 20  nvariant,..     
28e10 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74         bool what
28e20 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  If,..           
28e30 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 0d 0a   bool verbose,..
28e40 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20              ref 
28e50 62 6f 6f 6c 20 73 61 76 65 64 2c 0d 0a 20 20 20  bool saved,..   
28e60 20 20 20 20 20 20 20 20 20 72 65 66 20 73 74 72           ref str
28e70 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20 20 20  ing error..     
28e80 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
28e90 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
28ea0 20 62 6f 6f 6c 20 64 69 72 74 79 20 3d 20 66 61   bool dirty = fa
28eb0 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lse;..          
28ec0 20 20 58 6d 6c 44 6f 63 75 6d 65 6e 74 20 64 6f    XmlDocument do
28ed0 63 75 6d 65 6e 74 20 3d 20 6e 65 77 20 58 6d 6c  cument = new Xml
28ee0 44 6f 63 75 6d 65 6e 74 28 29 3b 0d 0a 0d 0a 20  Document();.... 
28ef0 20 20 20 20 20 20 20 20 20 20 20 64 6f 63 75 6d             docum
28f00 65 6e 74 2e 50 72 65 73 65 72 76 65 57 68 69 74  ent.PreserveWhit
28f10 65 73 70 61 63 65 20 3d 20 74 72 75 65 3b 0d 0a  espace = true;..
28f20 20 20 20 20 20 20 20 20 20 20 20 20 64 6f 63 75              docu
28f30 6d 65 6e 74 2e 4c 6f 61 64 28 66 69 6c 65 4e 61  ment.Load(fileNa
28f40 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  me);....        
28f50 20 20 20 20 58 6d 6c 45 6c 65 6d 65 6e 74 20 61      XmlElement a
28f60 64 64 45 6c 65 6d 65 6e 74 20 3d 20 64 6f 63 75  ddElement = docu
28f70 6d 65 6e 74 2e 53 65 6c 65 63 74 53 69 6e 67 6c  ment.SelectSingl
28f80 65 4e 6f 64 65 28 0d 0a 20 20 20 20 20 20 20 20  eNode(..        
28f90 20 20 20 20 20 20 20 20 53 74 72 69 6e 67 2e 46          String.F
28fa0 6f 72 6d 61 74 28 58 50 61 74 68 46 6f 72 41 64  ormat(XPathForAd
28fb0 64 45 6c 65 6d 65 6e 74 2c 20 69 6e 76 61 72 69  dElement, invari
28fc0 61 6e 74 29 29 20 61 73 20 58 6d 6c 45 6c 65 6d  ant)) as XmlElem
28fd0 65 6e 74 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ent;....        
28fe0 20 20 20 20 69 66 20 28 61 64 64 45 6c 65 6d 65      if (addEleme
28ff0 6e 74 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  nt != null)..   
29000 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
29010 20 20 20 20 20 20 20 20 20 20 20 20 61 64 64 45              addE
29020 6c 65 6d 65 6e 74 2e 50 61 72 65 6e 74 4e 6f 64  lement.ParentNod
29030 65 2e 52 65 6d 6f 76 65 43 68 69 6c 64 28 61 64  e.RemoveChild(ad
29040 64 45 6c 65 6d 65 6e 74 29 3b 0d 0a 20 20 20 20  dElement);..    
29050 20 20 20 20 20 20 20 20 20 20 20 20 64 69 72 74              dirt
29060 79 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20  y = true;..     
29070 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
29080 20 20 20 20 20 20 20 20 58 6d 6c 45 6c 65 6d 65          XmlEleme
29090 6e 74 20 72 65 6d 6f 76 65 45 6c 65 6d 65 6e 74  nt removeElement
290a0 20 3d 20 64 6f 63 75 6d 65 6e 74 2e 53 65 6c 65   = document.Sele
290b0 63 74 53 69 6e 67 6c 65 4e 6f 64 65 28 0d 0a 20  ctSingleNode(.. 
290c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53                 S
290d0 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 58 50 61  tring.Format(XPa
290e0 74 68 46 6f 72 52 65 6d 6f 76 65 45 6c 65 6d 65  thForRemoveEleme
290f0 6e 74 2c 20 69 6e 76 61 72 69 61 6e 74 29 29 20  nt, invariant)) 
29100 61 73 20 58 6d 6c 45 6c 65 6d 65 6e 74 3b 0d 0a  as XmlElement;..
29110 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
29120 20 28 72 65 6d 6f 76 65 45 6c 65 6d 65 6e 74 20   (removeElement 
29130 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  != null)..      
29140 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
29150 20 20 20 20 20 20 20 20 20 72 65 6d 6f 76 65 45           removeE
29160 6c 65 6d 65 6e 74 2e 50 61 72 65 6e 74 4e 6f 64  lement.ParentNod
29170 65 2e 52 65 6d 6f 76 65 43 68 69 6c 64 28 72 65  e.RemoveChild(re
29180 6d 6f 76 65 45 6c 65 6d 65 6e 74 29 3b 0d 0a 20  moveElement);.. 
29190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
291a0 69 72 74 79 20 3d 20 74 72 75 65 3b 0d 0a 20 20  irty = true;..  
291b0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
291c0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 64             if (d
291d0 69 72 74 79 20 7c 7c 20 77 68 61 74 49 66 29 0d  irty || whatIf).
291e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
291f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29200 69 66 20 28 76 65 72 62 6f 73 65 29 0d 0a 20 20  if (verbose)..  
29210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29220 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67    TraceOps.Debug
29230 41 6e 64 54 72 61 63 65 28 54 72 61 63 65 50 72  AndTrace(TracePr
29240 69 6f 72 69 74 79 2e 48 69 67 68 65 73 74 2c 0d  iority.Highest,.
29250 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
29260 20 20 20 20 20 20 20 20 20 64 65 62 75 67 43 61           debugCa
29270 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c  llback, traceCal
29280 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f  lback, String.Fo
29290 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
292a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
292b0 61 64 64 45 6c 65 6d 65 6e 74 20 3d 20 7b 30 7d  addElement = {0}
292c0 2c 20 72 65 6d 6f 76 65 45 6c 65 6d 65 6e 74 20  , removeElement 
292d0 3d 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20  = {1}",..       
292e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
292f0 20 46 6f 72 44 69 73 70 6c 61 79 28 61 64 64 45   ForDisplay(addE
29300 6c 65 6d 65 6e 74 29 2c 20 46 6f 72 44 69 73 70  lement), ForDisp
29310 6c 61 79 28 72 65 6d 6f 76 65 45 6c 65 6d 65 6e  lay(removeElemen
29320 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  t)),..          
29330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
29340 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  aceCategory);...
29350 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
29360 20 69 66 20 28 21 77 68 61 74 49 66 29 0d 0a 20   if (!whatIf).. 
29370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29380 20 20 20 64 6f 63 75 6d 65 6e 74 2e 53 61 76 65     document.Save
29390 28 66 69 6c 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20  (fileName);.... 
293a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66                 f
293b0 69 6c 65 73 4d 6f 64 69 66 69 65 64 2b 2b 3b 0d  ilesModified++;.
293c0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
293d0 20 20 20 73 61 76 65 64 20 3d 20 74 72 75 65 3b     saved = true;
293e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
293f0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  ...            r
29400 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20  eturn true;..   
29410 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
29420 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
29430 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29440 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29450 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29460 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
29470 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61       private sta
29480 74 69 63 20 62 6f 6f 6c 20 50 72 6f 63 65 73 73  tic bool Process
29490 44 62 50 72 6f 76 69 64 65 72 46 61 63 74 6f 72  DbProviderFactor
294a0 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y(..            
294b0 73 74 72 69 6e 67 20 66 69 6c 65 4e 61 6d 65 2c  string fileName,
294c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74  ..            st
294d0 72 69 6e 67 20 69 6e 76 61 72 69 61 6e 74 2c 0d  ring invariant,.
294e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72  .            str
294f0 69 6e 67 20 6e 61 6d 65 2c 0d 0a 20 20 20 20 20  ing name,..     
29500 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 64 65         string de
29510 73 63 72 69 70 74 69 6f 6e 2c 0d 0a 20 20 20 20  scription,..    
29520 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 74          string t
29530 79 70 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20  ypeName,..      
29540 20 20 20 20 20 20 41 73 73 65 6d 62 6c 79 4e 61        AssemblyNa
29550 6d 65 20 61 73 73 65 6d 62 6c 79 4e 61 6d 65 2c  me assemblyName,
29560 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6f 62  ..            ob
29570 6a 65 63 74 20 63 6c 69 65 6e 74 44 61 74 61 2c  ject clientData,
29580 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
29590 6f 6c 20 77 6f 77 36 34 2c 0d 0a 20 20 20 20 20  ol wow64,..     
295a0 20 20 20 20 20 20 20 62 6f 6f 6c 20 74 68 72 6f         bool thro
295b0 77 4f 6e 4d 69 73 73 69 6e 67 2c 0d 0a 20 20 20  wOnMissing,..   
295c0 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68           bool wh
295d0 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20  atIf,..         
295e0 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c     bool verbose,
295f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
29600 66 20 62 6f 6f 6c 20 73 61 76 65 64 2c 0d 0a 20  f bool saved,.. 
29610 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20 73             ref s
29620 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20  tring error..   
29630 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
29640 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
29650 20 20 20 41 6e 79 50 61 69 72 3c 73 74 72 69 6e     AnyPair<strin
29660 67 2c 20 62 6f 6f 6c 3e 20 70 61 69 72 20 3d 20  g, bool> pair = 
29670 63 6c 69 65 6e 74 44 61 74 61 20 61 73 20 41 6e  clientData as An
29680 79 50 61 69 72 3c 73 74 72 69 6e 67 2c 20 62 6f  yPair<string, bo
29690 6f 6c 3e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ol>;....        
296a0 20 20 20 20 69 66 20 28 70 61 69 72 20 3d 3d 20      if (pair == 
296b0 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
296c0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
296d0 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 69        error = "i
296e0 6e 76 61 6c 69 64 20 66 72 61 6d 65 77 6f 72 6b  nvalid framework
296f0 20 63 6f 6e 66 69 67 20 63 61 6c 6c 62 61 63 6b   config callback
29700 20 64 61 74 61 22 3b 0d 0a 20 20 20 20 20 20 20   data";..       
29710 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
29720 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20  false;..        
29730 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
29740 20 20 20 20 20 69 66 20 28 70 61 69 72 2e 59 29       if (pair.Y)
29750 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
29760 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
29770 20 72 65 74 75 72 6e 20 52 65 6d 6f 76 65 44 62   return RemoveDb
29780 50 72 6f 76 69 64 65 72 46 61 63 74 6f 72 79 28  ProviderFactory(
29790 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
297a0 20 20 20 20 20 20 66 69 6c 65 4e 61 6d 65 2c 20        fileName, 
297b0 69 6e 76 61 72 69 61 6e 74 2c 20 77 68 61 74 49  invariant, whatI
297c0 66 2c 20 76 65 72 62 6f 73 65 2c 20 72 65 66 20  f, verbose, ref 
297d0 73 61 76 65 64 2c 0d 0a 20 20 20 20 20 20 20 20  saved,..        
297e0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20              ref 
297f0 65 72 72 6f 72 29 20 26 26 0d 0a 20 20 20 20 20  error) &&..     
29800 20 20 20 20 20 20 20 20 20 20 20 41 64 64 44 62             AddDb
29810 50 72 6f 76 69 64 65 72 46 61 63 74 6f 72 79 28  ProviderFactory(
29820 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
29830 20 20 20 20 20 20 66 69 6c 65 4e 61 6d 65 2c 20        fileName, 
29840 69 6e 76 61 72 69 61 6e 74 2c 20 6e 61 6d 65 2c  invariant, name,
29850 20 64 65 73 63 72 69 70 74 69 6f 6e 2c 20 74 79   description, ty
29860 70 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20  peName,..       
29870 20 20 20 20 20 20 20 20 20 20 20 20 20 61 73 73               ass
29880 65 6d 62 6c 79 4e 61 6d 65 2c 20 77 68 61 74 49  emblyName, whatI
29890 66 2c 20 76 65 72 62 6f 73 65 2c 20 72 65 66 20  f, verbose, ref 
298a0 73 61 76 65 64 2c 20 72 65 66 20 65 72 72 6f 72  saved, ref error
298b0 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
298c0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 65  }..            e
298d0 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  lse..           
298e0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
298f0 20 20 20 20 72 65 74 75 72 6e 20 52 65 6d 6f 76      return Remov
29900 65 44 62 50 72 6f 76 69 64 65 72 46 61 63 74 6f  eDbProviderFacto
29910 72 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ry(..           
29920 20 20 20 20 20 20 20 20 20 66 69 6c 65 4e 61 6d           fileNam
29930 65 2c 20 69 6e 76 61 72 69 61 6e 74 2c 20 77 68  e, invariant, wh
29940 61 74 49 66 2c 20 76 65 72 62 6f 73 65 2c 20 72  atIf, verbose, r
29950 65 66 20 73 61 76 65 64 2c 0d 0a 20 20 20 20 20  ef saved,..     
29960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
29970 65 66 20 65 72 72 6f 72 29 3b 0d 0a 20 20 20 20  ef error);..    
29980 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
29990 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65     }..        #e
299a0 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20  ndregion....    
299b0 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
299c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
299d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
299e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
299f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
29a00 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 41         #region A
29a10 73 73 65 6d 62 6c 79 20 46 6f 6c 64 65 72 73 20  ssembly Folders 
29a20 48 61 6e 64 6c 69 6e 67 0d 0a 20 20 20 20 20 20  Handling..      
29a30 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63    private static
29a40 20 73 74 72 69 6e 67 20 47 65 74 41 73 73 65 6d   string GetAssem
29a50 62 6c 79 46 6f 6c 64 65 72 73 4b 65 79 4e 61 6d  blyFoldersKeyNam
29a60 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
29a70 73 74 72 69 6e 67 20 66 72 61 6d 65 77 6f 72 6b  string framework
29a80 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  Name,..         
29a90 20 20 20 56 65 72 73 69 6f 6e 20 66 72 61 6d 65     Version frame
29aa0 77 6f 72 6b 56 65 72 73 69 6f 6e 2c 0d 0a 20 20  workVersion,..  
29ab0 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
29ac0 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 2c 0d 0a   platformName,..
29ad0 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
29ae0 20 77 6f 77 36 34 0d 0a 20 20 20 20 20 20 20 20   wow64..        
29af0 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b      )..        {
29b00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
29b10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
29b20 20 4e 4f 54 45 3a 20 54 68 69 73 20 72 65 67 69   NOTE: This regi
29b30 73 74 72 79 20 6b 65 79 20 61 70 70 65 61 72 73  stry key appears
29b40 20 74 6f 20 61 6c 77 61 79 73 20 62 65 20 33 32   to always be 32
29b50 2d 62 69 74 20 6f 6e 6c 79 0d 0a 20 20 20 20 20  -bit only..     
29b60 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
29b70 28 69 2e 65 2e 20 70 72 6f 62 61 62 6c 79 20 62  (i.e. probably b
29b80 65 63 61 75 73 65 20 69 74 20 69 73 20 6f 6e 6c  ecause it is onl
29b90 79 20 75 73 65 64 20 62 79 20 56 69 73 75 61 6c  y used by Visual
29ba0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
29bb0 20 20 20 20 20 20 20 53 74 75 64 69 6f 2c 20 77         Studio, w
29bc0 68 69 63 68 20 69 73 20 63 75 72 72 65 6e 74 6c  hich is currentl
29bd0 79 20 61 6c 77 61 79 73 20 33 32 2d 62 69 74 20  y always 32-bit 
29be0 6f 6e 6c 79 29 2e 0d 0a 20 20 20 20 20 20 20 20  only)...        
29bf0 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
29c00 20 20 20 20 73 74 72 69 6e 67 20 66 6f 72 6d 61      string forma
29c10 74 20 3d 20 21 53 74 72 69 6e 67 2e 49 73 4e 75  t = !String.IsNu
29c20 6c 6c 4f 72 45 6d 70 74 79 28 70 6c 61 74 66 6f  llOrEmpty(platfo
29c30 72 6d 4e 61 6d 65 29 20 3f 0d 0a 20 20 20 20 20  rmName) ?..     
29c40 20 20 20 20 20 20 20 20 20 20 20 22 7b 30 7d 5c             "{0}\
29c50 5c 4d 69 63 72 6f 73 6f 66 74 5c 5c 7b 31 7d 5c  \Microsoft\\{1}\
29c60 5c 76 7b 32 7d 5c 5c 7b 33 7d 5c 5c 41 73 73 65  \v{2}\\{3}\\Asse
29c70 6d 62 6c 79 46 6f 6c 64 65 72 73 45 78 22 20 3a  mblyFoldersEx" :
29c80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
29c90 20 20 22 7b 30 7d 5c 5c 4d 69 63 72 6f 73 6f 66    "{0}\\Microsof
29ca0 74 5c 5c 7b 31 7d 5c 5c 76 7b 32 7d 5c 5c 41 73  t\\{1}\\v{2}\\As
29cb0 73 65 6d 62 6c 79 46 6f 6c 64 65 72 73 45 78 22  semblyFoldersEx"
29cc0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
29cd0 20 72 65 74 75 72 6e 20 53 74 72 69 6e 67 2e 46   return String.F
29ce0 6f 72 6d 61 74 28 66 6f 72 6d 61 74 2c 20 47 65  ormat(format, Ge
29cf0 74 52 6f 6f 74 4b 65 79 4e 61 6d 65 28 77 6f 77  tRootKeyName(wow
29d00 36 34 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  64),..          
29d10 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 4e        frameworkN
29d20 61 6d 65 2c 20 66 72 61 6d 65 77 6f 72 6b 56 65  ame, frameworkVe
29d30 72 73 69 6f 6e 2c 20 70 6c 61 74 66 6f 72 6d 4e  rsion, platformN
29d40 61 6d 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d  ame);..        }
29d50 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
29d60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29d70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29d80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29d90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29da0 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70  ///....        p
29db0 72 69 76 61 74 65 20 73 74 61 74 69 63 20 62 6f  rivate static bo
29dc0 6f 6c 20 41 64 64 54 6f 41 73 73 65 6d 62 6c 79  ol AddToAssembly
29dd0 46 6f 6c 64 65 72 73 28 0d 0a 20 20 20 20 20 20  Folders(..      
29de0 20 20 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 74        MockRegist
29df0 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a  ryKey rootKey,..
29e00 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
29e10 6e 67 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65  ng frameworkName
29e20 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 56  ,..            V
29e30 65 72 73 69 6f 6e 20 66 72 61 6d 65 77 6f 72 6b  ersion framework
29e40 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20  Version,..      
29e50 20 20 20 20 20 20 73 74 72 69 6e 67 20 70 6c 61        string pla
29e60 74 66 6f 72 6d 4e 61 6d 65 2c 0d 0a 20 20 20 20  tformName,..    
29e70 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 73          string s
29e80 75 62 4b 65 79 4e 61 6d 65 2c 0d 0a 20 20 20 20  ubKeyName,..    
29e90 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 64          string d
29ea0 69 72 65 63 74 6f 72 79 2c 0d 0a 20 20 20 20 20  irectory,..     
29eb0 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36         bool wow6
29ec0 34 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  4,..            
29ed0 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20  bool whatIf,..  
29ee0 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76            bool v
29ef0 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20  erbose,..       
29f00 20 20 20 20 20 72 65 66 20 73 74 72 69 6e 67 20       ref string 
29f10 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 20  error..         
29f20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d     )..        {.
29f30 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72  .            str
29f40 69 6e 67 20 6b 65 79 4e 61 6d 65 20 3d 20 47 65  ing keyName = Ge
29f50 74 41 73 73 65 6d 62 6c 79 46 6f 6c 64 65 72 73  tAssemblyFolders
29f60 4b 65 79 4e 61 6d 65 28 0d 0a 20 20 20 20 20 20  KeyName(..      
29f70 20 20 20 20 20 20 20 20 20 20 66 72 61 6d 65 77            framew
29f80 6f 72 6b 4e 61 6d 65 2c 20 66 72 61 6d 65 77 6f  orkName, framewo
29f90 72 6b 56 65 72 73 69 6f 6e 2c 20 70 6c 61 74 66  rkVersion, platf
29fa0 6f 72 6d 4e 61 6d 65 2c 20 77 6f 77 36 34 29 3b  ormName, wow64);
29fb0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
29fc0 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73  using (MockRegis
29fd0 74 72 79 4b 65 79 20 6b 65 79 20 3d 20 52 65 67  tryKey key = Reg
29fe0 69 73 74 72 79 48 65 6c 70 65 72 2e 4f 70 65 6e  istryHelper.Open
29ff0 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20  SubKey(..       
2a000 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f               roo
2a010 74 4b 65 79 2c 20 6b 65 79 4e 61 6d 65 2c 20 74  tKey, keyName, t
2a020 72 75 65 2c 20 77 68 61 74 49 66 2c 20 76 65 72  rue, whatIf, ver
2a030 62 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20  bose))..        
2a040 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
2a050 20 20 20 20 20 20 20 69 66 20 28 6b 65 79 20 3d         if (key =
2a060 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
2a070 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
2a080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a090 65 72 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46  error = String.F
2a0a0 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
2a0b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a0c0 22 63 6f 75 6c 64 20 6e 6f 74 20 6f 70 65 6e 20  "could not open 
2a0d0 72 65 67 69 73 74 72 79 20 6b 65 79 3a 20 7b 30  registry key: {0
2a0e0 7d 5c 5c 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20  }\\{1}",..      
2a0f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a100 20 20 72 6f 6f 74 4b 65 79 2c 20 6b 65 79 4e 61    rootKey, keyNa
2a110 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  me);....        
2a120 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
2a130 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20  rn false;..     
2a140 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
2a150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a160 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73  using (MockRegis
2a170 74 72 79 4b 65 79 20 73 75 62 4b 65 79 20 3d 20  tryKey subKey = 
2a180 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 43  RegistryHelper.C
2a190 72 65 61 74 65 53 75 62 4b 65 79 28 0d 0a 20 20  reateSubKey(..  
2a1a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a1b0 20 20 20 20 20 20 6b 65 79 2c 20 73 75 62 4b 65        key, subKe
2a1c0 79 4e 61 6d 65 2c 20 77 68 61 74 49 66 2c 20 76  yName, whatIf, v
2a1d0 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20 20  erbose))..      
2a1e0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
2a1f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a200 20 69 66 20 28 73 75 62 4b 65 79 20 3d 3d 20 6e   if (subKey == n
2a210 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
2a220 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
2a230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a240 20 20 20 20 20 65 72 72 6f 72 20 3d 20 53 74 72       error = Str
2a250 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
2a260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a270 20 20 20 20 20 20 20 20 20 22 63 6f 75 6c 64 20           "could 
2a280 6e 6f 74 20 63 72 65 61 74 65 20 72 65 67 69 73  not create regis
2a290 74 72 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c 7b 31  try key: {0}\\{1
2a2a0 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }",..           
2a2b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a2c0 20 6b 65 79 2c 20 73 75 62 4b 65 79 4e 61 6d 65   key, subKeyName
2a2d0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
2a2e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
2a2f0 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20  turn false;..   
2a300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a310 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
2a320 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74            Regist
2a330 72 79 48 65 6c 70 65 72 2e 53 65 74 56 61 6c 75  ryHelper.SetValu
2a340 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
2a350 20 20 20 20 20 20 20 20 20 20 20 20 73 75 62 4b              subK
2a360 65 79 2c 20 6e 75 6c 6c 2c 20 64 69 72 65 63 74  ey, null, direct
2a370 6f 72 79 2c 20 77 68 61 74 49 66 2c 20 76 65 72  ory, whatIf, ver
2a380 62 6f 73 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  bose);..        
2a390 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
2a3a0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
2a3b0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74          return t
2a3c0 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  rue;..        }.
2a3d0 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
2a3e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a3f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a400 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a410 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a420 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72  //....        pr
2a430 69 76 61 74 65 20 73 74 61 74 69 63 20 62 6f 6f  ivate static boo
2a440 6c 20 52 65 6d 6f 76 65 46 72 6f 6d 41 73 73 65  l RemoveFromAsse
2a450 6d 62 6c 79 46 6f 6c 64 65 72 73 28 0d 0a 20 20  mblyFolders(..  
2a460 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65            MockRe
2a470 67 69 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65  gistryKey rootKe
2a480 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y,..            
2a490 73 74 72 69 6e 67 20 66 72 61 6d 65 77 6f 72 6b  string framework
2a4a0 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  Name,..         
2a4b0 20 20 20 56 65 72 73 69 6f 6e 20 66 72 61 6d 65     Version frame
2a4c0 77 6f 72 6b 56 65 72 73 69 6f 6e 2c 0d 0a 20 20  workVersion,..  
2a4d0 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
2a4e0 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 2c 0d 0a   platformName,..
2a4f0 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
2a500 6e 67 20 73 75 62 4b 65 79 4e 61 6d 65 2c 0d 0a  ng subKeyName,..
2a510 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
2a520 20 77 6f 77 36 34 2c 0d 0a 20 20 20 20 20 20 20   wow64,..       
2a530 20 20 20 20 20 62 6f 6f 6c 20 74 68 72 6f 77 4f       bool throwO
2a540 6e 4d 69 73 73 69 6e 67 2c 0d 0a 20 20 20 20 20  nMissing,..     
2a550 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74         bool what
2a560 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  If,..           
2a570 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 0d 0a   bool verbose,..
2a580 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20              ref 
2a590 73 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20  string error..  
2a5a0 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
2a5b0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
2a5c0 20 20 20 20 73 74 72 69 6e 67 20 6b 65 79 4e 61      string keyNa
2a5d0 6d 65 20 3d 20 47 65 74 41 73 73 65 6d 62 6c 79  me = GetAssembly
2a5e0 46 6f 6c 64 65 72 73 4b 65 79 4e 61 6d 65 28 0d  FoldersKeyName(.
2a5f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2a600 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c 20   frameworkName, 
2a610 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e  frameworkVersion
2a620 2c 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 2c 20  , platformName, 
2a630 77 6f 77 36 34 29 3b 0d 0a 0d 0a 20 20 20 20 20  wow64);....     
2a640 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 4d 6f         using (Mo
2a650 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 6b 65  ckRegistryKey ke
2a660 79 20 3d 20 52 65 67 69 73 74 72 79 48 65 6c 70  y = RegistryHelp
2a670 65 72 2e 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a  er.OpenSubKey(..
2a680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a690 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 6b 65 79      rootKey, key
2a6a0 4e 61 6d 65 2c 20 74 72 75 65 2c 20 77 68 61 74  Name, true, what
2a6b0 49 66 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a 20  If, verbose)).. 
2a6c0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
2a6d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
2a6e0 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a   (key == null)..
2a6f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a700 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
2a710 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 53         error = S
2a720 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
2a730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a740 20 20 20 20 20 20 20 22 63 6f 75 6c 64 20 6e 6f         "could no
2a750 74 20 6f 70 65 6e 20 72 65 67 69 73 74 72 79 20  t open registry 
2a760 6b 65 79 3a 20 7b 30 7d 5c 5c 7b 31 7d 22 2c 0d  key: {0}\\{1}",.
2a770 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2a780 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79           rootKey
2a790 2c 20 6b 65 79 4e 61 6d 65 29 3b 0d 0a 0d 0a 20  , keyName);.... 
2a7a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a7b0 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
2a7c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2a7d0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
2a7e0 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79 48         RegistryH
2a7f0 65 6c 70 65 72 2e 44 65 6c 65 74 65 53 75 62 4b  elper.DeleteSubK
2a800 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ey(..           
2a810 20 20 20 20 20 20 20 20 20 6b 65 79 2c 20 73 75           key, su
2a820 62 4b 65 79 4e 61 6d 65 2c 20 74 68 72 6f 77 4f  bKeyName, throwO
2a830 6e 4d 69 73 73 69 6e 67 2c 20 77 68 61 74 49 66  nMissing, whatIf
2a840 2c 20 76 65 72 62 6f 73 65 29 3b 0d 0a 20 20 20  , verbose);..   
2a850 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
2a860 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
2a870 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20   true;..        
2a880 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  }....        ///
2a890 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a8a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a8b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a8c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a8d0 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
2a8e0 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 62  private static b
2a8f0 6f 6f 6c 20 50 72 6f 63 65 73 73 41 73 73 65 6d  ool ProcessAssem
2a900 62 6c 79 46 6f 6c 64 65 72 73 28 0d 0a 20 20 20  blyFolders(..   
2a910 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65 67           MockReg
2a920 69 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79  istryKey rootKey
2a930 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  ,..            s
2a940 74 72 69 6e 67 20 66 72 61 6d 65 77 6f 72 6b 4e  tring frameworkN
2a950 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ame,..          
2a960 20 20 56 65 72 73 69 6f 6e 20 66 72 61 6d 65 77    Version framew
2a970 6f 72 6b 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20  orkVersion,..   
2a980 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
2a990 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 2c 0d 0a 20  platformName,.. 
2a9a0 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63             objec
2a9b0 74 20 63 6c 69 65 6e 74 44 61 74 61 2c 0d 0a 20  t clientData,.. 
2a9c0 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
2a9d0 77 6f 77 36 34 2c 0d 0a 20 20 20 20 20 20 20 20  wow64,..        
2a9e0 20 20 20 20 62 6f 6f 6c 20 74 68 72 6f 77 4f 6e      bool throwOn
2a9f0 4d 69 73 73 69 6e 67 2c 0d 0a 20 20 20 20 20 20  Missing,..      
2aa00 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49        bool whatI
2aa10 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  f,..            
2aa20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 0d 0a 20  bool verbose,.. 
2aa30 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20 73             ref s
2aa40 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20  tring error..   
2aa50 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
2aa60 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
2aa70 20 20 20 41 6e 79 50 61 69 72 3c 73 74 72 69 6e     AnyPair<strin
2aa80 67 2c 20 62 6f 6f 6c 3e 20 70 61 69 72 20 3d 20  g, bool> pair = 
2aa90 63 6c 69 65 6e 74 44 61 74 61 20 61 73 20 41 6e  clientData as An
2aaa0 79 50 61 69 72 3c 73 74 72 69 6e 67 2c 20 62 6f  yPair<string, bo
2aab0 6f 6c 3e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ol>;....        
2aac0 20 20 20 20 69 66 20 28 70 61 69 72 20 3d 3d 20      if (pair == 
2aad0 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
2aae0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
2aaf0 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 69        error = "i
2ab00 6e 76 61 6c 69 64 20 66 72 61 6d 65 77 6f 72 6b  nvalid framework
2ab10 20 63 61 6c 6c 62 61 63 6b 20 64 61 74 61 22 3b   callback data";
2ab20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2ab30 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
2ab40 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
2ab50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
2ab60 20 28 70 61 69 72 2e 59 29 0d 0a 20 20 20 20 20   (pair.Y)..     
2ab70 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
2ab80 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
2ab90 20 52 65 6d 6f 76 65 46 72 6f 6d 41 73 73 65 6d   RemoveFromAssem
2aba0 62 6c 79 46 6f 6c 64 65 72 73 28 0d 0a 20 20 20  blyFolders(..   
2abb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2abc0 20 72 6f 6f 74 4b 65 79 2c 20 66 72 61 6d 65 77   rootKey, framew
2abd0 6f 72 6b 4e 61 6d 65 2c 20 66 72 61 6d 65 77 6f  orkName, framewo
2abe0 72 6b 56 65 72 73 69 6f 6e 2c 20 70 6c 61 74 66  rkVersion, platf
2abf0 6f 72 6d 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20  ormName,..      
2ac00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4c 65                Le
2ac10 67 61 63 79 50 72 6f 6a 65 63 74 4e 61 6d 65 2c  gacyProjectName,
2ac20 20 77 6f 77 36 34 2c 20 66 61 6c 73 65 2c 20 77   wow64, false, w
2ac30 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 2c 0d  hatIf, verbose,.
2ac40 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2ac50 20 20 20 20 20 72 65 66 20 65 72 72 6f 72 29 20       ref error) 
2ac60 26 26 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  &&..            
2ac70 20 20 20 20 41 64 64 54 6f 41 73 73 65 6d 62 6c      AddToAssembl
2ac80 79 46 6f 6c 64 65 72 73 28 0d 0a 20 20 20 20 20  yFolders(..     
2ac90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
2aca0 6f 6f 74 4b 65 79 2c 20 66 72 61 6d 65 77 6f 72  ootKey, framewor
2acb0 6b 4e 61 6d 65 2c 20 66 72 61 6d 65 77 6f 72 6b  kName, framework
2acc0 56 65 72 73 69 6f 6e 2c 20 70 6c 61 74 66 6f 72  Version, platfor
2acd0 6d 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20  mName,..        
2ace0 20 20 20 20 20 20 20 20 20 20 20 20 50 72 6f 6a              Proj
2acf0 65 63 74 4e 61 6d 65 2c 20 70 61 69 72 2e 58 2c  ectName, pair.X,
2ad00 20 77 6f 77 36 34 2c 20 77 68 61 74 49 66 2c 20   wow64, whatIf, 
2ad10 76 65 72 62 6f 73 65 2c 20 72 65 66 20 65 72 72  verbose, ref err
2ad20 6f 72 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  or);..          
2ad30 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
2ad40 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20   else..         
2ad50 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
2ad60 20 20 20 20 20 20 72 65 74 75 72 6e 20 52 65 6d        return Rem
2ad70 6f 76 65 46 72 6f 6d 41 73 73 65 6d 62 6c 79 46  oveFromAssemblyF
2ad80 6f 6c 64 65 72 73 28 0d 0a 20 20 20 20 20 20 20  olders(..       
2ad90 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f               roo
2ada0 74 4b 65 79 2c 20 66 72 61 6d 65 77 6f 72 6b 4e  tKey, frameworkN
2adb0 61 6d 65 2c 20 66 72 61 6d 65 77 6f 72 6b 56 65  ame, frameworkVe
2adc0 72 73 69 6f 6e 2c 20 70 6c 61 74 66 6f 72 6d 4e  rsion, platformN
2add0 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ame,..          
2ade0 20 20 20 20 20 20 20 20 20 20 50 72 6f 6a 65 63            Projec
2adf0 74 4e 61 6d 65 2c 20 77 6f 77 36 34 2c 20 74 68  tName, wow64, th
2ae00 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 2c 20 77 68  rowOnMissing, wh
2ae10 61 74 49 66 2c 20 76 65 72 62 6f 73 65 2c 0d 0a  atIf, verbose,..
2ae20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ae30 20 20 20 20 72 65 66 20 65 72 72 6f 72 29 3b 0d      ref error);.
2ae40 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
2ae50 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
2ae60 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
2ae70 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
2ae80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ae90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2aea0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2aeb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2aec0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67  ....        #reg
2aed0 69 6f 6e 20 56 69 73 75 61 6c 20 53 74 75 64 69  ion Visual Studi
2aee0 6f 20 48 61 6e 64 6c 69 6e 67 0d 0a 20 20 20 20  o Handling..    
2aef0 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74      private stat
2af00 69 63 20 73 74 72 69 6e 67 20 47 65 74 56 73 52  ic string GetVsR
2af10 6f 6f 74 4b 65 79 4e 61 6d 65 28 0d 0a 20 20 20  ootKeyName(..   
2af20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 6f           bool wo
2af30 77 36 34 0d 0a 20 20 20 20 20 20 20 20 20 20 20  w64..           
2af40 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20   )..        {.. 
2af50 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
2af60 6e 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  n String.Format(
2af70 22 7b 30 7d 5c 5c 4d 69 63 72 6f 73 6f 66 74 5c  "{0}\\Microsoft\
2af80 5c 56 69 73 75 61 6c 53 74 75 64 69 6f 22 2c 0d  \VisualStudio",.
2af90 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2afa0 20 47 65 74 52 6f 6f 74 4b 65 79 4e 61 6d 65 28   GetRootKeyName(
2afb0 77 6f 77 36 34 29 29 3b 0d 0a 20 20 20 20 20 20  wow64));..      
2afc0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f    }....        /
2afd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2afe0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2aff0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b000 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b010 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
2b020 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63    private static
2b030 20 73 74 72 69 6e 67 20 47 65 74 56 73 4b 65 79   string GetVsKey
2b040 4e 61 6d 65 28 0d 0a 20 20 20 20 20 20 20 20 20  Name(..         
2b050 20 20 20 56 65 72 73 69 6f 6e 20 76 73 56 65 72     Version vsVer
2b060 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20  sion,..         
2b070 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34 0d 0a 20     bool wow64.. 
2b080 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
2b090 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
2b0a0 20 20 20 20 20 69 66 20 28 76 73 56 65 72 73 69       if (vsVersi
2b0b0 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  on == null)..   
2b0c0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
2b0d0 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20  urn null;....   
2b0e0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
2b0f0 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
2b100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b110 22 7b 30 7d 5c 5c 7b 31 7d 22 2c 20 47 65 74 56  "{0}\\{1}", GetV
2b120 73 52 6f 6f 74 4b 65 79 4e 61 6d 65 28 77 6f 77  sRootKeyName(wow
2b130 36 34 29 2c 20 76 73 56 65 72 73 69 6f 6e 29 3b  64), vsVersion);
2b140 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
2b150 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
2b160 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b170 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b180 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b190 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
2b1a0 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f  ..        #regio
2b1b0 6e 20 56 69 73 75 61 6c 20 53 74 75 64 69 6f 20  n Visual Studio 
2b1c0 44 61 74 61 20 53 6f 75 72 63 65 20 48 61 6e 64  Data Source Hand
2b1d0 6c 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 70 72  ling..        pr
2b1e0 69 76 61 74 65 20 73 74 61 74 69 63 20 62 6f 6f  ivate static boo
2b1f0 6c 20 41 64 64 56 73 44 61 74 61 53 6f 75 72 63  l AddVsDataSourc
2b200 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
2b210 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20  MockRegistryKey 
2b220 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20 20 20 20  rootKey,..      
2b230 20 20 20 20 20 20 56 65 72 73 69 6f 6e 20 76 73        Version vs
2b240 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20  Version,..      
2b250 20 20 20 20 20 20 50 61 63 6b 61 67 65 20 70 61        Package pa
2b260 63 6b 61 67 65 2c 0d 0a 20 20 20 20 20 20 20 20  ckage,..        
2b270 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34 2c 0d      bool wow64,.
2b280 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f  .            boo
2b290 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20  l whatIf,..     
2b2a0 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62         bool verb
2b2b0 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ose,..          
2b2c0 20 20 72 65 66 20 73 74 72 69 6e 67 20 65 72 72    ref string err
2b2d0 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  or..            
2b2e0 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
2b2f0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76 73            if (vs
2b300 56 65 72 73 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29  Version == null)
2b310 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
2b320 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2b330 20 65 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69   error = "invali
2b340 64 20 56 53 20 76 65 72 73 69 6f 6e 22 3b 0d 0a  d VS version";..
2b350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b360 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20  return false;.. 
2b370 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
2b380 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
2b390 70 61 63 6b 61 67 65 20 3d 3d 20 6e 75 6c 6c 29  package == null)
2b3a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
2b3b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2b3c0 20 65 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69   error = "invali
2b3d0 64 20 56 53 20 70 61 63 6b 61 67 65 22 3b 0d 0a  d VS package";..
2b3e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b3f0 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20  return false;.. 
2b400 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
2b410 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
2b420 6e 67 20 6b 65 79 4e 61 6d 65 20 3d 20 47 65 74  ng keyName = Get
2b430 56 73 4b 65 79 4e 61 6d 65 28 76 73 56 65 72 73  VsKeyName(vsVers
2b440 69 6f 6e 2c 20 77 6f 77 36 34 29 3b 0d 0a 0d 0a  ion, wow64);....
2b450 20 20 20 20 20 20 20 20 20 20 20 20 75 73 69 6e              usin
2b460 67 20 28 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b  g (MockRegistryK
2b470 65 79 20 6b 65 79 20 3d 20 52 65 67 69 73 74 72  ey key = Registr
2b480 79 48 65 6c 70 65 72 2e 4f 70 65 6e 53 75 62 4b  yHelper.OpenSubK
2b490 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ey(..           
2b4a0 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79           rootKey
2b4b0 2c 20 6b 65 79 4e 61 6d 65 2c 20 66 61 6c 73 65  , keyName, false
2b4c0 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73  , whatIf, verbos
2b4d0 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e))..           
2b4e0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
2b4f0 20 20 20 20 69 66 20 28 6b 65 79 20 3d 3d 20 6e      if (key == n
2b500 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
2b510 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
2b520 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
2b530 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d  or = String.Form
2b540 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
2b550 20 20 20 20 20 20 20 20 20 20 20 20 20 22 63 6f               "co
2b560 75 6c 64 20 6e 6f 74 20 6f 70 65 6e 20 72 65 67  uld not open reg
2b570 69 73 74 72 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c  istry key: {0}\\
2b580 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  {1}",..         
2b590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
2b5a0 6f 6f 74 4b 65 79 2c 20 6b 65 79 4e 61 6d 65 29  ootKey, keyName)
2b5b0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
2b5c0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
2b5d0 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20  false;..        
2b5e0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
2b5f0 20 20 20 20 20 20 20 20 20 20 20 20 20 75 73 69               usi
2b600 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73 74 72 79  ng (MockRegistry
2b610 4b 65 79 20 73 75 62 4b 65 79 20 3d 20 52 65 67  Key subKey = Reg
2b620 69 73 74 72 79 48 65 6c 70 65 72 2e 4f 70 65 6e  istryHelper.Open
2b630 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20  SubKey(..       
2b640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b650 20 6b 65 79 2c 20 22 44 61 74 61 53 6f 75 72 63   key, "DataSourc
2b660 65 73 22 2c 20 74 72 75 65 2c 20 77 68 61 74 49  es", true, whatI
2b670 66 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a 20 20  f, verbose))..  
2b680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
2b690 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2b6a0 20 20 20 20 20 69 66 20 28 73 75 62 4b 65 79 20       if (subKey 
2b6b0 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
2b6c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
2b6d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2b6e0 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
2b6f0 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d   String.Format(.
2b700 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2b710 20 20 20 20 20 20 20 20 20 20 20 20 20 22 63 6f               "co
2b720 75 6c 64 20 6e 6f 74 20 6f 70 65 6e 20 72 65 67  uld not open reg
2b730 69 73 74 72 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c  istry key: {0}\\
2b740 44 61 74 61 53 6f 75 72 63 65 73 22 2c 0d 0a 20  DataSources",.. 
2b750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b760 20 20 20 20 20 20 20 20 20 20 20 6b 65 79 29 3b             key);
2b770 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2b780 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
2b790 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20  rn false;..     
2b7a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
2b7b0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2b7c0 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 4d          using (M
2b7d0 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 64  ockRegistryKey d
2b7e0 61 74 61 53 6f 75 72 63 65 4b 65 79 20 3d 0d 0a  ataSourceKey =..
2b7f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b800 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69              Regi
2b810 73 74 72 79 48 65 6c 70 65 72 2e 43 72 65 61 74  stryHelper.Creat
2b820 65 53 75 62 4b 65 79 28 73 75 62 4b 65 79 2c 0d  eSubKey(subKey,.
2b830 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2b840 20 20 20 20 20 20 20 20 20 20 20 20 20 70 61 63               pac
2b850 6b 61 67 65 2e 44 61 74 61 53 6f 75 72 63 65 49  kage.DataSourceI
2b860 64 2e 54 6f 53 74 72 69 6e 67 28 56 73 49 64 46  d.ToString(VsIdF
2b870 6f 72 6d 61 74 29 2c 0d 0a 20 20 20 20 20 20 20  ormat),..       
2b880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b890 20 20 20 20 20 77 68 61 74 49 66 2c 20 76 65 72       whatIf, ver
2b8a0 62 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20  bose))..        
2b8b0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
2b8c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b8d0 20 20 20 20 20 20 20 69 66 20 28 64 61 74 61 53         if (dataS
2b8e0 6f 75 72 63 65 4b 65 79 20 3d 3d 20 6e 75 6c 6c  ourceKey == null
2b8f0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
2b900 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
2b910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b920 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20            error 
2b930 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  = String.Format(
2b940 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2b950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b960 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20 63 72 65    "could not cre
2b970 61 74 65 20 72 65 67 69 73 74 72 79 20 6b 65 79  ate registry key
2b980 3a 20 7b 30 7d 5c 5c 7b 31 7d 22 2c 20 6b 65 79  : {0}\\{1}", key
2b990 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
2b9a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b9b0 20 20 20 70 61 63 6b 61 67 65 2e 44 61 74 61 53     package.DataS
2b9c0 6f 75 72 63 65 49 64 2e 54 6f 53 74 72 69 6e 67  ourceId.ToString
2b9d0 28 56 73 49 64 46 6f 72 6d 61 74 29 29 3b 0d 0a  (VsIdFormat));..
2b9e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2b9f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
2ba00 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20  turn false;..   
2ba10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ba20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
2ba30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ba40 20 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72    RegistryHelper
2ba50 2e 53 65 74 56 61 6c 75 65 28 0d 0a 20 20 20 20  .SetValue(..    
2ba60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ba70 20 20 20 20 20 20 20 20 64 61 74 61 53 6f 75 72          dataSour
2ba80 63 65 4b 65 79 2c 20 6e 75 6c 6c 2c 20 53 74 72  ceKey, null, Str
2ba90 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
2baa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bab0 20 20 20 20 20 20 20 20 20 22 7b 30 7d 20 44 61           "{0} Da
2bac0 74 61 62 61 73 65 20 46 69 6c 65 22 2c 20 50 72  tabase File", Pr
2bad0 6f 6a 65 63 74 4e 61 6d 65 29 2c 20 77 68 61 74  ojectName), what
2bae0 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  If,..           
2baf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bb00 20 76 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20   verbose);....  
2bb10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bb20 20 20 20 20 20 20 52 65 67 69 73 74 72 79 48 65        RegistryHe
2bb30 6c 70 65 72 2e 43 72 65 61 74 65 53 75 62 4b 65  lper.CreateSubKe
2bb40 79 28 64 61 74 61 53 6f 75 72 63 65 4b 65 79 2c  y(dataSourceKey,
2bb50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2bb60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 74                St
2bb70 72 69 6e 67 2e 46 6f 72 6d 61 74 28 22 53 75 70  ring.Format("Sup
2bb80 70 6f 72 74 69 6e 67 50 72 6f 76 69 64 65 72 73  portingProviders
2bb90 5c 5c 7b 30 7d 22 2c 0d 0a 20 20 20 20 20 20 20  \\{0}",..       
2bba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bbb0 20 20 20 20 20 70 61 63 6b 61 67 65 2e 44 61 74       package.Dat
2bbc0 61 50 72 6f 76 69 64 65 72 49 64 2e 54 6f 53 74  aProviderId.ToSt
2bbd0 72 69 6e 67 28 56 73 49 64 46 6f 72 6d 61 74 29  ring(VsIdFormat)
2bbe0 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
2bbf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bc00 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29  whatIf, verbose)
2bc10 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
2bc20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
2bc30 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
2bc40 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
2bc50 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
2bc60 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20   true;..        
2bc70 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  }....        ///
2bc80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2bc90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2bca0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2bcb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2bcc0 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
2bcd0 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 62  private static b
2bce0 6f 6f 6c 20 52 65 6d 6f 76 65 56 73 44 61 74 61  ool RemoveVsData
2bcf0 53 6f 75 72 63 65 28 0d 0a 20 20 20 20 20 20 20  Source(..       
2bd00 20 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72       MockRegistr
2bd10 79 4b 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20  yKey rootKey,.. 
2bd20 20 20 20 20 20 20 20 20 20 20 20 56 65 72 73 69             Versi
2bd30 6f 6e 20 76 73 56 65 72 73 69 6f 6e 2c 0d 0a 20  on vsVersion,.. 
2bd40 20 20 20 20 20 20 20 20 20 20 20 50 61 63 6b 61             Packa
2bd50 67 65 20 70 61 63 6b 61 67 65 2c 0d 0a 20 20 20  ge package,..   
2bd60 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 6f           bool wo
2bd70 77 36 34 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  w64,..          
2bd80 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a    bool whatIf,..
2bd90 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
2bda0 20 76 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20   verbose,..     
2bdb0 20 20 20 20 20 20 20 72 65 66 20 73 74 72 69 6e         ref strin
2bdc0 67 20 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20  g error..       
2bdd0 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
2bde0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  {..            i
2bdf0 66 20 28 76 73 56 65 72 73 69 6f 6e 20 3d 3d 20  f (vsVersion == 
2be00 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
2be10 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
2be20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 69        error = "i
2be30 6e 76 61 6c 69 64 20 56 53 20 76 65 72 73 69 6f  nvalid VS versio
2be40 6e 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n";..           
2be50 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
2be60 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
2be70 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
2be80 20 69 66 20 28 70 61 63 6b 61 67 65 20 3d 3d 20   if (package == 
2be90 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
2bea0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
2beb0 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 69        error = "i
2bec0 6e 76 61 6c 69 64 20 56 53 20 70 61 63 6b 61 67  nvalid VS packag
2bed0 65 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e";..           
2bee0 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
2bef0 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
2bf00 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
2bf10 20 73 74 72 69 6e 67 20 6b 65 79 4e 61 6d 65 20   string keyName 
2bf20 3d 20 47 65 74 56 73 4b 65 79 4e 61 6d 65 28 76  = GetVsKeyName(v
2bf30 73 56 65 72 73 69 6f 6e 2c 20 77 6f 77 36 34 29  sVersion, wow64)
2bf40 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
2bf50 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69   using (MockRegi
2bf60 73 74 72 79 4b 65 79 20 6b 65 79 20 3d 20 52 65  stryKey key = Re
2bf70 67 69 73 74 72 79 48 65 6c 70 65 72 2e 4f 70 65  gistryHelper.Ope
2bf80 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20  nSubKey(..      
2bf90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f                ro
2bfa0 6f 74 4b 65 79 2c 20 6b 65 79 4e 61 6d 65 2c 20  otKey, keyName, 
2bfb0 66 61 6c 73 65 2c 20 77 68 61 74 49 66 2c 20 76  false, whatIf, v
2bfc0 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20 20  erbose))..      
2bfd0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
2bfe0 20 20 20 20 20 20 20 20 20 69 66 20 28 6b 65 79           if (key
2bff0 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
2c000 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
2c010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c020 20 20 65 72 72 6f 72 20 3d 20 53 74 72 69 6e 67    error = String
2c030 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  .Format(..      
2c040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c050 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20 6f 70 65    "could not ope
2c060 6e 20 72 65 67 69 73 74 72 79 20 6b 65 79 3a 20  n registry key: 
2c070 7b 30 7d 5c 5c 7b 31 7d 22 2c 0d 0a 20 20 20 20  {0}\\{1}",..    
2c080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c090 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 6b 65 79      rootKey, key
2c0a0 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  Name);....      
2c0b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
2c0c0 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20  turn false;..   
2c0d0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
2c0e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2c0f0 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67    using (MockReg
2c100 69 73 74 72 79 4b 65 79 20 73 75 62 4b 65 79 20  istryKey subKey 
2c110 3d 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72  = RegistryHelper
2c120 2e 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20  .OpenSubKey(..  
2c130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c140 20 20 20 20 20 20 6b 65 79 2c 20 22 44 61 74 61        key, "Data
2c150 53 6f 75 72 63 65 73 22 2c 20 74 72 75 65 2c 20  Sources", true, 
2c160 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29  whatIf, verbose)
2c170 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
2c180 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
2c190 20 20 20 20 20 20 20 20 20 20 69 66 20 28 73 75            if (su
2c1a0 62 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  bKey == null).. 
2c1b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c1c0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
2c1d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72                er
2c1e0 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72  ror = String.For
2c1f0 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
2c200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c210 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20 6f 70 65    "could not ope
2c220 6e 20 72 65 67 69 73 74 72 79 20 6b 65 79 3a 20  n registry key: 
2c230 7b 30 7d 5c 5c 44 61 74 61 53 6f 75 72 63 65 73  {0}\\DataSources
2c240 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
2c250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c260 6b 65 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  key);....       
2c270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c280 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
2c290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c2a0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
2c2b0 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67               Reg
2c2c0 69 73 74 72 79 48 65 6c 70 65 72 2e 44 65 6c 65  istryHelper.Dele
2c2d0 74 65 53 75 62 4b 65 79 54 72 65 65 28 0d 0a 20  teSubKeyTree(.. 
2c2e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c2f0 20 20 20 20 20 20 20 73 75 62 4b 65 79 2c 20 70         subKey, p
2c300 61 63 6b 61 67 65 2e 44 61 74 61 53 6f 75 72 63  ackage.DataSourc
2c310 65 49 64 2e 54 6f 53 74 72 69 6e 67 28 56 73 49  eId.ToString(VsI
2c320 64 46 6f 72 6d 61 74 29 2c 0d 0a 20 20 20 20 20  dFormat),..     
2c330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c340 20 20 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f     whatIf, verbo
2c350 73 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  se);..          
2c360 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
2c370 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
2c380 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75        return tru
2c390 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d  e;..        }...
2c3a0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
2c3b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c3c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c3d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c3e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c3f0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  ....        priv
2c400 61 74 65 20 73 74 61 74 69 63 20 62 6f 6f 6c 20  ate static bool 
2c410 50 72 6f 63 65 73 73 56 73 44 61 74 61 53 6f 75  ProcessVsDataSou
2c420 72 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  rce(..          
2c430 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65    MockRegistryKe
2c440 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20 20  y rootKey,..    
2c450 20 20 20 20 20 20 20 20 56 65 72 73 69 6f 6e 20          Version 
2c460 76 73 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20  vsVersion,..    
2c470 20 20 20 20 20 20 20 20 50 61 63 6b 61 67 65 20          Package 
2c480 70 61 63 6b 61 67 65 2c 0d 0a 20 20 20 20 20 20  package,..      
2c490 20 20 20 20 20 20 6f 62 6a 65 63 74 20 63 6c 69        object cli
2c4a0 65 6e 74 44 61 74 61 2c 0d 0a 20 20 20 20 20 20  entData,..      
2c4b0 20 20 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34        bool wow64
2c4c0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  ,..            b
2c4d0 6f 6f 6c 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69  ool throwOnMissi
2c4e0 6e 67 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ng,..           
2c4f0 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20   bool whatIf,.. 
2c500 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
2c510 76 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20  verbose,..      
2c520 20 20 20 20 20 20 72 65 66 20 73 74 72 69 6e 67        ref string
2c530 20 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20   error..        
2c540 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b      )..        {
2c550 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
2c560 20 28 70 61 63 6b 61 67 65 20 3d 3d 20 6e 75 6c   (package == nul
2c570 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
2c580 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
2c590 20 20 20 65 72 72 6f 72 20 3d 20 22 69 6e 76 61     error = "inva
2c5a0 6c 69 64 20 56 53 20 70 61 63 6b 61 67 65 22 3b  lid VS package";
2c5b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2c5c0 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
2c5d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
2c5e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 41 6e  ..            An
2c5f0 79 50 61 69 72 3c 73 74 72 69 6e 67 2c 20 62 6f  yPair<string, bo
2c600 6f 6c 3e 20 70 61 69 72 20 3d 20 63 6c 69 65 6e  ol> pair = clien
2c610 74 44 61 74 61 20 61 73 20 41 6e 79 50 61 69 72  tData as AnyPair
2c620 3c 73 74 72 69 6e 67 2c 20 62 6f 6f 6c 3e 3b 0d  <string, bool>;.
2c630 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
2c640 66 20 28 70 61 69 72 20 3d 3d 20 6e 75 6c 6c 29  f (pair == null)
2c650 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
2c660 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2c670 20 65 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69   error = "invali
2c680 64 20 56 53 20 63 61 6c 6c 62 61 63 6b 20 64 61  d VS callback da
2c690 74 61 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ta";..          
2c6a0 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
2c6b0 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se;..           
2c6c0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
2c6d0 20 20 69 66 20 28 70 61 69 72 2e 59 29 0d 0a 20    if (pair.Y).. 
2c6e0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
2c6f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
2c700 74 75 72 6e 20 41 64 64 56 73 44 61 74 61 53 6f  turn AddVsDataSo
2c710 75 72 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20  urce(..         
2c720 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b             rootK
2c730 65 79 2c 20 76 73 56 65 72 73 69 6f 6e 2c 20 70  ey, vsVersion, p
2c740 61 63 6b 61 67 65 2c 20 77 6f 77 36 34 2c 20 77  ackage, wow64, w
2c750 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 2c 0d  hatIf, verbose,.
2c760 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2c770 20 20 20 20 20 72 65 66 20 65 72 72 6f 72 29 3b       ref error);
2c780 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
2c790 0a 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73  .            els
2c7a0 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  e..            {
2c7b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2c7c0 20 20 72 65 74 75 72 6e 20 52 65 6d 6f 76 65 56    return RemoveV
2c7d0 73 44 61 74 61 53 6f 75 72 63 65 28 0d 0a 20 20  sDataSource(..  
2c7e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c7f0 20 20 72 6f 6f 74 4b 65 79 2c 20 76 73 56 65 72    rootKey, vsVer
2c800 73 69 6f 6e 2c 20 70 61 63 6b 61 67 65 2c 20 77  sion, package, w
2c810 6f 77 36 34 2c 20 77 68 61 74 49 66 2c 20 76 65  ow64, whatIf, ve
2c820 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20 20  rbose,..        
2c830 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20              ref 
2c840 65 72 72 6f 72 29 3b 0d 0a 20 20 20 20 20 20 20  error);..       
2c850 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
2c860 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72  }..        #endr
2c870 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20  egion....       
2c880 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
2c890 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c8a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c8b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c8c0 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
2c8d0 20 20 20 20 23 72 65 67 69 6f 6e 20 56 69 73 75      #region Visu
2c8e0 61 6c 20 53 74 75 64 69 6f 20 44 61 74 61 20 50  al Studio Data P
2c8f0 72 6f 76 69 64 65 72 20 48 61 6e 64 6c 69 6e 67  rovider Handling
2c900 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
2c910 65 20 73 74 61 74 69 63 20 62 6f 6f 6c 20 41 64  e static bool Ad
2c920 64 56 73 44 61 74 61 50 72 6f 76 69 64 65 72 28  dVsDataProvider(
2c930 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 4d 6f  ..            Mo
2c940 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 72 6f  ckRegistryKey ro
2c950 6f 74 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20  otKey,..        
2c960 20 20 20 20 56 65 72 73 69 6f 6e 20 76 73 56 65      Version vsVe
2c970 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20  rsion,..        
2c980 20 20 20 20 50 61 63 6b 61 67 65 20 70 61 63 6b      Package pack
2c990 61 67 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  age,..          
2c9a0 20 20 73 74 72 69 6e 67 20 66 69 6c 65 4e 61 6d    string fileNam
2c9b0 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
2c9c0 62 6f 6f 6c 20 77 6f 77 36 34 2c 0d 0a 20 20 20  bool wow64,..   
2c9d0 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68           bool wh
2c9e0 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20  atIf,..         
2c9f0 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c     bool verbose,
2ca00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
2ca10 66 20 73 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a  f string error..
2ca20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
2ca30 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
2ca40 20 20 20 20 20 20 69 66 20 28 76 73 56 65 72 73        if (vsVers
2ca50 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  ion == null)..  
2ca60 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
2ca70 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
2ca80 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64 20 56 53  or = "invalid VS
2ca90 20 76 65 72 73 69 6f 6e 22 3b 0d 0a 20 20 20 20   version";..    
2caa0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
2cab0 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20  rn false;..     
2cac0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
2cad0 20 20 20 20 20 20 20 20 69 66 20 28 70 61 63 6b          if (pack
2cae0 61 67 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  age == null)..  
2caf0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
2cb00 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
2cb10 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64 20 56 53  or = "invalid VS
2cb20 20 70 61 63 6b 61 67 65 22 3b 0d 0a 20 20 20 20   package";..    
2cb30 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
2cb40 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20  rn false;..     
2cb50 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
2cb60 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6b          string k
2cb70 65 79 4e 61 6d 65 20 3d 20 47 65 74 56 73 4b 65  eyName = GetVsKe
2cb80 79 4e 61 6d 65 28 76 73 56 65 72 73 69 6f 6e 2c  yName(vsVersion,
2cb90 20 77 6f 77 36 34 29 3b 0d 0a 0d 0a 20 20 20 20   wow64);....    
2cba0 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 4d          using (M
2cbb0 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 6b  ockRegistryKey k
2cbc0 65 79 20 3d 20 52 65 67 69 73 74 72 79 48 65 6c  ey = RegistryHel
2cbd0 70 65 72 2e 4f 70 65 6e 53 75 62 4b 65 79 28 0d  per.OpenSubKey(.
2cbe0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2cbf0 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 6b 65       rootKey, ke
2cc00 79 4e 61 6d 65 2c 20 66 61 6c 73 65 2c 20 77 68  yName, false, wh
2cc10 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 29 0d  atIf, verbose)).
2cc20 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
2cc30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cc40 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29  if (key == null)
2cc50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2cc60 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
2cc70 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
2cc80 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d   String.Format(.
2cc90 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2cca0 20 20 20 20 20 20 20 20 20 22 63 6f 75 6c 64 20           "could 
2ccb0 6e 6f 74 20 6f 70 65 6e 20 72 65 67 69 73 74 72  not open registr
2ccc0 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c 7b 31 7d 22  y key: {0}\\{1}"
2ccd0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
2cce0 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b             rootK
2ccf0 65 79 2c 20 6b 65 79 4e 61 6d 65 29 3b 0d 0a 0d  ey, keyName);...
2cd00 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2cd10 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
2cd20 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
2cd30 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
2cd40 20 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28           using (
2cd50 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20  MockRegistryKey 
2cd60 73 75 62 4b 65 79 20 3d 20 52 65 67 69 73 74 72  subKey = Registr
2cd70 79 48 65 6c 70 65 72 2e 4f 70 65 6e 53 75 62 4b  yHelper.OpenSubK
2cd80 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ey(..           
2cd90 20 20 20 20 20 20 20 20 20 20 20 20 20 6b 65 79               key
2cda0 2c 20 22 44 61 74 61 50 72 6f 76 69 64 65 72 73  , "DataProviders
2cdb0 22 2c 20 74 72 75 65 2c 20 77 68 61 74 49 66 2c  ", true, whatIf,
2cdc0 20 76 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 20   verbose))..    
2cdd0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
2cde0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cdf0 20 20 20 69 66 20 28 73 75 62 4b 65 79 20 3d 3d     if (subKey ==
2ce00 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
2ce10 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
2ce20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ce30 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 53         error = S
2ce40 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
2ce50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ce60 20 20 20 20 20 20 20 20 20 20 20 22 63 6f 75 6c             "coul
2ce70 64 20 6e 6f 74 20 6f 70 65 6e 20 72 65 67 69 73  d not open regis
2ce80 74 72 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c 44 61  try key: {0}\\Da
2ce90 74 61 50 72 6f 76 69 64 65 72 73 22 2c 0d 0a 20  taProviders",.. 
2cea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ceb0 20 20 20 20 20 20 20 20 20 20 20 6b 65 79 29 3b             key);
2cec0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2ced0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
2cee0 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20  rn false;..     
2cef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
2cf00 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2cf10 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 4d          using (M
2cf20 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 64  ockRegistryKey d
2cf30 61 74 61 50 72 6f 76 69 64 65 72 4b 65 79 20 3d  ataProviderKey =
2cf40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2cf50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65                Re
2cf60 67 69 73 74 72 79 48 65 6c 70 65 72 2e 43 72 65  gistryHelper.Cre
2cf70 61 74 65 53 75 62 4b 65 79 28 73 75 62 4b 65 79  ateSubKey(subKey
2cf80 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
2cf90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70                 p
2cfa0 61 63 6b 61 67 65 2e 44 61 74 61 50 72 6f 76 69  ackage.DataProvi
2cfb0 64 65 72 49 64 2e 54 6f 53 74 72 69 6e 67 28 56  derId.ToString(V
2cfc0 73 49 64 46 6f 72 6d 61 74 29 2c 0d 0a 20 20 20  sIdFormat),..   
2cfd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cfe0 20 20 20 20 20 20 20 20 20 77 68 61 74 49 66 2c           whatIf,
2cff0 20 76 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 20   verbose))..    
2d000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d010 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
2d020 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 64             if (d
2d030 61 74 61 50 72 6f 76 69 64 65 72 4b 65 79 20 3d  ataProviderKey =
2d040 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
2d050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d060 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
2d070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d080 65 72 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46  error = String.F
2d090 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
2d0a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d0b0 20 20 20 20 20 20 20 20 22 63 6f 75 6c 64 20 6e          "could n
2d0c0 6f 74 20 63 72 65 61 74 65 20 72 65 67 69 73 74  ot create regist
2d0d0 72 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c 7b 31 7d  ry key: {0}\\{1}
2d0e0 22 2c 20 6b 65 79 2c 0d 0a 20 20 20 20 20 20 20  ", key,..       
2d0f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d100 20 20 20 20 20 20 20 20 20 70 61 63 6b 61 67 65           package
2d110 2e 44 61 74 61 50 72 6f 76 69 64 65 72 49 64 2e  .DataProviderId.
2d120 54 6f 53 74 72 69 6e 67 28 56 73 49 64 46 6f 72  ToString(VsIdFor
2d130 6d 61 74 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  mat));....      
2d140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d150 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
2d160 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se;..           
2d170 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
2d180 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2d190 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74            Regist
2d1a0 72 79 48 65 6c 70 65 72 2e 53 65 74 56 61 6c 75  ryHelper.SetValu
2d1b0 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
2d1c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d1d0 64 61 74 61 50 72 6f 76 69 64 65 72 4b 65 79 2c  dataProviderKey,
2d1e0 20 6e 75 6c 6c 2c 20 44 65 73 63 72 69 70 74 69   null, Descripti
2d1f0 6f 6e 2c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20  on, whatIf,..   
2d200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d210 20 20 20 20 20 20 20 20 20 76 65 72 62 6f 73 65           verbose
2d220 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
2d230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65                Re
2d240 67 69 73 74 72 79 48 65 6c 70 65 72 2e 53 65 74  gistryHelper.Set
2d250 56 61 6c 75 65 28 0d 0a 20 20 20 20 20 20 20 20  Value(..        
2d260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d270 20 20 20 20 64 61 74 61 50 72 6f 76 69 64 65 72      dataProvider
2d280 4b 65 79 2c 20 22 49 6e 76 61 72 69 61 6e 74 4e  Key, "InvariantN
2d290 61 6d 65 22 2c 20 49 6e 76 61 72 69 61 6e 74 4e  ame", InvariantN
2d2a0 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ame,..          
2d2b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d2c0 20 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73    whatIf, verbos
2d2d0 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e);....         
2d2e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52                 R
2d2f0 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 53 65  egistryHelper.Se
2d300 74 56 61 6c 75 65 28 0d 0a 20 20 20 20 20 20 20  tValue(..       
2d310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d320 20 20 20 20 20 64 61 74 61 50 72 6f 76 69 64 65       dataProvide
2d330 72 4b 65 79 2c 20 22 54 65 63 68 6e 6f 6c 6f 67  rKey, "Technolog
2d340 79 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  y",..           
2d350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d360 20 70 61 63 6b 61 67 65 2e 41 64 6f 4e 65 74 54   package.AdoNetT
2d370 65 63 68 6e 6f 6c 6f 67 79 49 64 2e 54 6f 53 74  echnologyId.ToSt
2d380 72 69 6e 67 28 56 73 49 64 46 6f 72 6d 61 74 29  ring(VsIdFormat)
2d390 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
2d3a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 77                 w
2d3b0 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 3b  hatIf, verbose);
2d3c0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2d3d0 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69              Regi
2d3e0 73 74 72 79 48 65 6c 70 65 72 2e 53 65 74 56 61  stryHelper.SetVa
2d3f0 6c 75 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  lue(..          
2d400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d410 20 20 64 61 74 61 50 72 6f 76 69 64 65 72 4b 65    dataProviderKe
2d420 79 2c 20 22 43 6f 64 65 42 61 73 65 22 2c 20 66  y, "CodeBase", f
2d430 69 6c 65 4e 61 6d 65 2c 20 77 68 61 74 49 66 2c  ileName, whatIf,
2d440 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2d450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 76 65                ve
2d460 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20  rbose);....     
2d470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d480 20 20 20 52 65 67 69 73 74 72 79 48 65 6c 70 65     RegistryHelpe
2d490 72 2e 53 65 74 56 61 6c 75 65 28 0d 0a 20 20 20  r.SetValue(..   
2d4a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d4b0 20 20 20 20 20 20 20 20 20 64 61 74 61 50 72 6f           dataPro
2d4c0 76 69 64 65 72 4b 65 79 2c 20 22 46 61 63 74 6f  viderKey, "Facto
2d4d0 72 79 53 65 72 76 69 63 65 22 2c 0d 0a 20 20 20  ryService",..   
2d4e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d4f0 20 20 20 20 20 20 20 20 20 70 61 63 6b 61 67 65           package
2d500 2e 53 65 72 76 69 63 65 49 64 2e 54 6f 53 74 72  .ServiceId.ToStr
2d510 69 6e 67 28 56 73 49 64 46 6f 72 6d 61 74 29 2c  ing(VsIdFormat),
2d520 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20   whatIf,..      
2d530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d540 20 20 20 20 20 20 76 65 72 62 6f 73 65 29 3b 0d        verbose);.
2d550 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
2d560 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73             Regis
2d570 74 72 79 48 65 6c 70 65 72 2e 43 72 65 61 74 65  tryHelper.Create
2d580 53 75 62 4b 65 79 28 64 61 74 61 50 72 6f 76 69  SubKey(dataProvi
2d590 64 65 72 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20  derKey,..       
2d5a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d5b0 20 20 20 20 20 22 53 75 70 70 6f 72 74 65 64 4f       "SupportedO
2d5c0 62 6a 65 63 74 73 5c 5c 44 61 74 61 43 6f 6e 6e  bjects\\DataConn
2d5d0 65 63 74 69 6f 6e 55 49 43 6f 6e 74 72 6f 6c 22  ectionUIControl"
2d5e0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
2d5f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 77                 w
2d600 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 3b  hatIf, verbose);
2d610 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2d620 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69              Regi
2d630 73 74 72 79 48 65 6c 70 65 72 2e 43 72 65 61 74  stryHelper.Creat
2d640 65 53 75 62 4b 65 79 28 64 61 74 61 50 72 6f 76  eSubKey(dataProv
2d650 69 64 65 72 4b 65 79 2c 0d 0a 20 20 20 20 20 20  iderKey,..      
2d660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d670 20 20 20 20 20 20 22 53 75 70 70 6f 72 74 65 64        "Supported
2d680 4f 62 6a 65 63 74 73 5c 5c 44 61 74 61 43 6f 6e  Objects\\DataCon
2d690 6e 65 63 74 69 6f 6e 50 72 6f 70 65 72 74 69 65  nectionPropertie
2d6a0 73 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s",..           
2d6b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d6c0 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65   whatIf, verbose
2d6d0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
2d6e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65                Re
2d6f0 67 69 73 74 72 79 48 65 6c 70 65 72 2e 43 72 65  gistryHelper.Cre
2d700 61 74 65 53 75 62 4b 65 79 28 64 61 74 61 50 72  ateSubKey(dataPr
2d710 6f 76 69 64 65 72 4b 65 79 2c 0d 0a 20 20 20 20  oviderKey,..    
2d720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d730 20 20 20 20 20 20 20 20 22 53 75 70 70 6f 72 74          "Support
2d740 65 64 4f 62 6a 65 63 74 73 5c 5c 44 61 74 61 43  edObjects\\DataC
2d750 6f 6e 6e 65 63 74 69 6f 6e 53 75 70 70 6f 72 74  onnectionSupport
2d760 22 2c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20  ", whatIf,..    
2d770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d780 20 20 20 20 20 20 20 20 76 65 72 62 6f 73 65 29          verbose)
2d790 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
2d7a0 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67               Reg
2d7b0 69 73 74 72 79 48 65 6c 70 65 72 2e 43 72 65 61  istryHelper.Crea
2d7c0 74 65 53 75 62 4b 65 79 28 64 61 74 61 50 72 6f  teSubKey(dataPro
2d7d0 76 69 64 65 72 4b 65 79 2c 0d 0a 20 20 20 20 20  viderKey,..     
2d7e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d7f0 20 20 20 20 20 20 20 22 53 75 70 70 6f 72 74 65         "Supporte
2d800 64 4f 62 6a 65 63 74 73 5c 5c 44 61 74 61 4f 62  dObjects\\DataOb
2d810 6a 65 63 74 53 75 70 70 6f 72 74 22 2c 20 77 68  jectSupport", wh
2d820 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20  atIf,..         
2d830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d840 20 20 20 76 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a     verbose);....
2d850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d860 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79          Registry
2d870 48 65 6c 70 65 72 2e 43 72 65 61 74 65 53 75 62  Helper.CreateSub
2d880 4b 65 79 28 64 61 74 61 50 72 6f 76 69 64 65 72  Key(dataProvider
2d890 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  Key,..          
2d8a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d8b0 20 20 22 53 75 70 70 6f 72 74 65 64 4f 62 6a 65    "SupportedObje
2d8c0 63 74 73 5c 5c 44 61 74 61 56 69 65 77 53 75 70  cts\\DataViewSup
2d8d0 70 6f 72 74 22 2c 20 77 68 61 74 49 66 2c 0d 0a  port", whatIf,..
2d8e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d8f0 20 20 20 20 20 20 20 20 20 20 20 20 76 65 72 62              verb
2d900 6f 73 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ose);..         
2d910 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
2d920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
2d930 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
2d940 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
2d950 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20  turn true;..    
2d960 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
2d970 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
2d980 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d990 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d9a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d9b0 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
2d9c0 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74      private stat
2d9d0 69 63 20 62 6f 6f 6c 20 52 65 6d 6f 76 65 56 73  ic bool RemoveVs
2d9e0 44 61 74 61 50 72 6f 76 69 64 65 72 28 0d 0a 20  DataProvider(.. 
2d9f0 20 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52             MockR
2da00 65 67 69 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b  egistryKey rootK
2da10 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ey,..           
2da20 20 56 65 72 73 69 6f 6e 20 76 73 56 65 72 73 69   Version vsVersi
2da30 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  on,..           
2da40 20 50 61 63 6b 61 67 65 20 70 61 63 6b 61 67 65   Package package
2da50 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  ,..            b
2da60 6f 6f 6c 20 77 6f 77 36 34 2c 0d 0a 20 20 20 20  ool wow64,..    
2da70 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61          bool wha
2da80 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  tIf,..          
2da90 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 0d    bool verbose,.
2daa0 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66  .            ref
2dab0 20 73 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20   string error.. 
2dac0 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
2dad0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
2dae0 20 20 20 20 20 69 66 20 28 76 73 56 65 72 73 69       if (vsVersi
2daf0 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  on == null)..   
2db00 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
2db10 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
2db20 72 20 3d 20 22 69 6e 76 61 6c 69 64 20 56 53 20  r = "invalid VS 
2db30 76 65 72 73 69 6f 6e 22 3b 0d 0a 20 20 20 20 20  version";..     
2db40 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
2db50 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  n false;..      
2db60 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
2db70 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6b 65         string ke
2db80 79 4e 61 6d 65 20 3d 20 47 65 74 56 73 4b 65 79  yName = GetVsKey
2db90 4e 61 6d 65 28 76 73 56 65 72 73 69 6f 6e 2c 20  Name(vsVersion, 
2dba0 77 6f 77 36 34 29 3b 0d 0a 0d 0a 20 20 20 20 20  wow64);....     
2dbb0 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 4d 6f         using (Mo
2dbc0 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 6b 65  ckRegistryKey ke
2dbd0 79 20 3d 20 52 65 67 69 73 74 72 79 48 65 6c 70  y = RegistryHelp
2dbe0 65 72 2e 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a  er.OpenSubKey(..
2dbf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2dc00 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 6b 65 79      rootKey, key
2dc10 4e 61 6d 65 2c 20 66 61 6c 73 65 2c 20 77 68 61  Name, false, wha
2dc20 74 49 66 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a  tIf, verbose))..
2dc30 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
2dc40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
2dc50 66 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d  f (key == null).
2dc60 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2dc70 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
2dc80 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
2dc90 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
2dca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2dcb0 20 20 20 20 20 20 20 20 22 63 6f 75 6c 64 20 6e          "could n
2dcc0 6f 74 20 6f 70 65 6e 20 72 65 67 69 73 74 72 79  ot open registry
2dcd0 20 6b 65 79 3a 20 7b 30 7d 5c 5c 7b 31 7d 22 2c   key: {0}\\{1}",
2dce0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2dcf0 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65            rootKe
2dd00 79 2c 20 6b 65 79 4e 61 6d 65 29 3b 0d 0a 0d 0a  y, keyName);....
2dd10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2dd20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
2dd30 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
2dd40 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
2dd50 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 4d          using (M
2dd60 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 73  ockRegistryKey s
2dd70 75 62 4b 65 79 20 3d 20 52 65 67 69 73 74 72 79  ubKey = Registry
2dd80 48 65 6c 70 65 72 2e 4f 70 65 6e 53 75 62 4b 65  Helper.OpenSubKe
2dd90 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y(..            
2dda0 20 20 20 20 20 20 20 20 20 20 20 20 6b 65 79 2c              key,
2ddb0 20 22 44 61 74 61 50 72 6f 76 69 64 65 72 73 22   "DataProviders"
2ddc0 2c 20 74 72 75 65 2c 20 77 68 61 74 49 66 2c 20  , true, whatIf, 
2ddd0 76 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20  verbose))..     
2dde0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
2ddf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2de00 20 20 69 66 20 28 73 75 62 4b 65 79 20 3d 3d 20    if (subKey == 
2de10 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
2de20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
2de30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2de40 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 53 74        error = St
2de50 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
2de60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2de70 20 20 20 20 20 20 20 20 20 20 22 63 6f 75 6c 64            "could
2de80 20 6e 6f 74 20 6f 70 65 6e 20 72 65 67 69 73 74   not open regist
2de90 72 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c 44 61 74  ry key: {0}\\Dat
2dea0 61 50 72 6f 76 69 64 65 72 73 22 2c 0d 0a 20 20  aProviders",..  
2deb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2dec0 20 20 20 20 20 20 20 20 20 20 6b 65 79 29 3b 0d            key);.
2ded0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
2dee0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
2def0 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  n false;..      
2df00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
2df10 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
2df20 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79 48         RegistryH
2df30 65 6c 70 65 72 2e 44 65 6c 65 74 65 53 75 62 4b  elper.DeleteSubK
2df40 65 79 54 72 65 65 28 0d 0a 20 20 20 20 20 20 20  eyTree(..       
2df50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2df60 20 73 75 62 4b 65 79 2c 20 70 61 63 6b 61 67 65   subKey, package
2df70 2e 44 61 74 61 50 72 6f 76 69 64 65 72 49 64 2e  .DataProviderId.
2df80 54 6f 53 74 72 69 6e 67 28 56 73 49 64 46 6f 72  ToString(VsIdFor
2df90 6d 61 74 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  mat),..         
2dfa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 77                 w
2dfb0 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 3b  hatIf, verbose);
2dfc0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2dfd0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
2dfe0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
2dff0 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a    return true;..
2e000 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
2e010 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
2e020 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e030 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e040 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e050 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
2e060 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
2e070 73 74 61 74 69 63 20 62 6f 6f 6c 20 50 72 6f 63  static bool Proc
2e080 65 73 73 56 73 44 61 74 61 50 72 6f 76 69 64 65  essVsDataProvide
2e090 72 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  r(..            
2e0a0 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20  MockRegistryKey 
2e0b0 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20 20 20 20  rootKey,..      
2e0c0 20 20 20 20 20 20 56 65 72 73 69 6f 6e 20 76 73        Version vs
2e0d0 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20  Version,..      
2e0e0 20 20 20 20 20 20 50 61 63 6b 61 67 65 20 70 61        Package pa
2e0f0 63 6b 61 67 65 2c 0d 0a 20 20 20 20 20 20 20 20  ckage,..        
2e100 20 20 20 20 6f 62 6a 65 63 74 20 63 6c 69 65 6e      object clien
2e110 74 44 61 74 61 2c 0d 0a 20 20 20 20 20 20 20 20  tData,..        
2e120 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34 2c 0d      bool wow64,.
2e130 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f  .            boo
2e140 6c 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67  l throwOnMissing
2e150 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  ,..            b
2e160 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20  ool whatIf,..   
2e170 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65           bool ve
2e180 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20 20  rbose,..        
2e190 20 20 20 20 72 65 66 20 73 74 72 69 6e 67 20 65      ref string e
2e1a0 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20  rror..          
2e1b0 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a    )..        {..
2e1c0 20 20 20 20 20 20 20 20 20 20 20 20 41 6e 79 50              AnyP
2e1d0 61 69 72 3c 73 74 72 69 6e 67 2c 20 62 6f 6f 6c  air<string, bool
2e1e0 3e 20 70 61 69 72 20 3d 20 63 6c 69 65 6e 74 44  > pair = clientD
2e1f0 61 74 61 20 61 73 20 41 6e 79 50 61 69 72 3c 73  ata as AnyPair<s
2e200 74 72 69 6e 67 2c 20 62 6f 6f 6c 3e 3b 0d 0a 0d  tring, bool>;...
2e210 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
2e220 28 70 61 69 72 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  (pair == null)..
2e230 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
2e240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
2e250 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64 20  rror = "invalid 
2e260 56 53 20 63 61 6c 6c 62 61 63 6b 20 64 61 74 61  VS callback data
2e270 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ";..            
2e280 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
2e290 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
2e2a0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2e2b0 69 66 20 28 70 61 69 72 2e 59 29 0d 0a 20 20 20  if (pair.Y)..   
2e2c0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
2e2d0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
2e2e0 72 6e 20 41 64 64 56 73 44 61 74 61 50 72 6f 76  rn AddVsDataProv
2e2f0 69 64 65 72 28 0d 0a 20 20 20 20 20 20 20 20 20  ider(..         
2e300 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b             rootK
2e310 65 79 2c 20 76 73 56 65 72 73 69 6f 6e 2c 20 70  ey, vsVersion, p
2e320 61 63 6b 61 67 65 2c 20 70 61 69 72 2e 58 2c 20  ackage, pair.X, 
2e330 77 6f 77 36 34 2c 20 77 68 61 74 49 66 2c 0d 0a  wow64, whatIf,..
2e340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e350 20 20 20 20 76 65 72 62 6f 73 65 2c 20 72 65 66      verbose, ref
2e360 20 65 72 72 6f 72 29 3b 0d 0a 20 20 20 20 20 20   error);..      
2e370 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
2e380 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20       else..     
2e390 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
2e3a0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
2e3b0 20 52 65 6d 6f 76 65 56 73 44 61 74 61 50 72 6f   RemoveVsDataPro
2e3c0 76 69 64 65 72 28 0d 0a 20 20 20 20 20 20 20 20  vider(..        
2e3d0 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74              root
2e3e0 4b 65 79 2c 20 76 73 56 65 72 73 69 6f 6e 2c 20  Key, vsVersion, 
2e3f0 70 61 63 6b 61 67 65 2c 20 77 6f 77 36 34 2c 20  package, wow64, 
2e400 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 2c  whatIf, verbose,
2e410 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2e420 20 20 20 20 20 20 72 65 66 20 65 72 72 6f 72 29        ref error)
2e430 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
2e440 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..   
2e450 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d       #endregion.
2e460 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
2e470 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e480 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e490 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e4a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e4b0 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72  //....        #r
2e4c0 65 67 69 6f 6e 20 56 69 73 75 61 6c 20 53 74 75  egion Visual Stu
2e4d0 64 69 6f 20 50 61 63 6b 61 67 65 20 48 61 6e 64  dio Package Hand
2e4e0 6c 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 70 72  ling..        pr
2e4f0 69 76 61 74 65 20 73 74 61 74 69 63 20 76 6f 69  ivate static voi
2e500 64 20 49 6e 69 74 69 61 6c 69 7a 65 56 73 50 61  d InitializeVsPa
2e510 63 6b 61 67 65 28 0d 0a 20 20 20 20 20 20 20 20  ckage(..        
2e520 20 20 20 20 72 65 66 20 50 61 63 6b 61 67 65 20      ref Package 
2e530 70 61 63 6b 61 67 65 0d 0a 20 20 20 20 20 20 20  package..       
2e540 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
2e550 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  {..            i
2e560 66 20 28 70 61 63 6b 61 67 65 20 3d 3d 20 6e 75  f (package == nu
2e570 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
2e580 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
2e590 20 20 20 20 70 61 63 6b 61 67 65 20 3d 20 6e 65      package = ne
2e5a0 77 20 50 61 63 6b 61 67 65 28 29 3b 0d 0a 0d 0a  w Package();....
2e5b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e5c0 70 61 63 6b 61 67 65 2e 41 64 6f 4e 65 74 54 65  package.AdoNetTe
2e5d0 63 68 6e 6f 6c 6f 67 79 49 64 20 3d 20 6e 65 77  chnologyId = new
2e5e0 20 47 75 69 64 28 0d 0a 20 20 20 20 20 20 20 20   Guid(..        
2e5f0 20 20 20 20 20 20 20 20 20 20 20 20 22 37 37 41              "77A
2e600 42 39 41 39 44 2d 37 38 42 39 2d 34 42 41 37 2d  B9A9D-78B9-4BA7-
2e610 39 31 41 43 2d 38 37 33 46 35 33 33 38 46 31 44  91AC-873F5338F1D
2e620 32 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  2");....        
2e630 20 20 20 20 20 20 20 20 70 61 63 6b 61 67 65 2e          package.
2e640 50 61 63 6b 61 67 65 49 64 20 3d 20 6e 65 77 20  PackageId = new 
2e650 47 75 69 64 28 0d 0a 20 20 20 20 20 20 20 20 20  Guid(..         
2e660 20 20 20 20 20 20 20 20 20 20 20 22 44 43 42 45             "DCBE
2e670 36 43 38 44 2d 30 45 35 37 2d 34 30 39 39 2d 41  6C8D-0E57-4099-A
2e680 31 38 33 2d 39 38 46 46 37 34 43 36 34 44 39 43  183-98FF74C64D9C
2e690 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ");....         
2e6a0 20 20 20 20 20 20 20 70 61 63 6b 61 67 65 2e 53         package.S
2e6b0 65 72 76 69 63 65 49 64 20 3d 20 6e 65 77 20 47  erviceId = new G
2e6c0 75 69 64 28 0d 0a 20 20 20 20 20 20 20 20 20 20  uid(..          
2e6d0 20 20 20 20 20 20 20 20 20 20 22 44 43 42 45 36            "DCBE6
2e6e0 43 38 44 2d 30 45 35 37 2d 34 30 39 39 2d 41 31  C8D-0E57-4099-A1
2e6f0 38 33 2d 39 38 46 46 37 34 43 36 34 44 39 44 22  83-98FF74C64D9D"
2e700 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
2e710 20 20 20 20 20 20 70 61 63 6b 61 67 65 2e 44 61        package.Da
2e720 74 61 53 6f 75 72 63 65 49 64 20 3d 20 6e 65 77  taSourceId = new
2e730 20 47 75 69 64 28 0d 0a 20 20 20 20 20 20 20 20   Guid(..        
2e740 20 20 20 20 20 20 20 20 20 20 20 20 22 30 45 42              "0EB
2e750 41 41 42 36 45 2d 43 41 38 30 2d 34 42 34 41 2d  AAB6E-CA80-4B4A-
2e760 38 44 44 46 2d 43 42 45 36 42 46 30 35 38 43 37  8DDF-CBE6BF058C7
2e770 31 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  1");....        
2e780 20 20 20 20 20 20 20 20 70 61 63 6b 61 67 65 2e          package.
2e790 44 61 74 61 50 72 6f 76 69 64 65 72 49 64 20 3d  DataProviderId =
2e7a0 20 6e 65 77 20 47 75 69 64 28 0d 0a 20 20 20 20   new Guid(..    
2e7b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e7c0 22 30 45 42 41 41 42 36 45 2d 43 41 38 30 2d 34  "0EBAAB6E-CA80-4
2e7d0 42 34 41 2d 38 44 44 46 2d 43 42 45 36 42 46 30  B4A-8DDF-CBE6BF0
2e7e0 35 38 43 37 30 22 29 3b 0d 0a 20 20 20 20 20 20  58C70");..      
2e7f0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
2e800 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f   }....        //
2e810 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e820 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e830 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e840 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e850 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
2e860 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
2e870 62 6f 6f 6c 20 41 64 64 56 73 50 61 63 6b 61 67  bool AddVsPackag
2e880 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
2e890 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20  MockRegistryKey 
2e8a0 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20 20 20 20  rootKey,..      
2e8b0 20 20 20 20 20 20 56 65 72 73 69 6f 6e 20 76 73        Version vs
2e8c0 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20  Version,..      
2e8d0 20 20 20 20 20 20 50 61 63 6b 61 67 65 20 70 61        Package pa
2e8e0 63 6b 61 67 65 2c 0d 0a 20 20 20 20 20 20 20 20  ckage,..        
2e8f0 20 20 20 20 73 74 72 69 6e 67 20 66 69 6c 65 4e      string fileN
2e900 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ame,..          
2e910 20 20 62 6f 6f 6c 20 77 6f 77 36 34 2c 0d 0a 20    bool wow64,.. 
2e920 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
2e930 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20  whatIf,..       
2e940 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73       bool verbos
2e950 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
2e960 72 65 66 20 73 74 72 69 6e 67 20 65 72 72 6f 72  ref string error
2e970 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d  ..            ).
2e980 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
2e990 20 20 20 20 20 20 20 20 69 66 20 28 76 73 56 65          if (vsVe
2e9a0 72 73 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  rsion == null)..
2e9b0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
2e9c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
2e9d0 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64 20  rror = "invalid 
2e9e0 56 53 20 76 65 72 73 69 6f 6e 22 3b 0d 0a 20 20  VS version";..  
2e9f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
2ea00 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20  turn false;..   
2ea10 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
2ea20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 70 61            if (pa
2ea30 63 6b 61 67 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  ckage == null)..
2ea40 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
2ea50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
2ea60 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64 20  rror = "invalid 
2ea70 56 53 20 70 61 63 6b 61 67 65 22 3b 0d 0a 20 20  VS package";..  
2ea80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
2ea90 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20  turn false;..   
2eaa0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
2eab0 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
2eac0 20 6b 65 79 4e 61 6d 65 20 3d 20 47 65 74 56 73   keyName = GetVs
2ead0 4b 65 79 4e 61 6d 65 28 76 73 56 65 72 73 69 6f  KeyName(vsVersio
2eae0 6e 2c 20 77 6f 77 36 34 29 3b 0d 0a 0d 0a 20 20  n, wow64);....  
2eaf0 20 20 20 20 20 20 20 20 20 20 75 73 69 6e 67 20            using 
2eb00 28 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79  (MockRegistryKey
2eb10 20 6b 65 79 20 3d 20 52 65 67 69 73 74 72 79 48   key = RegistryH
2eb20 65 6c 70 65 72 2e 4f 70 65 6e 53 75 62 4b 65 79  elper.OpenSubKey
2eb30 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
2eb40 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20         rootKey, 
2eb50 6b 65 79 4e 61 6d 65 2c 20 66 61 6c 73 65 2c 20  keyName, false, 
2eb60 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29  whatIf, verbose)
2eb70 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
2eb80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2eb90 20 20 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75 6c    if (key == nul
2eba0 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
2ebb0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
2ebc0 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72             error
2ebd0 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74   = String.Format
2ebe0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
2ebf0 20 20 20 20 20 20 20 20 20 20 20 22 63 6f 75 6c             "coul
2ec00 64 20 6e 6f 74 20 6f 70 65 6e 20 72 65 67 69 73  d not open regis
2ec10 74 72 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c 7b 31  try key: {0}\\{1
2ec20 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }",..           
2ec30 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f               roo
2ec40 74 4b 65 79 2c 20 6b 65 79 4e 61 6d 65 29 3b 0d  tKey, keyName);.
2ec50 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
2ec60 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
2ec70 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lse;..          
2ec80 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
2ec90 20 20 20 20 20 20 20 20 20 20 20 75 73 69 6e 67             using
2eca0 20 28 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65   (MockRegistryKe
2ecb0 79 20 73 75 62 4b 65 79 20 3d 20 52 65 67 69 73  y subKey = Regis
2ecc0 74 72 79 48 65 6c 70 65 72 2e 4f 70 65 6e 53 75  tryHelper.OpenSu
2ecd0 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20  bKey(..         
2ece0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6b                 k
2ecf0 65 79 2c 20 22 50 61 63 6b 61 67 65 73 22 2c 20  ey, "Packages", 
2ed00 74 72 75 65 2c 20 77 68 61 74 49 66 2c 20 76 65  true, whatIf, ve
2ed10 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 20  rbose))..       
2ed20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
2ed30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ed40 69 66 20 28 73 75 62 4b 65 79 20 3d 3d 20 6e 75  if (subKey == nu
2ed50 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
2ed60 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
2ed70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ed80 20 20 20 20 65 72 72 6f 72 20 3d 20 53 74 72 69      error = Stri
2ed90 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ng.Format(..    
2eda0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2edb0 20 20 20 20 20 20 20 20 22 63 6f 75 6c 64 20 6e          "could n
2edc0 6f 74 20 6f 70 65 6e 20 72 65 67 69 73 74 72 79  ot open registry
2edd0 20 6b 65 79 3a 20 7b 30 7d 5c 5c 50 61 63 6b 61   key: {0}\\Packa
2ede0 67 65 73 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  ges",..         
2edf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ee00 20 20 20 6b 65 79 29 3b 0d 0a 0d 0a 20 20 20 20     key);....    
2ee10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ee20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
2ee30 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
2ee40 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
2ee50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ee60 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
2ee70 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a          // NOTE:
2ee80 20 2a 57 41 52 4e 49 4e 47 2a 20 43 68 61 6e 67   *WARNING* Chang
2ee90 69 6e 67 20 61 6e 79 20 6f 66 20 74 68 65 73 65  ing any of these
2eea0 20 76 61 6c 75 65 73 20 77 69 6c 6c 20 6c 69 6b   values will lik
2eeb0 65 6c 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ely..           
2eec0 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
2eed0 20 20 72 65 71 75 69 72 65 20 61 20 6e 65 77 20    require a new 
2eee0 22 70 61 63 6b 61 67 65 20 6c 6f 61 64 20 6b 65  "package load ke
2eef0 79 22 20 28 50 4c 4b 29 20 74 6f 20 62 65 0d 0a  y" (PLK) to be..
2ef00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ef10 20 20 20 20 2f 2f 20 20 20 20 20 20 20 67 65 6e      //       gen
2ef20 65 72 61 74 65 64 20 69 6e 20 6f 72 64 65 72 20  erated in order 
2ef30 74 6f 20 70 72 6f 70 65 72 6c 79 20 73 75 70 70  to properly supp
2ef40 6f 72 74 20 6c 6f 61 64 69 6e 67 20 74 68 65 0d  ort loading the.
2ef50 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2ef60 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 70 61       //       pa
2ef70 63 6b 61 67 65 20 69 6e 74 6f 20 56 69 73 75 61  ckage into Visua
2ef80 6c 20 53 74 75 64 69 6f 20 32 30 30 38 20 61 6e  l Studio 2008 an
2ef90 64 20 65 61 72 6c 69 65 72 20 77 69 74 68 6f 75  d earlier withou
2efa0 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  t..             
2efb0 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
2efc0 74 68 65 20 6d 61 74 63 68 69 6e 67 20 56 69 73  the matching Vis
2efd0 75 61 6c 20 53 74 75 64 69 6f 20 53 44 4b 20 62  ual Studio SDK b
2efe0 65 69 6e 67 20 69 6e 73 74 61 6c 6c 65 64 2e 0d  eing installed..
2eff0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2f000 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 50 6c       //       Pl
2f010 65 61 73 65 20 72 65 66 65 72 20 74 6f 20 74 68  ease refer to th
2f020 65 20 22 53 51 4c 69 74 65 2e 44 65 73 69 67 6e  e "SQLite.Design
2f030 65 72 5c 70 6c 6b 2e 74 78 74 22 20 66 69 6c 65  er\plk.txt" file
2f040 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2f050 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 66        //       f
2f060 6f 72 20 74 68 65 20 65 78 69 73 74 69 6e 67 20  or the existing 
2f070 6f 66 66 69 63 69 61 6c 20 76 61 6c 75 65 73 20  official values 
2f080 61 6e 64 20 75 70 64 61 74 65 20 74 68 65 6d 20  and update them 
2f090 69 66 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  if..            
2f0a0 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
2f0b0 20 6e 65 63 65 73 73 61 72 79 2e 20 20 41 6c 73   necessary.  Als
2f0c0 6f 2c 20 74 68 65 20 6e 65 77 6c 79 20 67 65 6e  o, the newly gen
2f0d0 65 72 61 74 65 64 20 70 61 63 6b 61 67 65 20 6c  erated package l
2f0e0 6f 61 64 0d 0a 20 20 20 20 20 20 20 20 20 20 20  oad..           
2f0f0 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
2f100 20 20 6b 65 79 20 69 74 73 65 6c 66 2c 20 77 68    key itself, wh
2f110 69 63 68 20 69 73 20 61 20 31 32 38 20 63 68 61  ich is a 128 cha
2f120 72 61 63 74 65 72 20 61 6c 70 68 61 6e 75 6d 65  racter alphanume
2f130 72 69 63 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ric..           
2f140 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
2f150 20 20 73 74 72 69 6e 67 2c 20 6d 75 73 74 20 62    string, must b
2f160 65 20 70 6c 61 63 65 64 20 69 6e 20 74 68 65 20  e placed in the 
2f170 72 65 73 6f 75 72 63 65 20 73 74 72 69 6e 67 20  resource string 
2f180 6e 61 6d 65 64 0d 0a 20 20 20 20 20 20 20 20 20  named..         
2f190 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
2f1a0 20 20 20 20 22 34 30 30 22 20 69 6e 20 74 68 65      "400" in the
2f1b0 20 22 53 51 4c 69 74 65 2e 44 65 73 69 67 6e 65   "SQLite.Designe
2f1c0 72 5c 56 53 50 61 63 6b 61 67 65 2e 72 65 73 78  r\VSPackage.resx
2f1d0 22 20 66 69 6c 65 0d 0a 20 20 20 20 20 20 20 20  " file..        
2f1e0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
2f1f0 20 20 20 20 20 61 6e 64 20 74 68 65 6e 20 74 68       and then th
2f200 65 20 64 65 73 69 67 6e 65 72 20 61 73 73 65 6d  e designer assem
2f210 62 6c 79 20 69 74 73 65 6c 66 20 6d 75 73 74 20  bly itself must 
2f220 62 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  be..            
2f230 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
2f240 20 72 65 63 6f 6d 70 69 6c 65 64 2e 20 20 41 73   recompiled.  As
2f250 20 6f 66 20 74 68 69 73 20 77 72 69 74 69 6e 67   of this writing
2f260 20 28 69 6e 20 46 65 62 72 75 61 72 79 20 32 30   (in February 20
2f270 31 32 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  12),..          
2f280 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
2f290 20 20 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67     the following
2f2a0 20 55 52 4c 20 69 73 20 74 68 65 20 70 72 6f 70   URL is the prop
2f2b0 65 72 20 70 6c 61 63 65 20 74 6f 20 67 65 6e 65  er place to gene
2f2c0 72 61 74 65 0d 0a 20 20 20 20 20 20 20 20 20 20  rate..          
2f2d0 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
2f2e0 20 20 20 70 61 63 6b 61 67 65 20 6c 6f 61 64 20     package load 
2f2f0 6b 65 79 73 3a 0d 0a 20 20 20 20 20 20 20 20 20  keys:..         
2f300 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
2f310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f320 20 20 20 2f 2f 20 20 20 20 20 20 20 68 74 74 70     //       http
2f330 3a 2f 2f 6d 73 64 6e 2e 6d 69 63 72 6f 73 6f 66  ://msdn.microsof
2f340 74 2e 63 6f 6d 2f 65 6e 2d 75 73 2f 76 73 74 75  t.com/en-us/vstu
2f350 64 69 6f 2f 63 63 36 35 35 37 39 35 0d 0a 20 20  dio/cc655795..  
2f360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f370 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
2f380 20 20 20 20 20 20 20 20 20 20 75 73 69 6e 67 20            using 
2f390 28 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79  (MockRegistryKey
2f3a0 20 70 61 63 6b 61 67 65 4b 65 79 20 3d 0d 0a 20   packageKey =.. 
2f3b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f3c0 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73             Regis
2f3d0 74 72 79 48 65 6c 70 65 72 2e 43 72 65 61 74 65  tryHelper.Create
2f3e0 53 75 62 4b 65 79 28 73 75 62 4b 65 79 2c 0d 0a  SubKey(subKey,..
2f3f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f400 20 20 20 20 20 20 20 20 20 20 20 20 70 61 63 6b              pack
2f410 61 67 65 2e 50 61 63 6b 61 67 65 49 64 2e 54 6f  age.PackageId.To
2f420 53 74 72 69 6e 67 28 56 73 49 64 46 6f 72 6d 61  String(VsIdForma
2f430 74 29 2c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20  t), whatIf,..   
2f440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f450 20 20 20 20 20 20 20 20 20 76 65 72 62 6f 73 65           verbose
2f460 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
2f470 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
2f480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f490 20 20 20 69 66 20 28 70 61 63 6b 61 67 65 4b 65     if (packageKe
2f4a0 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  y == null)..    
2f4b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f4c0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
2f4d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f4e0 20 20 20 65 72 72 6f 72 20 3d 20 53 74 72 69 6e     error = Strin
2f4f0 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
2f500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f510 20 20 20 20 20 20 20 20 20 20 20 22 63 6f 75 6c             "coul
2f520 64 20 6e 6f 74 20 63 72 65 61 74 65 20 72 65 67  d not create reg
2f530 69 73 74 72 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c  istry key: {0}\\
2f540 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  {1}",..         
2f550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f560 20 20 20 20 20 20 20 6b 65 79 2c 20 70 61 63 6b         key, pack
2f570 61 67 65 2e 50 61 63 6b 61 67 65 49 64 2e 54 6f  age.PackageId.To
2f580 53 74 72 69 6e 67 28 56 73 49 64 46 6f 72 6d 61  String(VsIdForma
2f590 74 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  t));....        
2f5a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f5b0 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
2f5c0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
2f5d0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
2f5e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f5f0 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79          Registry
2f600 48 65 6c 70 65 72 2e 53 65 74 56 61 6c 75 65 28  Helper.SetValue(
2f610 70 61 63 6b 61 67 65 4b 65 79 2c 20 6e 75 6c 6c  packageKey, null
2f620 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
2f630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53                 S
2f640 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 22 7b 30  tring.Format("{0
2f650 7d 20 44 65 73 69 67 6e 65 72 20 50 61 63 6b 61  } Designer Packa
2f660 67 65 22 2c 20 50 72 6f 6a 65 63 74 4e 61 6d 65  ge", ProjectName
2f670 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
2f680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f690 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29  whatIf, verbose)
2f6a0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
2f6b0 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67               Reg
2f6c0 69 73 74 72 79 48 65 6c 70 65 72 2e 53 65 74 56  istryHelper.SetV
2f6d0 61 6c 75 65 28 70 61 63 6b 61 67 65 4b 65 79 2c  alue(packageKey,
2f6e0 20 22 43 6c 61 73 73 22 2c 0d 0a 20 20 20 20 20   "Class",..     
2f6f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f700 20 20 20 20 20 20 20 22 53 51 4c 69 74 65 2e 44         "SQLite.D
2f710 65 73 69 67 6e 65 72 2e 53 51 4c 69 74 65 50 61  esigner.SQLitePa
2f720 63 6b 61 67 65 22 2c 20 77 68 61 74 49 66 2c 20  ckage", whatIf, 
2f730 76 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20  verbose);....   
2f740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f750 20 20 20 20 20 52 65 67 69 73 74 72 79 48 65 6c       RegistryHel
2f760 70 65 72 2e 53 65 74 56 61 6c 75 65 28 70 61 63  per.SetValue(pac
2f770 6b 61 67 65 4b 65 79 2c 20 22 43 6f 64 65 42 61  kageKey, "CodeBa
2f780 73 65 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  se",..          
2f790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f7a0 20 20 66 69 6c 65 4e 61 6d 65 2c 20 77 68 61 74    fileName, what
2f7b0 49 66 2c 20 76 65 72 62 6f 73 65 29 3b 0d 0a 0d  If, verbose);...
2f7c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2f7d0 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72           Registr
2f7e0 79 48 65 6c 70 65 72 2e 53 65 74 56 61 6c 75 65  yHelper.SetValue
2f7f0 28 70 61 63 6b 61 67 65 4b 65 79 2c 20 22 49 44  (packageKey, "ID
2f800 22 2c 20 34 30 30 2c 20 77 68 61 74 49 66 2c 0d  ", 400, whatIf,.
2f810 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2f820 20 20 20 20 20 20 20 20 20 20 20 20 20 76 65 72               ver
2f830 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  bose);....      
2f840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f850 20 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72    RegistryHelper
2f860 2e 53 65 74 56 61 6c 75 65 28 70 61 63 6b 61 67  .SetValue(packag
2f870 65 4b 65 79 2c 20 22 49 6e 70 72 6f 63 53 65 72  eKey, "InprocSer
2f880 76 65 72 33 32 22 2c 0d 0a 20 20 20 20 20 20 20  ver32",..       
2f890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f8a0 20 20 20 20 20 50 61 74 68 2e 43 6f 6d 62 69 6e       Path.Combin
2f8b0 65 28 45 6e 76 69 72 6f 6e 6d 65 6e 74 2e 53 79  e(Environment.Sy
2f8c0 73 74 65 6d 44 69 72 65 63 74 6f 72 79 2c 0d 0a  stemDirectory,..
2f8d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f8e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f8f0 22 6d 73 63 6f 72 65 65 2e 64 6c 6c 22 29 2c 20  "mscoree.dll"), 
2f900 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29  whatIf, verbose)
2f910 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
2f920 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67               Reg
2f930 69 73 74 72 79 48 65 6c 70 65 72 2e 53 65 74 56  istryHelper.SetV
2f940 61 6c 75 65 28 70 61 63 6b 61 67 65 4b 65 79 2c  alue(packageKey,
2f950 20 22 43 6f 6d 70 61 6e 79 4e 61 6d 65 22 2c 0d   "CompanyName",.
2f960 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2f970 20 20 20 20 20 20 20 20 20 20 20 20 20 22 68 74               "ht
2f980 74 70 3a 2f 2f 73 79 73 74 65 6d 2e 64 61 74 61  tp://system.data
2f990 2e 73 71 6c 69 74 65 2e 6f 72 67 2f 22 2c 20 77  .sqlite.org/", w
2f9a0 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 3b  hatIf, verbose);
2f9b0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2f9c0 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69              Regi
2f9d0 73 74 72 79 48 65 6c 70 65 72 2e 53 65 74 56 61  stryHelper.SetVa
2f9e0 6c 75 65 28 70 61 63 6b 61 67 65 4b 65 79 2c 20  lue(packageKey, 
2f9f0 22 4d 69 6e 45 64 69 74 69 6f 6e 22 2c 0d 0a 20  "MinEdition",.. 
2fa00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fa10 20 20 20 20 20 20 20 20 20 20 20 22 73 74 61 6e             "stan
2fa20 64 61 72 64 22 2c 20 77 68 61 74 49 66 2c 20 76  dard", whatIf, v
2fa30 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20  erbose);....    
2fa40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fa50 20 20 20 20 52 65 67 69 73 74 72 79 48 65 6c 70      RegistryHelp
2fa60 65 72 2e 53 65 74 56 61 6c 75 65 28 70 61 63 6b  er.SetValue(pack
2fa70 61 67 65 4b 65 79 2c 20 22 50 72 6f 64 75 63 74  ageKey, "Product
2fa80 4e 61 6d 65 22 2c 0d 0a 20 20 20 20 20 20 20 20  Name",..        
2fa90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2faa0 20 20 20 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61      String.Forma
2fab0 74 28 22 7b 30 7d 20 44 65 73 69 67 6e 65 72 20  t("{0} Designer 
2fac0 50 61 63 6b 61 67 65 22 2c 20 50 72 6f 6a 65 63  Package", Projec
2fad0 74 4e 61 6d 65 29 2c 0d 0a 20 20 20 20 20 20 20  tName),..       
2fae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2faf0 20 20 20 20 20 77 68 61 74 49 66 2c 20 76 65 72       whatIf, ver
2fb00 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  bose);....      
2fb10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fb20 20 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72    RegistryHelper
2fb30 2e 53 65 74 56 61 6c 75 65 28 70 61 63 6b 61 67  .SetValue(packag
2fb40 65 4b 65 79 2c 20 22 50 72 6f 64 75 63 74 56 65  eKey, "ProductVe
2fb50 72 73 69 6f 6e 22 2c 0d 0a 20 20 20 20 20 20 20  rsion",..       
2fb60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fb70 20 20 20 20 20 22 31 2e 30 22 2c 20 77 68 61 74       "1.0", what
2fb80 49 66 2c 20 76 65 72 62 6f 73 65 29 3b 0d 0a 0d  If, verbose);...
2fb90 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2fba0 20 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28           using (
2fbb0 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20  MockRegistryKey 
2fbc0 74 6f 6f 6c 62 6f 78 4b 65 79 20 3d 0d 0a 20 20  toolboxKey =..  
2fbd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fbe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65                Re
2fbf0 67 69 73 74 72 79 48 65 6c 70 65 72 2e 43 72 65  gistryHelper.Cre
2fc00 61 74 65 53 75 62 4b 65 79 28 70 61 63 6b 61 67  ateSubKey(packag
2fc10 65 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20  eKey,..         
2fc20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fc30 20 20 20 20 20 20 20 22 54 6f 6f 6c 62 6f 78 22         "Toolbox"
2fc40 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73  , whatIf, verbos
2fc50 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e))..           
2fc60 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
2fc70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fc80 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
2fc90 74 6f 6f 6c 62 6f 78 4b 65 79 20 3d 3d 20 6e 75  toolboxKey == nu
2fca0 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
2fcb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fcc0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
2fcd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fce0 20 20 20 20 65 72 72 6f 72 20 3d 20 53 74 72 69      error = Stri
2fcf0 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ng.Format(..    
2fd00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fd10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fd20 22 63 6f 75 6c 64 20 6e 6f 74 20 63 72 65 61 74  "could not creat
2fd30 65 20 72 65 67 69 73 74 72 79 20 6b 65 79 3a 20  e registry key: 
2fd40 22 20 2b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  " +..           
2fd50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fd60 20 20 20 20 20 20 20 20 20 22 7b 30 7d 5c 5c 54           "{0}\\T
2fd70 6f 6f 6c 62 6f 78 22 2c 20 70 61 63 6b 61 67 65  oolbox", package
2fd80 4b 65 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  Key);....       
2fd90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fda0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
2fdb0 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20  false;..        
2fdc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fdd0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
2fde0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fdf0 20 20 20 20 20 52 65 67 69 73 74 72 79 48 65 6c       RegistryHel
2fe00 70 65 72 2e 53 65 74 56 61 6c 75 65 28 0d 0a 20  per.SetValue(.. 
2fe10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fe20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
2fe30 6f 6f 6c 62 6f 78 4b 65 79 2c 20 22 44 65 66 61  oolboxKey, "Defa
2fe40 75 6c 74 20 49 74 65 6d 73 22 2c 20 33 2c 20 77  ult Items", 3, w
2fe50 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20  hatIf,..        
2fe60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fe70 20 20 20 20 20 20 20 20 76 65 72 62 6f 73 65 29          verbose)
2fe80 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
2fe90 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
2fea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2feb0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
2fec0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
2fed0 20 20 20 20 20 20 20 20 20 20 75 73 69 6e 67 20            using 
2fee0 28 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79  (MockRegistryKey
2fef0 20 73 75 62 4b 65 79 20 3d 20 52 65 67 69 73 74   subKey = Regist
2ff00 72 79 48 65 6c 70 65 72 2e 4f 70 65 6e 53 75 62  ryHelper.OpenSub
2ff10 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20  Key(..          
2ff20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6b 65                ke
2ff30 79 2c 20 22 4d 65 6e 75 73 22 2c 20 74 72 75 65  y, "Menus", true
2ff40 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73  , whatIf, verbos
2ff50 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e))..           
2ff60 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
2ff70 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
2ff80 73 75 62 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d  subKey == null).
2ff90 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2ffa0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
2ffb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ffc0 65 72 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46  error = String.F
2ffd0 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
2ffe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fff0 20 20 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20 6f      "could not o
30000 70 65 6e 20 72 65 67 69 73 74 72 79 20 6b 65 79  pen registry key
30010 3a 20 7b 30 7d 5c 5c 4d 65 6e 75 73 22 2c 0d 0a  : {0}\\Menus",..
30020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30030 20 20 20 20 20 20 20 20 20 20 20 20 6b 65 79 29              key)
30040 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
30050 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
30060 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20  urn false;..    
30070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30080 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
30090 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72           Registr
300a0 79 48 65 6c 70 65 72 2e 53 65 74 56 61 6c 75 65  yHelper.SetValue
300b0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
300c0 20 20 20 20 20 20 20 20 20 20 20 73 75 62 4b 65             subKe
300d0 79 2c 20 70 61 63 6b 61 67 65 2e 50 61 63 6b 61  y, package.Packa
300e0 67 65 49 64 2e 54 6f 53 74 72 69 6e 67 28 56 73  geId.ToString(Vs
300f0 49 64 46 6f 72 6d 61 74 29 2c 0d 0a 20 20 20 20  IdFormat),..    
30100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30110 20 20 20 20 22 2c 20 31 30 30 30 2c 20 33 22 2c      ", 1000, 3",
30120 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65   whatIf, verbose
30130 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
30140 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
30150 20 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28           using (
30160 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20  MockRegistryKey 
30170 73 75 62 4b 65 79 20 3d 20 52 65 67 69 73 74 72  subKey = Registr
30180 79 48 65 6c 70 65 72 2e 4f 70 65 6e 53 75 62 4b  yHelper.OpenSubK
30190 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ey(..           
301a0 20 20 20 20 20 20 20 20 20 20 20 20 20 6b 65 79               key
301b0 2c 20 22 53 65 72 76 69 63 65 73 22 2c 20 74 72  , "Services", tr
301c0 75 65 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62  ue, whatIf, verb
301d0 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ose))..         
301e0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
301f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
30200 20 28 73 75 62 4b 65 79 20 3d 3d 20 6e 75 6c 6c   (subKey == null
30210 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
30220 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
30230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30240 20 20 65 72 72 6f 72 20 3d 20 53 74 72 69 6e 67    error = String
30250 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  .Format(..      
30260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30270 20 20 20 20 20 20 22 63 6f 75 6c 64 20 6e 6f 74        "could not
30280 20 6f 70 65 6e 20 72 65 67 69 73 74 72 79 20 6b   open registry k
30290 65 79 3a 20 7b 30 7d 5c 5c 53 65 72 76 69 63 65  ey: {0}\\Service
302a0 73 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s",..           
302b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
302c0 20 6b 65 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20   key);....      
302d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
302e0 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
302f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
30300 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
30310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 75 73                us
30320 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73 74 72  ing (MockRegistr
30330 79 4b 65 79 20 73 65 72 76 69 63 65 4b 65 79 20  yKey serviceKey 
30340 3d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  =..             
30350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52                 R
30360 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 43 72  egistryHelper.Cr
30370 65 61 74 65 53 75 62 4b 65 79 28 73 75 62 4b 65  eateSubKey(subKe
30380 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y,..            
30390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
303a0 70 61 63 6b 61 67 65 2e 53 65 72 76 69 63 65 49  package.ServiceI
303b0 64 2e 54 6f 53 74 72 69 6e 67 28 56 73 49 64 46  d.ToString(VsIdF
303c0 6f 72 6d 61 74 29 2c 20 77 68 61 74 49 66 2c 0d  ormat), whatIf,.
303d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
303e0 20 20 20 20 20 20 20 20 20 20 20 20 20 76 65 72               ver
303f0 62 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20  bose))..        
30400 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
30410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30420 20 20 20 20 20 20 20 69 66 20 28 73 65 72 76 69         if (servi
30430 63 65 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  ceKey == null)..
30440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30450 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
30460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30470 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 53         error = S
30480 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
30490 20 20 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 20 20 20 20 20 22                 "
304b0 63 6f 75 6c 64 20 6e 6f 74 20 63 72 65 61 74 65  could not create
304c0 20 72 65 67 69 73 74 72 79 20 6b 65 79 3a 20 7b   registry key: {
304d0 30 7d 5c 5c 7b 31 7d 22 2c 0d 0a 20 20 20 20 20  0}\\{1}",..     
304e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
304f0 20 20 20 20 20 20 20 20 20 20 20 6b 65 79 2c 20             key, 
30500 70 61 63 6b 61 67 65 2e 53 65 72 76 69 63 65 49  package.ServiceI
30510 64 2e 54 6f 53 74 72 69 6e 67 28 56 73 49 64 46  d.ToString(VsIdF
30520 6f 72 6d 61 74 29 29 3b 0d 0a 0d 0a 20 20 20 20  ormat));....    
30530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30540 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
30550 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alse;..         
30560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
30570 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
30580 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69              Regi
30590 73 74 72 79 48 65 6c 70 65 72 2e 53 65 74 56 61  stryHelper.SetVa
305a0 6c 75 65 28 73 65 72 76 69 63 65 4b 65 79 2c 20  lue(serviceKey, 
305b0 6e 75 6c 6c 2c 0d 0a 20 20 20 20 20 20 20 20 20  null,..         
305c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
305d0 20 20 20 70 61 63 6b 61 67 65 2e 50 61 63 6b 61     package.Packa
305e0 67 65 49 64 2e 54 6f 53 74 72 69 6e 67 28 56 73  geId.ToString(Vs
305f0 49 64 46 6f 72 6d 61 74 29 2c 20 77 68 61 74 49  IdFormat), whatI
30600 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  f,..            
30610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30620 76 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20  verbose);....   
30630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30640 20 20 20 20 20 52 65 67 69 73 74 72 79 48 65 6c       RegistryHel
30650 70 65 72 2e 53 65 74 56 61 6c 75 65 28 73 65 72  per.SetValue(ser
30660 76 69 63 65 4b 65 79 2c 20 22 4e 61 6d 65 22 2c  viceKey, "Name",
30670 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
30680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 74                St
30690 72 69 6e 67 2e 46 6f 72 6d 61 74 28 22 7b 30 7d  ring.Format("{0}
306a0 20 44 65 73 69 67 6e 65 72 20 53 65 72 76 69 63   Designer Servic
306b0 65 22 2c 20 50 72 6f 6a 65 63 74 4e 61 6d 65 29  e", ProjectName)
306c0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
306d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 77                 w
306e0 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 3b  hatIf, verbose);
306f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
30700 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
30710 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
30720 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
30730 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
30740 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d  true;..        }
30750 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
30760 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30770 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30780 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30790 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
307a0 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70  ///....        p
307b0 72 69 76 61 74 65 20 73 74 61 74 69 63 20 62 6f  rivate static bo
307c0 6f 6c 20 52 65 6d 6f 76 65 56 73 50 61 63 6b 61  ol RemoveVsPacka
307d0 67 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ge(..           
307e0 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79   MockRegistryKey
307f0 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20 20 20   rootKey,..     
30800 20 20 20 20 20 20 20 56 65 72 73 69 6f 6e 20 76         Version v
30810 73 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20  sVersion,..     
30820 20 20 20 20 20 20 20 50 61 63 6b 61 67 65 20 70         Package p
30830 61 63 6b 61 67 65 2c 0d 0a 20 20 20 20 20 20 20  ackage,..       
30840 20 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34 2c       bool wow64,
30850 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
30860 6f 6c 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e  ol throwOnMissin
30870 67 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  g,..            
30880 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20  bool whatIf,..  
30890 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76            bool v
308a0 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20  erbose,..       
308b0 20 20 20 20 20 72 65 66 20 73 74 72 69 6e 67 20       ref string 
308c0 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 20  error..         
308d0 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d     )..        {.
308e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
308f0 28 76 73 56 65 72 73 69 6f 6e 20 3d 3d 20 6e 75  (vsVersion == nu
30900 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
30910 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
30920 20 20 20 20 65 72 72 6f 72 20 3d 20 22 69 6e 76      error = "inv
30930 61 6c 69 64 20 56 53 20 76 65 72 73 69 6f 6e 22  alid VS version"
30940 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
30950 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
30960 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
30970 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
30980 66 20 28 70 61 63 6b 61 67 65 20 3d 3d 20 6e 75  f (package == nu
30990 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
309a0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
309b0 20 20 20 20 65 72 72 6f 72 20 3d 20 22 69 6e 76      error = "inv
309c0 61 6c 69 64 20 56 53 20 70 61 63 6b 61 67 65 22  alid VS package"
309d0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
309e0 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
309f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
30a00 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  ...            s
30a10 74 72 69 6e 67 20 6b 65 79 4e 61 6d 65 20 3d 20  tring keyName = 
30a20 47 65 74 56 73 4b 65 79 4e 61 6d 65 28 76 73 56  GetVsKeyName(vsV
30a30 65 72 73 69 6f 6e 2c 20 77 6f 77 36 34 29 3b 0d  ersion, wow64);.
30a40 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 75  ...            u
30a50 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73 74  sing (MockRegist
30a60 72 79 4b 65 79 20 6b 65 79 20 3d 20 52 65 67 69  ryKey key = Regi
30a70 73 74 72 79 48 65 6c 70 65 72 2e 4f 70 65 6e 53  stryHelper.OpenS
30a80 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20  ubKey(..        
30a90 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74              root
30aa0 4b 65 79 2c 20 6b 65 79 4e 61 6d 65 2c 20 66 61  Key, keyName, fa
30ab0 6c 73 65 2c 20 77 68 61 74 49 66 2c 20 76 65 72  lse, whatIf, ver
30ac0 62 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20  bose))..        
30ad0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
30ae0 20 20 20 20 20 20 20 69 66 20 28 6b 65 79 20 3d         if (key =
30af0 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
30b00 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
30b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30b20 65 72 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46  error = String.F
30b30 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
30b40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30b50 22 63 6f 75 6c 64 20 6e 6f 74 20 6f 70 65 6e 20  "could not open 
30b60 72 65 67 69 73 74 72 79 20 6b 65 79 3a 20 7b 30  registry key: {0
30b70 7d 5c 5c 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20  }\\{1}",..      
30b80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30b90 20 20 72 6f 6f 74 4b 65 79 2c 20 6b 65 79 4e 61    rootKey, keyNa
30ba0 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  me);....        
30bb0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
30bc0 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20  rn false;..     
30bd0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
30be0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30bf0 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73  using (MockRegis
30c00 74 72 79 4b 65 79 20 73 75 62 4b 65 79 20 3d 20  tryKey subKey = 
30c10 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 4f  RegistryHelper.O
30c20 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20 20  penSubKey(..    
30c30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30c40 20 20 20 20 6b 65 79 2c 20 22 50 61 63 6b 61 67      key, "Packag
30c50 65 73 22 2c 20 74 72 75 65 2c 20 77 68 61 74 49  es", true, whatI
30c60 66 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a 20 20  f, verbose))..  
30c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
30c80 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
30c90 20 20 20 20 20 69 66 20 28 73 75 62 4b 65 79 20       if (subKey 
30ca0 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
30cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
30cc0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
30cd0 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
30ce0 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d   String.Format(.
30cf0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
30d00 20 20 20 20 20 20 20 20 20 20 20 20 20 22 63 6f               "co
30d10 75 6c 64 20 6e 6f 74 20 6f 70 65 6e 20 72 65 67  uld not open reg
30d20 69 73 74 72 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c  istry key: {0}\\
30d30 50 61 63 6b 61 67 65 73 22 2c 0d 0a 20 20 20 20  Packages",..    
30d40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30d50 20 20 20 20 20 20 20 20 6b 65 79 29 3b 0d 0a 0d          key);...
30d60 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
30d70 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
30d80 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20  false;..        
30d90 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
30da0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
30db0 20 20 20 20 20 52 65 67 69 73 74 72 79 48 65 6c       RegistryHel
30dc0 70 65 72 2e 44 65 6c 65 74 65 53 75 62 4b 65 79  per.DeleteSubKey
30dd0 54 72 65 65 28 0d 0a 20 20 20 20 20 20 20 20 20  Tree(..         
30de0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
30df0 75 62 4b 65 79 2c 20 70 61 63 6b 61 67 65 2e 50  ubKey, package.P
30e00 61 63 6b 61 67 65 49 64 2e 54 6f 53 74 72 69 6e  ackageId.ToStrin
30e10 67 28 56 73 49 64 46 6f 72 6d 61 74 29 2c 0d 0a  g(VsIdFormat),..
30e20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30e30 20 20 20 20 20 20 20 20 77 68 61 74 49 66 2c 20          whatIf, 
30e40 76 65 72 62 6f 73 65 29 3b 0d 0a 20 20 20 20 20  verbose);..     
30e50 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
30e60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30e70 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73  using (MockRegis
30e80 74 72 79 4b 65 79 20 73 75 62 4b 65 79 20 3d 20  tryKey subKey = 
30e90 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 4f  RegistryHelper.O
30ea0 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20 20  penSubKey(..    
30eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30ec0 20 20 20 20 6b 65 79 2c 20 22 4d 65 6e 75 73 22      key, "Menus"
30ed0 2c 20 74 72 75 65 2c 20 77 68 61 74 49 66 2c 20  , true, whatIf, 
30ee0 76 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20  verbose))..     
30ef0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
30f00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30f10 20 20 69 66 20 28 73 75 62 4b 65 79 20 3d 3d 20    if (subKey == 
30f20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
30f30 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
30f40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30f50 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 53 74        error = St
30f60 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
30f70 20 20 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 22 63 6f 75 6c 64            "could
30f90 20 6e 6f 74 20 6f 70 65 6e 20 72 65 67 69 73 74   not open regist
30fa0 72 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c 4d 65 6e  ry key: {0}\\Men
30fb0 75 73 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  us",..          
30fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30fd0 20 20 6b 65 79 29 3b 0d 0a 0d 0a 20 20 20 20 20    key);....     
30fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30ff0 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
31000 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
31010 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
31020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52                 R
31030 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 44 65  egistryHelper.De
31040 6c 65 74 65 56 61 6c 75 65 28 0d 0a 20 20 20 20  leteValue(..    
31050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31060 20 20 20 20 73 75 62 4b 65 79 2c 20 70 61 63 6b      subKey, pack
31070 61 67 65 2e 50 61 63 6b 61 67 65 49 64 2e 54 6f  age.PackageId.To
31080 53 74 72 69 6e 67 28 56 73 49 64 46 6f 72 6d 61  String(VsIdForma
31090 74 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  t),..           
310a0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72               thr
310b0 6f 77 4f 6e 4d 69 73 73 69 6e 67 2c 20 77 68 61  owOnMissing, wha
310c0 74 49 66 2c 20 76 65 72 62 6f 73 65 29 3b 0d 0a  tIf, verbose);..
310d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
310e0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
310f0 20 20 20 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b       using (Mock
31100 52 65 67 69 73 74 72 79 4b 65 79 20 73 75 62 4b  RegistryKey subK
31110 65 79 20 3d 20 52 65 67 69 73 74 72 79 48 65 6c  ey = RegistryHel
31120 70 65 72 2e 4f 70 65 6e 53 75 62 4b 65 79 28 0d  per.OpenSubKey(.
31130 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
31140 20 20 20 20 20 20 20 20 20 6b 65 79 2c 20 22 53           key, "S
31150 65 72 76 69 63 65 73 22 2c 20 74 72 75 65 2c 20  ervices", true, 
31160 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29  whatIf, verbose)
31170 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
31180 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
31190 20 20 20 20 20 20 20 20 20 20 69 66 20 28 73 75            if (su
311a0 62 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  bKey == null).. 
311b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
311c0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
311d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72                er
311e0 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72  ror = String.For
311f0 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
31200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31210 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20 6f 70 65    "could not ope
31220 6e 20 72 65 67 69 73 74 72 79 20 6b 65 79 3a 20  n registry key: 
31230 7b 30 7d 5c 5c 53 65 72 76 69 63 65 73 22 2c 0d  {0}\\Services",.
31240 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
31250 20 20 20 20 20 20 20 20 20 20 20 20 20 6b 65 79               key
31260 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
31270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
31280 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20  turn false;..   
31290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
312a0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
312b0 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74            Regist
312c0 72 79 48 65 6c 70 65 72 2e 44 65 6c 65 74 65 53  ryHelper.DeleteS
312d0 75 62 4b 65 79 54 72 65 65 28 0d 0a 20 20 20 20  ubKeyTree(..    
312e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
312f0 20 20 20 20 73 75 62 4b 65 79 2c 20 70 61 63 6b      subKey, pack
31300 61 67 65 2e 53 65 72 76 69 63 65 49 64 2e 54 6f  age.ServiceId.To
31310 53 74 72 69 6e 67 28 56 73 49 64 46 6f 72 6d 61  String(VsIdForma
31320 74 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  t),..           
31330 20 20 20 20 20 20 20 20 20 20 20 20 20 77 68 61               wha
31340 74 49 66 2c 20 76 65 72 62 6f 73 65 29 3b 0d 0a  tIf, verbose);..
31350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31360 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
31370 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
31380 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20  return true;..  
31390 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
313a0 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
313b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
313c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
313d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
313e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
313f0 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74        private st
31400 61 74 69 63 20 62 6f 6f 6c 20 50 72 6f 63 65 73  atic bool Proces
31410 73 56 73 50 61 63 6b 61 67 65 28 0d 0a 20 20 20  sVsPackage(..   
31420 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65 67           MockReg
31430 69 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79  istryKey rootKey
31440 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 56  ,..            V
31450 65 72 73 69 6f 6e 20 76 73 56 65 72 73 69 6f 6e  ersion vsVersion
31460 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 50  ,..            P
31470 61 63 6b 61 67 65 20 70 61 63 6b 61 67 65 2c 0d  ackage package,.
31480 0a 20 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a  .            obj
31490 65 63 74 20 63 6c 69 65 6e 74 44 61 74 61 2c 0d  ect clientData,.
314a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f  .            boo
314b0 6c 20 77 6f 77 36 34 2c 0d 0a 20 20 20 20 20 20  l wow64,..      
314c0 20 20 20 20 20 20 62 6f 6f 6c 20 74 68 72 6f 77        bool throw
314d0 4f 6e 4d 69 73 73 69 6e 67 2c 0d 0a 20 20 20 20  OnMissing,..    
314e0 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61          bool wha
314f0 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  tIf,..          
31500 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 0d    bool verbose,.
31510 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66  .            ref
31520 20 73 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20   string error.. 
31530 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
31540 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
31550 20 20 20 20 20 41 6e 79 50 61 69 72 3c 73 74 72       AnyPair<str
31560 69 6e 67 2c 20 62 6f 6f 6c 3e 20 70 61 69 72 20  ing, bool> pair 
31570 3d 20 63 6c 69 65 6e 74 44 61 74 61 20 61 73 20  = clientData as 
31580 41 6e 79 50 61 69 72 3c 73 74 72 69 6e 67 2c 20  AnyPair<string, 
31590 62 6f 6f 6c 3e 3b 0d 0a 0d 0a 20 20 20 20 20 20  bool>;....      
315a0 20 20 20 20 20 20 69 66 20 28 70 61 69 72 20 3d        if (pair =
315b0 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
315c0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
315d0 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
315e0 22 69 6e 76 61 6c 69 64 20 56 53 20 63 61 6c 6c  "invalid VS call
315f0 62 61 63 6b 20 64 61 74 61 22 3b 0d 0a 20 20 20  back data";..   
31600 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
31610 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20  urn false;..    
31620 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
31630 20 20 20 20 20 20 20 20 20 69 66 20 28 70 61 69           if (pai
31640 72 2e 59 29 0d 0a 20 20 20 20 20 20 20 20 20 20  r.Y)..          
31650 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
31660 20 20 20 20 20 72 65 74 75 72 6e 20 41 64 64 56       return AddV
31670 73 50 61 63 6b 61 67 65 28 0d 0a 20 20 20 20 20  sPackage(..     
31680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
31690 6f 6f 74 4b 65 79 2c 20 76 73 56 65 72 73 69 6f  ootKey, vsVersio
316a0 6e 2c 20 70 61 63 6b 61 67 65 2c 20 70 61 69 72  n, package, pair
316b0 2e 58 2c 20 77 6f 77 36 34 2c 20 77 68 61 74 49  .X, wow64, whatI
316c0 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  f,..            
316d0 20 20 20 20 20 20 20 20 76 65 72 62 6f 73 65 2c          verbose,
316e0 20 72 65 66 20 65 72 72 6f 72 29 3b 0d 0a 20 20   ref error);..  
316f0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
31700 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20           else.. 
31710 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
31720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
31730 74 75 72 6e 20 52 65 6d 6f 76 65 56 73 50 61 63  turn RemoveVsPac
31740 6b 61 67 65 28 0d 0a 20 20 20 20 20 20 20 20 20  kage(..         
31750 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b             rootK
31760 65 79 2c 20 76 73 56 65 72 73 69 6f 6e 2c 20 70  ey, vsVersion, p
31770 61 63 6b 61 67 65 2c 20 77 6f 77 36 34 2c 20 74  ackage, wow64, t
31780 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 2c 0d 0a  hrowOnMissing,..
31790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
317a0 20 20 20 20 77 68 61 74 49 66 2c 20 76 65 72 62      whatIf, verb
317b0 6f 73 65 2c 20 72 65 66 20 65 72 72 6f 72 29 3b  ose, ref error);
317c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
317d0 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
317e0 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
317f0 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
31800 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  on....        //
31810 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31820 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31830 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31840 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31850 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
31860 20 23 72 65 67 69 6f 6e 20 41 70 70 6c 69 63 61   #region Applica
31870 74 69 6f 6e 20 45 6e 74 72 79 20 50 6f 69 6e 74  tion Entry Point
31880 0d 0a 20 20 20 20 20 20 20 20 5b 4d 65 74 68 6f  ..        [Metho
31890 64 49 6d 70 6c 28 4d 65 74 68 6f 64 49 6d 70 6c  dImpl(MethodImpl
318a0 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e 69  Options.NoInlini
318b0 6e 67 29 5d 0d 0a 20 20 20 20 20 20 20 20 70 72  ng)]..        pr
318c0 69 76 61 74 65 20 73 74 61 74 69 63 20 69 6e 74  ivate static int
318d0 20 4d 61 69 6e 28 0d 0a 20 20 20 20 20 20 20 20   Main(..        
318e0 20 20 20 20 73 74 72 69 6e 67 5b 5d 20 61 72 67      string[] arg
318f0 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29  s..            )
31900 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
31910 20 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20           try..  
31920 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
31930 20 20 20 20 20 20 20 20 20 20 20 20 20 43 6f 6e               Con
31940 66 69 67 75 72 61 74 69 6f 6e 20 63 6f 6e 66 69  figuration confi
31950 67 75 72 61 74 69 6f 6e 20 3d 20 6e 75 6c 6c 3b  guration = null;
31960 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
31970 20 20 73 74 72 69 6e 67 20 65 72 72 6f 72 20 3d    string error =
31980 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20   null;....      
31990 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
319a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
319b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
319c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
319d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
319e0 20 20 20 20 20 20 20 20 20 20 20 20 20 23 72 65               #re
319f0 67 69 6f 6e 20 44 65 62 75 67 67 65 72 20 48 6f  gion Debugger Ho
31a00 6f 6b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ok..            
31a10 20 20 20 20 69 66 20 28 45 6e 76 69 72 6f 6e 6d      if (Environm
31a20 65 6e 74 2e 47 65 74 45 6e 76 69 72 6f 6e 6d 65  ent.GetEnvironme
31a30 6e 74 56 61 72 69 61 62 6c 65 28 22 42 72 65 61  ntVariable("Brea
31a40 6b 22 29 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20  k") != null)..  
31a50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
31a60 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
31a70 20 20 20 20 20 43 6f 6e 73 6f 6c 65 2e 57 72 69       Console.Wri
31a80 74 65 4c 69 6e 65 28 0d 0a 20 20 20 20 20 20 20  teLine(..       
31a90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31aa0 20 22 41 74 74 61 63 68 20 61 20 64 65 62 75 67   "Attach a debug
31ab0 67 65 72 20 74 6f 20 70 72 6f 63 65 73 73 20 7b  ger to process {
31ac0 30 7d 20 61 6e 64 20 22 20 2b 0d 0a 20 20 20 20  0} and " +..    
31ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31ae0 20 20 20 20 22 70 72 65 73 73 20 61 6e 79 20 6b      "press any k
31af0 65 79 20 74 6f 20 63 6f 6e 74 69 6e 75 65 2e 22  ey to continue."
31b00 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
31b10 20 20 20 20 20 20 20 20 20 20 20 50 72 6f 63 65             Proce
31b20 73 73 2e 47 65 74 43 75 72 72 65 6e 74 50 72 6f  ss.GetCurrentPro
31b30 63 65 73 73 28 29 2e 49 64 29 3b 0d 0a 0d 0a 20  cess().Id);.... 
31b40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31b50 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20     try..        
31b60 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
31b70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31b80 20 20 20 20 20 20 20 43 6f 6e 73 6f 6c 65 2e 52         Console.R
31b90 65 61 64 4b 65 79 28 74 72 75 65 29 3b 20 2f 2a  eadKey(true); /*
31ba0 20 74 68 72 6f 77 20 2a 2f 0d 0a 20 20 20 20 20   throw */..     
31bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
31bc0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
31bd0 20 20 20 20 20 20 63 61 74 63 68 20 28 49 6e 76        catch (Inv
31be0 61 6c 69 64 4f 70 65 72 61 74 69 6f 6e 45 78 63  alidOperationExc
31bf0 65 70 74 69 6f 6e 29 20 2f 2f 20 43 6f 6e 73 6f  eption) // Conso
31c00 6c 65 2e 52 65 61 64 4b 65 79 0d 0a 20 20 20 20  le.ReadKey..    
31c10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31c20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
31c30 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f             // do
31c40 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20   nothing...     
31c50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
31c60 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
31c70 20 20 20 20 20 20 20 20 44 65 62 75 67 67 65 72          Debugger
31c80 2e 42 72 65 61 6b 28 29 3b 0d 0a 20 20 20 20 20  .Break();..     
31c90 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
31ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 65                #e
31cb0 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20  ndregion....    
31cc0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
31cd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31ce0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31cf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31d00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
31d10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23                 #
31d20 72 65 67 69 6f 6e 20 43 6f 6d 6d 61 6e 64 20 4c  region Command L
31d30 69 6e 65 20 50 72 6f 63 65 73 73 69 6e 67 0d 0a  ine Processing..
31d40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31d50 69 66 20 28 21 43 6f 6e 66 69 67 75 72 61 74 69  if (!Configurati
31d60 6f 6e 2e 46 72 6f 6d 41 72 67 73 28 0d 0a 20 20  on.FromArgs(..  
31d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31d80 20 20 20 20 20 20 61 72 67 73 2c 20 74 72 75 65        args, true
31d90 2c 20 72 65 66 20 63 6f 6e 66 69 67 75 72 61 74  , ref configurat
31da0 69 6f 6e 2c 20 72 65 66 20 65 72 72 6f 72 29 20  ion, ref error) 
31db0 7c 7c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ||..            
31dc0 20 20 20 20 20 20 20 20 21 43 6f 6e 66 69 67 75          !Configu
31dd0 72 61 74 69 6f 6e 2e 50 72 6f 63 65 73 73 28 0d  ration.Process(.
31de0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
31df0 20 20 20 20 20 20 20 20 20 61 72 67 73 2c 20 63           args, c
31e00 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2c 20 74 72  onfiguration, tr
31e10 75 65 2c 20 72 65 66 20 65 72 72 6f 72 29 20 7c  ue, ref error) |
31e20 7c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  |..             
31e30 20 20 20 20 20 20 20 21 43 6f 6e 66 69 67 75 72         !Configur
31e40 61 74 69 6f 6e 2e 43 68 65 63 6b 52 75 6e 74 69  ation.CheckRunti
31e50 6d 65 56 65 72 73 69 6f 6e 28 0d 0a 20 20 20 20  meVersion(..    
31e60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31e70 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f      configuratio
31e80 6e 2c 20 74 72 75 65 2c 20 72 65 66 20 65 72 72  n, true, ref err
31e90 6f 72 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  or))..          
31ea0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
31eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61               Tra
31ec0 63 65 4f 70 73 2e 53 68 6f 77 4d 65 73 73 61 67  ceOps.ShowMessag
31ed0 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e  e(TracePriority.
31ee0 48 69 67 68 65 73 74 2c 0d 0a 20 20 20 20 20 20  Highest,..      
31ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31f00 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c    debugCallback,
31f10 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20   traceCallback, 
31f20 74 68 69 73 41 73 73 65 6d 62 6c 79 2c 0d 0a 20  thisAssembly,.. 
31f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31f40 20 20 20 20 20 20 20 65 72 72 6f 72 2c 20 74 72         error, tr
31f50 61 63 65 43 61 74 65 67 6f 72 79 2c 20 4d 65 73  aceCategory, Mes
31f60 73 61 67 65 42 6f 78 42 75 74 74 6f 6e 73 2e 4f  sageBoxButtons.O
31f70 4b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  K,..            
31f80 20 20 20 20 20 20 20 20 20 20 20 20 4d 65 73 73              Mess
31f90 61 67 65 42 6f 78 49 63 6f 6e 2e 45 72 72 6f 72  ageBoxIcon.Error
31fa0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
31fb0 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f            TraceO
31fc0 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65  ps.DebugAndTrace
31fd0 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4d  (TracePriority.M
31fe0 65 64 69 75 6d 48 69 67 68 2c 0d 0a 20 20 20 20  ediumHigh,..    
31ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32000 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63      debugCallbac
32010 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b  k, traceCallback
32020 2c 20 22 46 61 69 6c 75 72 65 2e 22 2c 0d 0a 20  , "Failure.",.. 
32030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32040 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65         traceCate
32050 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
32060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
32070 74 75 72 6e 20 31 3b 20 2f 2a 20 46 41 49 4c 55  turn 1; /* FAILU
32080 52 45 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20  RE */..         
32090 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
320a0 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65            #endre
320b0 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20  gion....        
320c0 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
320d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
320e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
320f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32100 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
32110 20 20 20 20 20 20 20 20 20 20 20 75 73 69 6e 67             using
32120 20 28 4d 6f 63 6b 52 65 67 69 73 74 72 79 20 72   (MockRegistry r
32130 65 67 69 73 74 72 79 20 3d 20 6e 65 77 20 4d 6f  egistry = new Mo
32140 63 6b 52 65 67 69 73 74 72 79 28 0d 0a 20 20 20  ckRegistry(..   
32150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32160 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69       configurati
32170 6f 6e 2e 57 68 61 74 49 66 2c 20 66 61 6c 73 65  on.WhatIf, false
32180 2c 20 66 61 6c 73 65 29 29 0d 0a 20 20 20 20 20  , false))..     
32190 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
321a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
321b0 20 20 23 72 65 67 69 6f 6e 20 2e 4e 45 54 20 46    #region .NET F
321c0 72 61 6d 65 77 6f 72 6b 20 2f 20 56 69 73 75 61  ramework / Visua
321d0 6c 20 53 74 75 64 69 6f 20 44 61 74 61 0d 0a 20  l Studio Data.. 
321e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
321f0 20 20 20 50 61 63 6b 61 67 65 20 70 61 63 6b 61     Package packa
32200 67 65 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20  ge = null;..    
32210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32220 46 72 61 6d 65 77 6f 72 6b 4c 69 73 74 20 66 72  FrameworkList fr
32230 61 6d 65 77 6f 72 6b 4c 69 73 74 20 3d 20 6e 75  ameworkList = nu
32240 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll;..           
32250 20 20 20 20 20 20 20 20 20 56 73 4c 69 73 74 20           VsList 
32260 76 73 4c 69 73 74 20 3d 20 6e 75 6c 6c 3b 0d 0a  vsList = null;..
32270 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
32280 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
32290 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
322a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
322b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
322c0 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
322d0 20 20 20 20 20 20 20 20 20 49 6e 69 74 69 61 6c           Initial
322e0 69 7a 65 56 73 50 61 63 6b 61 67 65 28 72 65 66  izeVsPackage(ref
322f0 20 70 61 63 6b 61 67 65 29 3b 0d 0a 0d 0a 20 20   package);....  
32300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32310 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
32320 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32330 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32340 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
32350 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
32360 20 20 20 20 20 49 6e 69 74 69 61 6c 69 7a 65 46       InitializeF
32370 72 61 6d 65 77 6f 72 6b 4c 69 73 74 28 72 65 67  rameworkList(reg
32380 69 73 74 72 79 2e 4c 6f 63 61 6c 4d 61 63 68 69  istry.LocalMachi
32390 6e 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ne,..           
323a0 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
323b0 66 69 67 75 72 61 74 69 6f 6e 2c 20 72 65 66 20  figuration, ref 
323c0 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 29 3b 0d  frameworkList);.
323d0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
323e0 20 20 20 20 20 20 20 49 6e 69 74 69 61 6c 69 7a         Initializ
323f0 65 56 73 4c 69 73 74 28 72 65 67 69 73 74 72 79  eVsList(registry
32400 2e 4c 6f 63 61 6c 4d 61 63 68 69 6e 65 2c 20 63  .LocalMachine, c
32410 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2c 0d 0a 20  onfiguration,.. 
32420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32430 20 20 20 20 20 20 20 72 65 66 20 76 73 4c 69 73         ref vsLis
32440 74 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  t);..           
32450 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67           #endreg
32460 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ion....         
32470 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
32480 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32490 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
324a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
324b0 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
324c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 72                #r
324d0 65 67 69 6f 6e 20 43 6f 72 65 20 41 73 73 65 6d  egion Core Assem
324e0 62 6c 79 20 4e 61 6d 65 20 43 68 65 63 6b 0d 0a  bly Name Check..
324f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32500 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
32510 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e              // N
32520 4f 54 45 3a 20 44 6f 20 74 68 69 73 20 66 69 72  OTE: Do this fir
32530 73 74 2c 20 62 65 66 6f 72 65 20 6d 61 6b 69 6e  st, before makin
32540 67 20 61 6e 79 20 63 68 61 6e 67 65 73 20 74 6f  g any changes to
32550 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 20 20   the..          
32560 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
32570 20 20 20 73 79 73 74 65 6d 2c 20 62 65 63 61 75     system, becau
32580 73 65 20 69 74 20 77 69 6c 6c 20 74 68 72 6f 77  se it will throw
32590 20 61 6e 20 65 78 63 65 70 74 69 6f 6e 20 69 66   an exception if
325a0 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 20 20   the..          
325b0 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
325c0 20 20 20 66 69 6c 65 20 6e 61 6d 65 20 64 6f 65     file name doe
325d0 73 20 6e 6f 74 20 72 65 70 72 65 73 65 6e 74 20  s not represent 
325e0 61 20 76 61 6c 69 64 20 6d 61 6e 61 67 65 64 0d  a valid managed.
325f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
32600 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 61 73       //       as
32610 73 65 6d 62 6c 79 2e 0d 0a 20 20 20 20 20 20 20  sembly...       
32620 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
32630 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
32640 20 20 20 20 20 41 73 73 65 6d 62 6c 79 4e 61 6d       AssemblyNam
32650 65 20 61 73 73 65 6d 62 6c 79 4e 61 6d 65 20 3d  e assemblyName =
32660 20 41 73 73 65 6d 62 6c 79 4e 61 6d 65 2e 47 65   AssemblyName.Ge
32670 74 41 73 73 65 6d 62 6c 79 4e 61 6d 65 28 0d 0a  tAssemblyName(..
32680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32690 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72          configur
326a0 61 74 69 6f 6e 2e 43 6f 72 65 46 69 6c 65 4e 61  ation.CoreFileNa
326b0 6d 65 29 3b 20 2f 2a 20 74 68 72 6f 77 20 2a 2f  me); /* throw */
326c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
326d0 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
326e0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
326f0 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
32700 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32710 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32720 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32730 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
32740 20 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69             #regi
32750 6f 6e 20 53 68 61 72 65 64 20 43 6c 69 65 6e 74  on Shared Client
32760 20 44 61 74 61 20 43 72 65 61 74 69 6f 6e 0d 0a   Data Creation..
32770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32780 20 20 20 20 6f 62 6a 65 63 74 20 64 69 72 65 63      object direc
32790 74 6f 72 79 44 61 74 61 20 3d 20 6e 65 77 20 41  toryData = new A
327a0 6e 79 50 61 69 72 3c 73 74 72 69 6e 67 2c 20 62  nyPair<string, b
327b0 6f 6f 6c 3e 28 0d 0a 20 20 20 20 20 20 20 20 20  ool>(..         
327c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
327d0 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 44 69 72  onfiguration.Dir
327e0 65 63 74 6f 72 79 2c 20 63 6f 6e 66 69 67 75 72  ectory, configur
327f0 61 74 69 6f 6e 2e 49 6e 73 74 61 6c 6c 29 3b 0d  ation.Install);.
32800 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
32810 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 66 69         object fi
32820 6c 65 4e 61 6d 65 44 61 74 61 20 3d 20 6e 65 77  leNameData = new
32830 20 41 6e 79 50 61 69 72 3c 73 74 72 69 6e 67 2c   AnyPair<string,
32840 20 62 6f 6f 6c 3e 28 0d 0a 20 20 20 20 20 20 20   bool>(..       
32850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32860 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 44   configuration.D
32870 65 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 2c  esignerFileName,
32880 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 49   configuration.I
32890 6e 73 74 61 6c 6c 29 3b 0d 0a 20 20 20 20 20 20  nstall);..      
328a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 65                #e
328b0 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20  ndregion....    
328c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
328d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
328e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
328f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32900 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
32910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32920 20 20 20 23 72 65 67 69 6f 6e 20 2e 4e 45 54 20     #region .NET 
32930 47 41 43 20 49 6e 73 74 61 6c 6c 2f 52 65 6d 6f  GAC Install/Remo
32940 76 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ve..            
32950 20 20 20 20 20 20 20 20 69 66 20 28 63 6f 6e 66          if (conf
32960 69 67 75 72 61 74 69 6f 6e 2e 48 61 73 46 6c 61  iguration.HasFla
32970 67 73 28 49 6e 73 74 61 6c 6c 46 6c 61 67 73 2e  gs(InstallFlags.
32980 47 41 43 2c 20 74 72 75 65 29 29 0d 0a 20 20 20  GAC, true))..   
32990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
329a0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
329b0 20 20 20 20 20 20 20 20 20 20 20 20 50 75 62 6c              Publ
329c0 69 73 68 20 70 75 62 6c 69 73 68 20 3d 20 6e 75  ish publish = nu
329d0 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ll;....         
329e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
329f0 66 20 28 21 63 6f 6e 66 69 67 75 72 61 74 69 6f  f (!configuratio
32a00 6e 2e 57 68 61 74 49 66 29 0d 0a 20 20 20 20 20  n.WhatIf)..     
32a10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32a20 20 20 20 20 20 20 20 70 75 62 6c 69 73 68 20 3d         publish =
32a30 20 6e 65 77 20 50 75 62 6c 69 73 68 28 29 3b 0d   new Publish();.
32a40 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
32a50 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 63             if (c
32a60 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 49 6e 73  onfiguration.Ins
32a70 74 61 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  tall)..         
32a80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
32a90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
32aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
32ab0 20 28 21 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e   (!configuration
32ac0 2e 57 68 61 74 49 66 29 0d 0a 20 20 20 20 20 20  .WhatIf)..      
32ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32ae0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 74 68 72            /* thr
32af0 6f 77 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20  ow */..         
32b00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32b10 20 20 20 20 20 20 20 70 75 62 6c 69 73 68 2e 47         publish.G
32b20 61 63 49 6e 73 74 61 6c 6c 28 63 6f 6e 66 69 67  acInstall(config
32b30 75 72 61 74 69 6f 6e 2e 43 6f 72 65 46 69 6c 65  uration.CoreFile
32b40 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  Name);....      
32b50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32b60 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44        TraceOps.D
32b70 65 62 75 67 41 6e 64 54 72 61 63 65 28 54 72 61  ebugAndTrace(Tra
32b80 63 65 50 72 69 6f 72 69 74 79 2e 48 69 67 68 65  cePriority.Highe
32b90 73 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  st,..           
32ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32bb0 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61       debugCallba
32bc0 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63  ck, traceCallbac
32bd0 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  k, String.Format
32be0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
32bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32c00 20 20 20 22 47 61 63 49 6e 73 74 61 6c 6c 3a 20     "GacInstall: 
32c10 61 73 73 65 6d 62 6c 79 50 61 74 68 20 3d 20 7b  assemblyPath = {
32c20 30 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  0}",..          
32c30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32c40 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79        ForDisplay
32c50 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 43  (configuration.C
32c60 6f 72 65 46 69 6c 65 4e 61 6d 65 29 29 2c 0d 0a  oreFileName)),..
32c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32c90 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
32ca0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
32cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
32cc0 66 20 28 21 63 6f 6e 66 69 67 75 72 61 74 69 6f  f (!configuratio
32cd0 6e 2e 57 68 61 74 49 66 29 0d 0a 20 20 20 20 20  n.WhatIf)..     
32ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32cf0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 74 68             /* th
32d00 72 6f 77 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20  row */..        
32d10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32d20 20 20 20 20 20 20 20 20 70 75 62 6c 69 73 68 2e          publish.
32d30 47 61 63 49 6e 73 74 61 6c 6c 28 63 6f 6e 66 69  GacInstall(confi
32d40 67 75 72 61 74 69 6f 6e 2e 4c 69 6e 71 46 69 6c  guration.LinqFil
32d50 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20  eName);....     
32d60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32d70 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e         TraceOps.
32d80 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 54 72  DebugAndTrace(Tr
32d90 61 63 65 50 72 69 6f 72 69 74 79 2e 48 69 67 68  acePriority.High
32da0 65 73 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  est,..          
32db0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32dc0 20 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62        debugCallb
32dd0 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61  ack, traceCallba
32de0 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ck, String.Forma
32df0 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
32e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32e10 20 20 20 20 22 47 61 63 49 6e 73 74 61 6c 6c 3a      "GacInstall:
32e20 20 61 73 73 65 6d 62 6c 79 50 61 74 68 20 3d 20   assemblyPath = 
32e30 7b 30 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  {0}",..         
32e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32e50 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61         ForDispla
32e60 79 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e  y(configuration.
32e70 4c 69 6e 71 46 69 6c 65 4e 61 6d 65 29 29 2c 0d  LinqFileName)),.
32e80 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
32e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32ea0 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
32eb0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
32ec0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
32ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32ee0 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20       else..     
32ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32f00 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
32f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32f20 20 20 69 66 20 28 21 63 6f 6e 66 69 67 75 72 61    if (!configura
32f30 74 69 6f 6e 2e 57 68 61 74 49 66 29 0d 0a 20 20  tion.WhatIf)..  
32f40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32f50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
32f60 20 74 68 72 6f 77 20 2a 2f 0d 0a 20 20 20 20 20   throw */..     
32f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32f80 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
32f90 73 68 2e 47 61 63 52 65 6d 6f 76 65 28 63 6f 6e  sh.GacRemove(con
32fa0 66 69 67 75 72 61 74 69 6f 6e 2e 4c 69 6e 71 46  figuration.LinqF
32fb0 69 6c 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20  ileName);....   
32fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32fd0 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70           TraceOp
32fe0 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28  s.DebugAndTrace(
32ff0 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 48 69  TracePriority.Hi
33000 67 68 65 73 74 2c 0d 0a 20 20 20 20 20 20 20 20  ghest,..        
33010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33020 20 20 20 20 20 20 20 20 64 65 62 75 67 43 61 6c          debugCal
33030 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c  lback, traceCall
33040 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72  back, String.For
33050 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
33060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33070 20 20 20 20 20 20 22 47 61 63 52 65 6d 6f 76 65        "GacRemove
33080 3a 20 61 73 73 65 6d 62 6c 79 50 61 74 68 20 3d  : assemblyPath =
33090 20 7b 30 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20   {0}",..        
330a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
330b0 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c          ForDispl
330c0 61 79 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  ay(configuration
330d0 2e 4c 69 6e 71 46 69 6c 65 4e 61 6d 65 29 29 2c  .LinqFileName)),
330e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
330f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33100 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29    traceCategory)
33110 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
33120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33130 20 69 66 20 28 21 63 6f 6e 66 69 67 75 72 61 74   if (!configurat
33140 69 6f 6e 2e 57 68 61 74 49 66 29 0d 0a 20 20 20  ion.WhatIf)..   
33150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33160 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
33170 74 68 72 6f 77 20 2a 2f 0d 0a 20 20 20 20 20 20  throw */..      
33180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33190 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 73            publis
331a0 68 2e 47 61 63 52 65 6d 6f 76 65 28 63 6f 6e 66  h.GacRemove(conf
331b0 69 67 75 72 61 74 69 6f 6e 2e 43 6f 72 65 46 69  iguration.CoreFi
331c0 6c 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20  leName);....    
331d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
331e0 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73          TraceOps
331f0 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 54  .DebugAndTrace(T
33200 72 61 63 65 50 72 69 6f 72 69 74 79 2e 48 69 67  racePriority.Hig
33210 68 65 73 74 2c 0d 0a 20 20 20 20 20 20 20 20 20  hest,..         
33220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33230 20 20 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c         debugCall
33240 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62  back, traceCallb
33250 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d  ack, String.Form
33260 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
33270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33280 20 20 20 20 20 22 47 61 63 52 65 6d 6f 76 65 3a       "GacRemove:
33290 20 61 73 73 65 6d 62 6c 79 50 61 74 68 20 3d 20   assemblyPath = 
332a0 7b 30 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  {0}",..         
332b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
332c0 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61         ForDispla
332d0 79 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e  y(configuration.
332e0 43 6f 72 65 46 69 6c 65 4e 61 6d 65 29 29 2c 0d  CoreFileName)),.
332f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
33300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33310 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
33320 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
33330 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
33340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33350 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
33360 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
33370 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  on....          
33380 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
33390 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
333a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
333b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
333c0 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
333d0 20 20 20 20 20 20 20 20 20 20 20 20 20 23 72 65               #re
333e0 67 69 6f 6e 20 2e 4e 45 54 20 41 73 73 65 6d 62  gion .NET Assemb
333f0 6c 79 46 6f 6c 64 65 72 73 0d 0a 20 20 20 20 20  lyFolders..     
33400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
33410 66 20 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  f (configuration
33420 2e 48 61 73 46 6c 61 67 73 28 0d 0a 20 20 20 20  .HasFlags(..    
33430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33440 20 20 20 20 20 20 20 20 49 6e 73 74 61 6c 6c 46          InstallF
33450 6c 61 67 73 2e 41 73 73 65 6d 62 6c 79 46 6f 6c  lags.AssemblyFol
33460 64 65 72 73 2c 20 74 72 75 65 29 29 0d 0a 20 20  ders, true))..  
33470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33480 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
33490 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
334a0 28 21 46 6f 72 45 61 63 68 46 72 61 6d 65 77 6f  (!ForEachFramewo
334b0 72 6b 52 65 67 69 73 74 72 79 28 72 65 67 69 73  rkRegistry(regis
334c0 74 72 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  try,..          
334d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
334e0 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 4c        frameworkL
334f0 69 73 74 2c 20 50 72 6f 63 65 73 73 41 73 73 65  ist, ProcessAsse
33500 6d 62 6c 79 46 6f 6c 64 65 72 73 2c 0d 0a 20 20  mblyFolders,..  
33510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
33530 6e 66 69 67 75 72 61 74 69 6f 6e 2e 52 65 67 69  nfiguration.Regi
33540 73 74 72 79 56 65 72 73 69 6f 6e 2c 20 64 69 72  stryVersion, dir
33550 65 63 74 6f 72 79 44 61 74 61 2c 0d 0a 20 20 20  ectoryData,..   
33560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33570 20 20 20 20 20 20 20 20 20 20 20 20 20 4e 65 74               Net
33580 46 78 49 73 33 32 42 69 74 4f 6e 6c 79 20 7c 7c  FxIs32BitOnly ||
33590 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 57   configuration.W
335a0 6f 77 36 34 2c 0d 0a 20 20 20 20 20 20 20 20 20  ow64,..         
335b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
335c0 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61         configura
335d0 74 69 6f 6e 2e 54 68 72 6f 77 4f 6e 4d 69 73 73  tion.ThrowOnMiss
335e0 69 6e 67 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ing,..          
335f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33600 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74        configurat
33610 69 6f 6e 2e 57 68 61 74 49 66 2c 20 63 6f 6e 66  ion.WhatIf, conf
33620 69 67 75 72 61 74 69 6f 6e 2e 56 65 72 62 6f 73  iguration.Verbos
33630 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
33640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33650 20 20 20 20 72 65 66 20 65 72 72 6f 72 29 29 0d      ref error)).
33660 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
33670 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
33680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33690 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73          TraceOps
336a0 2e 53 68 6f 77 4d 65 73 73 61 67 65 28 54 72 61  .ShowMessage(Tra
336b0 63 65 50 72 69 6f 72 69 74 79 2e 48 69 67 68 65  cePriority.Highe
336c0 73 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  st,..           
336d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
336e0 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61       debugCallba
336f0 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63  ck, traceCallbac
33700 6b 2c 20 74 68 69 73 41 73 73 65 6d 62 6c 79 2c  k, thisAssembly,
33710 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
33720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33730 20 20 65 72 72 6f 72 2c 20 74 72 61 63 65 43 61    error, traceCa
33740 74 65 67 6f 72 79 2c 20 4d 65 73 73 61 67 65 42  tegory, MessageB
33750 6f 78 42 75 74 74 6f 6e 73 2e 4f 4b 2c 0d 0a 20  oxButtons.OK,.. 
33760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4d                 M
33780 65 73 73 61 67 65 42 6f 78 49 63 6f 6e 2e 45 72  essageBoxIcon.Er
33790 72 6f 72 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ror);....       
337a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
337b0 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65       TraceOps.De
337c0 62 75 67 41 6e 64 54 72 61 63 65 28 54 72 61 63  bugAndTrace(Trac
337d0 65 50 72 69 6f 72 69 74 79 2e 4d 65 64 69 75 6d  ePriority.Medium
337e0 48 69 67 68 2c 0d 0a 20 20 20 20 20 20 20 20 20  High,..         
337f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33800 20 20 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c         debugCall
33810 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62  back, traceCallb
33820 61 63 6b 2c 20 22 46 61 69 6c 75 72 65 2e 22 2c  ack, "Failure.",
33830 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
33840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33850 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29    traceCategory)
33860 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
33870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33880 20 72 65 74 75 72 6e 20 31 3b 20 2f 2a 20 46 41   return 1; /* FA
33890 49 4c 55 52 45 20 2a 2f 0d 0a 20 20 20 20 20 20  ILURE */..      
338a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
338b0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
338c0 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
338d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
338e0 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20  #endregion....  
338f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33900 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
33910 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33920 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33930 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
33940 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
33950 20 20 20 20 20 23 72 65 67 69 6f 6e 20 2e 4e 45       #region .NE
33960 54 20 44 62 50 72 6f 76 69 64 65 72 46 61 63 74  T DbProviderFact
33970 6f 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ory..           
33980 20 20 20 20 20 20 20 20 20 69 66 20 28 63 6f 6e           if (con
33990 66 69 67 75 72 61 74 69 6f 6e 2e 48 61 73 46 6c  figuration.HasFl
339a0 61 67 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ags(..          
339b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
339c0 20 20 49 6e 73 74 61 6c 6c 46 6c 61 67 73 2e 44    InstallFlags.D
339d0 62 50 72 6f 76 69 64 65 72 46 61 63 74 6f 72 79  bProviderFactory
339e0 2c 20 74 72 75 65 29 29 0d 0a 20 20 20 20 20 20  , true))..      
339f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
33a00 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
33a10 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 73 61           bool sa
33a20 76 65 64 20 3d 20 66 61 6c 73 65 3b 0d 0a 0d 0a  ved = false;....
33a30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33a40 20 20 20 20 20 20 20 20 69 66 20 28 21 46 6f 72          if (!For
33a50 45 61 63 68 46 72 61 6d 65 77 6f 72 6b 43 6f 6e  EachFrameworkCon
33a60 66 69 67 28 72 65 67 69 73 74 72 79 2c 0d 0a 20  fig(registry,.. 
33a70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33a80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66                 f
33a90 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2c 20 50 72  rameworkList, Pr
33aa0 6f 63 65 73 73 44 62 50 72 6f 76 69 64 65 72 46  ocessDbProviderF
33ab0 61 63 74 6f 72 79 2c 0d 0a 20 20 20 20 20 20 20  actory,..       
33ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33ad0 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75           configu
33ae0 72 61 74 69 6f 6e 2e 43 6f 6e 66 69 67 56 65 72  ration.ConfigVer
33af0 73 69 6f 6e 2c 20 49 6e 76 61 72 69 61 6e 74 4e  sion, InvariantN
33b00 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ame,..          
33b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33b20 20 20 20 20 20 20 50 72 6f 76 69 64 65 72 4e 61        ProviderNa
33b30 6d 65 2c 20 44 65 73 63 72 69 70 74 69 6f 6e 2c  me, Description,
33b40 20 46 61 63 74 6f 72 79 54 79 70 65 4e 61 6d 65   FactoryTypeName
33b50 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
33b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33b70 20 20 20 61 73 73 65 6d 62 6c 79 4e 61 6d 65 2c     assemblyName,
33b80 20 64 69 72 65 63 74 6f 72 79 44 61 74 61 2c 0d   directoryData,.
33b90 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
33ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33bb0 20 4e 65 74 46 78 49 73 33 32 42 69 74 4f 6e 6c   NetFxIs32BitOnl
33bc0 79 20 7c 7c 20 63 6f 6e 66 69 67 75 72 61 74 69  y || configurati
33bd0 6f 6e 2e 57 6f 77 36 34 2c 0d 0a 20 20 20 20 20  on.Wow64,..     
33be0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33bf0 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69             confi
33c00 67 75 72 61 74 69 6f 6e 2e 54 68 72 6f 77 4f 6e  guration.ThrowOn
33c10 4d 69 73 73 69 6e 67 2c 0d 0a 20 20 20 20 20 20  Missing,..      
33c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33c30 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67            config
33c40 75 72 61 74 69 6f 6e 2e 57 68 61 74 49 66 2c 20  uration.WhatIf, 
33c50 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 56 65  configuration.Ve
33c60 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20 20  rbose,..        
33c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33c80 20 20 20 20 20 20 20 20 72 65 66 20 73 61 76 65          ref save
33c90 64 2c 20 72 65 66 20 65 72 72 6f 72 29 29 0d 0a  d, ref error))..
33ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33cb0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
33cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33cd0 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e         TraceOps.
33ce0 53 68 6f 77 4d 65 73 73 61 67 65 28 54 72 61 63  ShowMessage(Trac
33cf0 65 50 72 69 6f 72 69 74 79 2e 48 69 67 68 65 73  ePriority.Highes
33d00 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t,..            
33d10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33d20 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63      debugCallbac
33d30 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b  k, traceCallback
33d40 2c 20 74 68 69 73 41 73 73 65 6d 62 6c 79 2c 0d  , thisAssembly,.
33d50 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
33d60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33d70 20 65 72 72 6f 72 2c 20 74 72 61 63 65 43 61 74   error, traceCat
33d80 65 67 6f 72 79 2c 20 4d 65 73 73 61 67 65 42 6f  egory, MessageBo
33d90 78 42 75 74 74 6f 6e 73 2e 4f 4b 2c 0d 0a 20 20  xButtons.OK,..  
33da0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33db0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4d 65                Me
33dc0 73 73 61 67 65 42 6f 78 49 63 6f 6e 2e 45 72 72  ssageBoxIcon.Err
33dd0 6f 72 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  or);....        
33de0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33df0 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62      TraceOps.Deb
33e00 75 67 41 6e 64 54 72 61 63 65 28 54 72 61 63 65  ugAndTrace(Trace
33e10 50 72 69 6f 72 69 74 79 2e 4d 65 64 69 75 6d 48  Priority.MediumH
33e20 69 67 68 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  igh,..          
33e30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33e40 20 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62        debugCallb
33e50 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61  ack, traceCallba
33e60 63 6b 2c 20 22 46 61 69 6c 75 72 65 2e 22 2c 0d  ck, "Failure.",.
33e70 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
33e80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33e90 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
33ea0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
33eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33ec0 72 65 74 75 72 6e 20 31 3b 20 2f 2a 20 46 41 49  return 1; /* FAI
33ed0 4c 55 52 45 20 2a 2f 0d 0a 20 20 20 20 20 20 20  LURE */..       
33ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33ef0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
33f00 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
33f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23                 #
33f20 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20  endregion....   
33f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33f40 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
33f50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33f60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33f70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
33f80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33f90 20 20 20 20 23 72 65 67 69 6f 6e 20 56 53 20 50      #region VS P
33fa0 61 63 6b 61 67 65 0d 0a 20 20 20 20 20 20 20 20  ackage..        
33fb0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
33fc0 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 48 61  configuration.Ha
33fd0 73 46 6c 61 67 73 28 0d 0a 20 20 20 20 20 20 20  sFlags(..       
33fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33ff0 20 20 20 20 20 49 6e 73 74 61 6c 6c 46 6c 61 67       InstallFlag
34000 73 2e 56 73 50 61 63 6b 61 67 65 2c 20 74 72 75  s.VsPackage, tru
34010 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e))..           
34020 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
34030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34040 20 20 20 20 69 66 20 28 21 46 6f 72 45 61 63 68      if (!ForEach
34050 56 73 56 65 72 73 69 6f 6e 52 65 67 69 73 74 72  VsVersionRegistr
34060 79 28 72 65 67 69 73 74 72 79 2c 0d 0a 20 20 20  y(registry,..   
34070 20 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 20 20 20 20 76 73 4c               vsL
34090 69 73 74 2c 20 50 72 6f 63 65 73 73 56 73 50 61  ist, ProcessVsPa
340a0 63 6b 61 67 65 2c 20 70 61 63 6b 61 67 65 2c 0d  ckage, package,.
340b0 0a 20 20 20 20 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 20 20 20                  
340d0 20 66 69 6c 65 4e 61 6d 65 44 61 74 61 2c 0d 0a   fileNameData,..
340e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
340f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34100 56 73 49 73 33 32 42 69 74 4f 6e 6c 79 20 7c 7c  VsIs32BitOnly ||
34110 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 57   configuration.W
34120 6f 77 36 34 2c 0d 0a 20 20 20 20 20 20 20 20 20  ow64,..         
34130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34140 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61         configura
34150 74 69 6f 6e 2e 54 68 72 6f 77 4f 6e 4d 69 73 73  tion.ThrowOnMiss
34160 69 6e 67 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ing,..          
34170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34180 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74        configurat
34190 69 6f 6e 2e 57 68 61 74 49 66 2c 20 63 6f 6e 66  ion.WhatIf, conf
341a0 69 67 75 72 61 74 69 6f 6e 2e 56 65 72 62 6f 73  iguration.Verbos
341b0 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
341c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
341d0 20 20 20 20 72 65 66 20 65 72 72 6f 72 29 29 0d      ref error)).
341e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
341f0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
34200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34210 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73          TraceOps
34220 2e 53 68 6f 77 4d 65 73 73 61 67 65 28 54 72 61  .ShowMessage(Tra
34230 63 65 50 72 69 6f 72 69 74 79 2e 48 69 67 68 65  cePriority.Highe
34240 73 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  st,..           
34250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34260 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61       debugCallba
34270 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63  ck, traceCallbac
34280 6b 2c 20 74 68 69 73 41 73 73 65 6d 62 6c 79 2c  k, thisAssembly,
34290 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
342a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
342b0 20 20 65 72 72 6f 72 2c 20 74 72 61 63 65 43 61    error, traceCa
342c0 74 65 67 6f 72 79 2c 20 4d 65 73 73 61 67 65 42  tegory, MessageB
342d0 6f 78 42 75 74 74 6f 6e 73 2e 4f 4b 2c 0d 0a 20  oxButtons.OK,.. 
342e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
342f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4d                 M
34300 65 73 73 61 67 65 42 6f 78 49 63 6f 6e 2e 45 72  essageBoxIcon.Er
34310 72 6f 72 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ror);....       
34320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34330 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65       TraceOps.De
34340 62 75 67 41 6e 64 54 72 61 63 65 28 54 72 61 63  bugAndTrace(Trac
34350 65 50 72 69 6f 72 69 74 79 2e 4d 65 64 69 75 6d  ePriority.Medium
34360 48 69 67 68 2c 0d 0a 20 20 20 20 20 20 20 20 20  High,..         
34370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34380 20 20 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c         debugCall
34390 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62  back, traceCallb
343a0 61 63 6b 2c 20 22 46 61 69 6c 75 72 65 2e 22 2c  ack, "Failure.",
343b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
343c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
343d0 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29    traceCategory)
343e0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
343f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34400 20 72 65 74 75 72 6e 20 31 3b 20 2f 2a 20 46 41   return 1; /* FA
34410 49 4c 55 52 45 20 2a 2f 0d 0a 20 20 20 20 20 20  ILURE */..      
34420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34430 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
34440 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
34450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34460 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20  #endregion....  
34470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34480 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
34490 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
344a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
344b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
344c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
344d0 20 20 20 20 20 23 72 65 67 69 6f 6e 20 56 53 20       #region VS 
344e0 44 61 74 61 53 6f 75 72 63 65 0d 0a 20 20 20 20  DataSource..    
344f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34500 69 66 20 28 63 6f 6e 66 69 67 75 72 61 74 69 6f  if (configuratio
34510 6e 2e 48 61 73 46 6c 61 67 73 28 0d 0a 20 20 20  n.HasFlags(..   
34520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34530 20 20 20 20 20 20 20 20 20 49 6e 73 74 61 6c 6c           Install
34540 46 6c 61 67 73 2e 56 73 44 61 74 61 53 6f 75 72  Flags.VsDataSour
34550 63 65 2c 20 74 72 75 65 29 29 0d 0a 20 20 20 20  ce, true))..    
34560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34570 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
34580 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21             if (!
34590 46 6f 72 45 61 63 68 56 73 56 65 72 73 69 6f 6e  ForEachVsVersion
345a0 52 65 67 69 73 74 72 79 28 72 65 67 69 73 74 72  Registry(registr
345b0 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y,..            
345c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
345d0 20 20 20 20 76 73 4c 69 73 74 2c 20 50 72 6f 63      vsList, Proc
345e0 65 73 73 56 73 44 61 74 61 53 6f 75 72 63 65 2c  essVsDataSource,
345f0 20 70 61 63 6b 61 67 65 2c 0d 0a 20 20 20 20 20   package,..     
34600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34610 20 20 20 20 20 20 20 20 20 20 20 66 69 6c 65 4e             fileN
34620 61 6d 65 44 61 74 61 2c 0d 0a 20 20 20 20 20 20  ameData,..      
34630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34640 20 20 20 20 20 20 20 20 20 20 56 73 49 73 33 32            VsIs32
34650 42 69 74 4f 6e 6c 79 20 7c 7c 20 63 6f 6e 66 69  BitOnly || confi
34660 67 75 72 61 74 69 6f 6e 2e 57 6f 77 36 34 2c 0d  guration.Wow64,.
34670 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
34680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34690 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 54   configuration.T
346a0 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 2c 0d 0a  hrowOnMissing,..
346b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
346c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
346d0 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 57 68  configuration.Wh
346e0 61 74 49 66 2c 20 63 6f 6e 66 69 67 75 72 61 74  atIf, configurat
346f0 69 6f 6e 2e 56 65 72 62 6f 73 65 2c 0d 0a 20 20  ion.Verbose,..  
34700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
34720 66 20 65 72 72 6f 72 29 29 0d 0a 20 20 20 20 20  f error))..     
34730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34740 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
34750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34760 20 20 54 72 61 63 65 4f 70 73 2e 53 68 6f 77 4d    TraceOps.ShowM
34770 65 73 73 61 67 65 28 54 72 61 63 65 50 72 69 6f  essage(TracePrio
34780 72 69 74 79 2e 48 69 67 68 65 73 74 2c 0d 0a 20  rity.Highest,.. 
34790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
347a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
347b0 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72  ebugCallback, tr
347c0 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 74 68 69  aceCallback, thi
347d0 73 41 73 73 65 6d 62 6c 79 2c 0d 0a 20 20 20 20  sAssembly,..    
347e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
347f0 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
34800 72 2c 20 74 72 61 63 65 43 61 74 65 67 6f 72 79  r, traceCategory
34810 2c 20 4d 65 73 73 61 67 65 42 6f 78 42 75 74 74  , MessageBoxButt
34820 6f 6e 73 2e 4f 4b 2c 0d 0a 20 20 20 20 20 20 20  ons.OK,..       
34830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34840 20 20 20 20 20 20 20 20 20 4d 65 73 73 61 67 65           Message
34850 42 6f 78 49 63 6f 6e 2e 45 72 72 6f 72 29 3b 0d  BoxIcon.Error);.
34860 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
34870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
34880 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64  raceOps.DebugAnd
34890 54 72 61 63 65 28 54 72 61 63 65 50 72 69 6f 72  Trace(TracePrior
348a0 69 74 79 2e 4d 65 64 69 75 6d 48 69 67 68 2c 0d  ity.MediumHigh,.
348b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
348c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
348d0 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20   debugCallback, 
348e0 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 22  traceCallback, "
348f0 46 61 69 6c 75 72 65 2e 22 2c 0d 0a 20 20 20 20  Failure.",..    
34900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34910 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
34920 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
34930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34940 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
34950 6e 20 31 3b 20 2f 2a 20 46 41 49 4c 55 52 45 20  n 1; /* FAILURE 
34960 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  */..            
34970 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
34980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34990 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
349a0 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65            #endre
349b0 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20  gion....        
349c0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
349d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
349e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
349f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34a00 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
34a10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23                 #
34a20 72 65 67 69 6f 6e 20 56 53 20 44 61 74 61 50 72  region VS DataPr
34a30 6f 76 69 64 65 72 0d 0a 20 20 20 20 20 20 20 20  ovider..        
34a40 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
34a50 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 48 61  configuration.Ha
34a60 73 46 6c 61 67 73 28 0d 0a 20 20 20 20 20 20 20  sFlags(..       
34a70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34a80 20 20 20 20 20 49 6e 73 74 61 6c 6c 46 6c 61 67       InstallFlag
34a90 73 2e 56 73 44 61 74 61 50 72 6f 76 69 64 65 72  s.VsDataProvider
34aa0 2c 20 74 72 75 65 29 29 0d 0a 20 20 20 20 20 20  , true))..      
34ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
34ac0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
34ad0 20 20 20 20 20 20 20 20 20 69 66 20 28 21 46 6f           if (!Fo
34ae0 72 45 61 63 68 56 73 56 65 72 73 69 6f 6e 52 65  rEachVsVersionRe
34af0 67 69 73 74 72 79 28 72 65 67 69 73 74 72 79 2c  gistry(registry,
34b00 0d 0a 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 20 20 76 73 4c 69 73 74 2c 20 50 72 6f 63 65 73    vsList, Proces
34b30 73 56 73 44 61 74 61 50 72 6f 76 69 64 65 72 2c  sVsDataProvider,
34b40 20 70 61 63 6b 61 67 65 2c 0d 0a 20 20 20 20 20   package,..     
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 66 69 6c 65 4e             fileN
34b70 61 6d 65 44 61 74 61 2c 0d 0a 20 20 20 20 20 20  ameData,..      
34b80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34b90 20 20 20 20 20 20 20 20 20 20 56 73 49 73 33 32            VsIs32
34ba0 42 69 74 4f 6e 6c 79 20 7c 7c 20 63 6f 6e 66 69  BitOnly || confi
34bb0 67 75 72 61 74 69 6f 6e 2e 57 6f 77 36 34 2c 0d  guration.Wow64,.
34bc0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
34bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34be0 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 54   configuration.T
34bf0 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 2c 0d 0a  hrowOnMissing,..
34c00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34c10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34c20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 57 68  configuration.Wh
34c30 61 74 49 66 2c 20 63 6f 6e 66 69 67 75 72 61 74  atIf, configurat
34c40 69 6f 6e 2e 56 65 72 62 6f 73 65 2c 0d 0a 20 20  ion.Verbose,..  
34c50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34c60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
34c70 66 20 65 72 72 6f 72 29 29 0d 0a 20 20 20 20 20  f error))..     
34c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34c90 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
34ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34cb0 20 20 54 72 61 63 65 4f 70 73 2e 53 68 6f 77 4d    TraceOps.ShowM
34cc0 65 73 73 61 67 65 28 54 72 61 63 65 50 72 69 6f  essage(TracePrio
34cd0 72 69 74 79 2e 48 69 67 68 65 73 74 2c 0d 0a 20  rity.Highest,.. 
34ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
34d00 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72  ebugCallback, tr
34d10 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 74 68 69  aceCallback, thi
34d20 73 41 73 73 65 6d 62 6c 79 2c 0d 0a 20 20 20 20  sAssembly,..    
34d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34d40 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
34d50 72 2c 20 74 72 61 63 65 43 61 74 65 67 6f 72 79  r, traceCategory
34d60 2c 20 4d 65 73 73 61 67 65 42 6f 78 42 75 74 74  , MessageBoxButt
34d70 6f 6e 73 2e 4f 4b 2c 0d 0a 20 20 20 20 20 20 20  ons.OK,..       
34d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34d90 20 20 20 20 20 20 20 20 20 4d 65 73 73 61 67 65           Message
34da0 42 6f 78 49 63 6f 6e 2e 45 72 72 6f 72 29 3b 0d  BoxIcon.Error);.
34db0 0a 0d 0a 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 54                 T
34dd0 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64  raceOps.DebugAnd
34de0 54 72 61 63 65 28 54 72 61 63 65 50 72 69 6f 72  Trace(TracePrior
34df0 69 74 79 2e 4d 65 64 69 75 6d 48 69 67 68 2c 0d  ity.MediumHigh,.
34e00 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
34e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34e20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20   debugCallback, 
34e30 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 22  traceCallback, "
34e40 46 61 69 6c 75 72 65 2e 22 2c 0d 0a 20 20 20 20  Failure.",..    
34e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34e60 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
34e70 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
34e80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34e90 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
34ea0 6e 20 31 3b 20 2f 2a 20 46 41 49 4c 55 52 45 20  n 1; /* FAILURE 
34eb0 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  */..            
34ec0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
34ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34ee0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
34ef0 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65            #endre
34f00 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20  gion....        
34f10 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
34f20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34f30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34f40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34f50 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
34f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23                 #
34f70 72 65 67 69 6f 6e 20 4c 6f 67 20 53 75 6d 6d 61  region Log Summa
34f80 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ry..            
34f90 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73          TraceOps
34fa0 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 54  .DebugAndTrace(T
34fb0 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4d 65 64  racePriority.Med
34fc0 69 75 6d 48 69 67 68 2c 0d 0a 20 20 20 20 20 20  iumHigh,..      
34fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34fe0 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c    debugCallback,
34ff0 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20   traceCallback, 
35000 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
35010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35020 20 20 20 20 20 20 20 20 22 73 75 62 4b 65 79 73          "subKeys
35030 43 72 65 61 74 65 64 20 3d 20 7b 30 7d 2c 20 73  Created = {0}, s
35040 75 62 4b 65 79 73 44 65 6c 65 74 65 64 20 3d 20  ubKeysDeleted = 
35050 7b 31 7d 2c 20 22 20 2b 0d 0a 20 20 20 20 20 20  {1}, " +..      
35060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35070 20 20 22 6b 65 79 56 61 6c 75 65 73 53 65 74 20    "keyValuesSet 
35080 3d 20 7b 32 7d 2c 20 6b 65 79 56 61 6c 75 65 73  = {2}, keyValues
35090 44 65 6c 65 74 65 64 20 3d 20 7b 33 7d 22 2c 0d  Deleted = {3}",.
350a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
350b0 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70           ForDisp
350c0 6c 61 79 28 52 65 67 69 73 74 72 79 48 65 6c 70  lay(RegistryHelp
350d0 65 72 2e 53 75 62 4b 65 79 73 43 72 65 61 74 65  er.SubKeysCreate
350e0 64 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  d),..           
350f0 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72               For
35100 44 69 73 70 6c 61 79 28 52 65 67 69 73 74 72 79  Display(Registry
35110 48 65 6c 70 65 72 2e 53 75 62 4b 65 79 73 44 65  Helper.SubKeysDe
35120 6c 65 74 65 64 29 2c 0d 0a 20 20 20 20 20 20 20  leted),..       
35130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35140 20 46 6f 72 44 69 73 70 6c 61 79 28 52 65 67 69   ForDisplay(Regi
35150 73 74 72 79 48 65 6c 70 65 72 2e 4b 65 79 56 61  stryHelper.KeyVa
35160 6c 75 65 73 53 65 74 29 2c 0d 0a 20 20 20 20 20  luesSet),..     
35170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35180 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 52 65     ForDisplay(Re
35190 67 69 73 74 72 79 48 65 6c 70 65 72 2e 4b 65 79  gistryHelper.Key
351a0 56 61 6c 75 65 73 44 65 6c 65 74 65 64 29 29 2c  ValuesDeleted)),
351b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
351c0 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
351d0 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20  ategory);....   
351e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
351f0 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41   TraceOps.DebugA
35200 6e 64 54 72 61 63 65 28 54 72 61 63 65 50 72 69  ndTrace(TracePri
35210 6f 72 69 74 79 2e 4d 65 64 69 75 6d 48 69 67 68  ority.MediumHigh
35220 2c 0d 0a 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 64 65 62 75 67             debug
35240 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43  Callback, traceC
35250 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e  allback, String.
35260 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
35270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35280 20 22 66 69 6c 65 73 43 72 65 61 74 65 64 20 3d   "filesCreated =
35290 20 7b 30 7d 2c 20 66 69 6c 65 73 4d 6f 64 69 66   {0}, filesModif
352a0 69 65 64 20 3d 20 7b 31 7d 2c 20 22 20 2b 0d 0a  ied = {1}, " +..
352b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
352c0 20 20 20 20 20 20 20 20 22 66 69 6c 65 73 44 65          "filesDe
352d0 6c 65 74 65 64 20 3d 20 7b 32 7d 22 2c 20 46 6f  leted = {2}", Fo
352e0 72 44 69 73 70 6c 61 79 28 66 69 6c 65 73 43 72  rDisplay(filesCr
352f0 65 61 74 65 64 29 2c 0d 0a 20 20 20 20 20 20 20  eated),..       
35300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35310 20 46 6f 72 44 69 73 70 6c 61 79 28 66 69 6c 65   ForDisplay(file
35320 73 4d 6f 64 69 66 69 65 64 29 2c 20 46 6f 72 44  sModified), ForD
35330 69 73 70 6c 61 79 28 66 69 6c 65 73 44 65 6c 65  isplay(filesDele
35340 74 65 64 29 29 2c 0d 0a 20 20 20 20 20 20 20 20  ted)),..        
35350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35360 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
35370 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
35380 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d       #endregion.
35390 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
353a0 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
353b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
353c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
353d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
353e0 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
353f0 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f            TraceO
35400 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65  ps.DebugAndTrace
35410 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4d  (TracePriority.M
35420 65 64 69 75 6d 48 69 67 68 2c 0d 0a 20 20 20 20  ediumHigh,..    
35430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35440 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63      debugCallbac
35450 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b  k, traceCallback
35460 2c 20 22 53 75 63 63 65 73 73 2e 22 2c 0d 0a 20  , "Success.",.. 
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 74 72 61 63 65 43 61 74 65         traceCate
35490 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
354a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
354b0 74 75 72 6e 20 30 3b 20 2f 2a 20 53 55 43 43 45  turn 0; /* SUCCE
354c0 53 53 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20  SS */..         
354d0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
354e0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
354f0 20 20 20 20 20 63 61 74 63 68 20 28 45 78 63 65       catch (Exce
35500 70 74 69 6f 6e 20 65 29 0d 0a 20 20 20 20 20 20  ption e)..      
35510 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
35520 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70           TraceOp
35530 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28  s.DebugAndTrace(
35540 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 48 69  TracePriority.Hi
35550 67 68 65 73 74 2c 0d 0a 20 20 20 20 20 20 20 20  ghest,..        
35560 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62 75              debu
35570 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65  gCallback, trace
35580 43 61 6c 6c 62 61 63 6b 2c 20 65 2c 20 74 72 61  Callback, e, tra
35590 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
355a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
355b0 74 68 72 6f 77 3b 0d 0a 20 20 20 20 20 20 20 20  throw;..        
355c0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d      }..        }
355d0 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65  ..        #endre
355e0 67 69 6f 6e 0d 0a 20 20 20 20 7d 0d 0a 20 20 20  gion..    }..   
355f0 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 7d 0d 0a   #endregion..}..