System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact 5ff584d61cf0fc12737c634ae81b32984b763928:


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 64 65 62 75 67 46 6f 72 6d 61 74 2c 0d 0a  g debugFormat,..
dda0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ddb0: 73 74 72 69 6e 67 20 74 72 61 63 65 46 6f 72 6d  string traceForm
ddc0: 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at,..           
ddd0: 20 20 20 20 20 49 6e 73 74 61 6c 6c 46 6c 61 67       InstallFlag
dde0: 73 20 69 6e 73 74 61 6c 6c 46 6c 61 67 73 2c 0d  s installFlags,.
ddf0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
de00: 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 20 64   TracePriority d
de10: 65 62 75 67 50 72 69 6f 72 69 74 79 2c 0d 0a 20  ebugPriority,.. 
de20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
de30: 72 61 63 65 50 72 69 6f 72 69 74 79 20 74 72 61  racePriority tra
de40: 63 65 50 72 69 6f 72 69 74 79 2c 0d 0a 20 20 20  cePriority,..   
de50: 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f               boo
de60: 6c 20 69 6e 73 74 61 6c 6c 2c 0d 0a 20 20 20 20  l install,..    
de70: 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
de80: 20 77 6f 77 36 34 2c 0d 0a 20 20 20 20 20 20 20   wow64,..       
de90: 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 6e 6f           bool no
dea0: 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 2c 0d  RuntimeVersion,.
deb0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
dec0: 20 62 6f 6f 6c 20 6e 6f 44 65 73 6b 74 6f 70 2c   bool noDesktop,
ded0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
dee0: 20 20 62 6f 6f 6c 20 6e 6f 43 6f 6d 70 61 63 74    bool noCompact
def0: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
df00: 20 20 20 62 6f 6f 6c 20 6e 6f 4e 65 74 46 78 32     bool noNetFx2
df10: 30 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  0,..            
df20: 20 20 20 20 62 6f 6f 6c 20 6e 6f 4e 65 74 46 78      bool noNetFx
df30: 34 30 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  40,..           
df40: 20 20 20 20 20 62 6f 6f 6c 20 6e 6f 56 73 32 30       bool noVs20
df50: 30 38 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  08,..           
df60: 20 20 20 20 20 62 6f 6f 6c 20 6e 6f 56 73 32 30       bool noVs20
df70: 31 30 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  10,..           
df80: 20 20 20 20 20 62 6f 6f 6c 20 6e 6f 54 72 61 63       bool noTrac
df90: 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
dfa0: 20 20 20 20 62 6f 6f 6c 20 6e 6f 43 6f 6e 73 6f      bool noConso
dfb0: 6c 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  le,..           
dfc0: 20 20 20 20 20 62 6f 6f 6c 20 6e 6f 4c 6f 67 2c       bool noLog,
dfd0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
dfe0: 20 20 62 6f 6f 6c 20 74 68 72 6f 77 4f 6e 4d 69    bool throwOnMi
dff0: 73 73 69 6e 67 2c 0d 0a 20 20 20 20 20 20 20 20  ssing,..        
e000: 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61          bool wha
e010: 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  tIf,..          
e020: 20 20 20 20 20 20 62 6f 6f 6c 20 64 65 62 75 67        bool debug
e030: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
e040: 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c     bool verbose,
e050: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
e060: 20 20 62 6f 6f 6c 20 63 6f 6e 66 69 72 6d 0d 0a    bool confirm..
e070: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e080: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
e090: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
e0a0: 20 20 74 68 69 73 2e 61 73 73 65 6d 62 6c 79 20    this.assembly 
e0b0: 3d 20 61 73 73 65 6d 62 6c 79 3b 0d 0a 20 20 20  = assembly;..   
e0c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69               thi
e0d0: 73 2e 6c 6f 67 46 69 6c 65 4e 61 6d 65 20 3d 20  s.logFileName = 
e0e0: 6c 6f 67 46 69 6c 65 4e 61 6d 65 3b 0d 0a 20 20  logFileName;..  
e0f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
e100: 69 73 2e 64 69 72 65 63 74 6f 72 79 20 3d 20 64  is.directory = d
e110: 69 72 65 63 74 6f 72 79 3b 0d 0a 20 20 20 20 20  irectory;..     
e120: 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e             this.
e130: 63 6f 72 65 46 69 6c 65 4e 61 6d 65 20 3d 20 63  coreFileName = c
e140: 6f 72 65 46 69 6c 65 4e 61 6d 65 3b 0d 0a 20 20  oreFileName;..  
e150: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
e160: 69 73 2e 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 20  is.linqFileName 
e170: 3d 20 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 3b 0d  = linqFileName;.
e180: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
e190: 20 74 68 69 73 2e 64 65 73 69 67 6e 65 72 46 69   this.designerFi
e1a0: 6c 65 4e 61 6d 65 20 3d 20 64 65 73 69 67 6e 65  leName = designe
e1b0: 72 46 69 6c 65 4e 61 6d 65 3b 0d 0a 20 20 20 20  rFileName;..    
e1c0: 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73              this
e1d0: 2e 64 65 62 75 67 46 6f 72 6d 61 74 20 3d 20 64  .debugFormat = d
e1e0: 65 62 75 67 46 6f 72 6d 61 74 3b 0d 0a 20 20 20  ebugFormat;..   
e1f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69               thi
e200: 73 2e 74 72 61 63 65 46 6f 72 6d 61 74 20 3d 20  s.traceFormat = 
e210: 74 72 61 63 65 46 6f 72 6d 61 74 3b 0d 0a 20 20  traceFormat;..  
e220: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
e230: 69 73 2e 69 6e 73 74 61 6c 6c 46 6c 61 67 73 20  is.installFlags 
e240: 3d 20 69 6e 73 74 61 6c 6c 46 6c 61 67 73 3b 0d  = installFlags;.
e250: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
e260: 20 74 68 69 73 2e 64 65 62 75 67 50 72 69 6f 72   this.debugPrior
e270: 69 74 79 20 3d 20 64 65 62 75 67 50 72 69 6f 72  ity = debugPrior
e280: 69 74 79 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ity;..          
e290: 20 20 20 20 20 20 74 68 69 73 2e 74 72 61 63 65        this.trace
e2a0: 50 72 69 6f 72 69 74 79 20 3d 20 74 72 61 63 65  Priority = trace
e2b0: 50 72 69 6f 72 69 74 79 3b 0d 0a 20 20 20 20 20  Priority;..     
e2c0: 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e             this.
e2d0: 69 6e 73 74 61 6c 6c 20 3d 20 69 6e 73 74 61 6c  install = instal
e2e0: 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l;..            
e2f0: 20 20 20 20 74 68 69 73 2e 77 6f 77 36 34 20 3d      this.wow64 =
e300: 20 77 6f 77 36 34 3b 0d 0a 20 20 20 20 20 20 20   wow64;..       
e310: 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 6e 6f           this.no
e320: 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 20 3d  RuntimeVersion =
e330: 20 6e 6f 52 75 6e 74 69 6d 65 56 65 72 73 69 6f   noRuntimeVersio
e340: 6e 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n;..            
e350: 20 20 20 20 74 68 69 73 2e 6e 6f 44 65 73 6b 74      this.noDeskt
e360: 6f 70 20 3d 20 6e 6f 44 65 73 6b 74 6f 70 3b 0d  op = noDesktop;.
e370: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
e380: 20 74 68 69 73 2e 6e 6f 43 6f 6d 70 61 63 74 20   this.noCompact 
e390: 3d 20 6e 6f 43 6f 6d 70 61 63 74 3b 0d 0a 20 20  = noCompact;..  
e3a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
e3b0: 69 73 2e 6e 6f 4e 65 74 46 78 32 30 20 3d 20 6e  is.noNetFx20 = n
e3c0: 6f 4e 65 74 46 78 32 30 3b 0d 0a 20 20 20 20 20  oNetFx20;..     
e3d0: 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e             this.
e3e0: 6e 6f 4e 65 74 46 78 34 30 20 3d 20 6e 6f 4e 65  noNetFx40 = noNe
e3f0: 74 46 78 34 30 3b 0d 0a 20 20 20 20 20 20 20 20  tFx40;..        
e400: 20 20 20 20 20 20 20 20 74 68 69 73 2e 6e 6f 56          this.noV
e410: 73 32 30 30 38 20 3d 20 6e 6f 56 73 32 30 30 38  s2008 = noVs2008
e420: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
e430: 20 20 20 74 68 69 73 2e 6e 6f 56 73 32 30 31 30     this.noVs2010
e440: 20 3d 20 6e 6f 56 73 32 30 31 30 3b 0d 0a 20 20   = noVs2010;..  
e450: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
e460: 69 73 2e 6e 6f 54 72 61 63 65 20 3d 20 6e 6f 54  is.noTrace = noT
e470: 72 61 63 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  race;..         
e480: 20 20 20 20 20 20 20 74 68 69 73 2e 6e 6f 43 6f         this.noCo
e490: 6e 73 6f 6c 65 20 3d 20 6e 6f 43 6f 6e 73 6f 6c  nsole = noConsol
e4a0: 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
e4b0: 20 20 20 20 74 68 69 73 2e 6e 6f 4c 6f 67 20 3d      this.noLog =
e4c0: 20 6e 6f 4c 6f 67 3b 0d 0a 20 20 20 20 20 20 20   noLog;..       
e4d0: 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 74 68           this.th
e4e0: 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 20 3d 20 74  rowOnMissing = t
e4f0: 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 3b 0d 0a  hrowOnMissing;..
e500: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e510: 74 68 69 73 2e 77 68 61 74 49 66 20 3d 20 77 68  this.whatIf = wh
e520: 61 74 49 66 3b 0d 0a 20 20 20 20 20 20 20 20 20  atIf;..         
e530: 20 20 20 20 20 20 20 74 68 69 73 2e 64 65 62 75         this.debu
e540: 67 20 3d 20 64 65 62 75 67 3b 0d 0a 20 20 20 20  g = debug;..    
e550: 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73              this
e560: 2e 76 65 72 62 6f 73 65 20 3d 20 76 65 72 62 6f  .verbose = verbo
e570: 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se;..           
e580: 20 20 20 20 20 74 68 69 73 2e 63 6f 6e 66 69 72       this.confir
e590: 6d 20 3d 20 63 6f 6e 66 69 72 6d 3b 0d 0a 20 20  m = confirm;..  
e5a0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
e5b0: 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67           #endreg
e5c0: 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ion....         
e5d0: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
e5e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e5f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e600: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e610: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
e620: 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 72        #region Pr
e630: 69 76 61 74 65 20 53 74 61 74 69 63 20 4d 65 74  ivate Static Met
e640: 68 6f 64 73 0d 0a 20 20 20 20 20 20 20 20 20 20  hods..          
e650: 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63    private static
e660: 20 76 6f 69 64 20 47 65 74 44 65 66 61 75 6c 74   void GetDefault
e670: 46 69 6c 65 4e 61 6d 65 73 28 0d 0a 20 20 20 20  FileNames(..    
e680: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20              ref 
e690: 73 74 72 69 6e 67 20 64 69 72 65 63 74 6f 72 79  string directory
e6a0: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
e6b0: 20 20 20 72 65 66 20 73 74 72 69 6e 67 20 63 6f     ref string co
e6c0: 72 65 46 69 6c 65 4e 61 6d 65 2c 0d 0a 20 20 20  reFileName,..   
e6d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66               ref
e6e0: 20 73 74 72 69 6e 67 20 6c 69 6e 71 46 69 6c 65   string linqFile
e6f0: 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  Name,..         
e700: 20 20 20 20 20 20 20 72 65 66 20 73 74 72 69 6e         ref strin
e710: 67 20 64 65 73 69 67 6e 65 72 46 69 6c 65 4e 61  g designerFileNa
e720: 6d 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  me..            
e730: 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20      )..         
e740: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
e750: 20 20 20 20 20 20 69 66 20 28 74 68 69 73 41 73        if (thisAs
e760: 73 65 6d 62 6c 79 20 3d 3d 20 6e 75 6c 6c 29 0d  sembly == null).
e770: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
e780: 20 20 20 20 20 72 65 74 75 72 6e 3b 0d 0a 0d 0a       return;....
e790: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e7a0: 64 69 72 65 63 74 6f 72 79 20 3d 20 50 61 74 68  directory = Path
e7b0: 2e 47 65 74 44 69 72 65 63 74 6f 72 79 4e 61 6d  .GetDirectoryNam
e7c0: 65 28 74 68 69 73 41 73 73 65 6d 62 6c 79 2e 4c  e(thisAssembly.L
e7d0: 6f 63 61 74 69 6f 6e 29 3b 0d 0a 0d 0a 20 20 20  ocation);....   
e7e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
e7f0: 28 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72  (String.IsNullOr
e800: 45 6d 70 74 79 28 64 69 72 65 63 74 6f 72 79 29  Empty(directory)
e810: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
e820: 20 20 20 20 20 20 20 72 65 74 75 72 6e 3b 0d 0a         return;..
e830: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
e840: 20 20 63 6f 72 65 46 69 6c 65 4e 61 6d 65 20 3d    coreFileName =
e850: 20 50 61 74 68 2e 43 6f 6d 62 69 6e 65 28 64 69   Path.Combine(di
e860: 72 65 63 74 6f 72 79 2c 0d 0a 20 20 20 20 20 20  rectory,..      
e870: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 49 6e                In
e880: 73 74 61 6c 6c 65 72 2e 43 6f 72 65 46 69 6c 65  staller.CoreFile
e890: 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  Name);....      
e8a0: 20 20 20 20 20 20 20 20 20 20 6c 69 6e 71 46 69            linqFi
e8b0: 6c 65 4e 61 6d 65 20 3d 20 50 61 74 68 2e 43 6f  leName = Path.Co
e8c0: 6d 62 69 6e 65 28 64 69 72 65 63 74 6f 72 79 2c  mbine(directory,
e8d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
e8e0: 20 20 20 20 20 20 49 6e 73 74 61 6c 6c 65 72 2e        Installer.
e8f0: 4c 69 6e 71 46 69 6c 65 4e 61 6d 65 29 3b 0d 0a  LinqFileName);..
e900: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
e910: 20 20 64 65 73 69 67 6e 65 72 46 69 6c 65 4e 61    designerFileNa
e920: 6d 65 20 3d 20 50 61 74 68 2e 43 6f 6d 62 69 6e  me = Path.Combin
e930: 65 28 64 69 72 65 63 74 6f 72 79 2c 0d 0a 20 20  e(directory,..  
e940: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e950: 20 20 49 6e 73 74 61 6c 6c 65 72 2e 44 65 73 69    Installer.Desi
e960: 67 6e 65 72 46 69 6c 65 4e 61 6d 65 29 3b 0d 0a  gnerFileName);..
e970: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
e980: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
e990: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e9a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e9b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e9c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e9d0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
e9e0: 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 62  private static b
e9f0: 6f 6f 6c 20 43 68 65 63 6b 4f 70 74 69 6f 6e 28  ool CheckOption(
ea00: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
ea10: 20 20 72 65 66 20 73 74 72 69 6e 67 20 61 72 67    ref string arg
ea20: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
ea30: 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20    )..           
ea40: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
ea50: 20 20 20 20 73 74 72 69 6e 67 20 72 65 73 75 6c      string resul
ea60: 74 20 3d 20 61 72 67 3b 0d 0a 0d 0a 20 20 20 20  t = arg;....    
ea70: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
ea80: 21 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72  !String.IsNullOr
ea90: 45 6d 70 74 79 28 72 65 73 75 6c 74 29 29 0d 0a  Empty(result))..
eaa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
eab0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
eac0: 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
ead0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
eae0: 2f 20 4e 4f 54 45 3a 20 52 65 6d 6f 76 65 20 61  / NOTE: Remove a
eaf0: 6c 6c 20 6c 65 61 64 69 6e 67 20 73 77 69 74 63  ll leading switc
eb00: 68 20 63 68 61 72 73 2e 0d 0a 20 20 20 20 20 20  h chars...      
eb10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
eb20: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
eb30: 20 20 20 20 20 20 72 65 73 75 6c 74 20 3d 20 72        result = r
eb40: 65 73 75 6c 74 2e 54 72 69 6d 53 74 61 72 74 28  esult.TrimStart(
eb50: 53 77 69 74 63 68 43 68 61 72 73 29 3b 0d 0a 0d  SwitchChars);...
eb60: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
eb70: 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
eb80: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
eb90: 4e 4f 54 45 3a 20 48 6f 77 20 6d 61 6e 79 20 63  NOTE: How many c
eba0: 68 61 72 73 20 77 65 72 65 20 72 65 6d 6f 76 65  hars were remove
ebb0: 64 3f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  d?..            
ebc0: 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
ebd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ebe0: 69 6e 74 20 63 6f 75 6e 74 20 3d 20 61 72 67 2e  int count = arg.
ebf0: 4c 65 6e 67 74 68 20 2d 20 72 65 73 75 6c 74 2e  Length - result.
ec00: 4c 65 6e 67 74 68 3b 0d 0a 0d 0a 20 20 20 20 20  Length;....     
ec10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
ec20: 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
ec30: 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20         // NOTE: 
ec40: 57 61 73 20 74 68 65 72 65 20 61 74 20 6c 65 61  Was there at lea
ec50: 73 74 20 6f 6e 65 3f 0d 0a 20 20 20 20 20 20 20  st one?..       
ec60: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
ec70: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
ec80: 20 20 20 20 20 69 66 20 28 63 6f 75 6e 74 20 3e       if (count >
ec90: 20 30 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20   0)..           
eca0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
ecb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ecc0: 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
ecd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ece0: 2f 2f 20 4e 4f 54 45 3a 20 4f 6b 2c 20 72 65 70  // NOTE: Ok, rep
ecf0: 6c 61 63 65 20 74 68 65 69 72 20 6f 72 69 67 69  lace their origi
ed00: 6e 61 6c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  nal..           
ed10: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
ed20: 20 20 20 20 20 20 61 72 67 75 6d 65 6e 74 2e 0d        argument..
ed30: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
ed40: 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
ed50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ed60: 20 20 20 20 20 61 72 67 20 3d 20 72 65 73 75 6c       arg = resul
ed70: 74 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  t;....          
ed80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
ed90: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
eda0: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54            // NOT
edb0: 45 3a 20 59 65 73 2c 20 74 68 69 73 20 69 73 20  E: Yes, this is 
edc0: 61 20 73 77 69 74 63 68 2e 0d 0a 20 20 20 20 20  a switch...     
edd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ede0: 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
edf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
ee00: 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20  eturn true;..   
ee10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ee20: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
ee30: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
ee40: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
ee50: 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20  false;..        
ee60: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
ee70: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
ee80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ee90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
eea0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
eeb0: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
eec0: 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
eed0: 73 74 61 74 69 63 20 62 6f 6f 6c 20 4d 61 74 63  static bool Matc
eee0: 68 4f 70 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20  hOption(..      
eef0: 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
ef00: 20 61 72 67 2c 0d 0a 20 20 20 20 20 20 20 20 20   arg,..         
ef10: 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6f 70         string op
ef20: 74 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20 20 20  tion..          
ef30: 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
ef40: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
ef50: 20 20 20 20 20 20 20 20 69 66 20 28 28 61 72 67          if ((arg
ef60: 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20 28 6f 70   == null) || (op
ef70: 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 29 0d 0a  tion == null))..
ef80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ef90: 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
efa0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
efb0: 20 20 20 20 20 72 65 74 75 72 6e 20 53 74 72 69       return Stri
efc0: 6e 67 2e 43 6f 6d 70 61 72 65 28 61 72 67 2c 20  ng.Compare(arg, 
efd0: 30 2c 20 6f 70 74 69 6f 6e 2c 20 30 2c 0d 0a 20  0, option, 0,.. 
efe0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
eff0: 20 20 20 61 72 67 2e 4c 65 6e 67 74 68 2c 20 53     arg.Length, S
f000: 74 72 69 6e 67 43 6f 6d 70 61 72 69 73 6f 6e 2e  tringComparison.
f010: 4f 72 64 69 6e 61 6c 49 67 6e 6f 72 65 43 61 73  OrdinalIgnoreCas
f020: 65 29 20 3d 3d 20 30 3b 0d 0a 20 20 20 20 20 20  e) == 0;..      
f030: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
f040: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
f050: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f060: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f070: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f080: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
f090: 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
f0a0: 65 20 73 74 61 74 69 63 20 62 6f 6f 6c 3f 20 50  e static bool? P
f0b0: 61 72 73 65 42 6f 6f 6c 65 61 6e 28 0d 0a 20 20  arseBoolean(..  
f0c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
f0d0: 72 69 6e 67 20 74 65 78 74 0d 0a 20 20 20 20 20  ring text..     
f0e0: 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
f0f0: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
f100: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
f110: 28 21 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f  (!String.IsNullO
f120: 72 45 6d 70 74 79 28 74 65 78 74 29 29 0d 0a 20  rEmpty(text)).. 
f130: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
f140: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
f150: 20 20 20 20 20 20 62 6f 6f 6c 20 76 61 6c 75 65        bool value
f160: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
f170: 20 20 20 20 20 20 20 20 20 69 66 20 28 62 6f 6f           if (boo
f180: 6c 2e 54 72 79 50 61 72 73 65 28 74 65 78 74 2c  l.TryParse(text,
f190: 20 6f 75 74 20 76 61 6c 75 65 29 29 0d 0a 20 20   out value))..  
f1a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f1b0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 76 61 6c        return val
f1c0: 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
f1d0: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
f1e0: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
f1f0: 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20   null;..        
f200: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
f210: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
f220: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f230: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f240: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f250: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
f260: 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
f270: 73 74 61 74 69 63 20 6f 62 6a 65 63 74 20 50 61  static object Pa
f280: 72 73 65 45 6e 75 6d 28 0d 0a 20 20 20 20 20 20  rseEnum(..      
f290: 20 20 20 20 20 20 20 20 20 20 54 79 70 65 20 65            Type e
f2a0: 6e 75 6d 54 79 70 65 2c 0d 0a 20 20 20 20 20 20  numType,..      
f2b0: 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
f2c0: 20 74 65 78 74 2c 0d 0a 20 20 20 20 20 20 20 20   text,..        
f2d0: 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 6e 6f 43          bool noC
f2e0: 61 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ase..           
f2f0: 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
f300: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
f310: 20 20 20 20 20 20 20 69 66 20 28 28 65 6e 75 6d         if ((enum
f320: 54 79 70 65 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c  Type == null) ||
f330: 20 21 65 6e 75 6d 54 79 70 65 2e 49 73 45 6e 75   !enumType.IsEnu
f340: 6d 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  m)..            
f350: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e          return n
f360: 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ull;....        
f370: 20 20 20 20 20 20 20 20 69 66 20 28 21 53 74 72          if (!Str
f380: 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74  ing.IsNullOrEmpt
f390: 79 28 74 65 78 74 29 29 0d 0a 20 20 20 20 20 20  y(text))..      
f3a0: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
f3b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f3c0: 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20   try..          
f3d0: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
f3e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f3f0: 20 20 20 20 20 72 65 74 75 72 6e 20 45 6e 75 6d       return Enum
f400: 2e 50 61 72 73 65 28 65 6e 75 6d 54 79 70 65 2c  .Parse(enumType,
f410: 20 74 65 78 74 2c 20 6e 6f 43 61 73 65 29 3b 0d   text, noCase);.
f420: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
f430: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
f440: 20 20 20 20 20 20 20 20 20 20 20 20 63 61 74 63              catc
f450: 68 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  h..             
f460: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
f470: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f480: 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e    // do nothing.
f490: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
f4a0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
f4b0: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
f4c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
f4d0: 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20  turn null;..    
f4e0: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
f4f0: 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f         #endregio
f500: 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n....           
f510: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
f520: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f530: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f540: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f550: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
f560: 20 20 20 20 23 72 65 67 69 6f 6e 20 50 75 62 6c      #region Publ
f570: 69 63 20 53 74 61 74 69 63 20 4d 65 74 68 6f 64  ic Static Method
f580: 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  s..            p
f590: 75 62 6c 69 63 20 73 74 61 74 69 63 20 43 6f 6e  ublic static Con
f5a0: 66 69 67 75 72 61 74 69 6f 6e 20 43 72 65 61 74  figuration Creat
f5b0: 65 44 65 66 61 75 6c 74 28 29 0d 0a 20 20 20 20  eDefault()..    
f5c0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
f5d0: 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
f5e0: 67 20 64 69 72 65 63 74 6f 72 79 20 3d 20 6e 75  g directory = nu
f5f0: 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll;..           
f600: 20 20 20 20 20 73 74 72 69 6e 67 20 63 6f 72 65       string core
f610: 46 69 6c 65 4e 61 6d 65 20 3d 20 6e 75 6c 6c 3b  FileName = null;
f620: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
f630: 20 20 73 74 72 69 6e 67 20 6c 69 6e 71 46 69 6c    string linqFil
f640: 65 4e 61 6d 65 20 3d 20 6e 75 6c 6c 3b 0d 0a 20  eName = null;.. 
f650: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
f660: 74 72 69 6e 67 20 64 65 73 69 67 6e 65 72 46 69  tring designerFi
f670: 6c 65 4e 61 6d 65 20 3d 20 6e 75 6c 6c 3b 0d 0a  leName = null;..
f680: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
f690: 20 20 47 65 74 44 65 66 61 75 6c 74 46 69 6c 65    GetDefaultFile
f6a0: 4e 61 6d 65 73 28 0d 0a 20 20 20 20 20 20 20 20  Names(..        
f6b0: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20              ref 
f6c0: 64 69 72 65 63 74 6f 72 79 2c 20 72 65 66 20 63  directory, ref c
f6d0: 6f 72 65 46 69 6c 65 4e 61 6d 65 2c 20 72 65 66  oreFileName, ref
f6e0: 20 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 2c 0d 0a   linqFileName,..
f6f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f700: 20 20 20 20 72 65 66 20 64 65 73 69 67 6e 65 72      ref designer
f710: 46 69 6c 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20  FileName);....  
f720: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
f730: 74 75 72 6e 20 6e 65 77 20 43 6f 6e 66 69 67 75  turn new Configu
f740: 72 61 74 69 6f 6e 28 74 68 69 73 41 73 73 65 6d  ration(thisAssem
f750: 62 6c 79 2c 20 6e 75 6c 6c 2c 20 64 69 72 65 63  bly, null, direc
f760: 74 6f 72 79 2c 0d 0a 20 20 20 20 20 20 20 20 20  tory,..         
f770: 20 20 20 20 20 20 20 20 20 20 20 63 6f 72 65 46             coreF
f780: 69 6c 65 4e 61 6d 65 2c 20 6c 69 6e 71 46 69 6c  ileName, linqFil
f790: 65 4e 61 6d 65 2c 20 64 65 73 69 67 6e 65 72 46  eName, designerF
f7a0: 69 6c 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20  ileName,..      
f7b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
f7c0: 61 63 65 4f 70 73 2e 44 65 62 75 67 46 6f 72 6d  aceOps.DebugForm
f7d0: 61 74 2c 20 54 72 61 63 65 4f 70 73 2e 54 72 61  at, TraceOps.Tra
f7e0: 63 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20  ceFormat,..     
f7f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 49                 I
f800: 6e 73 74 61 6c 6c 46 6c 61 67 73 2e 44 65 66 61  nstallFlags.Defa
f810: 75 6c 74 2c 20 54 72 61 63 65 50 72 69 6f 72 69  ult, TracePriori
f820: 74 79 2e 44 65 66 61 75 6c 74 2c 0d 0a 20 20 20  ty.Default,..   
f830: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f840: 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 44   TracePriority.D
f850: 65 66 61 75 6c 74 2c 20 74 72 75 65 2c 20 66 61  efault, true, fa
f860: 6c 73 65 2c 20 66 61 6c 73 65 2c 20 66 61 6c 73  lse, false, fals
f870: 65 2c 20 66 61 6c 73 65 2c 0d 0a 20 20 20 20 20  e, false,..     
f880: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66                 f
f890: 61 6c 73 65 2c 20 66 61 6c 73 65 2c 20 66 61 6c  alse, false, fal
f8a0: 73 65 2c 20 66 61 6c 73 65 2c 20 66 61 6c 73 65  se, false, false
f8b0: 2c 20 66 61 6c 73 65 2c 20 66 61 6c 73 65 2c 20  , false, false, 
f8c0: 74 72 75 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  true,..         
f8d0: 20 20 20 20 20 20 20 20 20 20 20 74 72 75 65 2c             true,
f8e0: 20 66 61 6c 73 65 2c 20 66 61 6c 73 65 2c 20 66   false, false, f
f8f0: 61 6c 73 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  alse);..        
f900: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
f910: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
f920: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f930: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f940: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f950: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
f960: 20 20 20 20 20 20 20 20 5b 4d 65 74 68 6f 64 49          [MethodI
f970: 6d 70 6c 28 4d 65 74 68 6f 64 49 6d 70 6c 4f 70  mpl(MethodImplOp
f980: 74 69 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e 69 6e 67  tions.NoInlining
f990: 29 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  )]..            
f9a0: 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 62 6f  public static bo
f9b0: 6f 6c 20 46 72 6f 6d 41 72 67 73 28 0d 0a 20 20  ol FromArgs(..  
f9c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
f9d0: 72 69 6e 67 5b 5d 20 61 72 67 73 2c 0d 0a 20 20  ring[] args,..  
f9e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f                bo
f9f0: 6f 6c 20 73 74 72 69 63 74 2c 0d 0a 20 20 20 20  ol strict,..    
fa00: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20              ref 
fa10: 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 63 6f  Configuration co
fa20: 6e 66 69 67 75 72 61 74 69 6f 6e 2c 0d 0a 20 20  nfiguration,..  
fa30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
fa40: 66 20 73 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a  f string error..
fa50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fa60: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
fa70: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
fa80: 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20    try..         
fa90: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
faa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
fab0: 20 28 61 72 67 73 20 3d 3d 20 6e 75 6c 6c 29 0d   (args == null).
fac0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
fad0: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
fae0: 74 72 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  true;....       
faf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
fb00: 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 3d  (configuration =
fb10: 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
fb20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fb30: 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 3d   configuration =
fb40: 20 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 43   Configuration.C
fb50: 72 65 61 74 65 44 65 66 61 75 6c 74 28 29 3b 0d  reateDefault();.
fb60: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
fb70: 20 20 20 20 20 20 20 69 6e 74 20 6c 65 6e 67 74         int lengt
fb80: 68 20 3d 20 61 72 67 73 2e 4c 65 6e 67 74 68 3b  h = args.Length;
fb90: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
fba0: 20 20 20 20 20 20 20 20 66 6f 72 20 28 69 6e 74          for (int
fbb0: 20 69 6e 64 65 78 20 3d 20 30 3b 20 69 6e 64 65   index = 0; inde
fbc0: 78 20 3c 20 6c 65 6e 67 74 68 3b 20 69 6e 64 65  x < length; inde
fbd0: 78 2b 2b 29 0d 0a 20 20 20 20 20 20 20 20 20 20  x++)..          
fbe0: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
fbf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fc00: 20 20 20 20 20 73 74 72 69 6e 67 20 61 72 67 20       string arg 
fc10: 3d 20 61 72 67 73 5b 69 6e 64 65 78 5d 3b 0d 0a  = args[index];..
fc20: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
fc30: 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
fc40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fc50: 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 53        // NOTE: S
fc60: 6b 69 70 20 61 6e 79 20 61 72 67 75 6d 65 6e 74  kip any argument
fc70: 20 74 68 61 74 20 69 73 20 6e 75 6c 6c 20 28 3f   that is null (?
fc80: 29 20 6f 72 20 61 6e 20 65 6d 70 74 79 0d 0a 20  ) or an empty.. 
fc90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fca0: 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
fcb0: 73 74 72 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20  string...       
fcc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fcd0: 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
fce0: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
fcf0: 28 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72  (String.IsNullOr
fd00: 45 6d 70 74 79 28 61 72 67 29 29 0d 0a 20 20 20  Empty(arg))..   
fd10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fd20: 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75           continu
fd30: 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
fd40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
fd50: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
fd60: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54            // NOT
fd70: 45 3a 20 57 65 20 61 72 65 20 67 6f 69 6e 67 20  E: We are going 
fd80: 74 6f 20 6d 6f 64 69 66 79 20 74 68 65 20 6f 72  to modify the or
fd90: 69 67 69 6e 61 6c 20 61 72 67 75 6d 65 6e 74 0d  iginal argument.
fda0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
fdb0: 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
fdc0: 20 20 62 79 20 72 65 6d 6f 76 69 6e 67 20 61 6e    by removing an
fdd0: 79 20 6c 65 61 64 69 6e 67 20 6f 70 74 69 6f 6e  y leading option
fde0: 20 63 68 61 72 61 63 74 65 72 73 3b 0d 0a 20 20   characters;..  
fdf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fe00: 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 74        //       t
fe10: 68 65 72 65 66 6f 72 65 2c 20 77 65 20 75 73 65  herefore, we use
fe20: 20 61 20 6e 65 77 20 73 74 72 69 6e 67 20 74 6f   a new string to
fe30: 20 68 6f 6c 64 20 74 68 65 0d 0a 20 20 20 20 20   hold the..     
fe40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fe50: 20 20 20 2f 2f 20 20 20 20 20 20 20 6d 6f 64 69     //       modi
fe60: 66 69 65 64 20 61 72 67 75 6d 65 6e 74 2e 0d 0a  fied argument...
fe70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fe80: 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
fe90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fea0: 20 20 20 20 73 74 72 69 6e 67 20 6e 65 77 41 72      string newAr
feb0: 67 20 3d 20 61 72 67 3b 0d 0a 0d 0a 20 20 20 20  g = arg;....    
fec0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fed0: 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
fee0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fef0: 2f 2f 20 4e 4f 54 45 3a 20 41 6c 6c 20 74 68 65  // NOTE: All the
ff00: 20 73 75 70 70 6f 72 74 65 64 20 63 6f 6d 6d 61   supported comma
ff10: 6e 64 20 6c 69 6e 65 20 6f 70 74 69 6f 6e 73 20  nd line options 
ff20: 6d 75 73 74 0d 0a 20 20 20 20 20 20 20 20 20 20  must..          
ff30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
ff40: 20 20 20 20 20 20 20 62 65 67 69 6e 20 77 69 74         begin wit
ff50: 68 20 61 6e 20 6f 70 74 69 6f 6e 20 63 68 61 72  h an option char
ff60: 61 63 74 65 72 20 28 65 2e 67 2e 20 61 20 6d 69  acter (e.g. a mi
ff70: 6e 75 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20  nus..           
ff80: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
ff90: 20 20 20 20 20 20 6f 72 20 66 6f 72 77 61 72 64        or forward
ffa0: 20 73 6c 61 73 68 29 3b 20 61 74 74 65 6d 70 74   slash); attempt
ffb0: 20 74 6f 20 76 61 6c 69 64 61 74 65 20 74 68 61   to validate tha
ffc0: 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  t..             
ffd0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
ffe0: 20 20 20 20 6e 6f 77 2e 20 20 49 66 20 77 65 20      now.  If we 
fff0: 66 61 69 6c 20 69 6e 20 73 74 72 69 63 74 20 6d  fail in strict m
10000 6f 64 65 2c 20 77 65 20 61 72 65 20 64 6f 6e 65  ode, we are done
10010 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
10020 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
10030 20 20 20 20 6f 74 68 65 72 77 69 73 65 2c 20 6a      otherwise, j
10040 75 73 74 20 73 6b 69 70 20 74 68 69 73 20 61 72  ust skip this ar
10050 67 75 6d 65 6e 74 20 61 6e 64 20 61 64 76 61 6e  gument and advan
10060 63 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ce..            
10070 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
10080 20 20 20 20 20 74 6f 20 74 68 65 20 6e 65 78 74       to the next
10090 20 6f 6e 65 2e 0d 0a 20 20 20 20 20 20 20 20 20   one...         
100a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
100b0 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
100c0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21             if (!
100d0 43 68 65 63 6b 4f 70 74 69 6f 6e 28 72 65 66 20  CheckOption(ref 
100e0 6e 65 77 41 72 67 29 29 0d 0a 20 20 20 20 20 20  newArg))..      
100f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10100 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
10110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10120 20 65 72 72 6f 72 20 3d 20 54 72 61 63 65 4f 70   error = TraceOp
10130 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28  s.DebugAndTrace(
10140 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
10150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10160 20 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e    TracePriority.
10170 4c 6f 77 65 73 74 2c 20 64 65 62 75 67 43 61 6c  Lowest, debugCal
10180 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20  lback,..        
10190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
101a0 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c          traceCal
101b0 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f  lback, String.Fo
101c0 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
101d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
101e0 20 20 20 20 20 20 20 22 55 6e 73 75 70 70 6f 72         "Unsuppor
101f0 74 65 64 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65  ted command line
10200 20 61 72 67 75 6d 65 6e 74 3a 20 7b 30 7d 22 2c   argument: {0}",
10210 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
10220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10230 20 20 46 6f 72 44 69 73 70 6c 61 79 28 61 72 67    ForDisplay(arg
10240 29 29 2c 20 74 72 61 63 65 43 61 74 65 67 6f 72  )), traceCategor
10250 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
10260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10270 20 20 20 69 66 20 28 73 74 72 69 63 74 29 0d 0a     if (strict)..
10280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
102a0 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d  return false;...
102b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
102c0 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
102d0 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20  tinue;..        
102e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
102f0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
10300 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
10310 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
10320 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45           // NOTE
10330 3a 20 41 6c 6c 20 74 68 65 20 73 75 70 70 6f 72  : All the suppor
10340 74 65 64 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65  ted command line
10350 20 6f 70 74 69 6f 6e 73 20 6d 75 73 74 0d 0a 20   options must.. 
10360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10370 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
10380 68 61 76 65 20 61 20 76 61 6c 75 65 3b 20 74 68  have a value; th
10390 65 72 65 66 6f 72 65 2c 20 61 74 74 65 6d 70 74  erefore, attempt
103a0 20 74 6f 20 61 64 76 61 6e 63 65 0d 0a 20 20 20   to advance..   
103b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
103c0 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 74 6f       //       to
103d0 20 69 74 20 6e 6f 77 2e 20 20 49 66 20 77 65 20   it now.  If we 
103e0 66 61 69 6c 2c 20 77 65 20 61 72 65 20 64 6f 6e  fail, we are don
103f0 65 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e...            
10400 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
10410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10420 20 20 20 20 20 20 20 20 69 6e 64 65 78 2b 2b 3b          index++;
10430 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
10440 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
10450 69 6e 64 65 78 20 3e 3d 20 6c 65 6e 67 74 68 29  index >= length)
10460 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
10470 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
10480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10490 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
104a0 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41   TraceOps.DebugA
104b0 6e 64 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20  ndTrace(..      
104c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
104d0 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 50            TraceP
104e0 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20  riority.Lowest, 
104f0 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a  debugCallback,..
10500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10520 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53  traceCallback, S
10530 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
10540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
10560 4d 69 73 73 69 6e 67 20 76 61 6c 75 65 20 66 6f  Missing value fo
10570 72 20 6f 70 74 69 6f 6e 3a 20 7b 30 7d 22 2c 0d  r option: {0}",.
10580 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
10590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
105a0 20 46 6f 72 44 69 73 70 6c 61 79 28 61 72 67 29   ForDisplay(arg)
105b0 29 2c 20 74 72 61 63 65 43 61 74 65 67 6f 72 79  ), traceCategory
105c0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
105d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
105e0 20 20 69 66 20 28 73 74 72 69 63 74 29 0d 0a 20    if (strict).. 
105f0 20 20 20 20 20 20 20 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 72                 r
10610 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a  eturn false;....
10620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10630 20 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61              brea
10640 6b 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  k;..            
10650 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
10660 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
10670 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
10680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10690 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 47 72       // NOTE: Gr
106a0 61 62 20 74 68 65 20 74 65 78 74 75 61 6c 20 76  ab the textual v
106b0 61 6c 75 65 20 6f 66 20 74 68 69 73 20 63 6f 6d  alue of this com
106c0 6d 61 6e 64 20 6c 69 6e 65 0d 0a 20 20 20 20 20  mand line..     
106d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
106e0 20 20 20 2f 2f 20 20 20 20 20 20 20 6f 70 74 69     //       opti
106f0 6f 6e 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  on...           
10700 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
10710 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
10720 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
10730 74 65 78 74 20 3d 20 61 72 67 73 5b 69 6e 64 65  text = args[inde
10740 78 5d 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  x];....         
10750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
10760 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
10770 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f             // NO
10780 54 45 3a 20 46 69 67 75 72 65 20 6f 75 74 20 77  TE: Figure out w
10790 68 69 63 68 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e  hich command lin
107a0 65 20 6f 70 74 69 6f 6e 20 74 68 69 73 20 69 73  e option this is
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 2f 2f 20 20 20 20            //    
107d0 20 20 20 28 62 61 73 65 64 20 6f 6e 20 61 20 70     (based on a p
107e0 61 72 74 69 61 6c 20 6e 61 6d 65 20 6d 61 74 63  artial name matc
107f0 68 29 20 61 6e 64 20 74 68 65 6e 20 74 72 79 0d  h) and then try.
10800 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
10810 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
10820 20 20 74 6f 20 69 6e 74 65 72 70 72 65 74 20 74    to interpret t
10830 68 65 20 74 65 78 74 75 61 6c 20 76 61 6c 75 65  he textual value
10840 20 61 73 20 74 68 65 20 63 6f 72 72 65 63 74 0d   as the correct.
10850 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
10860 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
10870 20 20 74 79 70 65 2e 0d 0a 20 20 20 20 20 20 20    type...       
10880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10890 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
108a0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
108b0 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77  (MatchOption(new
108c0 41 72 67 2c 20 22 63 6f 6e 66 69 72 6d 22 29 29  Arg, "confirm"))
108d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
108e0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
108f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10900 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 3f 20 76           bool? v
10910 61 6c 75 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c  alue = ParseBool
10920 65 61 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20  ean(text);....  
10930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10940 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76 61            if (va
10950 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  lue == null)..  
10960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10970 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
10980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10990 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
109a0 6f 72 20 3d 20 54 72 61 63 65 4f 70 73 2e 44 65  or = TraceOps.De
109b0 62 75 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 20  bugAndTrace(..  
109c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
109d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
109e0 20 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e    TracePriority.
109f0 4c 6f 77 65 73 74 2c 20 64 65 62 75 67 43 61 6c  Lowest, debugCal
10a00 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20  lback,..        
10a10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10a20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
10a30 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e  eCallback, Strin
10a40 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
10a50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
10a70 49 6e 76 61 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c  Invalid {0} bool
10a80 65 61 6e 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c  ean value: {1}",
10a90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
10aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10ab0 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79        ForDisplay
10ac0 28 61 72 67 29 2c 20 46 6f 72 44 69 73 70 6c 61  (arg), ForDispla
10ad0 79 28 74 65 78 74 29 29 2c 0d 0a 20 20 20 20 20  y(text)),..     
10ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
10b00 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
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 20 20 20 20 20 20                  
10b30 20 20 69 66 20 28 73 74 72 69 63 74 29 0d 0a 20    if (strict).. 
10b40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10b50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10b60 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
10b70 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
10b80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10b90 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20      continue;.. 
10ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10bb0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
10bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10bd0 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66              conf
10be0 69 67 75 72 61 74 69 6f 6e 2e 63 6f 6e 66 69 72  iguration.confir
10bf0 6d 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 65 3b  m = (bool)value;
10c00 0d 0a 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 7d 0d 0a 20 20 20            }..   
10c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10c30 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61       else if (Ma
10c40 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67  tchOption(newArg
10c50 2c 20 22 63 6f 72 65 46 69 6c 65 4e 61 6d 65 22  , "coreFileName"
10c60 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
10c70 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
10c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10c90 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69             confi
10ca0 67 75 72 61 74 69 6f 6e 2e 63 6f 72 65 46 69 6c  guration.coreFil
10cb0 65 4e 61 6d 65 20 3d 20 74 65 78 74 3b 0d 0a 20  eName = text;.. 
10cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10cd0 20 20 20 20 20 20 20 7d 0d 0a 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 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68    else if (Match
10d00 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22  Option(newArg, "
10d10 64 65 62 75 67 22 29 29 0d 0a 20 20 20 20 20 20  debug"))..      
10d20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10d30 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
10d40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10d50 20 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d 20 50   bool? value = P
10d60 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65 78 74  arseBoolean(text
10d70 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
10d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10d90 20 20 69 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e    if (value == n
10da0 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
10db0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10dc0 20 20 7b 0d 0a 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 65 72 72 6f 72 20 3d 20 54 72 61       error = Tra
10df0 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72  ceOps.DebugAndTr
10e00 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ace(..          
10e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10e20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 50            TraceP
10e30 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20  riority.Lowest, 
10e40 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a  debugCallback,..
10e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10e60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10e70 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63      traceCallbac
10e80 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  k, String.Format
10e90 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
10ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10eb0 20 20 20 20 20 20 20 22 49 6e 76 61 6c 69 64 20         "Invalid 
10ec0 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75  {0} boolean valu
10ed0 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20  e: {1}",..      
10ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f                Fo
10f00 72 44 69 73 70 6c 61 79 28 61 72 67 29 2c 20 46  rDisplay(arg), F
10f10 6f 72 44 69 73 70 6c 61 79 28 74 65 78 74 29 29  orDisplay(text))
10f20 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
10f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10f40 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65         traceCate
10f50 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
10f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10f70 20 20 20 20 20 20 20 20 20 20 69 66 20 28 73 74            if (st
10f80 72 69 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20  rict)..         
10f90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10fa0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
10fb0 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20  n false;....    
10fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10fd0 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74              cont
10fe0 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  inue;..         
10ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11000 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
11010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11020 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f      configuratio
11030 6e 2e 64 65 62 75 67 20 3d 20 28 62 6f 6f 6c 29  n.debug = (bool)
11040 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20  value;..        
11050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11060 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
11070 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20             else 
11080 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28  if (MatchOption(
11090 6e 65 77 41 72 67 2c 20 22 64 65 62 75 67 46 6f  newArg, "debugFo
110a0 72 6d 61 74 22 29 29 0d 0a 20 20 20 20 20 20 20  rmat"))..       
110b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
110c0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
110d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
110e0 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 64 65  configuration.de
110f0 62 75 67 46 6f 72 6d 61 74 20 3d 20 74 65 78 74  bugFormat = text
11100 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
11110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
11120 72 61 63 65 4f 70 73 2e 44 65 62 75 67 46 6f 72  raceOps.DebugFor
11130 6d 61 74 20 3d 20 63 6f 6e 66 69 67 75 72 61 74  mat = configurat
11140 69 6f 6e 2e 64 65 62 75 67 46 6f 72 6d 61 74 3b  ion.debugFormat;
11150 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
11160 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
11170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11180 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61       else if (Ma
11190 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67  tchOption(newArg
111a0 2c 20 22 64 65 62 75 67 50 72 69 6f 72 69 74 79  , "debugPriority
111b0 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  "))..           
111c0 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
111d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
111e0 20 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65              obje
111f0 63 74 20 76 61 6c 75 65 20 3d 20 50 61 72 73 65  ct value = Parse
11200 45 6e 75 6d 28 0d 0a 20 20 20 20 20 20 20 20 20  Enum(..         
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 74 79 70 65 6f 66 28 54 72         typeof(Tr
11230 61 63 65 50 72 69 6f 72 69 74 79 29 2c 20 74 65  acePriority), te
11240 78 74 2c 20 74 72 75 65 29 3b 0d 0a 0d 0a 20 20  xt, true);....  
11250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11260 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76 61            if (va
11270 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  lue == null)..  
11280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11290 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
112a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
112b0 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
112c0 6f 72 20 3d 20 54 72 61 63 65 4f 70 73 2e 44 65  or = TraceOps.De
112d0 62 75 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 20  bugAndTrace(..  
112e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
112f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11300 20 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e    TracePriority.
11310 4c 6f 77 65 73 74 2c 20 64 65 62 75 67 43 61 6c  Lowest, debugCal
11320 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20  lback,..        
11330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11340 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
11350 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e  eCallback, Strin
11360 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
11370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
11390 49 6e 76 61 6c 69 64 20 7b 30 7d 20 76 61 6c 75  Invalid {0} valu
113a0 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20  e: {1}",..      
113b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
113c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f                Fo
113d0 72 44 69 73 70 6c 61 79 28 61 72 67 29 2c 20 46  rDisplay(arg), F
113e0 6f 72 44 69 73 70 6c 61 79 28 74 65 78 74 29 29  orDisplay(text))
113f0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
11400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11410 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65         traceCate
11420 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
11430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11440 20 20 20 20 20 20 20 20 20 20 69 66 20 28 73 74            if (st
11450 72 69 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20  rict)..         
11460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11470 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
11480 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20  n false;....    
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 20 20 20 63 6f 6e 74              cont
114b0 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  inue;..         
114c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
114d0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
114e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
114f0 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f      configuratio
11500 6e 2e 64 65 62 75 67 50 72 69 6f 72 69 74 79 20  n.debugPriority 
11510 3d 20 28 54 72 61 63 65 50 72 69 6f 72 69 74 79  = (TracePriority
11520 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20  )value;..       
11530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11540 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65       TraceOps.De
11550 62 75 67 50 72 69 6f 72 69 74 79 20 3d 20 63 6f  bugPriority = co
11560 6e 66 69 67 75 72 61 74 69 6f 6e 2e 64 65 62 75  nfiguration.debu
11570 67 50 72 69 6f 72 69 74 79 3b 0d 0a 20 20 20 20  gPriority;..    
11580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11590 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
115a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
115b0 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74  lse if (MatchOpt
115c0 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 64 65 73  ion(newArg, "des
115d0 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 22 29 29  ignerFileName"))
115e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
115f0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
11600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11610 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75           configu
11620 72 61 74 69 6f 6e 2e 64 65 73 69 67 6e 65 72 46  ration.designerF
11630 69 6c 65 4e 61 6d 65 20 3d 20 74 65 78 74 3b 0d  ileName = text;.
11640 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
11650 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
11660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11670 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74      else if (Mat
11680 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c  chOption(newArg,
11690 20 22 64 69 72 65 63 74 6f 72 79 22 29 29 0d 0a   "directory"))..
116a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
116b0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
116c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
116d0 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61         configura
116e0 74 69 6f 6e 2e 64 69 72 65 63 74 6f 72 79 20 3d  tion.directory =
116f0 20 74 65 78 74 3b 0d 0a 0d 0a 20 20 20 20 20 20   text;....      
11700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11710 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
11720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11730 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 2a        // NOTE: *
11740 53 50 45 43 49 41 4c 2a 20 4d 75 73 74 20 72 65  SPECIAL* Must re
11750 66 72 65 73 68 20 74 68 65 20 66 69 6c 65 20 6e  fresh the file n
11760 61 6d 65 73 0d 0a 20 20 20 20 20 20 20 20 20 20  ames..          
11770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11780 20 20 2f 2f 20 20 20 20 20 20 20 68 65 72 65 20    //       here 
11790 62 65 63 61 75 73 65 20 74 68 65 20 75 6e 64 65  because the unde
117a0 72 6c 79 69 6e 67 20 64 69 72 65 63 74 6f 72 79  rlying directory
117b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
117c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
117d0 20 20 20 20 20 20 20 68 61 73 20 63 68 61 6e 67         has chang
117e0 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ed...           
117f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11800 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
11810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11820 20 73 74 72 69 6e 67 20 63 6f 72 65 46 69 6c 65   string coreFile
11830 4e 61 6d 65 20 3d 20 63 6f 6e 66 69 67 75 72 61  Name = configura
11840 74 69 6f 6e 2e 63 6f 72 65 46 69 6c 65 4e 61 6d  tion.coreFileNam
11850 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
11860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11870 20 20 69 66 20 28 21 53 74 72 69 6e 67 2e 49 73    if (!String.Is
11880 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 63 6f 72 65  NullOrEmpty(core
11890 46 69 6c 65 4e 61 6d 65 29 29 0d 0a 20 20 20 20  FileName))..    
118a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
118b0 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 72 65              core
118c0 46 69 6c 65 4e 61 6d 65 20 3d 20 50 61 74 68 2e  FileName = Path.
118d0 47 65 74 46 69 6c 65 4e 61 6d 65 28 63 6f 72 65  GetFileName(core
118e0 46 69 6c 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20  FileName);....  
118f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11900 20 20 20 20 20 20 20 20 20 20 69 66 20 28 53 74            if (St
11910 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70  ring.IsNullOrEmp
11920 74 79 28 63 6f 72 65 46 69 6c 65 4e 61 6d 65 29  ty(coreFileName)
11930 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
11940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11950 20 20 20 63 6f 72 65 46 69 6c 65 4e 61 6d 65 20     coreFileName 
11960 3d 20 49 6e 73 74 61 6c 6c 65 72 2e 43 6f 72 65  = Installer.Core
11970 46 69 6c 65 4e 61 6d 65 3b 0d 0a 0d 0a 20 20 20  FileName;....   
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 20 63 6f 6e 66 69 67 75           configu
119a0 72 61 74 69 6f 6e 2e 63 6f 72 65 46 69 6c 65 4e  ration.coreFileN
119b0 61 6d 65 20 3d 20 50 61 74 68 2e 43 6f 6d 62 69  ame = Path.Combi
119c0 6e 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ne(..           
119d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
119e0 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69       configurati
119f0 6f 6e 2e 64 69 72 65 63 74 6f 72 79 2c 20 63 6f  on.directory, co
11a00 72 65 46 69 6c 65 4e 61 6d 65 29 3b 0d 0a 0d 0a  reFileName);....
11a10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11a20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
11a30 6e 67 20 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 20  ng linqFileName 
11a40 3d 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e  = configuration.
11a50 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 3b 0d 0a 0d  linqFileName;...
11a60 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
11a70 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
11a80 28 21 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f  (!String.IsNullO
11a90 72 45 6d 70 74 79 28 6c 69 6e 71 46 69 6c 65 4e  rEmpty(linqFileN
11aa0 61 6d 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ame))..         
11ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11ac0 20 20 20 20 20 20 20 6c 69 6e 71 46 69 6c 65 4e         linqFileN
11ad0 61 6d 65 20 3d 20 50 61 74 68 2e 47 65 74 46 69  ame = Path.GetFi
11ae0 6c 65 4e 61 6d 65 28 6c 69 6e 71 46 69 6c 65 4e  leName(linqFileN
11af0 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ame);....       
11b00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11b10 20 20 20 20 20 69 66 20 28 53 74 72 69 6e 67 2e       if (String.
11b20 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 6c 69  IsNullOrEmpty(li
11b30 6e 71 46 69 6c 65 4e 61 6d 65 29 29 0d 0a 20 20  nqFileName))..  
11b40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11b50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6c 69                li
11b60 6e 71 46 69 6c 65 4e 61 6d 65 20 3d 20 49 6e 73  nqFileName = Ins
11b70 74 61 6c 6c 65 72 2e 4c 69 6e 71 46 69 6c 65 4e  taller.LinqFileN
11b80 61 6d 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ame;....        
11b90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11ba0 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f      configuratio
11bb0 6e 2e 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 20 3d  n.linqFileName =
11bc0 20 50 61 74 68 2e 43 6f 6d 62 69 6e 65 28 0d 0a   Path.Combine(..
11bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11be0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11bf0 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 64 69  configuration.di
11c00 72 65 63 74 6f 72 79 2c 20 6c 69 6e 71 46 69 6c  rectory, linqFil
11c10 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20  eName);....     
11c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11c30 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 64 65         string de
11c40 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 20 3d  signerFileName =
11c50 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 64   configuration.d
11c60 65 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 3b  esignerFileName;
11c70 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
11c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11c90 69 66 20 28 21 53 74 72 69 6e 67 2e 49 73 4e 75  if (!String.IsNu
11ca0 6c 6c 4f 72 45 6d 70 74 79 28 64 65 73 69 67 6e  llOrEmpty(design
11cb0 65 72 46 69 6c 65 4e 61 6d 65 29 29 0d 0a 20 20  erFileName))..  
11cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65                de
11ce0 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 20 3d  signerFileName =
11cf0 20 50 61 74 68 2e 47 65 74 46 69 6c 65 4e 61 6d   Path.GetFileNam
11d00 65 28 64 65 73 69 67 6e 65 72 46 69 6c 65 4e 61  e(designerFileNa
11d10 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  me);....        
11d20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11d30 20 20 20 20 69 66 20 28 53 74 72 69 6e 67 2e 49      if (String.I
11d40 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 64 65 73  sNullOrEmpty(des
11d50 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 29 29 0d  ignerFileName)).
11d60 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
11d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11d80 20 64 65 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d   designerFileNam
11d90 65 20 3d 20 49 6e 73 74 61 6c 6c 65 72 2e 44 65  e = Installer.De
11da0 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 3b 0d  signerFileName;.
11db0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
11dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
11dd0 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 64 65 73  onfiguration.des
11de0 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 20 3d 20  ignerFileName = 
11df0 50 61 74 68 2e 43 6f 6d 62 69 6e 65 28 0d 0a 20  Path.Combine(.. 
11e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
11e20 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 64 69 72  onfiguration.dir
11e30 65 63 74 6f 72 79 2c 20 64 65 73 69 67 6e 65 72  ectory, designer
11e40 46 69 6c 65 4e 61 6d 65 29 3b 0d 0a 20 20 20 20  FileName);..    
11e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11e60 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
11e70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
11e80 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74  lse if (MatchOpt
11e90 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 69 6e 73  ion(newArg, "ins
11ea0 74 61 6c 6c 22 29 29 0d 0a 20 20 20 20 20 20 20  tall"))..       
11eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11ec0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
11ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11ee0 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d 20 50 61  bool? value = Pa
11ef0 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65 78 74 29  rseBoolean(text)
11f00 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
11f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11f20 20 69 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75   if (value == nu
11f30 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
11f40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11f50 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
11f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11f70 20 20 20 20 65 72 72 6f 72 20 3d 20 54 72 61 63      error = Trac
11f80 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61  eOps.DebugAndTra
11f90 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ce(..           
11fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11fb0 20 20 20 20 20 20 20 20 20 54 72 61 63 65 50 72           TracePr
11fc0 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64  iority.Lowest, d
11fd0 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20  ebugCallback,.. 
11fe0 20 20 20 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 74 72 61 63 65 43 61 6c 6c 62 61 63 6b     traceCallback
12010 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  , String.Format(
12020 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
12030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12040 20 20 20 20 20 20 22 49 6e 76 61 6c 69 64 20 7b        "Invalid {
12050 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65  0} boolean value
12060 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20  : {1}",..       
12070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12080 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72               For
12090 44 69 73 70 6c 61 79 28 61 72 67 29 2c 20 46 6f  Display(arg), Fo
120a0 72 44 69 73 70 6c 61 79 28 74 65 78 74 29 29 2c  rDisplay(text)),
120b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
120c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
120d0 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67        traceCateg
120e0 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
120f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12100 20 20 20 20 20 20 20 20 20 69 66 20 28 73 74 72           if (str
12110 69 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ict)..          
12120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12130 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
12140 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20   false;....     
12150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12160 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69             conti
12170 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  nue;..          
12180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12190 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
121a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
121b0 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e     configuration
121c0 2e 69 6e 73 74 61 6c 6c 20 3d 20 28 62 6f 6f 6c  .install = (bool
121d0 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20  )value;..       
121e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
121f0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
12200 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65              else
12210 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e   if (MatchOption
12220 28 6e 65 77 41 72 67 2c 20 22 69 6e 73 74 61 6c  (newArg, "instal
12230 6c 46 6c 61 67 73 22 29 29 0d 0a 20 20 20 20 20  lFlags"))..     
12240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12250 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
12260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12270 20 20 6f 62 6a 65 63 74 20 76 61 6c 75 65 20 3d    object value =
12280 20 50 61 72 73 65 45 6e 75 6d 28 0d 0a 20 20 20   ParseEnum(..   
12290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
122a0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 79 70               typ
122b0 65 6f 66 28 49 6e 73 74 61 6c 6c 46 6c 61 67 73  eof(InstallFlags
122c0 29 2c 20 74 65 78 74 2c 20 74 72 75 65 29 3b 0d  ), text, true);.
122d0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
122e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
122f0 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c  f (value == null
12300 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
12310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
12320 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
12330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12340 20 20 65 72 72 6f 72 20 3d 20 54 72 61 63 65 4f    error = TraceO
12350 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65  ps.DebugAndTrace
12360 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
12370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12380 20 20 20 20 20 20 20 54 72 61 63 65 50 72 69 6f         TracePrio
12390 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62  rity.Lowest, deb
123a0 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20  ugCallback,..   
123b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
123c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
123d0 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20   traceCallback, 
123e0 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
123f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12410 20 20 20 20 22 49 6e 76 61 6c 69 64 20 69 6e 73      "Invalid ins
12420 74 61 6c 6c 20 66 6c 61 67 73 20 76 61 6c 75 65  tall flags value
12430 3a 20 7b 30 7d 22 2c 0d 0a 20 20 20 20 20 20 20  : {0}",..       
12440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12450 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72               For
12460 44 69 73 70 6c 61 79 28 74 65 78 74 29 29 2c 20  Display(text)), 
12470 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
12480 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
12490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
124a0 20 20 20 69 66 20 28 73 74 72 69 63 74 29 0d 0a     if (strict)..
124b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
124c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
124d0 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
124e0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
124f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12500 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a       continue;..
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 7d 0d 0a 0d              }...
12530 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
12540 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
12550 66 69 67 75 72 61 74 69 6f 6e 2e 69 6e 73 74 61  figuration.insta
12560 6c 6c 46 6c 61 67 73 20 3d 20 28 49 6e 73 74 61  llFlags = (Insta
12570 6c 6c 46 6c 61 67 73 29 76 61 6c 75 65 3b 0d 0a  llFlags)value;..
12580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12590 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
125a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
125b0 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63     else if (Matc
125c0 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20  hOption(newArg, 
125d0 22 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 22 29 29  "linqFileName"))
125e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
125f0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
12600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12610 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75           configu
12620 72 61 74 69 6f 6e 2e 6c 69 6e 71 46 69 6c 65 4e  ration.linqFileN
12630 61 6d 65 20 3d 20 74 65 78 74 3b 0d 0a 20 20 20  ame = text;..   
12640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12650 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
12660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12670 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70  else if (MatchOp
12680 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 6c 6f  tion(newArg, "lo
12690 67 46 69 6c 65 4e 61 6d 65 22 29 29 0d 0a 20 20  gFileName"))..  
126a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
126b0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
126c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
126d0 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69       configurati
126e0 6f 6e 2e 6c 6f 67 46 69 6c 65 4e 61 6d 65 20 3d  on.logFileName =
126f0 20 74 65 78 74 3b 0d 0a 20 20 20 20 20 20 20 20   text;..        
12700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12710 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
12720 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20             else 
12730 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28  if (MatchOption(
12740 6e 65 77 41 72 67 2c 20 22 6e 6f 43 6f 6d 70 61  newArg, "noCompa
12750 63 74 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ct"))..         
12760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
12770 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
12780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f                bo
12790 6f 6c 3f 20 76 61 6c 75 65 20 3d 20 50 61 72 73  ol? value = Pars
127a0 65 42 6f 6f 6c 65 61 6e 28 74 65 78 74 29 3b 0d  eBoolean(text);.
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 69                 i
127d0 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c  f (value == null
127e0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
127f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
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 20 20 20 20 20 20                  
12820 20 20 65 72 72 6f 72 20 3d 20 54 72 61 63 65 4f    error = TraceO
12830 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65  ps.DebugAndTrace
12840 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
12850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12860 20 20 20 20 20 20 20 54 72 61 63 65 50 72 69 6f         TracePrio
12870 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62  rity.Lowest, deb
12880 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20  ugCallback,..   
12890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
128a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
128b0 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20   traceCallback, 
128c0 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
128d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
128e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
128f0 20 20 20 20 22 49 6e 76 61 6c 69 64 20 7b 30 7d      "Invalid {0}
12900 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 3a 20   boolean value: 
12910 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  {1}",..         
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 20 20 20 46 6f 72 44 69             ForDi
12940 73 70 6c 61 79 28 61 72 67 29 2c 20 46 6f 72 44  splay(arg), ForD
12950 69 73 70 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a  isplay(text)),..
12960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12980 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72      traceCategor
12990 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
129a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
129b0 20 20 20 20 20 20 20 69 66 20 28 73 74 72 69 63         if (stric
129c0 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t)..            
129d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
129e0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
129f0 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  alse;....       
12a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12a10 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75           continu
12a20 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
12a30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12a40 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
12a50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12a60 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e   configuration.n
12a70 6f 43 6f 6d 70 61 63 74 20 3d 20 28 62 6f 6f 6c  oCompact = (bool
12a80 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20  )value;..       
12a90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12aa0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
12ab0 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65              else
12ac0 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e   if (MatchOption
12ad0 28 6e 65 77 41 72 67 2c 20 22 6e 6f 43 6f 6e 73  (newArg, "noCons
12ae0 6f 6c 65 22 29 29 0d 0a 20 20 20 20 20 20 20 20  ole"))..        
12af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12b00 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
12b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62                 b
12b20 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d 20 50 61 72  ool? value = Par
12b30 73 65 42 6f 6f 6c 65 61 6e 28 74 65 78 74 29 3b  seBoolean(text);
12b40 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
12b50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12b60 69 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c  if (value == nul
12b70 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
12b80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12b90 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
12ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12bb0 20 20 20 65 72 72 6f 72 20 3d 20 54 72 61 63 65     error = Trace
12bc0 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63  Ops.DebugAndTrac
12bd0 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
12be0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12bf0 20 20 20 20 20 20 20 20 54 72 61 63 65 50 72 69          TracePri
12c00 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65  ority.Lowest, de
12c10 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20  bugCallback,..  
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 20 20 20 20 20 20 20                  
12c40 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c    traceCallback,
12c50 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d   String.Format(.
12c60 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
12c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12c80 20 20 20 20 20 22 49 6e 76 61 6c 69 64 20 7b 30       "Invalid {0
12c90 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 3a  } boolean value:
12ca0 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20   {1}",..        
12cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12cc0 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44              ForD
12cd0 69 73 70 6c 61 79 28 61 72 67 29 2c 20 46 6f 72  isplay(arg), For
12ce0 44 69 73 70 6c 61 79 28 74 65 78 74 29 29 2c 0d  Display(text)),.
12cf0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
12d00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12d10 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f       traceCatego
12d20 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
12d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12d40 20 20 20 20 20 20 20 20 69 66 20 28 73 74 72 69          if (stri
12d50 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ct)..           
12d60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12d70 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
12d80 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  false;....      
12d90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12da0 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e            contin
12db0 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
12dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12dd0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
12de0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12df0 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e    configuration.
12e00 6e 6f 43 6f 6e 73 6f 6c 65 20 3d 20 28 62 6f 6f  noConsole = (boo
12e10 6c 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20  l)value;..      
12e20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12e30 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
12e40 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73               els
12e50 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f  e if (MatchOptio
12e60 6e 28 6e 65 77 41 72 67 2c 20 22 6e 6f 44 65 73  n(newArg, "noDes
12e70 6b 74 6f 70 22 29 29 0d 0a 20 20 20 20 20 20 20  ktop"))..       
12e80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12e90 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
12ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12eb0 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d 20 50 61  bool? value = Pa
12ec0 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65 78 74 29  rseBoolean(text)
12ed0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
12ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12ef0 20 69 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75   if (value == nu
12f00 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
12f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12f20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
12f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12f40 20 20 20 20 65 72 72 6f 72 20 3d 20 54 72 61 63      error = Trac
12f50 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61  eOps.DebugAndTra
12f60 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ce(..           
12f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12f80 20 20 20 20 20 20 20 20 20 54 72 61 63 65 50 72           TracePr
12f90 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64  iority.Lowest, d
12fa0 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20  ebugCallback,.. 
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 20 20 20 20 20 20                  
12fd0 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b     traceCallback
12fe0 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  , String.Format(
12ff0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
13000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13010 20 20 20 20 20 20 22 49 6e 76 61 6c 69 64 20 7b        "Invalid {
13020 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65  0} boolean value
13030 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20  : {1}",..       
13040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13050 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72               For
13060 44 69 73 70 6c 61 79 28 61 72 67 29 2c 20 46 6f  Display(arg), Fo
13070 72 44 69 73 70 6c 61 79 28 74 65 78 74 29 29 2c  rDisplay(text)),
13080 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
13090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
130a0 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67        traceCateg
130b0 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
130c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
130d0 20 20 20 20 20 20 20 20 20 69 66 20 28 73 74 72           if (str
130e0 69 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ict)..          
130f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13100 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
13110 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20   false;....     
13120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13130 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69             conti
13140 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  nue;..          
13150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13160 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
13170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13180 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e     configuration
13190 2e 6e 6f 44 65 73 6b 74 6f 70 20 3d 20 28 62 6f  .noDesktop = (bo
131a0 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20  ol)value;..     
131b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
131c0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
131d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c                el
131e0 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69  se if (MatchOpti
131f0 6f 6e 28 6e 65 77 41 72 67 2c 20 22 6e 6f 4c 6f  on(newArg, "noLo
13200 67 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  g"))..          
13210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
13220 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
13230 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f               boo
13240 6c 3f 20 76 61 6c 75 65 20 3d 20 50 61 72 73 65  l? value = Parse
13250 42 6f 6f 6c 65 61 6e 28 74 65 78 74 29 3b 0d 0a  Boolean(text);..
13260 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
13270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
13280 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29   (value == null)
13290 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
132a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
132b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
132c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
132d0 20 65 72 72 6f 72 20 3d 20 54 72 61 63 65 4f 70   error = TraceOp
132e0 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28  s.DebugAndTrace(
132f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
13300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13310 20 20 20 20 20 20 54 72 61 63 65 50 72 69 6f 72        TracePrior
13320 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75  ity.Lowest, debu
13330 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20  gCallback,..    
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 20 20 20 20 20                  
13360 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53  traceCallback, S
13370 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
13380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
133a0 20 20 20 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20     "Invalid {0} 
133b0 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 3a 20 7b  boolean value: {
133c0 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  1}",..          
133d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
133e0 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73            ForDis
133f0 70 6c 61 79 28 61 72 67 29 2c 20 46 6f 72 44 69  play(arg), ForDi
13400 73 70 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a 20  splay(text)),.. 
13410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13430 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
13440 29 3b 0d 0a 0d 0a 20 20 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 20 20 20 20 20 20 69 66 20 28 73 74 72 69 63 74        if (strict
13470 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
13480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13490 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
134a0 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  lse;....        
134b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
134c0 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65          continue
134d0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
134e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
134f0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
13500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13510 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f  configuration.no
13520 4c 6f 67 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75  Log = (bool)valu
13530 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
13540 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
13550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13560 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28         else if (
13570 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41  MatchOption(newA
13580 72 67 2c 20 22 6e 6f 4e 65 74 46 78 32 30 22 29  rg, "noNetFx20")
13590 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
135a0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
135b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
135c0 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 3f 20            bool? 
135d0 76 61 6c 75 65 20 3d 20 50 61 72 73 65 42 6f 6f  value = ParseBoo
135e0 6c 65 61 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a 20  lean(text);.... 
135f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13600 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76             if (v
13610 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  alue == null).. 
13620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13630 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
13640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72                er
13660 72 6f 72 20 3d 20 54 72 61 63 65 4f 70 73 2e 44  ror = TraceOps.D
13670 65 62 75 67 41 6e 64 54 72 61 63 65 28 0d 0a 20  ebugAndTrace(.. 
13680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
136a0 20 20 20 54 72 61 63 65 50 72 69 6f 72 69 74 79     TracePriority
136b0 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75 67 43 61  .Lowest, debugCa
136c0 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20  llback,..       
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 20 20 20 20 20 74 72 61               tra
136f0 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69  ceCallback, Stri
13700 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ng.Format(..    
13710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13730 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20 62 6f 6f  "Invalid {0} boo
13740 6c 65 61 6e 20 76 61 6c 75 65 3a 20 7b 31 7d 22  lean value: {1}"
13750 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
13760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13770 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61         ForDispla
13780 79 28 61 72 67 29 2c 20 46 6f 72 44 69 73 70 6c  y(arg), ForDispl
13790 61 79 28 74 65 78 74 29 29 2c 0d 0a 20 20 20 20  ay(text)),..    
137a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
137b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
137c0 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
137d0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
137e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
137f0 20 20 20 69 66 20 28 73 74 72 69 63 74 29 0d 0a     if (strict)..
13800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13820 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
13830 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
13840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13850 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a       continue;..
13860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13870 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
13880 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
13890 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
138a0 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 4e 65 74  figuration.noNet
138b0 46 78 32 30 20 3d 20 28 62 6f 6f 6c 29 76 61 6c  Fx20 = (bool)val
138c0 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
138d0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
138e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
138f0 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20          else if 
13900 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77  (MatchOption(new
13910 41 72 67 2c 20 22 6e 6f 4e 65 74 46 78 34 30 22  Arg, "noNetFx40"
13920 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
13930 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
13940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13950 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 3f             bool?
13960 20 76 61 6c 75 65 20 3d 20 50 61 72 73 65 42 6f   value = ParseBo
13970 6f 6c 65 61 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a  olean(text);....
13980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13990 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
139a0 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  value == null)..
139b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
139c0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
139d0 20 20 20 20 20 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 65                 e
139f0 72 72 6f 72 20 3d 20 54 72 61 63 65 4f 70 73 2e  rror = TraceOps.
13a00 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 0d 0a  DebugAndTrace(..
13a10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13a20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13a30 20 20 20 20 54 72 61 63 65 50 72 69 6f 72 69 74      TracePriorit
13a40 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75 67 43  y.Lowest, debugC
13a50 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20  allback,..      
13a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13a70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
13a80 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72  aceCallback, Str
13a90 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
13aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13ac0 20 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20 62 6f   "Invalid {0} bo
13ad0 6f 6c 65 61 6e 20 76 61 6c 75 65 3a 20 7b 31 7d  olean value: {1}
13ae0 22 2c 0d 0a 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 20 20                  
13b00 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c          ForDispl
13b10 61 79 28 61 72 67 29 2c 20 46 6f 72 44 69 73 70  ay(arg), ForDisp
13b20 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a 20 20 20  lay(text)),..   
13b30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13b40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13b50 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
13b60 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
13b70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13b80 20 20 20 20 69 66 20 28 73 74 72 69 63 74 29 0d      if (strict).
13b90 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
13ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13bb0 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
13bc0 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
13bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13be0 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d        continue;.
13bf0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
13c00 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
13c10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
13c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
13c30 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 4e 65  nfiguration.noNe
13c40 74 46 78 34 30 20 3d 20 28 62 6f 6f 6c 29 76 61  tFx40 = (bool)va
13c50 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lue;..          
13c60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
13c70 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
13c80 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66           else if
13c90 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65   (MatchOption(ne
13ca0 77 41 72 67 2c 20 22 6e 6f 52 75 6e 74 69 6d 65  wArg, "noRuntime
13cb0 56 65 72 73 69 6f 6e 22 29 29 0d 0a 20 20 20 20  Version"))..    
13cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13cd0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
13ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13cf0 20 20 20 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d     bool? value =
13d00 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65   ParseBoolean(te
13d10 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  xt);....        
13d20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13d30 20 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d 3d      if (value ==
13d40 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
13d50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13d60 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
13d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13d80 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 54         error = T
13d90 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64  raceOps.DebugAnd
13da0 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20  Trace(..        
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 54 72 61 63              Trac
13dd0 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74  ePriority.Lowest
13de0 2c 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c  , debugCallback,
13df0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
13e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13e10 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62        traceCallb
13e20 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d  ack, String.Form
13e30 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
13e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13e50 20 20 20 20 20 20 20 20 20 22 49 6e 76 61 6c 69           "Invali
13e60 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61  d {0} boolean va
13e70 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20  lue: {1}",..    
13e80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13ea0 46 6f 72 44 69 73 70 6c 61 79 28 61 72 67 29 2c  ForDisplay(arg),
13eb0 20 46 6f 72 44 69 73 70 6c 61 79 28 74 65 78 74   ForDisplay(text
13ec0 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  )),..           
13ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13ee0 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
13ef0 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
13f00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13f10 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
13f20 73 74 72 69 63 74 29 0d 0a 20 20 20 20 20 20 20  strict)..       
13f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13f40 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
13f50 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20  urn false;....  
13f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
13f80 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20  ntinue;..       
13f90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13fa0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
13fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13fc0 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74        configurat
13fd0 69 6f 6e 2e 6e 6f 52 75 6e 74 69 6d 65 56 65 72  ion.noRuntimeVer
13fe0 73 69 6f 6e 20 3d 20 28 62 6f 6f 6c 29 76 61 6c  sion = (bool)val
13ff0 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
14000 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
14010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14020 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20          else if 
14030 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77  (MatchOption(new
14040 41 72 67 2c 20 22 6e 6f 54 72 61 63 65 22 29 29  Arg, "noTrace"))
14050 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
14060 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
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 62 6f 6f 6c 3f 20 76           bool? v
14090 61 6c 75 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c  alue = ParseBool
140a0 65 61 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20  ean(text);....  
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 69 66 20 28 76 61            if (va
140d0 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  lue == null)..  
140e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
140f0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
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 20 20 65 72 72               err
14120 6f 72 20 3d 20 54 72 61 63 65 4f 70 73 2e 44 65  or = TraceOps.De
14130 62 75 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 20  bugAndTrace(..  
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 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e    TracePriority.
14170 4c 6f 77 65 73 74 2c 20 64 65 62 75 67 43 61 6c  Lowest, debugCal
14180 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20  lback,..        
14190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
141a0 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
141b0 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e  eCallback, Strin
141c0 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
141d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
141e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
141f0 49 6e 76 61 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c  Invalid {0} bool
14200 65 61 6e 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c  ean value: {1}",
14210 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
14220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14230 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79        ForDisplay
14240 28 61 72 67 29 2c 20 46 6f 72 44 69 73 70 6c 61  (arg), ForDispla
14250 79 28 74 65 78 74 29 29 2c 0d 0a 20 20 20 20 20  y(text)),..     
14260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
14280 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
14290 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
142a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
142b0 20 20 69 66 20 28 73 74 72 69 63 74 29 0d 0a 20    if (strict).. 
142c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
142d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
142e0 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
142f0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
14300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14310 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20      continue;.. 
14320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14330 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
14340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14350 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66              conf
14360 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 54 72 61 63  iguration.noTrac
14370 65 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 65 3b  e = (bool)value;
14380 0d 0a 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 7d 0d 0a 20 20 20            }..   
143a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
143b0 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61       else if (Ma
143c0 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67  tchOption(newArg
143d0 2c 20 22 6e 6f 56 73 32 30 30 38 22 29 29 0d 0a  , "noVs2008"))..
143e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
143f0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
14400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14410 20 20 20 20 20 20 20 62 6f 6f 6c 3f 20 76 61 6c         bool? val
14420 75 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c 65 61  ue = ParseBoolea
14430 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20  n(text);....    
14440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14450 20 20 20 20 20 20 20 20 69 66 20 28 76 61 6c 75          if (valu
14460 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  e == null)..    
14470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14480 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
14490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
144a0 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72             error
144b0 20 3d 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75   = TraceOps.Debu
144c0 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 20 20 20  gAndTrace(..    
144d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
144e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
144f0 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f  TracePriority.Lo
14500 77 65 73 74 2c 20 64 65 62 75 67 43 61 6c 6c 62  west, debugCallb
14510 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ack,..          
14520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14530 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
14540 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e  allback, String.
14550 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
14560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14570 20 20 20 20 20 20 20 20 20 20 20 20 20 22 49 6e               "In
14580 76 61 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c 65 61  valid {0} boolea
14590 6e 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a  n value: {1}",..
145a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
145b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
145c0 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 61      ForDisplay(a
145d0 72 67 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28  rg), ForDisplay(
145e0 74 65 78 74 29 29 2c 0d 0a 20 20 20 20 20 20 20  text)),..       
145f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14600 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
14610 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
14620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14640 69 66 20 28 73 74 72 69 63 74 29 0d 0a 20 20 20  if (strict)..   
14650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14670 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
14680 0d 0a 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 20 20 20 20                  
146a0 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20    continue;..   
146b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
146c0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
146d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
146e0 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67            config
146f0 75 72 61 74 69 6f 6e 2e 6e 6f 56 73 32 30 30 38  uration.noVs2008
14700 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d   = (bool)value;.
14710 0a 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 7d 0d 0a 20 20 20 20           }..    
14730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14740 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74      else if (Mat
14750 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c  chOption(newArg,
14760 20 22 6e 6f 56 73 32 30 31 30 22 29 29 0d 0a 20   "noVs2010")).. 
14770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14780 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
14790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
147a0 20 20 20 20 20 20 62 6f 6f 6c 3f 20 76 61 6c 75        bool? valu
147b0 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e  e = ParseBoolean
147c0 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20  (text);....     
147d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
147e0 20 20 20 20 20 20 20 69 66 20 28 76 61 6c 75 65         if (value
147f0 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
14800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14810 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
14820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14830 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20            error 
14840 3d 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67  = TraceOps.Debug
14850 41 6e 64 54 72 61 63 65 28 0d 0a 20 20 20 20 20  AndTrace(..     
14860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
14880 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77  racePriority.Low
14890 65 73 74 2c 20 64 65 62 75 67 43 61 6c 6c 62 61  est, debugCallba
148a0 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ck,..           
148b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
148c0 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
148d0 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46  llback, String.F
148e0 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
148f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14900 20 20 20 20 20 20 20 20 20 20 20 20 22 49 6e 76              "Inv
14910 61 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e  alid {0} boolean
14920 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20   value: {1}",.. 
14930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14950 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 61 72     ForDisplay(ar
14960 67 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 74  g), ForDisplay(t
14970 65 78 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20  ext)),..        
14980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14990 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
149a0 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
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 20 20 20 20 20 20 20 69                 i
149d0 66 20 28 73 74 72 69 63 74 29 0d 0a 20 20 20 20  f (strict)..    
149e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
149f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14a00 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d  return false;...
14a10 0a 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 20 20 20 20 20 20                  
14a30 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20   continue;..    
14a40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14a50 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
14a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14a70 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75           configu
14a80 72 61 74 69 6f 6e 2e 6e 6f 56 73 32 30 31 30 20  ration.noVs2010 
14a90 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a  = (bool)value;..
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 7d 0d 0a 20 20 20 20 20          }..     
14ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14ad0 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63     else if (Matc
14ae0 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20  hOption(newArg, 
14af0 22 73 74 72 69 63 74 22 29 29 0d 0a 20 20 20 20  "strict"))..    
14b00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14b10 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
14b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14b30 20 20 20 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d     bool? value =
14b40 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65   ParseBoolean(te
14b50 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  xt);....        
14b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14b70 20 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d 3d      if (value ==
14b80 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
14b90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14ba0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
14bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14bc0 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 54         error = T
14bd0 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64  raceOps.DebugAnd
14be0 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20  Trace(..        
14bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14c00 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
14c10 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74  ePriority.Lowest
14c20 2c 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c  , debugCallback,
14c30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
14c40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14c50 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62        traceCallb
14c60 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d  ack, String.Form
14c70 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
14c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14c90 20 20 20 20 20 20 20 20 20 22 49 6e 76 61 6c 69           "Invali
14ca0 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61  d {0} boolean va
14cb0 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20  lue: {1}",..    
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 20 20 20 20                  
14ce0 46 6f 72 44 69 73 70 6c 61 79 28 61 72 67 29 2c  ForDisplay(arg),
14cf0 20 46 6f 72 44 69 73 70 6c 61 79 28 74 65 78 74   ForDisplay(text
14d00 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  )),..           
14d10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14d20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
14d30 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
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 20 20 20 20 20 69 66 20 28              if (
14d60 73 74 72 69 63 74 29 0d 0a 20 20 20 20 20 20 20  strict)..       
14d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14d80 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
14d90 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20  urn false;....  
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 20 20 20 20 20 63 6f                co
14dc0 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20  ntinue;..       
14dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14de0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
14df0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14e00 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
14e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14e20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 41        // NOTE: A
14e30 6c 6c 6f 77 20 74 68 65 20 63 6f 6d 6d 61 6e 64  llow the command
14e40 20 6c 69 6e 65 20 61 72 67 75 6d 65 6e 74 73 20   line arguments 
14e50 74 6f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  to..            
14e60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14e70 2f 2f 20 20 20 20 20 20 20 6f 76 65 72 72 69 64  //       overrid
14e80 65 20 74 68 65 20 22 73 74 72 69 63 74 6e 65 73  e the "strictnes
14e90 73 22 20 73 65 74 74 69 6e 67 0d 0a 20 20 20 20  s" setting..    
14ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14eb0 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
14ec0 20 70 72 6f 76 69 64 65 64 20 62 79 20 6f 75 72   provided by our
14ed0 20 63 61 6c 6c 65 72 2e 0d 0a 20 20 20 20 20 20   caller...      
14ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14ef0 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
14f00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14f10 20 20 20 20 20 20 73 74 72 69 63 74 20 3d 20 28        strict = (
14f20 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20 20 20  bool)value;..   
14f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14f40 20 20 20 20 20 7d 0d 0a 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 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70  else if (MatchOp
14f70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 74 68  tion(newArg, "th
14f80 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 22 29 29 0d  rowOnMissing")).
14f90 0a 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 7b 0d 0a 20 20 20 20           {..    
14fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14fc0 20 20 20 20 20 20 20 20 62 6f 6f 6c 3f 20 76 61          bool? va
14fd0 6c 75 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c 65  lue = ParseBoole
14fe0 61 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20 20  an(text);....   
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 69 66 20 28 76 61 6c           if (val
15010 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ue == null)..   
15020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15030 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
15040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15050 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
15060 72 20 3d 20 54 72 61 63 65 4f 70 73 2e 44 65 62  r = TraceOps.Deb
15070 75 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 20 20  ugAndTrace(..   
15080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
150a0 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c   TracePriority.L
150b0 6f 77 65 73 74 2c 20 64 65 62 75 67 43 61 6c 6c  owest, debugCall
150c0 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20  back,..         
150d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
150e0 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
150f0 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67  Callback, String
15100 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  .Format(..      
15110 20 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 20 20 20 20 20 22 49                "I
15130 6e 76 61 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c 65  nvalid {0} boole
15140 61 6e 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d  an value: {1}",.
15150 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
15160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15170 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28       ForDisplay(
15180 61 72 67 29 2c 20 46 6f 72 44 69 73 70 6c 61 79  arg), ForDisplay
15190 28 74 65 78 74 29 29 2c 0d 0a 20 20 20 20 20 20  (text)),..      
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 20 20 20 20 20 74 72                tr
151c0 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  aceCategory);...
151d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
151e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
151f0 20 69 66 20 28 73 74 72 69 63 74 29 0d 0a 20 20   if (strict)..  
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 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
15230 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
15240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15250 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20     continue;..  
15260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15270 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
15280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15290 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69             confi
152a0 67 75 72 61 74 69 6f 6e 2e 74 68 72 6f 77 4f 6e  guration.throwOn
152b0 4d 69 73 73 69 6e 67 20 3d 20 28 62 6f 6f 6c 29  Missing = (bool)
152c0 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20  value;..        
152d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
152e0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
152f0 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20             else 
15300 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28  if (MatchOption(
15310 6e 65 77 41 72 67 2c 20 22 74 72 61 63 65 46 6f  newArg, "traceFo
15320 72 6d 61 74 22 29 29 0d 0a 20 20 20 20 20 20 20  rmat"))..       
15330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15340 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
15350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15360 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 74 72  configuration.tr
15370 61 63 65 46 6f 72 6d 61 74 20 3d 20 74 65 78 74  aceFormat = text
15380 3b 0d 0a 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 54                 T
153a0 72 61 63 65 4f 70 73 2e 54 72 61 63 65 46 6f 72  raceOps.TraceFor
153b0 6d 61 74 20 3d 20 63 6f 6e 66 69 67 75 72 61 74  mat = configurat
153c0 69 6f 6e 2e 74 72 61 63 65 46 6f 72 6d 61 74 3b  ion.traceFormat;
153d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
153e0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
153f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15400 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61       else if (Ma
15410 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67  tchOption(newArg
15420 2c 20 22 74 72 61 63 65 50 72 69 6f 72 69 74 79  , "tracePriority
15430 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  "))..           
15440 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
15450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15460 20 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65              obje
15470 63 74 20 76 61 6c 75 65 20 3d 20 50 61 72 73 65  ct value = Parse
15480 45 6e 75 6d 28 0d 0a 20 20 20 20 20 20 20 20 20  Enum(..         
15490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
154a0 20 20 20 20 20 20 20 74 79 70 65 6f 66 28 54 72         typeof(Tr
154b0 61 63 65 50 72 69 6f 72 69 74 79 29 2c 20 74 65  acePriority), te
154c0 78 74 2c 20 74 72 75 65 29 3b 0d 0a 0d 0a 20 20  xt, true);....  
154d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
154e0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76 61            if (va
154f0 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  lue == null)..  
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 20 20 7b 0d 0a 20 20 20            {..   
15520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15530 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
15540 6f 72 20 3d 20 54 72 61 63 65 4f 70 73 2e 44 65  or = TraceOps.De
15550 62 75 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 20  bugAndTrace(..  
15560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15580 20 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e    TracePriority.
15590 4c 6f 77 65 73 74 2c 20 64 65 62 75 67 43 61 6c  Lowest, debugCal
155a0 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20  lback,..        
155b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
155c0 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
155d0 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e  eCallback, Strin
155e0 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
155f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
15610 49 6e 76 61 6c 69 64 20 7b 30 7d 20 76 61 6c 75  Invalid {0} valu
15620 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20  e: {1}",..      
15630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f                Fo
15650 72 44 69 73 70 6c 61 79 28 61 72 67 29 2c 20 46  rDisplay(arg), F
15660 6f 72 44 69 73 70 6c 61 79 28 74 65 78 74 29 29  orDisplay(text))
15670 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
15680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15690 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65         traceCate
156a0 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
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 69 66 20 28 73 74            if (st
156d0 72 69 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20  rict)..         
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 72 65 74 75 72             retur
15700 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20  n false;....    
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 63 6f 6e 74              cont
15730 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  inue;..         
15740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15750 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
15760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15770 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f      configuratio
15780 6e 2e 74 72 61 63 65 50 72 69 6f 72 69 74 79 20  n.tracePriority 
15790 3d 20 28 54 72 61 63 65 50 72 69 6f 72 69 74 79  = (TracePriority
157a0 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20  )value;..       
157b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
157c0 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 54 72       TraceOps.Tr
157d0 61 63 65 50 72 69 6f 72 69 74 79 20 3d 20 63 6f  acePriority = co
157e0 6e 66 69 67 75 72 61 74 69 6f 6e 2e 74 72 61 63  nfiguration.trac
157f0 65 50 72 69 6f 72 69 74 79 3b 0d 0a 20 20 20 20  ePriority;..    
15800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15810 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
15820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
15830 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74  lse if (MatchOpt
15840 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 76 65 72  ion(newArg, "ver
15850 62 6f 73 65 22 29 29 0d 0a 20 20 20 20 20 20 20  bose"))..       
15860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15870 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
15880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15890 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d 20 50 61  bool? value = Pa
158a0 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65 78 74 29  rseBoolean(text)
158b0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
158c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
158d0 20 69 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75   if (value == nu
158e0 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
158f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15900 20 7b 0d 0a 20 20 20 20 20 20 20 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 65 72 72 6f 72 20 3d 20 54 72 61 63      error = Trac
15930 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61  eOps.DebugAndTra
15940 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ce(..           
15950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15960 20 20 20 20 20 20 20 20 20 54 72 61 63 65 50 72           TracePr
15970 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64  iority.Lowest, d
15980 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20  ebugCallback,.. 
15990 20 20 20 20 20 20 20 20 20 20 20 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 74 72 61 63 65 43 61 6c 6c 62 61 63 6b     traceCallback
159c0 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  , String.Format(
159d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
159e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
159f0 20 20 20 20 20 20 22 49 6e 76 61 6c 69 64 20 7b        "Invalid {
15a00 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65  0} boolean value
15a10 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20  : {1}",..       
15a20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15a30 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72               For
15a40 44 69 73 70 6c 61 79 28 61 72 67 29 2c 20 46 6f  Display(arg), Fo
15a50 72 44 69 73 70 6c 61 79 28 74 65 78 74 29 29 2c  rDisplay(text)),
15a60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
15a70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15a80 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67        traceCateg
15a90 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
15aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15ab0 20 20 20 20 20 20 20 20 20 69 66 20 28 73 74 72           if (str
15ac0 69 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ict)..          
15ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15ae0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
15af0 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20   false;....     
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 63 6f 6e 74 69             conti
15b20 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  nue;..          
15b30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15b40 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
15b50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15b60 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e     configuration
15b70 2e 76 65 72 62 6f 73 65 20 3d 20 28 62 6f 6f 6c  .verbose = (bool
15b80 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20  )value;..       
15b90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15ba0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
15bb0 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65              else
15bc0 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e   if (MatchOption
15bd0 28 6e 65 77 41 72 67 2c 20 22 77 68 61 74 49 66  (newArg, "whatIf
15be0 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  "))..           
15bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
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 20 20 62 6f 6f 6c              bool
15c20 3f 20 76 61 6c 75 65 20 3d 20 50 61 72 73 65 42  ? value = ParseB
15c30 6f 6f 6c 65 61 6e 28 74 65 78 74 29 3b 0d 0a 0d  oolean(text);...
15c40 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
15c50 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
15c60 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d  (value == null).
15c70 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
15c80 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
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 20 20 20 20                  
15cb0 65 72 72 6f 72 20 3d 20 54 72 61 63 65 4f 70 73  error = TraceOps
15cc0 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 0d  .DebugAndTrace(.
15cd0 0a 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 20 20 20 20 20 20                  
15cf0 20 20 20 20 20 54 72 61 63 65 50 72 69 6f 72 69       TracePriori
15d00 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75 67  ty.Lowest, debug
15d10 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20  Callback,..     
15d20 20 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 20 20 20 20 20 20 74                 t
15d40 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74  raceCallback, St
15d50 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
15d60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15d80 20 20 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20 62    "Invalid {0} b
15d90 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 3a 20 7b 31  oolean value: {1
15da0 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }",..           
15db0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15dc0 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70           ForDisp
15dd0 6c 61 79 28 61 72 67 29 2c 20 46 6f 72 44 69 73  lay(arg), ForDis
15de0 70 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a 20 20  play(text)),..  
15df0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15e10 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29    traceCategory)
15e20 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
15e30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15e40 20 20 20 20 20 69 66 20 28 73 74 72 69 63 74 29       if (strict)
15e50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
15e60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15e70 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
15e80 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  se;....         
15e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15ea0 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b         continue;
15eb0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
15ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
15ed0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
15ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
15ef0 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 77 68 61  onfiguration.wha
15f00 74 49 66 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75  tIf = (bool)valu
15f10 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
15f20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
15f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15f40 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28         else if (
15f50 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41  MatchOption(newA
15f60 72 67 2c 20 22 77 6f 77 36 34 22 29 29 0d 0a 20  rg, "wow64")).. 
15f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15f80 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
15f90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15fa0 20 20 20 20 20 20 62 6f 6f 6c 3f 20 76 61 6c 75        bool? valu
15fb0 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e  e = ParseBoolean
15fc0 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20  (text);....     
15fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15fe0 20 20 20 20 20 20 20 69 66 20 28 76 61 6c 75 65         if (value
15ff0 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
16000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16010 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
16020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16030 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20            error 
16040 3d 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67  = TraceOps.Debug
16050 41 6e 64 54 72 61 63 65 28 0d 0a 20 20 20 20 20  AndTrace(..     
16060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
16080 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77  racePriority.Low
16090 65 73 74 2c 20 64 65 62 75 67 43 61 6c 6c 62 61  est, debugCallba
160a0 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ck,..           
160b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
160c0 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
160d0 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46  llback, String.F
160e0 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
160f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16100 20 20 20 20 20 20 20 20 20 20 20 20 22 49 6e 76              "Inv
16110 61 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e  alid {0} boolean
16120 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20   value: {1}",.. 
16130 20 20 20 20 20 20 20 20 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 46 6f 72 44 69 73 70 6c 61 79 28 61 72     ForDisplay(ar
16160 67 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 74  g), ForDisplay(t
16170 65 78 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20  ext)),..        
16180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16190 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
161a0 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
161b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
161c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
161d0 66 20 28 73 74 72 69 63 74 29 0d 0a 20 20 20 20  f (strict)..    
161e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
161f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16200 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d  return false;...
16210 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
16220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16230 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20   continue;..    
16240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16250 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
16260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16270 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75           configu
16280 72 61 74 69 6f 6e 2e 77 6f 77 36 34 20 3d 20 28  ration.wow64 = (
16290 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20 20 20  bool)value;..   
162a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
162b0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
162c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
162d0 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20  else..          
162e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
162f0 0a 20 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 65 72 72               err
16310 6f 72 20 3d 20 54 72 61 63 65 4f 70 73 2e 44 65  or = TraceOps.De
16320 62 75 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 20  bugAndTrace(..  
16330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
16350 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65  acePriority.Lowe
16360 73 74 2c 20 64 65 62 75 67 43 61 6c 6c 62 61 63  st, debugCallbac
16370 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  k,..            
16380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16390 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63      traceCallbac
163a0 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  k, String.Format
163b0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
163c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
163d0 20 20 20 22 55 6e 73 75 70 70 6f 72 74 65 64 20     "Unsupported 
163e0 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 20 6f 70 74  command line opt
163f0 69 6f 6e 3a 20 7b 30 7d 22 2c 0d 0a 20 20 20 20  ion: {0}",..    
16400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16410 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44              ForD
16420 69 73 70 6c 61 79 28 61 72 67 29 29 2c 20 74 72  isplay(arg)), tr
16430 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  aceCategory);...
16440 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
16450 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
16460 28 73 74 72 69 63 74 29 0d 0a 20 20 20 20 20 20  (strict)..      
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 72 65 74 75 72 6e            return
16490 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20   false;..       
164a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
164b0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
164c0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
164d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
164e0 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20   return true;.. 
164f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
16500 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
16510 20 20 63 61 74 63 68 20 28 45 78 63 65 70 74 69    catch (Excepti
16520 6f 6e 20 65 29 0d 0a 20 20 20 20 20 20 20 20 20  on e)..         
16530 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
16540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
16550 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54  aceOps.DebugAndT
16560 72 61 63 65 28 54 72 61 63 65 50 72 69 6f 72 69  race(TracePriori
16570 74 79 2e 48 69 67 68 65 73 74 2c 0d 0a 20 20 20  ty.Highest,..   
16580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16590 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61       debugCallba
165a0 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63  ck, traceCallbac
165b0 6b 2c 20 65 2c 20 74 72 61 63 65 43 61 74 65 67  k, e, traceCateg
165c0 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
165d0 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
165e0 6f 72 20 3d 20 22 46 61 69 6c 65 64 20 74 6f 20  or = "Failed to 
165f0 6d 6f 64 69 66 79 20 63 6f 6e 66 69 67 75 72 61  modify configura
16600 74 69 6f 6e 2e 22 3b 0d 0a 20 20 20 20 20 20 20  tion.";..       
16610 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
16620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
16630 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20  turn false;..   
16640 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
16650 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
16660 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16670 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16680 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16690 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
166a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 4d 65  .            [Me
166b0 74 68 6f 64 49 6d 70 6c 28 4d 65 74 68 6f 64 49  thodImpl(MethodI
166c0 6d 70 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e 6c  mplOptions.NoInl
166d0 69 6e 69 6e 67 29 5d 0d 0a 20 20 20 20 20 20 20  ining)]..       
166e0 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74       public stat
166f0 69 63 20 62 6f 6f 6c 20 50 72 6f 63 65 73 73 28  ic bool Process(
16700 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
16710 20 20 73 74 72 69 6e 67 5b 5d 20 61 72 67 73 2c    string[] args,
16720 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
16730 20 20 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20    Configuration 
16740 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2c 0d 0a  configuration,..
16750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16760 62 6f 6f 6c 20 73 74 72 69 63 74 2c 0d 0a 20 20  bool strict,..  
16770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
16780 66 20 73 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a  f string error..
16790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
167a0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
167b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
167c0 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20    try..         
167d0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
167e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
167f0 20 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20   (configuration 
16800 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
16810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
16820 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
16830 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
16840 20 22 49 6e 76 61 6c 69 64 20 63 6f 6e 66 69 67   "Invalid config
16850 75 72 61 74 69 6f 6e 2e 22 3b 0d 0a 20 20 20 20  uration.";..    
16860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16870 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
16880 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
16890 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
168a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
168b0 41 73 73 65 6d 62 6c 79 20 61 73 73 65 6d 62 6c  Assembly assembl
168c0 79 20 3d 20 63 6f 6e 66 69 67 75 72 61 74 69 6f  y = configuratio
168d0 6e 2e 61 73 73 65 6d 62 6c 79 3b 0d 0a 0d 0a 20  n.assembly;.... 
168e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
168f0 20 20 20 69 66 20 28 61 73 73 65 6d 62 6c 79 20     if (assembly 
16900 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
16910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
16920 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
16930 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
16940 20 22 49 6e 76 61 6c 69 64 20 61 73 73 65 6d 62   "Invalid assemb
16950 6c 79 2e 22 3b 0d 0a 20 20 20 20 20 20 20 20 20  ly.";..         
16960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
16970 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20  eturn false;..  
16980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16990 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
169a0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21             if (!
169b0 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f  configuration.no
169c0 54 72 61 63 65 29 0d 0a 20 20 20 20 20 20 20 20  Trace)..        
169d0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
169e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
169f0 20 20 20 20 20 20 20 69 66 20 28 21 63 6f 6e 66         if (!conf
16a00 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 4c 6f 67 20  iguration.noLog 
16a10 26 26 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  &&..            
16a20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16a30 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45  String.IsNullOrE
16a40 6d 70 74 79 28 63 6f 6e 66 69 67 75 72 61 74 69  mpty(configurati
16a50 6f 6e 2e 6c 6f 67 46 69 6c 65 4e 61 6d 65 29 29  on.logFileName))
16a60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
16a70 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
16a80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16a90 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
16aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16ab0 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45           // NOTE
16ac0 3a 20 55 73 65 20 74 68 65 20 64 65 66 61 75 6c  : Use the defaul
16ad0 74 20 6c 6f 67 20 66 69 6c 65 20 6e 61 6d 65 2e  t log file name.
16ae0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
16af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
16b00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
16b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
16b20 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6c 6f 67 46  nfiguration.logF
16b30 69 6c 65 4e 61 6d 65 20 3d 20 47 65 74 4c 6f 67  ileName = GetLog
16b40 46 69 6c 65 4e 61 6d 65 28 0d 0a 20 20 20 20 20  FileName(..     
16b50 20 20 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 22 74 72 61 63             "trac
16b70 65 22 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  e");..          
16b80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
16b90 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
16ba0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
16bb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16bc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16bd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16be0 2f 2f 0d 0a 0d 0a 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 69 66                if
16c00 20 28 21 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e   (!configuration
16c10 2e 6e 6f 43 6f 6e 73 6f 6c 65 29 0d 0a 20 20 20  .noConsole)..   
16c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16c30 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
16c40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16c50 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
16c60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16c70 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 49 6e 20      // NOTE: In 
16c80 76 65 72 62 6f 73 65 20 6d 6f 64 65 2c 20 64 65  verbose mode, de
16c90 62 75 67 20 6f 75 74 70 75 74 20 28 74 68 61 74  bug output (that
16ca0 20 6d 65 65 74 73 0d 0a 20 20 20 20 20 20 20 20   meets..        
16cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16cc0 20 20 20 20 2f 2f 20 20 20 20 20 20 20 74 68 65      //       the
16cd0 20 63 6f 6e 66 69 67 75 72 65 64 20 70 72 69 6f   configured prio
16ce0 72 69 74 79 20 63 72 69 74 65 72 69 61 29 20 77  rity criteria) w
16cf0 69 6c 6c 20 62 65 0d 0a 20 20 20 20 20 20 20 20  ill be..        
16d00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16d10 20 20 20 20 2f 2f 20 20 20 20 20 20 20 64 69 73      //       dis
16d20 70 6c 61 79 65 64 20 74 6f 20 74 68 65 20 63 6f  played to the co
16d30 6e 73 6f 6c 65 3b 20 6f 74 68 65 72 77 69 73 65  nsole; otherwise
16d40 2c 20 74 72 61 63 65 0d 0a 20 20 20 20 20 20 20  , trace..       
16d50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16d60 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 6f 75       //       ou
16d70 74 70 75 74 20 28 74 68 61 74 20 6d 65 65 74 73  tput (that meets
16d80 20 74 68 65 20 63 6f 6e 66 69 67 75 72 65 64 20   the configured 
16d90 70 72 69 6f 72 69 74 79 0d 0a 20 20 20 20 20 20  priority..      
16da0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16db0 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 63        //       c
16dc0 72 69 74 65 72 69 61 29 20 77 69 6c 6c 20 62 65  riteria) will be
16dd0 20 64 69 73 70 6c 61 79 65 64 20 74 6f 20 74 68   displayed to th
16de0 65 20 63 6f 6e 73 6f 6c 65 2e 0d 0a 20 20 20 20  e console...    
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 2f 2f 0d 0a 20 20 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 69 66 20 28 63 6f 6e 66          if (conf
16e30 69 67 75 72 61 74 69 6f 6e 2e 64 65 62 75 67 29  iguration.debug)
16e40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
16e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
16e60 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
16e70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16e80 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
16e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16ea0 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 41 64       // NOTE: Ad
16eb0 64 20 74 68 65 20 63 6f 6e 73 6f 6c 65 20 74 72  d the console tr
16ec0 61 63 65 20 6c 69 73 74 65 6e 65 72 20 74 6f 20  ace listener to 
16ed0 74 68 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  the..           
16ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16ef0 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 6c 69       //       li
16f00 73 74 20 6f 66 20 74 72 61 63 65 20 6c 69 73 74  st of trace list
16f10 65 6e 65 72 73 20 6d 61 69 6e 74 61 69 6e 65 64  eners maintained
16f20 20 62 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20   by..           
16f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16f40 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 74 68       //       th
16f50 65 20 54 72 61 63 65 4f 70 73 20 63 6c 61 73 73  e TraceOps class
16f60 20 28 69 2e 65 2e 20 6f 6e 6c 79 20 6d 65 73 73   (i.e. only mess
16f70 61 67 65 73 0d 0a 20 20 20 20 20 20 20 20 20 20  ages..          
16f80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16f90 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 74        //       t
16fa0 68 61 74 20 6d 65 65 74 20 74 68 65 20 64 65 62  hat meet the deb
16fb0 75 67 20 70 72 69 6f 72 69 74 79 20 77 69 6c 6c  ug priority will
16fc0 20 62 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20   be..           
16fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16fe0 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 73 65       //       se
16ff0 65 6e 20 6f 6e 20 74 68 65 20 63 6f 6e 73 6f 6c  en on the consol
17000 65 29 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e)...           
17010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17020 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
17030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17040 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70           TraceOp
17050 73 2e 53 65 74 75 70 44 65 62 75 67 4c 69 73 74  s.SetupDebugList
17060 65 6e 65 72 73 28 29 3b 0d 0a 20 20 20 20 20 20  eners();..      
17070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17080 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
17090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
170a0 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20       else..     
170b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
170c0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
170d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
170e0 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
170f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
17110 20 4e 4f 54 45 3a 20 41 64 64 20 74 68 65 20 63   NOTE: Add the c
17120 6f 6e 73 6f 6c 65 20 74 72 61 63 65 20 6c 69 73  onsole trace lis
17130 74 65 6e 65 72 20 74 6f 20 74 68 65 0d 0a 20 20  tener to the..  
17140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
17160 20 20 20 20 20 20 20 6c 69 73 74 20 6f 66 20 62         list of b
17170 75 69 6c 74 2d 69 6e 20 74 72 61 63 65 20 6c 69  uilt-in trace li
17180 73 74 65 6e 65 72 73 20 28 69 2e 65 2e 0d 0a 20  steners (i.e... 
17190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
171a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
171b0 2f 20 20 20 20 20 20 20 6f 6e 6c 79 20 6d 65 73  /       only mes
171c0 73 61 67 65 73 20 74 68 61 74 20 6d 65 65 74 20  sages that meet 
171d0 74 68 65 20 74 72 61 63 65 0d 0a 20 20 20 20 20  the trace..     
171e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
171f0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
17200 20 20 20 20 70 72 69 6f 72 69 74 79 20 77 69 6c      priority wil
17210 6c 20 62 65 20 73 65 65 6e 20 6f 6e 20 74 68 65  l be seen on the
17220 20 63 6f 6e 73 6f 6c 65 29 2e 0d 0a 20 20 20 20   console)...    
17230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17240 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
17250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17270 54 72 61 63 65 2e 4c 69 73 74 65 6e 65 72 73 2e  Trace.Listeners.
17280 41 64 64 28 6e 65 77 20 43 6f 6e 73 6f 6c 65 54  Add(new ConsoleT
17290 72 61 63 65 4c 69 73 74 65 6e 65 72 28 29 29 3b  raceListener());
172a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
172b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
172c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
172d0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
172e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
172f0 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
17300 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17310 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17320 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
17330 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
17340 20 20 20 20 20 20 20 20 20 69 66 20 28 21 63 6f           if (!co
17350 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 4c 6f  nfiguration.noLo
17360 67 20 26 26 0d 0a 20 20 20 20 20 20 20 20 20 20  g &&..          
17370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17380 20 20 21 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c    !String.IsNull
17390 4f 72 45 6d 70 74 79 28 63 6f 6e 66 69 67 75 72  OrEmpty(configur
173a0 61 74 69 6f 6e 2e 6c 6f 67 46 69 6c 65 4e 61 6d  ation.logFileNam
173b0 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e))..           
173c0 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
173d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
173e0 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
173f0 65 2e 4c 69 73 74 65 6e 65 72 73 2e 41 64 64 28  e.Listeners.Add(
17400 6e 65 77 20 54 65 78 74 57 72 69 74 65 72 54 72  new TextWriterTr
17410 61 63 65 4c 69 73 74 65 6e 65 72 28 0d 0a 20 20  aceListener(..  
17420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
17440 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6c 6f 67 46  nfiguration.logF
17450 69 6c 65 4e 61 6d 65 29 29 3b 0d 0a 20 20 20 20  ileName));..    
17460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17470 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
17480 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
17490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
174a0 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
174b0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e              // N
174c0 4f 54 45 3a 20 44 75 6d 70 20 74 68 65 20 63 6f  OTE: Dump the co
174d0 6e 66 69 67 75 72 61 74 69 6f 6e 20 6e 6f 77 20  nfiguration now 
174e0 69 6e 20 63 61 73 65 20 77 65 20 6e 65 65 64 20  in case we need 
174f0 74 6f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  to..            
17500 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
17510 20 74 72 6f 75 62 6c 65 73 68 6f 6f 74 20 61 6e   troubleshoot an
17520 79 20 69 73 73 75 65 73 2e 0d 0a 20 20 20 20 20  y issues...     
17530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
17540 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
17550 20 20 20 20 20 20 20 69 66 20 28 63 6f 6e 66 69         if (confi
17560 67 75 72 61 74 69 6f 6e 2e 64 65 62 75 67 50 72  guration.debugPr
17570 69 6f 72 69 74 79 20 3c 3d 20 54 72 61 63 65 50  iority <= TraceP
17580 72 69 6f 72 69 74 79 2e 4d 65 64 69 75 6d 29 0d  riority.Medium).
17590 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
175a0 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75           configu
175b0 72 61 74 69 6f 6e 2e 44 75 6d 70 28 64 65 62 75  ration.Dump(debu
175c0 67 43 61 6c 6c 62 61 63 6b 29 3b 0d 0a 0d 0a 20  gCallback);.... 
175d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
175e0 20 20 20 69 66 20 28 63 6f 6e 66 69 67 75 72 61     if (configura
175f0 74 69 6f 6e 2e 74 72 61 63 65 50 72 69 6f 72 69  tion.tracePriori
17600 74 79 20 3c 3d 20 54 72 61 63 65 50 72 69 6f 72  ty <= TracePrior
17610 69 74 79 2e 4d 65 64 69 75 6d 29 0d 0a 20 20 20  ity.Medium)..   
17620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17630 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69       configurati
17640 6f 6e 2e 44 75 6d 70 28 74 72 61 63 65 43 61 6c  on.Dump(traceCal
17650 6c 62 61 63 6b 29 3b 0d 0a 0d 0a 20 20 20 20 20  lback);....     
17660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
17670 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
17680 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20         // NOTE: 
17690 53 68 6f 77 20 77 68 65 72 65 20 77 65 20 61 72  Show where we ar
176a0 65 20 72 75 6e 6e 69 6e 67 20 66 72 6f 6d 20 61  e running from a
176b0 6e 64 20 68 6f 77 20 77 65 20 77 65 72 65 0d 0a  nd how we were..
176c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
176d0 20 20 20 20 2f 2f 20 20 20 20 20 20 20 69 6e 76      //       inv
176e0 6f 6b 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 20  oked...         
176f0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
17700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17710 20 20 20 73 74 72 69 6e 67 20 6c 6f 63 61 74 69     string locati
17720 6f 6e 20 3d 20 61 73 73 65 6d 62 6c 79 2e 4c 6f  on = assembly.Lo
17730 63 61 74 69 6f 6e 3b 0d 0a 0d 0a 20 20 20 20 20  cation;....     
17740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
17750 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64  raceOps.DebugAnd
17760 54 72 61 63 65 28 54 72 61 63 65 50 72 69 6f 72  Trace(TracePrior
17770 69 74 79 2e 4d 65 64 69 75 6d 4c 6f 77 2c 0d 0a  ity.MediumLow,..
17780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17790 20 20 20 20 20 20 20 20 64 65 62 75 67 43 61 6c          debugCal
177a0 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c  lback, traceCall
177b0 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72  back, String.For
177c0 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
177d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 52                "R
177e0 75 6e 6e 69 6e 67 20 65 78 65 63 75 74 61 62 6c  unning executabl
177f0 65 20 69 73 3a 20 7b 30 7d 22 2c 20 46 6f 72 44  e is: {0}", ForD
17800 69 73 70 6c 61 79 28 6c 6f 63 61 74 69 6f 6e 29  isplay(location)
17810 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
17820 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
17830 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
17840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17850 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75     TraceOps.Debu
17860 67 41 6e 64 54 72 61 63 65 28 54 72 61 63 65 50  gAndTrace(TraceP
17870 72 69 6f 72 69 74 79 2e 4d 65 64 69 75 6d 4c 6f  riority.MediumLo
17880 77 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  w,..            
17890 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62 75              debu
178a0 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65  gCallback, trace
178b0 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67  Callback, String
178c0 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  .Format(..      
178d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
178e0 20 20 22 4f 72 69 67 69 6e 61 6c 20 63 6f 6d 6d    "Original comm
178f0 61 6e 64 20 6c 69 6e 65 20 69 73 3a 20 7b 30 7d  and line is: {0}
17900 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
17910 20 20 20 20 20 20 20 20 20 20 20 20 45 6e 76 69              Envi
17920 72 6f 6e 6d 65 6e 74 2e 43 6f 6d 6d 61 6e 64 4c  ronment.CommandL
17930 69 6e 65 29 2c 20 74 72 61 63 65 43 61 74 65 67  ine), traceCateg
17940 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
17950 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
17960 28 21 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e  (!configuration.
17970 77 68 61 74 49 66 29 0d 0a 20 20 20 20 20 20 20  whatIf)..       
17980 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
17990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
179a0 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
179b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
179c0 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 49 66 20      // NOTE: If 
179d0 74 68 65 20 64 65 62 75 67 67 65 72 20 69 73 20  the debugger is 
179e0 61 74 74 61 63 68 65 64 20 61 6e 64 20 57 68 61  attached and Wha
179f0 74 2d 49 66 20 6d 6f 64 65 0d 0a 20 20 20 20 20  t-If mode..     
17a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17a10 20 20 20 2f 2f 20 20 20 20 20 20 20 69 73 20 5b     //       is [
17a20 6e 6f 77 5d 20 64 69 73 61 62 6c 65 64 2c 20 69  now] disabled, i
17a30 73 73 75 65 20 61 20 77 61 72 6e 69 6e 67 2e 0d  ssue a warning..
17a40 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
17a50 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
17a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17a70 20 20 20 20 20 69 66 20 28 44 65 62 75 67 67 65       if (Debugge
17a80 72 2e 49 73 41 74 74 61 63 68 65 64 29 0d 0a 20  r.IsAttached).. 
17a90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17aa0 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
17ab0 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63  Ops.DebugAndTrac
17ac0 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e  e(TracePriority.
17ad0 4d 65 64 69 75 6d 48 69 67 68 2c 0d 0a 20 20 20  MediumHigh,..   
17ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17af0 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62               deb
17b00 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63  ugCallback, trac
17b10 65 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20  eCallback,..    
17b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17b30 20 20 20 20 20 20 20 20 20 20 20 20 22 46 6f 72              "For
17b40 63 65 64 20 74 6f 20 64 69 73 61 62 6c 65 20 5c  ced to disable \
17b50 22 77 68 61 74 2d 69 66 5c 22 20 6d 6f 64 65 20  "what-if\" mode 
17b60 77 69 74 68 20 22 20 2b 0d 0a 20 20 20 20 20 20  with " +..      
17b70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17b80 20 20 20 20 20 20 20 20 20 20 22 64 65 62 75 67            "debug
17b90 67 65 72 20 61 74 74 61 63 68 65 64 2e 22 2c 20  ger attached.", 
17ba0 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
17bb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
17bc0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
17bd0 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65              else
17be0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
17bf0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
17c00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17c10 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41   TraceOps.DebugA
17c20 6e 64 54 72 61 63 65 28 54 72 61 63 65 50 72 69  ndTrace(TracePri
17c30 6f 72 69 74 79 2e 4d 65 64 69 75 6d 48 69 67 68  ority.MediumHigh
17c40 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
17c50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
17c60 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72  ebugCallback, tr
17c70 61 63 65 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20  aceCallback,..  
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 20 22 4e 6f 20 61 63            "No ac
17ca0 74 75 61 6c 20 63 68 61 6e 67 65 73 20 77 69 6c  tual changes wil
17cb0 6c 20 62 65 20 6d 61 64 65 20 74 6f 20 74 68 69  l be made to thi
17cc0 73 20 22 20 2b 0d 0a 20 20 20 20 20 20 20 20 20  s " +..         
17cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17ce0 20 20 20 22 73 79 73 74 65 6d 20 62 65 63 61 75     "system becau
17cf0 73 65 20 5c 22 77 68 61 74 2d 69 66 5c 22 20 6d  se \"what-if\" m
17d00 6f 64 65 20 69 73 20 65 6e 61 62 6c 65 64 2e 22  ode is enabled."
17d10 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
17d20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
17d30 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
17d40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17d50 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
17d60 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
17d70 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
17d80 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 49 66       // NOTE: If
17d90 20 74 68 65 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e   the command lin
17da0 65 20 68 61 73 20 6e 6f 74 20 62 65 65 6e 20 6d  e has not been m
17db0 61 6e 75 61 6c 6c 79 0d 0a 20 20 20 20 20 20 20  anually..       
17dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
17dd0 20 20 20 20 20 20 63 6f 6e 66 69 72 6d 65 64 20        confirmed 
17de0 28 69 2e 65 2e 20 76 69 61 20 74 68 65 20 65 78  (i.e. via the ex
17df0 70 6c 69 63 69 74 20 63 6f 6d 6d 61 6e 64 20 6c  plicit command l
17e00 69 6e 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ine..           
17e10 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
17e20 20 20 6f 70 74 69 6f 6e 29 2c 20 74 68 65 6e 20    option), then 
17e30 73 74 6f 70 20 70 72 6f 63 65 73 73 69 6e 67 20  stop processing 
17e40 6e 6f 77 2e 20 20 57 65 20 65 6e 66 6f 72 63 65  now.  We enforce
17e50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
17e60 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 74        //       t
17e70 68 69 73 20 72 75 6c 65 20 73 6f 20 74 68 61 74  his rule so that
17e80 20 73 69 6d 70 6c 79 20 64 6f 75 62 6c 65 2d 63   simply double-c
17e90 6c 69 63 6b 69 6e 67 20 74 68 65 0d 0a 20 20 20  licking the..   
17ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17eb0 20 2f 2f 20 20 20 20 20 20 20 65 78 65 63 75 74   //       execut
17ec0 61 62 6c 65 20 77 69 6c 6c 20 6e 6f 74 20 72 65  able will not re
17ed0 73 75 6c 74 20 69 6e 20 61 6e 79 20 63 68 61 6e  sult in any chan
17ee0 67 65 73 20 62 65 69 6e 67 0d 0a 20 20 20 20 20  ges being..     
17ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
17f00 2f 20 20 20 20 20 20 20 6d 61 64 65 20 74 6f 20  /       made to 
17f10 74 68 65 20 73 79 73 74 65 6d 2e 0d 0a 20 20 20  the system...   
17f20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17f30 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
17f40 20 20 20 20 20 20 20 20 20 69 66 20 28 21 63 6f           if (!co
17f50 6e 66 69 67 75 72 61 74 69 6f 6e 2e 63 6f 6e 66  nfiguration.conf
17f60 69 72 6d 29 0d 0a 20 20 20 20 20 20 20 20 20 20  irm)..          
17f70 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
17f80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17f90 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 43 61       error = "Ca
17fa0 6e 6e 6f 74 20 63 6f 6e 74 69 6e 75 65 2c 20 74  nnot continue, t
17fb0 68 65 20 5c 22 63 6f 6e 66 69 72 6d 5c 22 20 6f  he \"confirm\" o
17fc0 70 74 69 6f 6e 20 69 73 20 22 20 2b 0d 0a 20 20  ption is " +..  
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 22 6e 6f 74 20 65            "not e
17ff0 6e 61 62 6c 65 64 2e 22 3b 0d 0a 0d 0a 20 20 20  nabled.";....   
18000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18010 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
18020 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
18030 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
18040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18050 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20   return true;.. 
18060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
18070 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
18080 20 20 63 61 74 63 68 20 28 45 78 63 65 70 74 69    catch (Excepti
18090 6f 6e 20 65 29 0d 0a 20 20 20 20 20 20 20 20 20  on e)..         
180a0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
180b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
180c0 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54  aceOps.DebugAndT
180d0 72 61 63 65 28 54 72 61 63 65 50 72 69 6f 72 69  race(TracePriori
180e0 74 79 2e 48 69 67 68 65 73 74 2c 0d 0a 20 20 20  ty.Highest,..   
180f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18100 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61       debugCallba
18110 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63  ck, traceCallbac
18120 6b 2c 20 65 2c 20 74 72 61 63 65 43 61 74 65 67  k, e, traceCateg
18130 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
18140 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
18150 6f 72 20 3d 20 22 46 61 69 6c 65 64 20 74 6f 20  or = "Failed to 
18160 70 72 6f 63 65 73 73 20 63 6f 6e 66 69 67 75 72  process configur
18170 61 74 69 6f 6e 2e 22 3b 0d 0a 20 20 20 20 20 20  ation.";..      
18180 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
18190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
181a0 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20  eturn false;..  
181b0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
181c0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
181d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
181e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
181f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18200 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
18210 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 4d  ..            [M
18220 65 74 68 6f 64 49 6d 70 6c 28 4d 65 74 68 6f 64  ethodImpl(Method
18230 49 6d 70 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e  ImplOptions.NoIn
18240 6c 69 6e 69 6e 67 29 5d 0d 0a 20 20 20 20 20 20  lining)]..      
18250 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61        public sta
18260 74 69 63 20 62 6f 6f 6c 20 43 68 65 63 6b 52 75  tic bool CheckRu
18270 6e 74 69 6d 65 56 65 72 73 69 6f 6e 28 0d 0a 20  ntimeVersion(.. 
18280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43                 C
18290 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 63 6f 6e  onfiguration con
182a0 66 69 67 75 72 61 74 69 6f 6e 2c 0d 0a 20 20 20  figuration,..   
182b0 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f               boo
182c0 6c 20 73 74 72 69 63 74 2c 0d 0a 20 20 20 20 20  l strict,..     
182d0 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20 73             ref s
182e0 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20  tring error..   
182f0 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a               )..
18300 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
18310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
18320 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ry..            
18330 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
18340 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 63             if (c
18350 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 3d 3d 20  onfiguration == 
18360 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
18370 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
18380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18390 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 49        error = "I
183a0 6e 76 61 6c 69 64 20 63 6f 6e 66 69 67 75 72 61  nvalid configura
183b0 74 69 6f 6e 2e 22 3b 0d 0a 20 20 20 20 20 20 20  tion.";..       
183c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
183d0 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
183e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
183f0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
18400 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
18410 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
18420 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 57 68       // NOTE: Wh
18430 61 74 20 76 65 72 73 69 6f 6e 20 6f 66 20 74 68  at version of th
18440 65 20 72 75 6e 74 69 6d 65 20 77 61 73 20 74 68  e runtime was th
18450 65 20 63 6f 72 65 20 28 70 72 69 6d 61 72 79 29  e core (primary)
18460 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
18470 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 61        //       a
18480 73 73 65 6d 62 6c 79 20 63 6f 6d 70 69 6c 65 64  ssembly compiled
18490 20 61 67 61 69 6e 73 74 20 28 65 2e 67 2e 20 22   against (e.g. "
184a0 76 32 2e 30 2e 35 30 37 32 37 22 20 6f 72 0d 0a  v2.0.50727" or..
184b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
184c0 20 20 20 20 2f 2f 20 20 20 20 20 20 20 22 76 34      //       "v4
184d0 2e 30 2e 33 30 33 31 39 22 29 2e 0d 0a 20 20 20  .0.30319")...   
184e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
184f0 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
18500 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
18510 63 6f 72 65 49 6d 61 67 65 52 75 6e 74 69 6d 65  coreImageRuntime
18520 56 65 72 73 69 6f 6e 20 3d 20 47 65 74 49 6d 61  Version = GetIma
18530 67 65 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e  geRuntimeVersion
18540 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
18550 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69             confi
18560 67 75 72 61 74 69 6f 6e 2e 63 6f 72 65 46 69 6c  guration.coreFil
18570 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20  eName);....     
18580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
18590 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
185a0 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20         // NOTE: 
185b0 57 65 20 61 6c 6c 6f 77 20 74 68 65 20 61 63 74  We allow the act
185c0 75 61 6c 20 69 6d 61 67 65 20 72 75 6e 74 69 6d  ual image runtim
185d0 65 20 63 68 65 63 6b 69 6e 67 20 74 6f 20 62 65  e checking to be
185e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
185f0 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 62        //       b
18600 79 70 61 73 73 65 64 20 76 69 61 20 74 68 65 20  ypassed via the 
18610 22 2d 6e 6f 52 75 6e 74 69 6d 65 56 65 72 73 69  "-noRuntimeVersi
18620 6f 6e 22 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65  on" command line
18630 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
18640 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 6f        //       o
18650 70 74 69 6f 6e 2e 20 20 54 68 65 20 63 6f 6d 6d  ption.  The comm
18660 61 6e 64 20 6c 69 6e 65 20 6f 70 74 69 6f 6e 20  and line option 
18670 69 73 20 69 6e 74 65 6e 64 65 64 20 66 6f 72 0d  is intended for.
18680 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
18690 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 65 78       //       ex
186a0 70 65 72 74 20 75 73 65 20 6f 6e 6c 79 2e 0d 0a  pert use only...
186b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
186c0 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
186d0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
186e0 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f  configuration.no
186f0 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 29 0d  RuntimeVersion).
18700 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
18710 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
18720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18730 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e  TraceOps.DebugAn
18740 64 54 72 61 63 65 28 54 72 61 63 65 50 72 69 6f  dTrace(TracePrio
18750 72 69 74 79 2e 4d 65 64 69 75 6d 2c 0d 0a 20 20  rity.Medium,..  
18760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18770 20 20 20 20 20 20 20 20 20 20 64 65 62 75 67 43            debugC
18780 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61  allback, traceCa
18790 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46  llback, String.F
187a0 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
187b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
187c0 20 20 20 20 22 41 73 73 65 6d 62 6c 79 20 69 73      "Assembly is
187d0 20 63 6f 6d 70 69 6c 65 64 20 66 6f 72 20 74 68   compiled for th
187e0 65 20 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b  e .NET Framework
187f0 20 7b 30 7d 3b 20 22 20 2b 0d 0a 20 20 20 20 20   {0}; " +..     
18800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18810 20 20 20 20 20 20 20 22 68 6f 77 65 76 65 72 2c         "however,
18820 20 69 6e 73 74 61 6c 6c 61 74 69 6f 6e 20 72 65   installation re
18830 73 74 72 69 63 74 69 6f 6e 73 20 62 61 73 65 64  strictions based
18840 20 6f 6e 20 74 68 69 73 20 22 20 2b 0d 0a 20 20   on this " +..  
18850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18860 20 20 20 20 20 20 20 20 20 20 22 66 61 63 74 20            "fact 
18870 68 61 76 65 20 62 65 65 6e 20 64 69 73 61 62 6c  have been disabl
18880 65 64 20 76 69 61 20 74 68 65 20 63 6f 6d 6d 61  ed via the comma
18890 6e 64 20 6c 69 6e 65 2e 22 2c 0d 0a 20 20 20 20  nd line.",..    
188a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
188b0 20 20 20 20 20 20 20 20 63 6f 72 65 49 6d 61 67          coreImag
188c0 65 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 29  eRuntimeVersion)
188d0 2c 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29  , traceCategory)
188e0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
188f0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
18900 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20 20  urn true;..     
18910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
18920 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
18930 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
18940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18950 2f 2f 20 54 4f 44 4f 3a 20 52 65 73 74 72 69 63  // TODO: Restric
18960 74 20 74 68 65 20 63 6f 6e 66 69 67 75 72 61 74  t the configurat
18970 69 6f 6e 20 62 61 73 65 64 20 6f 6e 20 77 68 69  ion based on whi
18980 63 68 20 69 6d 61 67 65 0d 0a 20 20 20 20 20 20  ch image..      
18990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
189a0 20 20 20 20 20 20 20 72 75 6e 74 69 6d 65 20 76         runtime v
189b0 65 72 73 69 6f 6e 73 20 28 77 68 69 63 68 20 6d  ersions (which m
189c0 6f 72 65 2d 6f 72 2d 6c 65 73 73 20 63 6f 72 72  ore-or-less corr
189d0 65 73 70 6f 6e 64 0d 0a 20 20 20 20 20 20 20 20  espond..        
189e0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
189f0 20 20 20 20 20 74 6f 20 2e 4e 45 54 20 46 72 61       to .NET Fra
18a00 6d 65 77 6f 72 6b 20 76 65 72 73 69 6f 6e 73 29  mework versions)
18a10 20 61 72 65 20 73 75 70 70 6f 72 74 65 64 20 62   are supported b
18a20 79 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 20  y the..         
18a30 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
18a40 20 20 20 20 76 65 72 73 69 6f 6e 73 20 6f 66 20      versions of 
18a50 56 69 73 75 61 6c 20 53 74 75 64 69 6f 20 74 68  Visual Studio th
18a60 61 74 20 61 72 65 20 69 6e 73 74 61 6c 6c 65 64  at are installed
18a70 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
18a80 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
18a90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
18aa0 66 20 28 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c  f (String.IsNull
18ab0 4f 72 45 6d 70 74 79 28 63 6f 72 65 49 6d 61 67  OrEmpty(coreImag
18ac0 65 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 29  eRuntimeVersion)
18ad0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
18ae0 20 20 20 20 20 20 20 7b 0d 0a 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 65 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c    error = "inval
18b10 69 64 20 63 6f 72 65 20 66 69 6c 65 20 69 6d 61  id core file ima
18b20 67 65 20 72 75 6e 74 69 6d 65 20 76 65 72 73 69  ge runtime versi
18b30 6f 6e 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  on";..          
18b40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
18b50 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20  turn false;..   
18b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18b70 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
18b80 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20          else if 
18b90 28 53 74 72 69 6e 67 2e 45 71 75 61 6c 73 28 0d  (String.Equals(.
18ba0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
18bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 72               cor
18bc0 65 49 6d 61 67 65 52 75 6e 74 69 6d 65 56 65 72  eImageRuntimeVer
18bd0 73 69 6f 6e 2c 20 43 4c 52 76 32 49 6d 61 67 65  sion, CLRv2Image
18be0 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 2c 0d  RuntimeVersion,.
18bf0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
18c00 20 20 20 20 20 20 20 20 20 20 20 20 20 53 74 72               Str
18c10 69 6e 67 43 6f 6d 70 61 72 69 73 6f 6e 2e 49 6e  ingComparison.In
18c20 76 61 72 69 61 6e 74 43 75 6c 74 75 72 65 29 29  variantCulture))
18c30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
18c40 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
18c50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18c60 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
18c70 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
18c80 4e 4f 54 45 3a 20 46 6f 72 20 74 68 65 20 43 4c  NOTE: For the CL
18c90 52 20 76 32 2e 30 20 72 75 6e 74 69 6d 65 2c 20  R v2.0 runtime, 
18ca0 6d 61 6b 65 20 73 75 72 65 20 77 65 20 64 69 73  make sure we dis
18cb0 61 62 6c 65 0d 0a 20 20 20 20 20 20 20 20 20 20  able..          
18cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
18cd0 20 20 20 20 20 20 20 61 6e 79 20 61 74 74 65 6d         any attem
18ce0 70 74 20 74 6f 20 75 73 65 20 69 74 20 66 6f 72  pt to use it for
18cf0 20 74 68 69 6e 67 73 20 74 68 61 74 20 72 65 71   things that req
18d00 75 69 72 65 0d 0a 20 20 20 20 20 20 20 20 20 20  uire..          
18d10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
18d20 20 20 20 20 20 20 20 61 6e 20 61 73 73 65 6d 62         an assemb
18d30 6c 79 20 63 6f 6d 70 69 6c 65 64 20 66 6f 72 20  ly compiled for 
18d40 74 68 65 20 43 4c 52 20 76 34 2e 30 2e 20 20 49  the CLR v4.0.  I
18d50 74 20 69 73 0d 0a 20 20 20 20 20 20 20 20 20 20  t is..          
18d60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
18d70 20 20 20 20 20 20 20 75 6e 63 65 72 74 61 69 6e         uncertain
18d80 20 69 66 20 74 68 69 73 20 69 73 20 61 63 74 75   if this is actu
18d90 61 6c 6c 79 20 61 20 70 72 6f 62 6c 65 6d 20 69  ally a problem i
18da0 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  n..             
18db0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
18dc0 20 20 20 20 70 72 61 63 74 69 63 65 20 61 73 20      practice as 
18dd0 74 68 65 20 43 4c 52 20 76 34 2e 30 20 63 61 6e  the CLR v4.0 can
18de0 20 6c 6f 61 64 20 61 6e 64 20 75 73 65 20 61 6e   load and use an
18df0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
18e00 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
18e10 20 20 20 61 73 73 65 6d 62 6c 79 20 63 6f 6d 70     assembly comp
18e20 69 6c 65 64 20 77 69 74 68 20 74 68 65 20 43 4c  iled with the CL
18e30 52 20 76 32 2e 30 3b 20 68 6f 77 65 76 65 72 2c  R v2.0; however,
18e40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
18e50 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
18e60 20 20 20 73 69 6e 63 65 20 74 68 69 73 20 70 72     since this pr
18e70 6f 6a 65 63 74 20 6f 66 66 65 72 73 20 62 6f 74  oject offers bot
18e80 68 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 73  h configurations
18e90 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
18ea0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
18eb0 20 20 20 20 77 65 20 63 75 72 72 65 6e 74 6c 79      we currently
18ec0 20 64 69 73 61 6c 6c 6f 77 20 74 68 69 73 20 6d   disallow this m
18ed0 69 73 6d 61 74 63 68 2e 0d 0a 20 20 20 20 20 20  ismatch...      
18ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18ef0 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
18f00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
18f10 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 4e 65  nfiguration.noNe
18f20 74 46 78 34 30 20 3d 20 74 72 75 65 3b 0d 0a 20  tFx40 = true;.. 
18f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18f40 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61         configura
18f50 74 69 6f 6e 2e 6e 6f 56 73 32 30 31 30 20 3d 20  tion.noVs2010 = 
18f60 74 72 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  true;....       
18f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18f80 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41   TraceOps.DebugA
18f90 6e 64 54 72 61 63 65 28 54 72 61 63 65 50 72 69  ndTrace(TracePri
18fa0 6f 72 69 74 79 2e 4d 65 64 69 75 6d 2c 0d 0a 20  ority.Medium,.. 
18fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18fc0 20 20 20 20 20 20 20 20 20 20 20 64 65 62 75 67             debug
18fd0 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43  Callback, traceC
18fe0 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e  allback, String.
18ff0 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
19000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19010 20 20 20 20 20 22 41 73 73 65 6d 62 6c 79 20 69       "Assembly i
19020 73 20 63 6f 6d 70 69 6c 65 64 20 66 6f 72 20 74  s compiled for t
19030 68 65 20 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72  he .NET Framewor
19040 6b 20 7b 30 7d 2c 20 22 20 2b 0d 0a 20 20 20 20  k {0}, " +..    
19050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19060 20 20 20 20 20 20 20 20 22 73 75 70 70 6f 72 74          "support
19070 20 66 6f 72 20 2e 4e 45 54 20 46 72 61 6d 65 77   for .NET Framew
19080 6f 72 6b 20 7b 31 7d 20 69 73 20 6e 6f 77 20 64  ork {1} is now d
19090 69 73 61 62 6c 65 64 2e 22 2c 0d 0a 20 20 20 20  isabled.",..    
190a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
190b0 20 20 20 20 20 20 20 20 43 4c 52 76 32 49 6d 61          CLRv2Ima
190c0 67 65 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e  geRuntimeVersion
190d0 2c 20 43 4c 52 76 34 49 6d 61 67 65 52 75 6e 74  , CLRv4ImageRunt
190e0 69 6d 65 56 65 72 73 69 6f 6e 29 2c 0d 0a 20 20  imeVersion),..  
190f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19100 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
19110 61 74 65 67 6f 72 79 29 3b 0d 0a 20 20 20 20 20  ategory);..     
19120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
19130 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
19140 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 53        else if (S
19150 74 72 69 6e 67 2e 45 71 75 61 6c 73 28 0d 0a 20  tring.Equals(.. 
19160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19170 20 20 20 20 20 20 20 20 20 20 20 63 6f 72 65 49             coreI
19180 6d 61 67 65 52 75 6e 74 69 6d 65 56 65 72 73 69  mageRuntimeVersi
19190 6f 6e 2c 20 43 4c 52 76 34 49 6d 61 67 65 52 75  on, CLRv4ImageRu
191a0 6e 74 69 6d 65 56 65 72 73 69 6f 6e 2c 0d 0a 20  ntimeVersion,.. 
191b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
191c0 20 20 20 20 20 20 20 20 20 20 20 53 74 72 69 6e             Strin
191d0 67 43 6f 6d 70 61 72 69 73 6f 6e 2e 49 6e 76 61  gComparison.Inva
191e0 72 69 61 6e 74 43 75 6c 74 75 72 65 29 29 0d 0a  riantCulture))..
191f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19200 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
19210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
19220 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
19230 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f             // NO
19240 54 45 3a 20 46 6f 72 20 74 68 65 20 43 4c 52 20  TE: For the CLR 
19250 76 34 2e 30 20 72 75 6e 74 69 6d 65 2c 20 6d 61  v4.0 runtime, ma
19260 6b 65 20 73 75 72 65 20 77 65 20 64 69 73 61 62  ke sure we disab
19270 6c 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  le..            
19280 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
19290 20 20 20 20 20 61 6e 79 20 61 74 74 65 6d 70 74       any attempt
192a0 20 74 6f 20 75 73 65 20 69 74 20 66 6f 72 20 74   to use it for t
192b0 68 69 6e 67 73 20 74 68 61 74 20 72 65 71 75 69  hings that requi
192c0 72 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  re..            
192d0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
192e0 20 20 20 20 20 61 6e 20 61 73 73 65 6d 62 6c 79       an assembly
192f0 20 63 6f 6d 70 69 6c 65 64 20 66 6f 72 20 74 68   compiled for th
19300 65 20 43 4c 52 20 76 32 2e 30 2e 0d 0a 20 20 20  e CLR v2.0...   
19310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19320 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
19330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19340 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e   configuration.n
19350 6f 4e 65 74 46 78 32 30 20 3d 20 74 72 75 65 3b  oNetFx20 = true;
19360 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
19370 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67            config
19380 75 72 61 74 69 6f 6e 2e 6e 6f 56 73 32 30 30 38  uration.noVs2008
19390 20 3d 20 74 72 75 65 3b 0d 0a 0d 0a 20 20 20 20   = true;....    
193a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
193b0 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62      TraceOps.Deb
193c0 75 67 41 6e 64 54 72 61 63 65 28 54 72 61 63 65  ugAndTrace(Trace
193d0 50 72 69 6f 72 69 74 79 2e 4d 65 64 69 75 6d 2c  Priority.Medium,
193e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
193f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65                de
19400 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61  bugCallback, tra
19410 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69  ceCallback, Stri
19420 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ng.Format(..    
19430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19440 20 20 20 20 20 20 20 20 22 41 73 73 65 6d 62 6c          "Assembl
19450 79 20 69 73 20 63 6f 6d 70 69 6c 65 64 20 66 6f  y is compiled fo
19460 72 20 74 68 65 20 2e 4e 45 54 20 46 72 61 6d 65  r the .NET Frame
19470 77 6f 72 6b 20 7b 30 7d 2c 20 22 20 2b 0d 0a 20  work {0}, " +.. 
19480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19490 20 20 20 20 20 20 20 20 20 20 20 22 73 75 70 70             "supp
194a0 6f 72 74 20 66 6f 72 20 2e 4e 45 54 20 46 72 61  ort for .NET Fra
194b0 6d 65 77 6f 72 6b 20 7b 31 7d 20 69 73 20 6e 6f  mework {1} is no
194c0 77 20 64 69 73 61 62 6c 65 64 2e 22 2c 0d 0a 20  w disabled.",.. 
194d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
194e0 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69             ForDi
194f0 73 70 6c 61 79 28 43 4c 52 76 34 49 6d 61 67 65  splay(CLRv4Image
19500 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 29 2c  RuntimeVersion),
19510 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
19520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f                Fo
19530 72 44 69 73 70 6c 61 79 28 43 4c 52 76 32 49 6d  rDisplay(CLRv2Im
19540 61 67 65 52 75 6e 74 69 6d 65 56 65 72 73 69 6f  ageRuntimeVersio
19550 6e 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  n)),..          
19560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19570 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29    traceCategory)
19580 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
19590 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
195a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c                el
195b0 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  se..            
195c0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
195d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
195e0 20 20 20 65 72 72 6f 72 20 3d 20 53 74 72 69 6e     error = Strin
195f0 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
19600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19610 20 20 20 20 20 20 20 22 75 6e 73 75 70 70 6f 72         "unsuppor
19620 74 65 64 20 63 6f 72 65 20 66 69 6c 65 20 69 6d  ted core file im
19630 61 67 65 20 72 75 6e 74 69 6d 65 20 76 65 72 73  age runtime vers
19640 69 6f 6e 20 22 20 2b 0d 0a 20 20 20 20 20 20 20  ion " +..       
19650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19660 20 20 20 20 20 22 7b 30 7d 2c 20 6d 75 73 74 20       "{0}, must 
19670 62 65 20 7b 31 7d 20 6f 72 20 7b 32 7d 22 2c 0d  be {1} or {2}",.
19680 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
19690 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72               For
196a0 44 69 73 70 6c 61 79 28 63 6f 72 65 49 6d 61 67  Display(coreImag
196b0 65 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 29  eRuntimeVersion)
196c0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
196d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46                 F
196e0 6f 72 44 69 73 70 6c 61 79 28 43 4c 52 76 32 49  orDisplay(CLRv2I
196f0 6d 61 67 65 52 75 6e 74 69 6d 65 56 65 72 73 69  mageRuntimeVersi
19700 6f 6e 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  on),..          
19710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19720 20 20 46 6f 72 44 69 73 70 6c 61 79 28 43 4c 52    ForDisplay(CLR
19730 76 34 49 6d 61 67 65 52 75 6e 74 69 6d 65 56 65  v4ImageRuntimeVe
19740 72 73 69 6f 6e 29 29 3b 0d 0a 0d 0a 20 20 20 20  rsion));....    
19750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19760 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
19770 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
19780 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
19790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
197a0 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20  return true;..  
197b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
197c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
197d0 20 63 61 74 63 68 20 28 45 78 63 65 70 74 69 6f   catch (Exceptio
197e0 6e 20 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20  n e)..          
197f0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
19800 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61               Tra
19810 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72  ceOps.DebugAndTr
19820 61 63 65 28 54 72 61 63 65 50 72 69 6f 72 69 74  ace(TracePriorit
19830 79 2e 48 69 67 68 65 73 74 2c 0d 0a 20 20 20 20  y.Highest,..    
19840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19850 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63      debugCallbac
19860 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b  k, traceCallback
19870 2c 20 65 2c 20 74 72 61 63 65 43 61 74 65 67 6f  , e, traceCatego
19880 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
19890 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
198a0 72 20 3d 20 22 46 61 69 6c 65 64 20 74 6f 20 63  r = "Failed to c
198b0 68 65 63 6b 20 69 6d 61 67 65 20 72 75 6e 74 69  heck image runti
198c0 6d 65 20 76 65 72 73 69 6f 6e 2e 22 3b 0d 0a 20  me version.";.. 
198d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
198e0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
198f0 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
19900 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
19910 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 65  ..            #e
19920 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20  ndregion....    
19930 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
19940 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19950 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19960 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19970 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
19980 20 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69             #regi
19990 6f 6e 20 50 75 62 6c 69 63 20 4d 65 74 68 6f 64  on Public Method
199a0 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  s..            p
199b0 75 62 6c 69 63 20 62 6f 6f 6c 20 48 61 73 46 6c  ublic bool HasFl
199c0 61 67 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ags(..          
199d0 20 20 20 20 20 20 49 6e 73 74 61 6c 6c 46 6c 61        InstallFla
199e0 67 73 20 68 61 73 46 6c 61 67 73 2c 0d 0a 20 20  gs hasFlags,..  
199f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f                bo
19a00 6f 6c 20 61 6c 6c 0d 0a 20 20 20 20 20 20 20 20  ol all..        
19a10 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
19a20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
19a30 20 20 20 20 20 20 20 20 20 20 69 66 20 28 61 6c            if (al
19a40 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
19a50 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 28          return (
19a60 28 69 6e 73 74 61 6c 6c 46 6c 61 67 73 20 26 20  (installFlags & 
19a70 68 61 73 46 6c 61 67 73 29 20 3d 3d 20 68 61 73  hasFlags) == has
19a80 46 6c 61 67 73 29 3b 0d 0a 20 20 20 20 20 20 20  Flags);..       
19a90 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20           else.. 
19aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19ab0 20 20 20 72 65 74 75 72 6e 20 28 28 69 6e 73 74     return ((inst
19ac0 61 6c 6c 46 6c 61 67 73 20 26 20 68 61 73 46 6c  allFlags & hasFl
19ad0 61 67 73 29 20 21 3d 20 49 6e 73 74 61 6c 6c 46  ags) != InstallF
19ae0 6c 61 67 73 2e 4e 6f 6e 65 29 3b 0d 0a 20 20 20  lags.None);..   
19af0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
19b00 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
19b10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19b20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19b30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19b40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
19b50 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
19b60 6c 69 63 20 76 6f 69 64 20 44 75 6d 70 28 0d 0a  lic void Dump(..
19b70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19b80 54 72 61 63 65 43 61 6c 6c 62 61 63 6b 20 74 72  TraceCallback tr
19b90 61 63 65 43 61 6c 6c 62 61 63 6b 0d 0a 20 20 20  aceCallback..   
19ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a               )..
19bb0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
19bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
19bd0 66 20 28 74 72 61 63 65 43 61 6c 6c 62 61 63 6b  f (traceCallback
19be0 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   != null)..     
19bf0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
19c00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19c10 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28    traceCallback(
19c20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61  String.Format(Na
19c30 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74  meAndValueFormat
19c40 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
19c50 20 20 20 20 20 20 20 20 20 20 20 22 41 73 73 65             "Asse
19c60 6d 62 6c 79 22 2c 20 46 6f 72 44 69 73 70 6c 61  mbly", ForDispla
19c70 79 28 61 73 73 65 6d 62 6c 79 29 29 2c 0d 0a 20  y(assembly)),.. 
19c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19c90 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65         traceCate
19ca0 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
19cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
19cc0 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69  aceCallback(Stri
19cd0 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e  ng.Format(NameAn
19ce0 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20  dValueFormat,.. 
19cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19d00 20 20 20 20 20 20 20 22 4c 6f 67 46 69 6c 65 4e         "LogFileN
19d10 61 6d 65 22 2c 20 46 6f 72 44 69 73 70 6c 61 79  ame", ForDisplay
19d20 28 6c 6f 67 46 69 6c 65 4e 61 6d 65 29 29 2c 0d  (logFileName)),.
19d30 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
19d40 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
19d50 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
19d60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19d70 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74  traceCallback(St
19d80 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65  ring.Format(Name
19d90 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d  AndValueFormat,.
19da0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
19db0 20 20 20 20 20 20 20 20 20 22 44 69 72 65 63 74           "Direct
19dc0 6f 72 79 22 2c 20 46 6f 72 44 69 73 70 6c 61 79  ory", ForDisplay
19dd0 28 64 69 72 65 63 74 6f 72 79 29 29 2c 0d 0a 20  (directory)),.. 
19de0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19df0 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65         traceCate
19e00 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
19e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
19e20 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69  aceCallback(Stri
19e30 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e  ng.Format(NameAn
19e40 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20  dValueFormat,.. 
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 22 43 6f 72 65 46 69 6c 65         "CoreFile
19e70 4e 61 6d 65 22 2c 20 46 6f 72 44 69 73 70 6c 61  Name", ForDispla
19e80 79 28 63 6f 72 65 46 69 6c 65 4e 61 6d 65 29 29  y(coreFileName))
19e90 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
19ea0 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
19eb0 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
19ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19ed0 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28    traceCallback(
19ee0 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61  String.Format(Na
19ef0 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74  meAndValueFormat
19f00 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
19f10 20 20 20 20 20 20 20 20 20 20 20 22 4c 69 6e 71             "Linq
19f20 46 69 6c 65 4e 61 6d 65 22 2c 20 46 6f 72 44 69  FileName", ForDi
19f30 73 70 6c 61 79 28 6c 69 6e 71 46 69 6c 65 4e 61  splay(linqFileNa
19f40 6d 65 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  me)),..         
19f50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
19f60 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
19f70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
19f80 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62        traceCallb
19f90 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ack(String.Forma
19fa0 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f  t(NameAndValueFo
19fb0 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20  rmat,..         
19fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
19fd0 44 65 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65  DesignerFileName
19fe0 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 64 65  ", ForDisplay(de
19ff0 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 29 29  signerFileName))
1a000 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
1a010 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
1a020 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
1a030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a040 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28    traceCallback(
1a050 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61  String.Format(Na
1a060 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74  meAndValueFormat
1a070 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
1a080 20 20 20 20 20 20 20 20 20 20 20 22 44 65 62 75             "Debu
1a090 67 46 6f 72 6d 61 74 22 2c 20 46 6f 72 44 69 73  gFormat", ForDis
1a0a0 70 6c 61 79 28 64 65 62 75 67 46 6f 72 6d 61 74  play(debugFormat
1a0b0 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  )),..           
1a0c0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
1a0d0 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
1a0e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a0f0 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63      traceCallbac
1a100 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  k(String.Format(
1a110 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d  NameAndValueForm
1a120 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at,..           
1a130 20 20 20 20 20 20 20 20 20 20 20 20 20 22 54 72               "Tr
1a140 61 63 65 46 6f 72 6d 61 74 22 2c 20 46 6f 72 44  aceFormat", ForD
1a150 69 73 70 6c 61 79 28 74 72 61 63 65 46 6f 72 6d  isplay(traceForm
1a160 61 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  at)),..         
1a170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
1a180 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
1a190 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1a1a0 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62        traceCallb
1a1b0 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ack(String.Forma
1a1c0 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f  t(NameAndValueFo
1a1d0 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20  rmat,..         
1a1e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
1a1f0 49 6e 73 74 61 6c 6c 46 6c 61 67 73 22 2c 20 46  InstallFlags", F
1a200 6f 72 44 69 73 70 6c 61 79 28 69 6e 73 74 61 6c  orDisplay(instal
1a210 6c 46 6c 61 67 73 29 29 2c 0d 0a 20 20 20 20 20  lFlags)),..     
1a220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a230 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
1a240 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
1a250 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
1a260 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46  allback(String.F
1a270 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c  ormat(NameAndVal
1a280 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20  ueFormat,..     
1a290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a2a0 20 20 20 22 44 65 62 75 67 50 72 69 6f 72 69 74     "DebugPriorit
1a2b0 79 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 64  y", ForDisplay(d
1a2c0 65 62 75 67 50 72 69 6f 72 69 74 79 29 29 2c 0d  ebugPriority)),.
1a2d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1a2e0 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
1a2f0 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
1a300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a310 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74  traceCallback(St
1a320 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65  ring.Format(Name
1a330 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d  AndValueFormat,.
1a340 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1a350 20 20 20 20 20 20 20 20 20 22 54 72 61 63 65 50           "TraceP
1a360 72 69 6f 72 69 74 79 22 2c 20 46 6f 72 44 69 73  riority", ForDis
1a370 70 6c 61 79 28 74 72 61 63 65 50 72 69 6f 72 69  play(tracePriori
1a380 74 79 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  ty)),..         
1a390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
1a3a0 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
1a3b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1a3c0 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62        traceCallb
1a3d0 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ack(String.Forma
1a3e0 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f  t(NameAndValueFo
1a3f0 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20  rmat,..         
1a400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
1a410 49 6e 73 74 61 6c 6c 22 2c 20 46 6f 72 44 69 73  Install", ForDis
1a420 70 6c 61 79 28 69 6e 73 74 61 6c 6c 29 29 2c 0d  play(install)),.
1a430 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1a440 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
1a450 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
1a460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a470 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74  traceCallback(St
1a480 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65  ring.Format(Name
1a490 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d  AndValueFormat,.
1a4a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1a4b0 20 20 20 20 20 20 20 20 20 22 57 6f 77 36 34 22           "Wow64"
1a4c0 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 77 6f 77  , ForDisplay(wow
1a4d0 36 34 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  64)),..         
1a4e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
1a4f0 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
1a500 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1a510 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62        traceCallb
1a520 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ack(String.Forma
1a530 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f  t(NameAndValueFo
1a540 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20  rmat,..         
1a550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
1a560 4e 6f 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e  NoRuntimeVersion
1a570 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 6e 6f  ", ForDisplay(no
1a580 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 29 29  RuntimeVersion))
1a590 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
1a5a0 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
1a5b0 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
1a5c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a5d0 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28    traceCallback(
1a5e0 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61  String.Format(Na
1a5f0 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74  meAndValueFormat
1a600 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
1a610 20 20 20 20 20 20 20 20 20 20 20 22 4e 6f 44 65             "NoDe
1a620 73 6b 74 6f 70 22 2c 20 46 6f 72 44 69 73 70 6c  sktop", ForDispl
1a630 61 79 28 6e 6f 44 65 73 6b 74 6f 70 29 29 2c 0d  ay(noDesktop)),.
1a640 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1a650 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
1a660 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
1a670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a680 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74  traceCallback(St
1a690 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65  ring.Format(Name
1a6a0 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d  AndValueFormat,.
1a6b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1a6c0 20 20 20 20 20 20 20 20 20 22 4e 6f 43 6f 6d 70           "NoComp
1a6d0 61 63 74 22 2c 20 46 6f 72 44 69 73 70 6c 61 79  act", ForDisplay
1a6e0 28 6e 6f 43 6f 6d 70 61 63 74 29 29 2c 0d 0a 20  (noCompact)),.. 
1a6f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a700 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65         traceCate
1a710 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
1a720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
1a730 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69  aceCallback(Stri
1a740 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e  ng.Format(NameAn
1a750 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20  dValueFormat,.. 
1a760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a770 20 20 20 20 20 20 20 22 4e 6f 4e 65 74 46 78 32         "NoNetFx2
1a780 30 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 6e  0", ForDisplay(n
1a790 6f 4e 65 74 46 78 32 30 29 29 2c 0d 0a 20 20 20  oNetFx20)),..   
1a7a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a7b0 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f       traceCatego
1a7c0 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
1a7d0 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
1a7e0 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67  eCallback(String
1a7f0 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56  .Format(NameAndV
1a800 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20  alueFormat,..   
1a810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a820 20 20 20 20 20 22 4e 6f 4e 65 74 46 78 34 30 22       "NoNetFx40"
1a830 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 6e 6f 4e  , ForDisplay(noN
1a840 65 74 46 78 34 30 29 29 2c 0d 0a 20 20 20 20 20  etFx40)),..     
1a850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a860 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
1a870 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
1a880 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
1a890 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46  allback(String.F
1a8a0 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c  ormat(NameAndVal
1a8b0 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20  ueFormat,..     
1a8c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a8d0 20 20 20 22 4e 6f 56 73 32 30 30 38 22 2c 20 46     "NoVs2008", F
1a8e0 6f 72 44 69 73 70 6c 61 79 28 6e 6f 56 73 32 30  orDisplay(noVs20
1a8f0 30 38 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  08)),..         
1a900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
1a910 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
1a920 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1a930 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62        traceCallb
1a940 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ack(String.Forma
1a950 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f  t(NameAndValueFo
1a960 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20  rmat,..         
1a970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
1a980 4e 6f 56 73 32 30 31 30 22 2c 20 46 6f 72 44 69  NoVs2010", ForDi
1a990 73 70 6c 61 79 28 6e 6f 56 73 32 30 31 30 29 29  splay(noVs2010))
1a9a0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
1a9b0 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
1a9c0 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
1a9d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a9e0 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28    traceCallback(
1a9f0 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61  String.Format(Na
1aa00 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74  meAndValueFormat
1aa10 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
1aa20 20 20 20 20 20 20 20 20 20 20 20 22 4e 6f 54 72             "NoTr
1aa30 61 63 65 22 2c 20 46 6f 72 44 69 73 70 6c 61 79  ace", ForDisplay
1aa40 28 6e 6f 54 72 61 63 65 29 29 2c 0d 0a 20 20 20  (noTrace)),..   
1aa50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1aa60 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f       traceCatego
1aa70 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
1aa80 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
1aa90 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67  eCallback(String
1aaa0 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56  .Format(NameAndV
1aab0 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20  alueFormat,..   
1aac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1aad0 20 20 20 20 20 22 4e 6f 43 6f 6e 73 6f 6c 65 22       "NoConsole"
1aae0 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 6e 6f 43  , ForDisplay(noC
1aaf0 6f 6e 73 6f 6c 65 29 29 2c 0d 0a 20 20 20 20 20  onsole)),..     
1ab00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ab10 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
1ab20 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
1ab30 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
1ab40 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46  allback(String.F
1ab50 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c  ormat(NameAndVal
1ab60 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20  ueFormat,..     
1ab70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ab80 20 20 20 22 4e 6f 4c 6f 67 22 2c 20 46 6f 72 44     "NoLog", ForD
1ab90 69 73 70 6c 61 79 28 6e 6f 4c 6f 67 29 29 2c 0d  isplay(noLog)),.
1aba0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1abb0 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
1abc0 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
1abd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1abe0 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74  traceCallback(St
1abf0 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65  ring.Format(Name
1ac00 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d  AndValueFormat,.
1ac10 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1ac20 20 20 20 20 20 20 20 20 20 22 54 68 72 6f 77 4f           "ThrowO
1ac30 6e 4d 69 73 73 69 6e 67 22 2c 20 46 6f 72 44 69  nMissing", ForDi
1ac40 73 70 6c 61 79 28 74 68 72 6f 77 4f 6e 4d 69 73  splay(throwOnMis
1ac50 73 69 6e 67 29 29 2c 0d 0a 20 20 20 20 20 20 20  sing)),..       
1ac60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ac70 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
1ac80 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1ac90 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c          traceCal
1aca0 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72  lback(String.For
1acb0 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65  mat(NameAndValue
1acc0 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20  Format,..       
1acd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ace0 20 22 57 68 61 74 49 66 22 2c 20 46 6f 72 44 69   "WhatIf", ForDi
1acf0 73 70 6c 61 79 28 77 68 61 74 49 66 29 29 2c 0d  splay(whatIf)),.
1ad00 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1ad10 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
1ad20 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
1ad30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ad40 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74  traceCallback(St
1ad50 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65  ring.Format(Name
1ad60 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d  AndValueFormat,.
1ad70 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1ad80 20 20 20 20 20 20 20 20 20 22 44 65 62 75 67 22           "Debug"
1ad90 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 64 65 62  , ForDisplay(deb
1ada0 75 67 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  ug)),..         
1adb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
1adc0 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
1add0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1ade0 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62        traceCallb
1adf0 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ack(String.Forma
1ae00 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f  t(NameAndValueFo
1ae10 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20  rmat,..         
1ae20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
1ae30 56 65 72 62 6f 73 65 22 2c 20 46 6f 72 44 69 73  Verbose", ForDis
1ae40 70 6c 61 79 28 76 65 72 62 6f 73 65 29 29 2c 0d  play(verbose)),.
1ae50 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1ae60 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
1ae70 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
1ae80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ae90 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74  traceCallback(St
1aea0 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65  ring.Format(Name
1aeb0 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d  AndValueFormat,.
1aec0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1aed0 20 20 20 20 20 20 20 20 20 22 43 6f 6e 66 69 72           "Confir
1aee0 6d 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 63  m", ForDisplay(c
1aef0 6f 6e 66 69 72 6d 29 29 2c 0d 0a 20 20 20 20 20  onfirm)),..     
1af00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1af10 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
1af20 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
1af30 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
1af40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1af50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1af60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1af70 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
1af80 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
1af90 28 61 73 73 65 6d 62 6c 79 20 21 3d 20 6e 75 6c  (assembly != nul
1afa0 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
1afb0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
1afc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1afd0 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b     traceCallback
1afe0 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e  (String.Format(N
1aff0 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61  ameAndValueForma
1b000 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t,..            
1b010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b020 22 41 73 73 65 6d 62 6c 79 54 69 74 6c 65 22 2c  "AssemblyTitle",
1b030 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1b040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f                Fo
1b050 72 44 69 73 70 6c 61 79 28 47 65 74 41 73 73 65  rDisplay(GetAsse
1b060 6d 62 6c 79 54 69 74 6c 65 28 61 73 73 65 6d 62  mblyTitle(assemb
1b070 6c 79 29 29 29 2c 0d 0a 20 20 20 20 20 20 20 20  ly))),..        
1b080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b090 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72      traceCategor
1b0a0 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
1b0b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
1b0c0 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72  raceCallback(Str
1b0d0 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41  ing.Format(NameA
1b0e0 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a  ndValueFormat,..
1b0f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b100 20 20 20 20 20 20 20 20 20 20 20 20 22 41 73 73              "Ass
1b110 65 6d 62 6c 79 43 6f 6e 66 69 67 75 72 61 74 69  emblyConfigurati
1b120 6f 6e 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  on",..          
1b130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b140 20 20 46 6f 72 44 69 73 70 6c 61 79 28 47 65 74    ForDisplay(Get
1b150 41 73 73 65 6d 62 6c 79 43 6f 6e 66 69 67 75 72  AssemblyConfigur
1b160 61 74 69 6f 6e 28 61 73 73 65 6d 62 6c 79 29 29  ation(assembly))
1b170 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
1b180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b190 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
1b1a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1b1b0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
1b1c0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
1b1d0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
1b1e0 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
1b1f0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1b200 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b210 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b220 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b230 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b240 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
1b250 20 20 20 23 72 65 67 69 6f 6e 20 50 75 62 6c 69     #region Publi
1b260 63 20 50 72 6f 70 65 72 74 69 65 73 0d 0a 20 20  c Properties..  
1b270 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
1b280 65 20 41 73 73 65 6d 62 6c 79 20 61 73 73 65 6d  e Assembly assem
1b290 62 6c 79 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  bly;..          
1b2a0 20 20 70 75 62 6c 69 63 20 41 73 73 65 6d 62 6c    public Assembl
1b2b0 79 20 41 73 73 65 6d 62 6c 79 0d 0a 20 20 20 20  y Assembly..    
1b2c0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
1b2d0 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b             get {
1b2e0 20 72 65 74 75 72 6e 20 61 73 73 65 6d 62 6c 79   return assembly
1b2f0 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
1b300 20 20 20 20 20 73 65 74 20 7b 20 61 73 73 65 6d       set { assem
1b310 62 6c 79 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a  bly = value; }..
1b320 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
1b330 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
1b340 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b350 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b360 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b370 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b380 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1b390 70 72 69 76 61 74 65 20 73 74 72 69 6e 67 20 6c  private string l
1b3a0 6f 67 46 69 6c 65 4e 61 6d 65 3b 0d 0a 20 20 20  ogFileName;..   
1b3b0 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
1b3c0 73 74 72 69 6e 67 20 4c 6f 67 46 69 6c 65 4e 61  string LogFileNa
1b3d0 6d 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  me..            
1b3e0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
1b3f0 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20     get { return 
1b400 6c 6f 67 46 69 6c 65 4e 61 6d 65 3b 20 7d 0d 0a  logFileName; }..
1b410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b420 73 65 74 20 7b 20 6c 6f 67 46 69 6c 65 4e 61 6d  set { logFileNam
1b430 65 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20  e = value; }..  
1b440 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
1b450 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
1b460 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b470 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b480 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b490 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
1b4a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
1b4b0 69 76 61 74 65 20 73 74 72 69 6e 67 20 64 69 72  ivate string dir
1b4c0 65 63 74 6f 72 79 3b 0d 0a 20 20 20 20 20 20 20  ectory;..       
1b4d0 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 72 69       public stri
1b4e0 6e 67 20 44 69 72 65 63 74 6f 72 79 0d 0a 20 20  ng Directory..  
1b4f0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
1b500 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74               get
1b510 20 7b 20 72 65 74 75 72 6e 20 64 69 72 65 63 74   { return direct
1b520 6f 72 79 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  ory; }..        
1b530 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 64 69          set { di
1b540 72 65 63 74 6f 72 79 20 3d 20 76 61 6c 75 65 3b  rectory = value;
1b550 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
1b560 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
1b570 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
1b580 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b590 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b5a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b5b0 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
1b5c0 20 20 20 20 70 72 69 76 61 74 65 20 73 74 72 69      private stri
1b5d0 6e 67 20 63 6f 72 65 46 69 6c 65 4e 61 6d 65 3b  ng coreFileName;
1b5e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
1b5f0 62 6c 69 63 20 73 74 72 69 6e 67 20 43 6f 72 65  blic string Core
1b600 46 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 20 20 20  FileName..      
1b610 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
1b620 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72           get { r
1b630 65 74 75 72 6e 20 63 6f 72 65 46 69 6c 65 4e 61  eturn coreFileNa
1b640 6d 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  me; }..         
1b650 20 20 20 20 20 20 20 73 65 74 20 7b 20 63 6f 72         set { cor
1b660 65 46 69 6c 65 4e 61 6d 65 20 3d 20 76 61 6c 75  eFileName = valu
1b670 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  e; }..          
1b680 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
1b690 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
1b6a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b6b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b6c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b6d0 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
1b6e0 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74        private st
1b6f0 72 69 6e 67 20 6c 69 6e 71 46 69 6c 65 4e 61 6d  ring linqFileNam
1b700 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
1b710 70 75 62 6c 69 63 20 73 74 72 69 6e 67 20 4c 69  public string Li
1b720 6e 71 46 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 20  nqFileName..    
1b730 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
1b740 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b             get {
1b750 20 72 65 74 75 72 6e 20 6c 69 6e 71 46 69 6c 65   return linqFile
1b760 4e 61 6d 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20  Name; }..       
1b770 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 6c           set { l
1b780 69 6e 71 46 69 6c 65 4e 61 6d 65 20 3d 20 76 61  inqFileName = va
1b790 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  lue; }..        
1b7a0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
1b7b0 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
1b7c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b7d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b7e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b7f0 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
1b800 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
1b810 73 74 72 69 6e 67 20 64 65 73 69 67 6e 65 72 46  string designerF
1b820 69 6c 65 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20  ileName;..      
1b830 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 72        public str
1b840 69 6e 67 20 44 65 73 69 67 6e 65 72 46 69 6c 65  ing DesignerFile
1b850 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 20 20  Name..          
1b860 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
1b870 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72       get { retur
1b880 6e 20 64 65 73 69 67 6e 65 72 46 69 6c 65 4e 61  n designerFileNa
1b890 6d 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  me; }..         
1b8a0 20 20 20 20 20 20 20 73 65 74 20 7b 20 64 65 73         set { des
1b8b0 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 20 3d 20  ignerFileName = 
1b8c0 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20  value; }..      
1b8d0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
1b8e0 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
1b8f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b900 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b910 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b920 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
1b930 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
1b940 65 20 73 74 72 69 6e 67 20 64 65 62 75 67 46 6f  e string debugFo
1b950 72 6d 61 74 3b 0d 0a 20 20 20 20 20 20 20 20 20  rmat;..         
1b960 20 20 20 70 75 62 6c 69 63 20 73 74 72 69 6e 67     public string
1b970 20 44 65 62 75 67 46 6f 72 6d 61 74 0d 0a 20 20   DebugFormat..  
1b980 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
1b990 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74               get
1b9a0 20 7b 20 72 65 74 75 72 6e 20 64 65 62 75 67 46   { return debugF
1b9b0 6f 72 6d 61 74 3b 20 7d 0d 0a 20 20 20 20 20 20  ormat; }..      
1b9c0 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20            set { 
1b9d0 64 65 62 75 67 46 6f 72 6d 61 74 20 3d 20 76 61  debugFormat = va
1b9e0 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  lue; }..        
1b9f0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
1ba00 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
1ba10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ba20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ba30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ba40 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
1ba50 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
1ba60 73 74 72 69 6e 67 20 74 72 61 63 65 46 6f 72 6d  string traceForm
1ba70 61 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at;..           
1ba80 20 70 75 62 6c 69 63 20 73 74 72 69 6e 67 20 54   public string T
1ba90 72 61 63 65 46 6f 72 6d 61 74 0d 0a 20 20 20 20  raceFormat..    
1baa0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
1bab0 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b             get {
1bac0 20 72 65 74 75 72 6e 20 74 72 61 63 65 46 6f 72   return traceFor
1bad0 6d 61 74 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  mat; }..        
1bae0 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 74 72          set { tr
1baf0 61 63 65 46 6f 72 6d 61 74 20 3d 20 76 61 6c 75  aceFormat = valu
1bb00 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  e; }..          
1bb10 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
1bb20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
1bb30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1bb40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1bb50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1bb60 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
1bb70 20 20 20 20 20 20 70 72 69 76 61 74 65 20 49 6e        private In
1bb80 73 74 61 6c 6c 46 6c 61 67 73 20 69 6e 73 74 61  stallFlags insta
1bb90 6c 6c 46 6c 61 67 73 3b 0d 0a 20 20 20 20 20 20  llFlags;..      
1bba0 20 20 20 20 20 20 70 75 62 6c 69 63 20 49 6e 73        public Ins
1bbb0 74 61 6c 6c 46 6c 61 67 73 20 49 6e 73 74 61 6c  tallFlags Instal
1bbc0 6c 46 6c 61 67 73 0d 0a 20 20 20 20 20 20 20 20  lFlags..        
1bbd0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
1bbe0 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74         get { ret
1bbf0 75 72 6e 20 69 6e 73 74 61 6c 6c 46 6c 61 67 73  urn installFlags
1bc00 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
1bc10 20 20 20 20 20 73 65 74 20 7b 20 69 6e 73 74 61       set { insta
1bc20 6c 6c 46 6c 61 67 73 20 3d 20 76 61 6c 75 65 3b  llFlags = value;
1bc30 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
1bc40 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
1bc50 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
1bc60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1bc70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1bc80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1bc90 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
1bca0 20 20 20 20 70 72 69 76 61 74 65 20 54 72 61 63      private Trac
1bcb0 65 50 72 69 6f 72 69 74 79 20 64 65 62 75 67 50  ePriority debugP
1bcc0 72 69 6f 72 69 74 79 3b 0d 0a 20 20 20 20 20 20  riority;..      
1bcd0 20 20 20 20 20 20 70 75 62 6c 69 63 20 54 72 61        public Tra
1bce0 63 65 50 72 69 6f 72 69 74 79 20 44 65 62 75 67  cePriority Debug
1bcf0 50 72 69 6f 72 69 74 79 0d 0a 20 20 20 20 20 20  Priority..      
1bd00 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
1bd10 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72           get { r
1bd20 65 74 75 72 6e 20 64 65 62 75 67 50 72 69 6f 72  eturn debugPrior
1bd30 69 74 79 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  ity; }..        
1bd40 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 64 65          set { de
1bd50 62 75 67 50 72 69 6f 72 69 74 79 20 3d 20 76 61  bugPriority = va
1bd60 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  lue; }..        
1bd70 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
1bd80 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
1bd90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1bda0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1bdb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1bdc0 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
1bdd0 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
1bde0 54 72 61 63 65 50 72 69 6f 72 69 74 79 20 74 72  TracePriority tr
1bdf0 61 63 65 50 72 69 6f 72 69 74 79 3b 0d 0a 20 20  acePriority;..  
1be00 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
1be10 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 20 54   TracePriority T
1be20 72 61 63 65 50 72 69 6f 72 69 74 79 0d 0a 20 20  racePriority..  
1be30 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
1be40 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74               get
1be50 20 7b 20 72 65 74 75 72 6e 20 74 72 61 63 65 50   { return traceP
1be60 72 69 6f 72 69 74 79 3b 20 7d 0d 0a 20 20 20 20  riority; }..    
1be70 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20              set 
1be80 7b 20 74 72 61 63 65 50 72 69 6f 72 69 74 79 20  { tracePriority 
1be90 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20  = value; }..    
1bea0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
1beb0 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
1bec0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1bed0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1bee0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1bef0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
1bf00 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
1bf10 61 74 65 20 62 6f 6f 6c 20 69 6e 73 74 61 6c 6c  ate bool install
1bf20 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ;..            p
1bf30 75 62 6c 69 63 20 62 6f 6f 6c 20 49 6e 73 74 61  ublic bool Insta
1bf40 6c 6c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ll..            
1bf50 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
1bf60 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20     get { return 
1bf70 69 6e 73 74 61 6c 6c 3b 20 7d 0d 0a 20 20 20 20  install; }..    
1bf80 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20              set 
1bf90 7b 20 69 6e 73 74 61 6c 6c 20 3d 20 76 61 6c 75  { install = valu
1bfa0 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  e; }..          
1bfb0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
1bfc0 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
1bfd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1bfe0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1bff0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c000 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
1c010 20 20 20 20 20 20 70 72 69 76 61 74 65 20 62 6f        private bo
1c020 6f 6c 20 77 6f 77 36 34 3b 0d 0a 20 20 20 20 20  ol wow64;..     
1c030 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f         public bo
1c040 6f 6c 20 57 6f 77 36 34 0d 0a 20 20 20 20 20 20  ol Wow64..      
1c050 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
1c060 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72           get { r
1c070 65 74 75 72 6e 20 77 6f 77 36 34 3b 20 7d 0d 0a  eturn wow64; }..
1c080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c090 73 65 74 20 7b 20 77 6f 77 36 34 20 3d 20 76 61  set { wow64 = va
1c0a0 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  lue; }..        
1c0b0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
1c0c0 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
1c0d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c0e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c0f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c100 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
1c110 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
1c120 62 6f 6f 6c 20 6e 6f 52 75 6e 74 69 6d 65 56 65  bool noRuntimeVe
1c130 72 73 69 6f 6e 3b 0d 0a 20 20 20 20 20 20 20 20  rsion;..        
1c140 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20      public bool 
1c150 4e 6f 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e  NoRuntimeVersion
1c160 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
1c170 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1c180 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 6e 6f   get { return no
1c190 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 3b 20  RuntimeVersion; 
1c1a0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
1c1b0 20 20 20 73 65 74 20 7b 20 6e 6f 52 75 6e 74 69     set { noRunti
1c1c0 6d 65 56 65 72 73 69 6f 6e 20 3d 20 76 61 6c 75  meVersion = valu
1c1d0 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  e; }..          
1c1e0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
1c1f0 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
1c200 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c210 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c220 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c230 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
1c240 20 20 20 20 20 20 70 72 69 76 61 74 65 20 62 6f        private bo
1c250 6f 6c 20 6e 6f 44 65 73 6b 74 6f 70 3b 0d 0a 20  ol noDesktop;.. 
1c260 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
1c270 63 20 62 6f 6f 6c 20 4e 6f 44 65 73 6b 74 6f 70  c bool NoDesktop
1c280 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
1c290 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1c2a0 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 6e 6f   get { return no
1c2b0 44 65 73 6b 74 6f 70 3b 20 7d 0d 0a 20 20 20 20  Desktop; }..    
1c2c0 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20              set 
1c2d0 7b 20 6e 6f 44 65 73 6b 74 6f 70 20 3d 20 76 61  { noDesktop = va
1c2e0 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  lue; }..        
1c2f0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
1c300 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 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 70 72 69 76 61 74 65 20          private 
1c360 62 6f 6f 6c 20 6e 6f 43 6f 6d 70 61 63 74 3b 0d  bool noCompact;.
1c370 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
1c380 6c 69 63 20 62 6f 6f 6c 20 4e 6f 43 6f 6d 70 61  lic bool NoCompa
1c390 63 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ct..            
1c3a0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
1c3b0 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20     get { return 
1c3c0 6e 6f 43 6f 6d 70 61 63 74 3b 20 7d 0d 0a 20 20  noCompact; }..  
1c3d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65                se
1c3e0 74 20 7b 20 6e 6f 43 6f 6d 70 61 63 74 20 3d 20  t { noCompact = 
1c3f0 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20  value; }..      
1c400 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
1c410 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
1c420 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c430 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c440 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c450 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
1c460 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
1c470 65 20 62 6f 6f 6c 20 6e 6f 4e 65 74 46 78 32 30  e bool noNetFx20
1c480 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ;..            p
1c490 75 62 6c 69 63 20 62 6f 6f 6c 20 4e 6f 4e 65 74  ublic bool NoNet
1c4a0 46 78 32 30 0d 0a 20 20 20 20 20 20 20 20 20 20  Fx20..          
1c4b0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
1c4c0 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72       get { retur
1c4d0 6e 20 6e 6f 4e 65 74 46 78 32 30 3b 20 7d 0d 0a  n noNetFx20; }..
1c4e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c4f0 73 65 74 20 7b 20 6e 6f 4e 65 74 46 78 32 30 20  set { noNetFx20 
1c500 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20  = value; }..    
1c510 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
1c520 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
1c530 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c540 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c550 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c560 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
1c570 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
1c580 61 74 65 20 62 6f 6f 6c 20 6e 6f 4e 65 74 46 78  ate bool noNetFx
1c590 34 30 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  40;..           
1c5a0 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 4e 6f 4e   public bool NoN
1c5b0 65 74 46 78 34 30 0d 0a 20 20 20 20 20 20 20 20  etFx40..        
1c5c0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
1c5d0 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74         get { ret
1c5e0 75 72 6e 20 6e 6f 4e 65 74 46 78 34 30 3b 20 7d  urn noNetFx40; }
1c5f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1c600 20 20 73 65 74 20 7b 20 6e 6f 4e 65 74 46 78 34    set { noNetFx4
1c610 30 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20  0 = value; }..  
1c620 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
1c630 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
1c640 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c650 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c660 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c670 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
1c680 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
1c690 69 76 61 74 65 20 62 6f 6f 6c 20 6e 6f 56 73 32  ivate bool noVs2
1c6a0 30 30 38 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  008;..          
1c6b0 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 4e 6f    public bool No
1c6c0 56 73 32 30 30 38 0d 0a 20 20 20 20 20 20 20 20  Vs2008..        
1c6d0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
1c6e0 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74         get { ret
1c6f0 75 72 6e 20 6e 6f 56 73 32 30 30 38 3b 20 7d 0d  urn noVs2008; }.
1c700 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1c710 20 73 65 74 20 7b 20 6e 6f 56 73 32 30 30 38 20   set { noVs2008 
1c720 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20  = value; }..    
1c730 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
1c740 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
1c750 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c760 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c770 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c780 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
1c790 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
1c7a0 61 74 65 20 62 6f 6f 6c 20 6e 6f 56 73 32 30 31  ate bool noVs201
1c7b0 30 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  0;..            
1c7c0 70 75 62 6c 69 63 20 62 6f 6f 6c 20 4e 6f 56 73  public bool NoVs
1c7d0 32 30 31 30 0d 0a 20 20 20 20 20 20 20 20 20 20  2010..          
1c7e0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
1c7f0 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72       get { retur
1c800 6e 20 6e 6f 56 73 32 30 31 30 3b 20 7d 0d 0a 20  n noVs2010; }.. 
1c810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
1c820 65 74 20 7b 20 6e 6f 56 73 32 30 31 30 20 3d 20  et { noVs2010 = 
1c830 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20  value; }..      
1c840 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
1c850 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c880 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c890 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
1c8a0 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
1c8b0 65 20 62 6f 6f 6c 20 6e 6f 54 72 61 63 65 3b 0d  e bool noTrace;.
1c8c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
1c8d0 6c 69 63 20 62 6f 6f 6c 20 4e 6f 54 72 61 63 65  lic bool NoTrace
1c8e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
1c8f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1c900 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 6e 6f   get { return no
1c910 54 72 61 63 65 3b 20 7d 0d 0a 20 20 20 20 20 20  Trace; }..      
1c920 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20            set { 
1c930 6e 6f 54 72 61 63 65 20 3d 20 76 61 6c 75 65 3b  noTrace = value;
1c940 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
1c950 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
1c960 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c990 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c9a0 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
1c9b0 20 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c      private bool
1c9c0 20 6e 6f 43 6f 6e 73 6f 6c 65 3b 0d 0a 20 20 20   noConsole;..   
1c9d0 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
1c9e0 62 6f 6f 6c 20 4e 6f 43 6f 6e 73 6f 6c 65 0d 0a  bool NoConsole..
1c9f0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
1ca00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67                 g
1ca10 65 74 20 7b 20 72 65 74 75 72 6e 20 6e 6f 43 6f  et { return noCo
1ca20 6e 73 6f 6c 65 3b 20 7d 0d 0a 20 20 20 20 20 20  nsole; }..      
1ca30 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20            set { 
1ca40 6e 6f 43 6f 6e 73 6f 6c 65 20 3d 20 76 61 6c 75  noConsole = valu
1ca50 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  e; }..          
1ca60 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
1ca70 20 20 20 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 2f 2f 2f 2f 2f 2f 2f  ////////////////
1cab0 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
1cac0 20 20 20 20 20 20 70 72 69 76 61 74 65 20 62 6f        private bo
1cad0 6f 6c 20 6e 6f 4c 6f 67 3b 0d 0a 20 20 20 20 20  ol noLog;..     
1cae0 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f         public bo
1caf0 6f 6c 20 4e 6f 4c 6f 67 0d 0a 20 20 20 20 20 20  ol NoLog..      
1cb00 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
1cb10 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72           get { r
1cb20 65 74 75 72 6e 20 6e 6f 4c 6f 67 3b 20 7d 0d 0a  eturn noLog; }..
1cb30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cb40 73 65 74 20 7b 20 6e 6f 4c 6f 67 20 3d 20 76 61  set { noLog = va
1cb50 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  lue; }..        
1cb60 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
1cb70 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
1cb80 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20  ////////....    
1cbc0 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
1cbd0 62 6f 6f 6c 20 74 68 72 6f 77 4f 6e 4d 69 73 73  bool throwOnMiss
1cbe0 69 6e 67 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ing;..          
1cbf0 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 54 68    public bool Th
1cc00 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 0d 0a 20 20  rowOnMissing..  
1cc10 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
1cc20 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74               get
1cc30 20 7b 20 72 65 74 75 72 6e 20 74 68 72 6f 77 4f   { return throwO
1cc40 6e 4d 69 73 73 69 6e 67 3b 20 7d 0d 0a 20 20 20  nMissing; }..   
1cc50 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74               set
1cc60 20 7b 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e   { throwOnMissin
1cc70 67 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20  g = value; }..  
1cc80 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
1cc90 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
1cca0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ccb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a  //////////////..
1cce0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
1ccf0 69 76 61 74 65 20 62 6f 6f 6c 20 77 68 61 74 49  ivate bool whatI
1cd00 66 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  f;..            
1cd10 70 75 62 6c 69 63 20 62 6f 6f 6c 20 57 68 61 74  public bool What
1cd20 49 66 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  If..            
1cd30 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
1cd40 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20     get { return 
1cd50 77 68 61 74 49 66 3b 20 7d 0d 0a 20 20 20 20 20  whatIf; }..     
1cd60 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b             set {
1cd70 20 77 68 61 74 49 66 20 3d 20 76 61 6c 75 65 3b   whatIf = value;
1cd80 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
1cd90 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
1cda0 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
1cdb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1cdc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1cdd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1cde0 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
1cdf0 20 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c      private bool
1ce00 20 64 65 62 75 67 3b 0d 0a 20 20 20 20 20 20 20   debug;..       
1ce10 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c       public bool
1ce20 20 44 65 62 75 67 0d 0a 20 20 20 20 20 20 20 20   Debug..        
1ce30 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
1ce40 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74         get { ret
1ce50 75 72 6e 20 64 65 62 75 67 3b 20 7d 0d 0a 20 20  urn debug; }..  
1ce60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65                se
1ce70 74 20 7b 20 64 65 62 75 67 20 3d 20 76 61 6c 75  t { debug = valu
1ce80 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  e; }..          
1ce90 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
1cea0 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
1ceb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1cec0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ced0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1cee0 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
1cef0 20 20 20 20 20 20 70 72 69 76 61 74 65 20 62 6f        private bo
1cf00 6f 6c 20 76 65 72 62 6f 73 65 3b 0d 0a 20 20 20  ol verbose;..   
1cf10 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
1cf20 62 6f 6f 6c 20 56 65 72 62 6f 73 65 0d 0a 20 20  bool Verbose..  
1cf30 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
1cf40 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74               get
1cf50 20 7b 20 72 65 74 75 72 6e 20 76 65 72 62 6f 73   { return verbos
1cf60 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  e; }..          
1cf70 20 20 20 20 20 20 73 65 74 20 7b 20 76 65 72 62        set { verb
1cf80 6f 73 65 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a  ose = value; }..
1cf90 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
1cfa0 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
1cfb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1cfc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1cfd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1cfe0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1cff0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1d000 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 63 6f 6e  private bool con
1d010 66 69 72 6d 3b 0d 0a 20 20 20 20 20 20 20 20 20  firm;..         
1d020 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 43     public bool C
1d030 6f 6e 66 69 72 6d 0d 0a 20 20 20 20 20 20 20 20  onfirm..        
1d040 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
1d050 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74         get { ret
1d060 75 72 6e 20 63 6f 6e 66 69 72 6d 3b 20 7d 0d 0a  urn confirm; }..
1d070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d080 73 65 74 20 7b 20 63 6f 6e 66 69 72 6d 20 3d 20  set { confirm = 
1d090 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20  value; }..      
1d0a0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
1d0b0 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d       #endregion.
1d0c0 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
1d0d0 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
1d0e0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
1d0f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d100 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d110 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d120 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d130 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65  /....        #re
1d140 67 69 6f 6e 20 46 72 61 6d 65 77 6f 72 6b 4c 69  gion FrameworkLi
1d150 73 74 20 43 6c 61 73 73 0d 0a 20 20 20 20 20 20  st Class..      
1d160 20 20 70 72 69 76 61 74 65 20 73 65 61 6c 65 64    private sealed
1d170 20 63 6c 61 73 73 20 46 72 61 6d 65 77 6f 72 6b   class Framework
1d180 4c 69 73 74 0d 0a 20 20 20 20 20 20 20 20 7b 0d  List..        {.
1d190 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 72 65  .            #re
1d1a0 67 69 6f 6e 20 50 75 62 6c 69 63 20 43 6f 6e 73  gion Public Cons
1d1b0 74 72 75 63 74 6f 72 73 0d 0a 20 20 20 20 20 20  tructors..      
1d1c0 20 20 20 20 20 20 70 75 62 6c 69 63 20 46 72 61        public Fra
1d1d0 6d 65 77 6f 72 6b 4c 69 73 74 28 29 0d 0a 20 20  meworkList()..  
1d1e0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
1d1f0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
1d200 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20  do nothing...   
1d210 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
1d220 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
1d230 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  on....          
1d240 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
1d250 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d260 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d270 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d280 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
1d290 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 75 62       #region Pub
1d2a0 6c 69 63 20 4d 65 74 68 6f 64 73 0d 0a 20 20 20  lic Methods..   
1d2b0 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65           private
1d2c0 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79   MockRegistryKey
1d2d0 20 72 6f 6f 74 4b 65 79 3b 0d 0a 20 20 20 20 20   rootKey;..     
1d2e0 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 4d 6f         public Mo
1d2f0 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 52 6f  ckRegistryKey Ro
1d300 6f 74 4b 65 79 0d 0a 20 20 20 20 20 20 20 20 20  otKey..         
1d310 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
1d320 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75        get { retu
1d330 72 6e 20 72 6f 6f 74 4b 65 79 3b 20 7d 0d 0a 20  rn rootKey; }.. 
1d340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
1d350 65 74 20 7b 20 72 6f 6f 74 4b 65 79 20 3d 20 76  et { rootKey = v
1d360 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20  alue; }..       
1d370 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
1d380 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
1d390 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d3a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20  /////////....   
1d3d0 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65           private
1d3e0 20 53 74 72 69 6e 67 4c 69 73 74 20 6e 61 6d 65   StringList name
1d3f0 73 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  s;..            
1d400 70 75 62 6c 69 63 20 53 74 72 69 6e 67 4c 69 73  public StringLis
1d410 74 20 4e 61 6d 65 73 0d 0a 20 20 20 20 20 20 20  t Names..       
1d420 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
1d430 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65          get { re
1d440 74 75 72 6e 20 6e 61 6d 65 73 3b 20 7d 0d 0a 20  turn names; }.. 
1d450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
1d460 65 74 20 7b 20 6e 61 6d 65 73 20 3d 20 76 61 6c  et { names = val
1d470 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  ue; }..         
1d480 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
1d490 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
1d4a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d4b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d4c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d4d0 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
1d4e0 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 56         private V
1d4f0 65 72 73 69 6f 6e 4d 61 70 20 76 65 72 73 69 6f  ersionMap versio
1d500 6e 73 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ns;..           
1d510 20 70 75 62 6c 69 63 20 56 65 72 73 69 6f 6e 4d   public VersionM
1d520 61 70 20 56 65 72 73 69 6f 6e 73 0d 0a 20 20 20  ap Versions..   
1d530 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
1d540 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20              get 
1d550 7b 20 72 65 74 75 72 6e 20 76 65 72 73 69 6f 6e  { return version
1d560 73 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  s; }..          
1d570 20 20 20 20 20 20 73 65 74 20 7b 20 76 65 72 73        set { vers
1d580 69 6f 6e 73 20 3d 20 76 61 6c 75 65 3b 20 7d 0d  ions = value; }.
1d590 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
1d5a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
1d5b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d5c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d5d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d5e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d5f0 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
1d600 20 70 72 69 76 61 74 65 20 53 74 72 69 6e 67 4c   private StringL
1d610 69 73 74 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65  ist platformName
1d620 73 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  s;..            
1d630 70 75 62 6c 69 63 20 53 74 72 69 6e 67 4c 69 73  public StringLis
1d640 74 20 50 6c 61 74 66 6f 72 6d 4e 61 6d 65 73 0d  t PlatformNames.
1d650 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
1d660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d670 67 65 74 20 7b 20 72 65 74 75 72 6e 20 70 6c 61  get { return pla
1d680 74 66 6f 72 6d 4e 61 6d 65 73 3b 20 7d 0d 0a 20  tformNames; }.. 
1d690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
1d6a0 65 74 20 7b 20 70 6c 61 74 66 6f 72 6d 4e 61 6d  et { platformNam
1d6b0 65 73 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20  es = value; }.. 
1d6c0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
1d6d0 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65            #endre
1d6e0 67 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20 7d 0d  gion..        }.
1d6f0 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67  .        #endreg
1d700 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  ion....        /
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 2f  ////////////////
1d730 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d740 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d750 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
1d760 20 20 23 72 65 67 69 6f 6e 20 56 73 4c 69 73 74    #region VsList
1d770 20 43 6c 61 73 73 0d 0a 20 20 20 20 20 20 20 20   Class..        
1d780 70 72 69 76 61 74 65 20 73 65 61 6c 65 64 20 63  private sealed c
1d790 6c 61 73 73 20 56 73 4c 69 73 74 0d 0a 20 20 20  lass VsList..   
1d7a0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
1d7b0 20 20 20 20 23 72 65 67 69 6f 6e 20 50 75 62 6c      #region Publ
1d7c0 69 63 20 43 6f 6e 73 74 72 75 63 74 6f 72 73 0d  ic Constructors.
1d7d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
1d7e0 6c 69 63 20 56 73 4c 69 73 74 28 29 0d 0a 20 20  lic VsList()..  
1d7f0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
1d800 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
1d810 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20  do nothing...   
1d820 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
1d830 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
1d840 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  on....          
1d850 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
1d860 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d870 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d880 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d890 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
1d8a0 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 75 62       #region Pub
1d8b0 6c 69 63 20 50 72 6f 70 65 72 74 69 65 73 0d 0a  lic Properties..
1d8c0 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
1d8d0 61 74 65 20 4d 6f 63 6b 52 65 67 69 73 74 72 79  ate MockRegistry
1d8e0 4b 65 79 20 72 6f 6f 74 4b 65 79 3b 0d 0a 20 20  Key rootKey;..  
1d8f0 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
1d900 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79   MockRegistryKey
1d910 20 52 6f 6f 74 4b 65 79 0d 0a 20 20 20 20 20 20   RootKey..      
1d920 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
1d930 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72           get { r
1d940 65 74 75 72 6e 20 72 6f 6f 74 4b 65 79 3b 20 7d  eturn rootKey; }
1d950 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1d960 20 20 73 65 74 20 7b 20 72 6f 6f 74 4b 65 79 20    set { rootKey 
1d970 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20  = value; }..    
1d980 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
1d990 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
1d9a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d9b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d9c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d9d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
1d9e0 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
1d9f0 61 74 65 20 56 65 72 73 69 6f 6e 4c 69 73 74 20  ate VersionList 
1da00 76 65 72 73 69 6f 6e 73 3b 0d 0a 20 20 20 20 20  versions;..     
1da10 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 56 65         public Ve
1da20 72 73 69 6f 6e 4c 69 73 74 20 56 65 72 73 69 6f  rsionList Versio
1da30 6e 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ns..            
1da40 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
1da50 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20     get { return 
1da60 76 65 72 73 69 6f 6e 73 3b 20 7d 0d 0a 20 20 20  versions; }..   
1da70 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74               set
1da80 20 7b 20 76 65 72 73 69 6f 6e 73 20 3d 20 76 61   { versions = va
1da90 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  lue; }..        
1daa0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
1dab0 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 20     #endregion.. 
1dac0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
1dad0 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 20 20    #endregion..  
1dae0 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
1daf0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
1db00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1db10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1db20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1db30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1db40 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23  ///....        #
1db50 72 65 67 69 6f 6e 20 50 72 69 76 61 74 65 20 43  region Private C
1db60 6f 6e 73 74 61 6e 74 20 44 61 74 61 0d 0a 20 20  onstant Data..  
1db70 20 20 20 20 20 20 70 72 69 76 61 74 65 20 63 6f        private co
1db80 6e 73 74 20 73 74 72 69 6e 67 20 43 6f 72 65 46  nst string CoreF
1db90 69 6c 65 4e 61 6d 65 20 3d 20 22 53 79 73 74 65  ileName = "Syste
1dba0 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 64 6c  m.Data.SQLite.dl
1dbb0 6c 22 3b 0d 0a 20 20 20 20 20 20 20 20 70 72 69  l";..        pri
1dbc0 76 61 74 65 20 63 6f 6e 73 74 20 73 74 72 69 6e  vate const strin
1dbd0 67 20 4c 69 6e 71 46 69 6c 65 4e 61 6d 65 20 3d  g LinqFileName =
1dbe0 20 22 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51   "System.Data.SQ
1dbf0 4c 69 74 65 2e 4c 69 6e 71 2e 64 6c 6c 22 3b 0d  Lite.Linq.dll";.
1dc00 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
1dc10 20 63 6f 6e 73 74 20 73 74 72 69 6e 67 20 44 65   const string De
1dc20 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 20 3d  signerFileName =
1dc30 20 22 53 51 4c 69 74 65 2e 44 65 73 69 67 6e 65   "SQLite.Designe
1dc40 72 2e 64 6c 6c 22 3b 0d 0a 20 20 20 20 20 20 20  r.dll";..       
1dc50 20 70 72 69 76 61 74 65 20 63 6f 6e 73 74 20 73   private const s
1dc60 74 72 69 6e 67 20 50 72 6f 76 69 64 65 72 4e 61  tring ProviderNa
1dc70 6d 65 20 3d 20 22 53 51 4c 69 74 65 20 44 61 74  me = "SQLite Dat
1dc80 61 20 50 72 6f 76 69 64 65 72 22 3b 0d 0a 20 20  a Provider";..  
1dc90 20 20 20 20 20 20 70 72 69 76 61 74 65 20 63 6f        private co
1dca0 6e 73 74 20 73 74 72 69 6e 67 20 50 72 6f 6a 65  nst string Proje
1dcb0 63 74 4e 61 6d 65 20 3d 20 22 53 79 73 74 65 6d  ctName = "System
1dcc0 2e 44 61 74 61 2e 53 51 4c 69 74 65 22 3b 0d 0a  .Data.SQLite";..
1dcd0 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
1dce0 63 6f 6e 73 74 20 73 74 72 69 6e 67 20 4c 65 67  const string Leg
1dcf0 61 63 79 50 72 6f 6a 65 63 74 4e 61 6d 65 20 3d  acyProjectName =
1dd00 20 22 53 51 4c 69 74 65 22 3b 0d 0a 20 20 20 20   "SQLite";..    
1dd10 20 20 20 20 70 72 69 76 61 74 65 20 63 6f 6e 73      private cons
1dd20 74 20 73 74 72 69 6e 67 20 49 6e 76 61 72 69 61  t string Invaria
1dd30 6e 74 4e 61 6d 65 20 3d 20 22 53 79 73 74 65 6d  ntName = "System
1dd40 2e 44 61 74 61 2e 53 51 4c 69 74 65 22 3b 0d 0a  .Data.SQLite";..
1dd50 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
1dd60 63 6f 6e 73 74 20 73 74 72 69 6e 67 20 46 61 63  const string Fac
1dd70 74 6f 72 79 54 79 70 65 4e 61 6d 65 20 3d 20 22  toryTypeName = "
1dd80 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69  System.Data.SQLi
1dd90 74 65 2e 53 51 4c 69 74 65 46 61 63 74 6f 72 79  te.SQLiteFactory
1dda0 22 3b 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  ";..        priv
1ddb0 61 74 65 20 63 6f 6e 73 74 20 73 74 72 69 6e 67  ate const string
1ddc0 20 44 65 73 63 72 69 70 74 69 6f 6e 20 3d 20 22   Description = "
1ddd0 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b 20 44  .NET Framework D
1dde0 61 74 61 20 50 72 6f 76 69 64 65 72 20 66 6f 72  ata Provider for
1ddf0 20 53 51 4c 69 74 65 22 3b 0d 0a 0d 0a 20 20 20   SQLite";....   
1de00 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
1de10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1de20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1de30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1de40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
1de50 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
1de60 63 6f 6e 73 74 20 73 74 72 69 6e 67 20 43 4c 52  const string CLR
1de70 76 32 49 6d 61 67 65 52 75 6e 74 69 6d 65 56 65  v2ImageRuntimeVe
1de80 72 73 69 6f 6e 20 3d 20 22 76 32 2e 30 2e 35 30  rsion = "v2.0.50
1de90 37 32 37 22 3b 0d 0a 20 20 20 20 20 20 20 20 70  727";..        p
1dea0 72 69 76 61 74 65 20 63 6f 6e 73 74 20 73 74 72  rivate const str
1deb0 69 6e 67 20 43 4c 52 76 34 49 6d 61 67 65 52 75  ing CLRv4ImageRu
1dec0 6e 74 69 6d 65 56 65 72 73 69 6f 6e 20 3d 20 22  ntimeVersion = "
1ded0 76 34 2e 30 2e 33 30 33 31 39 22 3b 0d 0a 0d 0a  v4.0.30319";....
1dee0 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
1def0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1df00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1df10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1df20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
1df30 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  ...        priva
1df40 74 65 20 63 6f 6e 73 74 20 73 74 72 69 6e 67 20  te const string 
1df50 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d  NameAndValueForm
1df60 61 74 20 3d 20 22 7b 30 7d 3a 20 7b 31 7d 22 3b  at = "{0}: {1}";
1df70 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
1df80 65 20 63 6f 6e 73 74 20 73 74 72 69 6e 67 20 4c  e const string L
1df90 6f 67 46 69 6c 65 53 75 66 66 69 78 20 3d 20 22  ogFileSuffix = "
1dfa0 2e 6c 6f 67 22 3b 0d 0a 0d 0a 20 20 20 20 20 20  .log";....      
1dfb0 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
1dfc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1dfd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1dfe0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1dff0 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
1e000 20 20 20 20 20 70 72 69 76 61 74 65 20 63 6f 6e       private con
1e010 73 74 20 73 74 72 69 6e 67 20 52 6f 6f 74 4b 65  st string RootKe
1e020 79 4e 61 6d 65 20 3d 20 22 53 6f 66 74 77 61 72  yName = "Softwar
1e030 65 22 3b 0d 0a 20 20 20 20 20 20 20 20 70 72 69  e";..        pri
1e040 76 61 74 65 20 63 6f 6e 73 74 20 73 74 72 69 6e  vate const strin
1e050 67 20 57 6f 77 36 34 53 75 62 4b 65 79 4e 61 6d  g Wow64SubKeyNam
1e060 65 20 3d 20 22 57 6f 77 36 34 33 32 4e 6f 64 65  e = "Wow6432Node
1e070 22 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ";....        //
1e080 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e090 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e0a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e0b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e0c0 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
1e0d0 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20   //..        // 
1e0e0 4e 4f 54 45 3a 20 54 68 65 20 2e 4e 45 54 20 46  NOTE: The .NET F
1e0f0 72 61 6d 65 77 6f 72 6b 20 68 61 73 20 62 6f 74  ramework has bot
1e100 68 20 33 32 2d 62 69 74 20 61 6e 64 20 36 34 2d  h 32-bit and 64-
1e110 62 69 74 20 65 64 69 74 69 6f 6e 73 2e 0d 0a 20  bit editions... 
1e120 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
1e130 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69     private stati
1e140 63 20 72 65 61 64 6f 6e 6c 79 20 62 6f 6f 6c 20  c readonly bool 
1e150 4e 65 74 46 78 49 73 33 32 42 69 74 4f 6e 6c 79  NetFxIs32BitOnly
1e160 20 3d 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20   = false;....   
1e170 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
1e180 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e190 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e1a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e1b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
1e1c0 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
1e1d0 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 46 6f 72      // NOTE: For
1e1e0 20 6e 6f 77 2c 20 56 69 73 75 61 6c 20 53 74 75   now, Visual Stu
1e1f0 64 69 6f 20 69 73 20 61 6c 77 61 79 73 20 61 20  dio is always a 
1e200 33 32 2d 62 69 74 20 61 70 70 6c 69 63 61 74 69  32-bit applicati
1e210 6f 6e 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 0d  on...        //.
1e220 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
1e230 20 73 74 61 74 69 63 20 72 65 61 64 6f 6e 6c 79   static readonly
1e240 20 62 6f 6f 6c 20 56 73 49 73 33 32 42 69 74 4f   bool VsIs32BitO
1e250 6e 6c 79 20 3d 20 74 72 75 65 3b 0d 0a 0d 0a 20  nly = true;.... 
1e260 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
1e270 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e280 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e290 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e2a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
1e2b0 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
1e2c0 65 20 73 74 61 74 69 63 20 72 65 61 64 6f 6e 6c  e static readonl
1e2d0 79 20 73 74 72 69 6e 67 20 56 73 49 64 46 6f 72  y string VsIdFor
1e2e0 6d 61 74 20 3d 20 22 42 22 3b 0d 0a 0d 0a 20 20  mat = "B";....  
1e2f0 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
1e300 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e310 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e320 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e330 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
1e340 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
1e350 20 73 74 61 74 69 63 20 72 65 61 64 6f 6e 6c 79   static readonly
1e360 20 73 74 72 69 6e 67 20 58 50 61 74 68 46 6f 72   string XPathFor
1e370 41 64 64 45 6c 65 6d 65 6e 74 20 3d 0d 0a 20 20  AddElement =..  
1e380 20 20 20 20 20 20 20 20 20 20 22 63 6f 6e 66 69            "confi
1e390 67 75 72 61 74 69 6f 6e 2f 73 79 73 74 65 6d 2e  guration/system.
1e3a0 64 61 74 61 2f 44 62 50 72 6f 76 69 64 65 72 46  data/DbProviderF
1e3b0 61 63 74 6f 72 69 65 73 2f 61 64 64 5b 40 69 6e  actories/add[@in
1e3c0 76 61 72 69 61 6e 74 3d 5c 22 7b 30 7d 5c 22 5d  variant=\"{0}\"]
1e3d0 22 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72  ";....        pr
1e3e0 69 76 61 74 65 20 73 74 61 74 69 63 20 72 65 61  ivate static rea
1e3f0 64 6f 6e 6c 79 20 73 74 72 69 6e 67 20 58 50 61  donly string XPa
1e400 74 68 46 6f 72 52 65 6d 6f 76 65 45 6c 65 6d 65  thForRemoveEleme
1e410 6e 74 20 3d 0d 0a 20 20 20 20 20 20 20 20 20 20  nt =..          
1e420 20 20 22 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e    "configuration
1e430 2f 73 79 73 74 65 6d 2e 64 61 74 61 2f 44 62 50  /system.data/DbP
1e440 72 6f 76 69 64 65 72 46 61 63 74 6f 72 69 65 73  roviderFactories
1e450 2f 72 65 6d 6f 76 65 5b 40 69 6e 76 61 72 69 61  /remove[@invaria
1e460 6e 74 3d 5c 22 7b 30 7d 5c 22 5d 22 3b 0d 0a 20  nt=\"{0}\"]";.. 
1e470 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f         #endregio
1e480 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  n....        ///
1e490 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e4a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e4b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e4c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e4d0 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
1e4e0 23 72 65 67 69 6f 6e 20 50 72 69 76 61 74 65 20  #region Private 
1e4f0 53 74 61 74 69 63 20 44 61 74 61 0d 0a 20 20 20  Static Data..   
1e500 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61       private sta
1e510 74 69 63 20 41 73 73 65 6d 62 6c 79 20 74 68 69  tic Assembly thi
1e520 73 41 73 73 65 6d 62 6c 79 20 3d 20 41 73 73 65  sAssembly = Asse
1e530 6d 62 6c 79 2e 47 65 74 45 78 65 63 75 74 69 6e  mbly.GetExecutin
1e540 67 41 73 73 65 6d 62 6c 79 28 29 3b 0d 0a 0d 0a  gAssembly();....
1e550 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
1e560 73 74 61 74 69 63 20 73 74 72 69 6e 67 20 74 72  static string tr
1e570 61 63 65 43 61 74 65 67 6f 72 79 20 3d 20 50 61  aceCategory = Pa
1e580 74 68 2e 47 65 74 46 69 6c 65 4e 61 6d 65 28 0d  th.GetFileName(.
1e590 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69  .            thi
1e5a0 73 41 73 73 65 6d 62 6c 79 2e 4c 6f 63 61 74 69  sAssembly.Locati
1e5b0 6f 6e 29 3b 20 2f 2a 20 4e 4f 54 45 3a 20 53 61  on); /* NOTE: Sa
1e5c0 6d 65 20 66 6f 72 20 64 65 62 75 67 20 61 6e 64  me for debug and
1e5d0 20 74 72 61 63 65 2e 20 2a 2f 0d 0a 0d 0a 20 20   trace. */....  
1e5e0 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74        private st
1e5f0 61 74 69 63 20 54 72 61 63 65 43 61 6c 6c 62 61  atic TraceCallba
1e600 63 6b 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b  ck debugCallback
1e610 20 3d 20 41 70 70 44 65 62 75 67 3b 0d 0a 20 20   = AppDebug;..  
1e620 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74        private st
1e630 61 74 69 63 20 54 72 61 63 65 43 61 6c 6c 62 61  atic TraceCallba
1e640 63 6b 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b  ck traceCallback
1e650 20 3d 20 41 70 70 54 72 61 63 65 3b 0d 0a 20 20   = AppTrace;..  
1e660 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
1e670 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
1e680 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e690 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e6a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e6b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e6c0 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23  ///....        #
1e6d0 72 65 67 69 6f 6e 20 54 72 61 63 65 20 48 61 6e  region Trace Han
1e6e0 64 6c 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 70  dling..        p
1e6f0 72 69 76 61 74 65 20 73 74 61 74 69 63 20 73 74  rivate static st
1e700 72 69 6e 67 20 47 65 74 4c 6f 67 46 69 6c 65 4e  ring GetLogFileN
1e710 61 6d 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ame(..          
1e720 20 20 73 74 72 69 6e 67 20 74 79 70 65 4e 61 6d    string typeNam
1e730 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29  e..            )
1e740 20 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a 20 20   /* throw */..  
1e750 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
1e760 20 20 20 20 20 73 74 72 69 6e 67 20 66 69 6c 65       string file
1e770 4e 61 6d 65 20 3d 20 50 61 74 68 2e 47 65 74 54  Name = Path.GetT
1e780 65 6d 70 46 69 6c 65 4e 61 6d 65 28 29 3b 0d 0a  empFileName();..
1e790 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
1e7a0 6e 67 20 64 69 72 65 63 74 6f 72 79 20 3d 20 50  ng directory = P
1e7b0 61 74 68 2e 47 65 74 44 69 72 65 63 74 6f 72 79  ath.GetDirectory
1e7c0 4e 61 6d 65 28 66 69 6c 65 4e 61 6d 65 29 3b 0d  Name(fileName);.
1e7d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72  .            str
1e7e0 69 6e 67 20 66 69 6c 65 4e 61 6d 65 4f 6e 6c 79  ing fileNameOnly
1e7f0 20 3d 20 50 61 74 68 2e 47 65 74 46 69 6c 65 4e   = Path.GetFileN
1e800 61 6d 65 57 69 74 68 6f 75 74 45 78 74 65 6e 73  ameWithoutExtens
1e810 69 6f 6e 28 66 69 6c 65 4e 61 6d 65 29 3b 0d 0a  ion(fileName);..
1e820 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74  ..            st
1e830 72 69 6e 67 20 6e 65 77 46 69 6c 65 4e 61 6d 65  ring newFileName
1e840 20 3d 20 50 61 74 68 2e 43 6f 6d 62 69 6e 65 28   = Path.Combine(
1e850 64 69 72 65 63 74 6f 72 79 2c 20 53 74 72 69 6e  directory, Strin
1e860 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
1e870 20 20 20 20 20 20 20 20 20 20 20 22 7b 30 7d 7b             "{0}{
1e880 31 7d 7b 32 7d 22 2c 20 74 72 61 63 65 43 61 74  1}{2}", traceCat
1e890 65 67 6f 72 79 2c 20 21 53 74 72 69 6e 67 2e 49  egory, !String.I
1e8a0 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 74 79 70  sNullOrEmpty(typ
1e8b0 65 4e 61 6d 65 29 20 3f 0d 0a 20 20 20 20 20 20  eName) ?..      
1e8c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2e                ".
1e8d0 22 20 2b 20 74 79 70 65 4e 61 6d 65 20 3a 20 53  " + typeName : S
1e8e0 74 72 69 6e 67 2e 45 6d 70 74 79 2c 20 22 2e 22  tring.Empty, "."
1e8f0 20 2b 20 66 69 6c 65 4e 61 6d 65 4f 6e 6c 79 20   + fileNameOnly 
1e900 2b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  +..             
1e910 20 20 20 20 20 20 20 4c 6f 67 46 69 6c 65 53 75         LogFileSu
1e920 66 66 69 78 29 29 3b 0d 0a 0d 0a 20 20 20 20 20  ffix));....     
1e930 20 20 20 20 20 20 20 46 69 6c 65 2e 4d 6f 76 65         File.Move
1e940 28 66 69 6c 65 4e 61 6d 65 2c 20 6e 65 77 46 69  (fileName, newFi
1e950 6c 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20  leName);....    
1e960 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e          return n
1e970 65 77 46 69 6c 65 4e 61 6d 65 3b 0d 0a 20 20 20  ewFileName;..   
1e980 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
1e990 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
1e9a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e9b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e9c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e9d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
1e9e0 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61       private sta
1e9f0 74 69 63 20 76 6f 69 64 20 41 70 70 44 65 62 75  tic void AppDebu
1ea00 67 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  g(..            
1ea10 73 74 72 69 6e 67 20 6d 65 73 73 61 67 65 2c 0d  string message,.
1ea20 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72  .            str
1ea30 69 6e 67 20 63 61 74 65 67 6f 72 79 0d 0a 20 20  ing category..  
1ea40 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
1ea50 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
1ea60 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62      TraceOps.Deb
1ea70 75 67 43 6f 72 65 28 53 74 72 69 6e 67 2e 46 6f  ugCore(String.Fo
1ea80 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
1ea90 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e         TraceOps.
1eaa0 44 65 62 75 67 46 6f 72 6d 61 74 2c 20 54 72 61  DebugFormat, Tra
1eab0 63 65 4f 70 73 2e 4e 65 78 74 44 65 62 75 67 49  ceOps.NextDebugI
1eac0 64 28 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  d(),..          
1ead0 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 54        TraceOps.T
1eae0 69 6d 65 53 74 61 6d 70 28 44 61 74 65 54 69 6d  imeStamp(DateTim
1eaf0 65 2e 55 74 63 4e 6f 77 29 2c 20 6d 65 73 73 61  e.UtcNow), messa
1eb00 67 65 29 2c 20 63 61 74 65 67 6f 72 79 29 3b 0d  ge), category);.
1eb10 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....  
1eb20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
1eb30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1eb40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1eb50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1eb60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
1eb70 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
1eb80 20 73 74 61 74 69 63 20 76 6f 69 64 20 41 70 70   static void App
1eb90 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20  Trace(..        
1eba0 20 20 20 20 73 74 72 69 6e 67 20 6d 65 73 73 61      string messa
1ebb0 67 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ge,..           
1ebc0 20 73 74 72 69 6e 67 20 63 61 74 65 67 6f 72 79   string category
1ebd0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d  ..            ).
1ebe0 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
1ebf0 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73          TraceOps
1ec00 2e 54 72 61 63 65 43 6f 72 65 28 53 74 72 69 6e  .TraceCore(Strin
1ec10 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
1ec20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
1ec30 4f 70 73 2e 54 72 61 63 65 46 6f 72 6d 61 74 2c  Ops.TraceFormat,
1ec40 20 54 72 61 63 65 4f 70 73 2e 4e 65 78 74 54 72   TraceOps.NextTr
1ec50 61 63 65 49 64 28 29 2c 0d 0a 20 20 20 20 20 20  aceId(),..      
1ec60 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f            TraceO
1ec70 70 73 2e 54 69 6d 65 53 74 61 6d 70 28 44 61 74  ps.TimeStamp(Dat
1ec80 65 54 69 6d 65 2e 55 74 63 4e 6f 77 29 2c 20 6d  eTime.UtcNow), m
1ec90 65 73 73 61 67 65 29 2c 20 63 61 74 65 67 6f 72  essage), categor
1eca0 79 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  y);..        }..
1ecb0 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
1ecc0 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  on....        //
1ecd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ece0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ecf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ed00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ed10 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
1ed20 20 23 72 65 67 69 6f 6e 20 47 65 6e 65 72 69 63   #region Generic
1ed30 20 50 6c 61 74 66 6f 72 6d 20 48 61 6e 64 6c 69   Platform Handli
1ed40 6e 67 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  ng..        priv
1ed50 61 74 65 20 73 74 61 74 69 63 20 62 6f 6f 6c 20  ate static bool 
1ed60 49 73 36 34 42 69 74 50 72 6f 63 65 73 73 28 29  Is64BitProcess()
1ed70 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
1ed80 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
1ed90 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45           // NOTE
1eda0 3a 20 52 65 74 75 72 6e 73 20 74 72 75 65 20 69  : Returns true i
1edb0 66 20 74 68 65 20 63 75 72 72 65 6e 74 20 70 72  f the current pr
1edc0 6f 63 65 73 73 20 69 73 20 36 34 2d 62 69 74 2e  ocess is 64-bit.
1edd0 20 20 49 66 20 74 68 69 73 0d 0a 20 20 20 20 20    If this..     
1ede0 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
1edf0 69 73 20 74 72 75 65 2c 20 77 65 20 2a 6b 6e 6f  is true, we *kno
1ee00 77 2a 20 74 68 61 74 20 77 65 20 6d 75 73 74 20  w* that we must 
1ee10 62 65 20 72 75 6e 6e 69 6e 67 20 6f 6e 20 61 20  be running on a 
1ee20 36 34 2d 62 69 74 0d 0a 20 20 20 20 20 20 20 20  64-bit..        
1ee30 20 20 20 20 2f 2f 20 20 20 20 20 20 20 6f 70 65      //       ope
1ee40 72 61 74 69 6e 67 20 73 79 73 74 65 6d 20 61 73  rating system as
1ee50 20 77 65 6c 6c 2e 20 20 48 6f 77 65 76 65 72 2c   well.  However,
1ee60 20 69 66 20 74 68 69 73 20 69 73 20 66 61 6c 73   if this is fals
1ee70 65 2c 20 77 65 0d 0a 20 20 20 20 20 20 20 20 20  e, we..         
1ee80 20 20 20 2f 2f 20 20 20 20 20 20 20 64 6f 20 6e     //       do n
1ee90 6f 74 20 6e 65 63 65 73 73 61 72 69 6c 79 20 6b  ot necessarily k
1eea0 6e 6f 77 20 74 68 61 74 20 77 65 20 61 72 65 20  now that we are 
1eeb0 72 75 6e 6e 69 6e 67 20 6f 6e 20 61 20 33 32 2d  running on a 32-
1eec0 62 69 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20  bit..           
1eed0 20 2f 2f 20 20 20 20 20 20 20 6f 70 65 72 61 74   //       operat
1eee0 69 6e 67 20 73 79 73 74 65 6d 2c 20 64 75 65 20  ing system, due 
1eef0 74 6f 20 57 6f 57 36 34 20 28 57 69 6e 33 32 2d  to WoW64 (Win32-
1ef00 6f 6e 2d 57 69 6e 36 34 29 2c 20 65 74 63 2e 0d  on-Win64), etc..
1ef10 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d  .            //.
1ef20 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
1ef30 75 72 6e 20 28 49 6e 74 50 74 72 2e 53 69 7a 65  urn (IntPtr.Size
1ef40 20 3d 3d 20 73 69 7a 65 6f 66 28 6c 6f 6e 67 29   == sizeof(long)
1ef50 29 3b 20 2f 2f 20 4e 4f 54 45 3a 20 50 6f 69 6e  ); // NOTE: Poin
1ef60 74 65 72 20 69 73 20 36 34 2d 62 69 74 73 3f 0d  ter is 64-bits?.
1ef70 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....  
1ef80 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
1ef90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1efa0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1efb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1efc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
1efd0 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
1efe0 20 73 74 61 74 69 63 20 73 74 72 69 6e 67 20 47   static string G
1eff0 65 74 52 6f 6f 74 4b 65 79 4e 61 6d 65 28 0d 0a  etRootKeyName(..
1f000 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
1f010 20 77 6f 77 36 34 0d 0a 20 20 20 20 20 20 20 20   wow64..        
1f020 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b      )..        {
1f030 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
1f040 74 75 72 6e 20 53 74 72 69 6e 67 2e 46 6f 72 6d  turn String.Form
1f050 61 74 28 22 7b 30 7d 7b 31 7d 22 2c 20 52 6f 6f  at("{0}{1}", Roo
1f060 74 4b 65 79 4e 61 6d 65 2c 0d 0a 20 20 20 20 20  tKeyName,..     
1f070 20 20 20 20 20 20 20 20 20 20 20 77 6f 77 36 34             wow64
1f080 20 26 26 20 49 73 36 34 42 69 74 50 72 6f 63 65   && Is64BitProce
1f090 73 73 28 29 20 3f 0d 0a 20 20 20 20 20 20 20 20  ss() ?..        
1f0a0 20 20 20 20 20 20 20 20 20 20 20 20 22 5c 5c 22              "\\"
1f0b0 20 2b 20 57 6f 77 36 34 53 75 62 4b 65 79 4e 61   + Wow64SubKeyNa
1f0c0 6d 65 20 3a 20 53 74 72 69 6e 67 2e 45 6d 70 74  me : String.Empt
1f0d0 79 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  y);..        }..
1f0e0 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
1f0f0 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  on....        //
1f100 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f110 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f120 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f130 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f140 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
1f150 20 23 72 65 67 69 6f 6e 20 47 65 6e 65 72 69 63   #region Generic
1f160 20 53 74 72 69 6e 67 20 48 61 6e 64 6c 69 6e 67   String Handling
1f170 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
1f180 65 20 73 74 61 74 69 63 20 73 74 72 69 6e 67 20  e static string 
1f190 46 6f 72 44 69 73 70 6c 61 79 28 0d 0a 20 20 20  ForDisplay(..   
1f1a0 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20           object 
1f1b0 76 61 6c 75 65 0d 0a 20 20 20 20 20 20 20 20 20  value..         
1f1c0 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d     )..        {.
1f1d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
1f1e0 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d  (value == null).
1f1f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1f200 20 72 65 74 75 72 6e 20 22 3c 6e 75 6c 6c 3e 22   return "<null>"
1f210 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
1f220 20 73 74 72 69 6e 67 20 72 65 73 75 6c 74 3b 0d   string result;.
1f230 0a 20 20 20 20 20 20 20 20 20 20 20 20 54 79 70  .            Typ
1f240 65 20 74 79 70 65 20 3d 20 76 61 6c 75 65 2e 47  e type = value.G
1f250 65 74 54 79 70 65 28 29 3b 0d 0a 0d 0a 20 20 20  etType();....   
1f260 20 20 20 20 20 20 20 20 20 69 66 20 28 74 79 70           if (typ
1f270 65 20 3d 3d 20 74 79 70 65 6f 66 28 58 6d 6c 45  e == typeof(XmlE
1f280 6c 65 6d 65 6e 74 29 29 0d 0a 20 20 20 20 20 20  lement))..      
1f290 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
1f2a0 20 20 20 20 20 20 20 20 20 58 6d 6c 45 6c 65 6d           XmlElem
1f2b0 65 6e 74 20 65 6c 65 6d 65 6e 74 20 3d 20 28 58  ent element = (X
1f2c0 6d 6c 45 6c 65 6d 65 6e 74 29 76 61 6c 75 65 3b  mlElement)value;
1f2d0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1f2e0 20 20 20 20 72 65 73 75 6c 74 20 3d 20 65 6c 65      result = ele
1f2f0 6d 65 6e 74 2e 4f 75 74 65 72 58 6d 6c 3b 0d 0a  ment.OuterXml;..
1f300 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
1f310 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20             else 
1f320 69 66 20 28 74 79 70 65 20 3d 3d 20 74 79 70 65  if (type == type
1f330 6f 66 28 56 65 72 73 69 6f 6e 29 29 0d 0a 20 20  of(Version))..  
1f340 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
1f350 20 20 20 20 20 20 20 20 20 20 20 20 20 56 65 72               Ver
1f360 73 69 6f 6e 20 76 65 72 73 69 6f 6e 20 3d 20 28  sion version = (
1f370 56 65 72 73 69 6f 6e 29 76 61 6c 75 65 3b 0d 0a  Version)value;..
1f380 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1f390 20 20 72 65 73 75 6c 74 20 3d 20 53 74 72 69 6e    result = Strin
1f3a0 67 2e 46 6f 72 6d 61 74 28 22 76 7b 30 7d 22 2c  g.Format("v{0}",
1f3b0 20 76 65 72 73 69 6f 6e 29 3b 0d 0a 20 20 20 20   version);..    
1f3c0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
1f3d0 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20         else..   
1f3e0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
1f3f0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 73 75              resu
1f400 6c 74 20 3d 20 76 61 6c 75 65 2e 54 6f 53 74 72  lt = value.ToStr
1f410 69 6e 67 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  ing();....      
1f420 20 20 20 20 20 20 20 20 20 20 69 66 20 28 72 65            if (re
1f430 73 75 6c 74 2e 4c 65 6e 67 74 68 20 3d 3d 20 30  sult.Length == 0
1f440 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
1f450 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 22 3c         return "<
1f460 65 6d 70 74 79 3e 22 3b 0d 0a 0d 0a 20 20 20 20  empty>";....    
1f470 20 20 20 20 20 20 20 20 20 20 20 20 72 65 73 75              resu
1f480 6c 74 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d  lt = String.Form
1f490 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
1f4a0 20 20 20 20 20 20 20 20 20 74 79 70 65 2e 49 73           type.Is
1f4b0 53 75 62 63 6c 61 73 73 4f 66 28 74 79 70 65 6f  SubclassOf(typeo
1f4c0 66 28 56 61 6c 75 65 54 79 70 65 29 29 20 3f 20  f(ValueType)) ? 
1f4d0 22 7b 30 7d 22 20 3a 20 22 5c 22 7b 30 7d 5c 22  "{0}" : "\"{0}\"
1f4e0 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
1f4f0 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 29 3b          result);
1f500 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
1f510 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  ...            r
1f520 65 74 75 72 6e 20 72 65 73 75 6c 74 3b 0d 0a 20  eturn result;.. 
1f530 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
1f540 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a    #endregion....
1f550 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
1f560 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f570 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f580 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f590 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
1f5a0 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69  ...        #regi
1f5b0 6f 6e 20 41 73 73 65 6d 62 6c 79 20 41 74 74 72  on Assembly Attr
1f5c0 69 62 75 74 65 20 48 61 6e 64 6c 69 6e 67 0d 0a  ibute Handling..
1f5d0 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73          public s
1f5e0 74 61 74 69 63 20 73 74 72 69 6e 67 20 47 65 74  tatic string Get
1f5f0 41 73 73 65 6d 62 6c 79 43 6f 6e 66 69 67 75 72  AssemblyConfigur
1f600 61 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20  ation(..        
1f610 20 20 20 20 41 73 73 65 6d 62 6c 79 20 61 73 73      Assembly ass
1f620 65 6d 62 6c 79 0d 0a 20 20 20 20 20 20 20 20 20  embly..         
1f630 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d     )..        {.
1f640 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
1f650 28 61 73 73 65 6d 62 6c 79 20 21 3d 20 6e 75 6c  (assembly != nul
1f660 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
1f670 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
1f680 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20     try..        
1f690 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
1f6a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
1f6b0 66 20 28 61 73 73 65 6d 62 6c 79 2e 49 73 44 65  f (assembly.IsDe
1f6c0 66 69 6e 65 64 28 0d 0a 20 20 20 20 20 20 20 20  fined(..        
1f6d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f6e0 20 20 20 20 74 79 70 65 6f 66 28 41 73 73 65 6d      typeof(Assem
1f6f0 62 6c 79 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e  blyConfiguration
1f700 41 74 74 72 69 62 75 74 65 29 2c 20 66 61 6c 73  Attribute), fals
1f710 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e))..           
1f720 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
1f730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f740 20 20 20 20 41 73 73 65 6d 62 6c 79 43 6f 6e 66      AssemblyConf
1f750 69 67 75 72 61 74 69 6f 6e 41 74 74 72 69 62 75  igurationAttribu
1f760 74 65 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  te configuration
1f770 20 3d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   =..            
1f780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f790 28 41 73 73 65 6d 62 6c 79 43 6f 6e 66 69 67 75  (AssemblyConfigu
1f7a0 72 61 74 69 6f 6e 41 74 74 72 69 62 75 74 65 29  rationAttribute)
1f7b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1f7c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61 73                as
1f7d0 73 65 6d 62 6c 79 2e 47 65 74 43 75 73 74 6f 6d  sembly.GetCustom
1f7e0 41 74 74 72 69 62 75 74 65 73 28 0d 0a 20 20 20  Attributes(..   
1f7f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f800 20 20 20 20 20 20 20 20 20 20 20 20 20 74 79 70               typ
1f810 65 6f 66 28 41 73 73 65 6d 62 6c 79 43 6f 6e 66  eof(AssemblyConf
1f820 69 67 75 72 61 74 69 6f 6e 41 74 74 72 69 62 75  igurationAttribu
1f830 74 65 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  te),..          
1f840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f850 20 20 20 20 20 20 66 61 6c 73 65 29 5b 30 5d 3b        false)[0];
1f860 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1f870 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
1f880 72 6e 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  rn configuration
1f890 2e 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 3b 0d  .Configuration;.
1f8a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1f8b0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
1f8c0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
1f8d0 20 20 20 20 20 20 20 20 20 20 20 63 61 74 63 68             catch
1f8e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1f8f0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
1f900 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e           // do n
1f910 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20  othing...       
1f920 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
1f930 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
1f940 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
1f950 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 7d  null;..        }
1f960 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
1f970 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f980 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f990 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f9a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f9b0 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70  ///....        p
1f9c0 75 62 6c 69 63 20 73 74 61 74 69 63 20 73 74 72  ublic static str
1f9d0 69 6e 67 20 47 65 74 41 73 73 65 6d 62 6c 79 54  ing GetAssemblyT
1f9e0 69 74 6c 65 28 0d 0a 20 20 20 20 20 20 20 20 20  itle(..         
1f9f0 20 20 20 41 73 73 65 6d 62 6c 79 20 61 73 73 65     Assembly asse
1fa00 6d 62 6c 79 0d 0a 20 20 20 20 20 20 20 20 20 20  mbly..          
1fa10 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a    )..        {..
1fa20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
1fa30 61 73 73 65 6d 62 6c 79 20 21 3d 20 6e 75 6c 6c  assembly != null
1fa40 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
1fa50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1fa60 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20    try..         
1fa70 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
1fa80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
1fa90 20 28 61 73 73 65 6d 62 6c 79 2e 49 73 44 65 66   (assembly.IsDef
1faa0 69 6e 65 64 28 0d 0a 20 20 20 20 20 20 20 20 20  ined(..         
1fab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fac0 20 20 20 74 79 70 65 6f 66 28 41 73 73 65 6d 62     typeof(Assemb
1fad0 6c 79 54 69 74 6c 65 41 74 74 72 69 62 75 74 65  lyTitleAttribute
1fae0 29 2c 20 66 61 6c 73 65 29 29 0d 0a 20 20 20 20  ), false))..    
1faf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fb00 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
1fb10 20 20 20 20 20 20 20 20 20 20 20 41 73 73 65 6d             Assem
1fb20 62 6c 79 54 69 74 6c 65 41 74 74 72 69 62 75 74  blyTitleAttribut
1fb30 65 20 74 69 74 6c 65 20 3d 0d 0a 20 20 20 20 20  e title =..     
1fb40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fb50 20 20 20 20 20 20 20 28 41 73 73 65 6d 62 6c 79         (Assembly
1fb60 54 69 74 6c 65 41 74 74 72 69 62 75 74 65 29 0d  TitleAttribute).
1fb70 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1fb80 20 20 20 20 20 20 20 20 20 20 20 20 20 61 73 73               ass
1fb90 65 6d 62 6c 79 2e 47 65 74 43 75 73 74 6f 6d 41  embly.GetCustomA
1fba0 74 74 72 69 62 75 74 65 73 28 0d 0a 20 20 20 20  ttributes(..    
1fbb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fbc0 20 20 20 20 20 20 20 20 20 20 20 20 74 79 70 65              type
1fbd0 6f 66 28 41 73 73 65 6d 62 6c 79 54 69 74 6c 65  of(AssemblyTitle
1fbe0 41 74 74 72 69 62 75 74 65 29 2c 20 66 61 6c 73  Attribute), fals
1fbf0 65 29 5b 30 5d 3b 0d 0a 0d 0a 20 20 20 20 20 20  e)[0];....      
1fc00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fc10 20 20 72 65 74 75 72 6e 20 74 69 74 6c 65 2e 54    return title.T
1fc20 69 74 6c 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  itle;..         
1fc30 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
1fc40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
1fc50 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1fc60 20 63 61 74 63 68 0d 0a 20 20 20 20 20 20 20 20   catch..        
1fc70 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
1fc80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1fc90 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20  / do nothing... 
1fca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
1fcb0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
1fcc0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  ...            r
1fcd0 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 20 20 20  eturn null;..   
1fce0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
1fcf0 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20  #endregion....  
1fd00 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
1fd10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fd20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fd30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fd40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
1fd50 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e  .        #region
1fd60 20 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b 20   .NET Framework 
1fd70 48 61 6e 64 6c 69 6e 67 0d 0a 20 20 20 20 20 20  Handling..      
1fd80 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63    private static
1fd90 20 73 74 72 69 6e 67 20 47 65 74 46 72 61 6d 65   string GetFrame
1fda0 77 6f 72 6b 52 6f 6f 74 4b 65 79 4e 61 6d 65 28  workRootKeyName(
1fdb0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
1fdc0 6f 6c 20 77 6f 77 36 34 0d 0a 20 20 20 20 20 20  ol wow64..      
1fdd0 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
1fde0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
1fdf0 72 65 74 75 72 6e 20 53 74 72 69 6e 67 2e 46 6f  return String.Fo
1fe00 72 6d 61 74 28 22 7b 30 7d 5c 5c 4d 69 63 72 6f  rmat("{0}\\Micro
1fe10 73 6f 66 74 5c 5c 2e 4e 45 54 46 72 61 6d 65 77  soft\\.NETFramew
1fe20 6f 72 6b 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  ork",..         
1fe30 20 20 20 20 20 20 20 47 65 74 52 6f 6f 74 4b 65         GetRootKe
1fe40 79 4e 61 6d 65 28 77 6f 77 36 34 29 29 3b 0d 0a  yName(wow64));..
1fe50 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
1fe60 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
1fe70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fe80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fe90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fea0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
1feb0 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
1fec0 73 74 61 74 69 63 20 73 74 72 69 6e 67 20 47 65  static string Ge
1fed0 74 46 72 61 6d 65 77 6f 72 6b 4b 65 79 4e 61 6d  tFrameworkKeyNam
1fee0 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
1fef0 73 74 72 69 6e 67 20 66 72 61 6d 65 77 6f 72 6b  string framework
1ff00 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  Name,..         
1ff10 20 20 20 56 65 72 73 69 6f 6e 20 66 72 61 6d 65     Version frame
1ff20 77 6f 72 6b 56 65 72 73 69 6f 6e 2c 0d 0a 20 20  workVersion,..  
1ff30 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
1ff40 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 2c 0d 0a   platformName,..
1ff50 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
1ff60 20 77 6f 77 36 34 0d 0a 20 20 20 20 20 20 20 20   wow64..        
1ff70 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b      )..        {
1ff80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74  ..            st
1ff90 72 69 6e 67 20 66 6f 72 6d 61 74 20 3d 20 21 53  ring format = !S
1ffa0 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d  tring.IsNullOrEm
1ffb0 70 74 79 28 70 6c 61 74 66 6f 72 6d 4e 61 6d 65  pty(platformName
1ffc0 29 20 3f 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ) ?..           
1ffd0 20 20 20 20 20 22 7b 30 7d 5c 5c 4d 69 63 72 6f       "{0}\\Micro
1ffe0 73 6f 66 74 5c 5c 7b 31 7d 5c 5c 76 7b 32 7d 5c  soft\\{1}\\v{2}\
1fff0 5c 7b 33 7d 22 20 3a 0d 0a 20 20 20 20 20 20 20  \{3}" :..       
20000 20 20 20 20 20 20 20 20 20 22 7b 30 7d 5c 5c 4d           "{0}\\M
20010 69 63 72 6f 73 6f 66 74 5c 5c 7b 31 7d 5c 5c 76  icrosoft\\{1}\\v
20020 7b 32 7d 22 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  {2}";....       
20030 20 20 20 20 20 72 65 74 75 72 6e 20 53 74 72 69       return Stri
20040 6e 67 2e 46 6f 72 6d 61 74 28 66 6f 72 6d 61 74  ng.Format(format
20050 2c 20 47 65 74 52 6f 6f 74 4b 65 79 4e 61 6d 65  , GetRootKeyName
20060 28 77 6f 77 36 34 29 2c 0d 0a 20 20 20 20 20 20  (wow64),..      
20070 20 20 20 20 20 20 20 20 20 20 66 72 61 6d 65 77            framew
20080 6f 72 6b 4e 61 6d 65 2c 20 66 72 61 6d 65 77 6f  orkName, framewo
20090 72 6b 56 65 72 73 69 6f 6e 2c 20 70 6c 61 74 66  rkVersion, platf
200a0 6f 72 6d 4e 61 6d 65 29 3b 0d 0a 20 20 20 20 20  ormName);..     
200b0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
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 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20100 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
20110 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69     private stati
20120 63 20 73 74 72 69 6e 67 20 47 65 74 49 6d 61 67  c string GetImag
20130 65 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 28  eRuntimeVersion(
20140 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74  ..            st
20150 72 69 6e 67 20 66 69 6c 65 4e 61 6d 65 0d 0a 20  ring fileName.. 
20160 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
20170 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
20180 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20       try..      
20190 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
201a0 20 20 20 20 20 20 20 20 20 41 73 73 65 6d 62 6c           Assembl
201b0 79 20 61 73 73 65 6d 62 6c 79 20 3d 0d 0a 20 20  y assembly =..  
201c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
201d0 20 20 41 73 73 65 6d 62 6c 79 2e 52 65 66 6c 65    Assembly.Refle
201e0 63 74 69 6f 6e 4f 6e 6c 79 4c 6f 61 64 46 72 6f  ctionOnlyLoadFro
201f0 6d 28 66 69 6c 65 4e 61 6d 65 29 3b 20 2f 2a 20  m(fileName); /* 
20200 74 68 72 6f 77 20 2a 2f 0d 0a 0d 0a 20 20 20 20  throw */....    
20210 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
20220 61 73 73 65 6d 62 6c 79 20 21 3d 20 6e 75 6c 6c  assembly != null
20230 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
20240 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 61 73         return as
20250 73 65 6d 62 6c 79 2e 49 6d 61 67 65 52 75 6e 74  sembly.ImageRunt
20260 69 6d 65 56 65 72 73 69 6f 6e 3b 0d 0a 20 20 20  imeVersion;..   
20270 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
20280 20 20 20 20 20 20 20 20 63 61 74 63 68 0d 0a 20          catch.. 
20290 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
202a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
202b0 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20   do nothing...  
202c0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
202d0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
202e0 6e 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20  n null;..       
202f0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f   }....        //
20300 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20310 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20320 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20330 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20340 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
20350 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
20360 73 74 72 69 6e 67 20 47 65 74 46 72 61 6d 65 77  string GetFramew
20370 6f 72 6b 44 69 72 65 63 74 6f 72 79 28 0d 0a 20  orkDirectory(.. 
20380 20 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52             MockR
20390 65 67 69 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b  egistryKey rootK
203a0 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ey,..           
203b0 20 56 65 72 73 69 6f 6e 20 66 72 61 6d 65 77 6f   Version framewo
203c0 72 6b 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20  rkVersion,..    
203d0 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 6f 77          bool wow
203e0 36 34 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  64,..           
203f0 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20   bool whatIf,.. 
20400 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
20410 76 65 72 62 6f 73 65 0d 0a 20 20 20 20 20 20 20  verbose..       
20420 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
20430 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 75  {..            u
20440 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73 74  sing (MockRegist
20450 72 79 4b 65 79 20 6b 65 79 20 3d 20 52 65 67 69  ryKey key = Regi
20460 73 74 72 79 48 65 6c 70 65 72 2e 4f 70 65 6e 53  stryHelper.OpenS
20470 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20  ubKey(..        
20480 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74              root
20490 4b 65 79 2c 20 47 65 74 46 72 61 6d 65 77 6f 72  Key, GetFramewor
204a0 6b 52 6f 6f 74 4b 65 79 4e 61 6d 65 28 77 6f 77  kRootKeyName(wow
204b0 36 34 29 2c 20 66 61 6c 73 65 2c 0d 0a 20 20 20  64), false,..   
204c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
204d0 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65   whatIf, verbose
204e0 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
204f0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
20500 20 20 20 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75     if (key == nu
20510 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
20520 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
20530 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  null;....       
20540 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20           object 
20550 76 61 6c 75 65 20 3d 20 52 65 67 69 73 74 72 79  value = Registry
20560 48 65 6c 70 65 72 2e 47 65 74 56 61 6c 75 65 28  Helper.GetValue(
20570 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
20580 20 20 20 20 20 20 6b 65 79 2c 20 22 49 6e 73 74        key, "Inst
20590 61 6c 6c 52 6f 6f 74 22 2c 20 6e 75 6c 6c 2c 20  allRoot", null, 
205a0 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29  whatIf, verbose)
205b0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
205c0 20 20 20 20 20 69 66 20 28 21 28 76 61 6c 75 65       if (!(value
205d0 20 69 73 20 73 74 72 69 6e 67 29 29 0d 0a 20 20   is string))..  
205e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
205f0 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a    return null;..
20600 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
20610 20 20 72 65 74 75 72 6e 20 50 61 74 68 2e 43 6f    return Path.Co
20620 6d 62 69 6e 65 28 0d 0a 20 20 20 20 20 20 20 20  mbine(..        
20630 20 20 20 20 20 20 20 20 20 20 20 20 28 73 74 72              (str
20640 69 6e 67 29 76 61 6c 75 65 2c 20 53 74 72 69 6e  ing)value, Strin
20650 67 2e 46 6f 72 6d 61 74 28 22 76 7b 30 7d 22 2c  g.Format("v{0}",
20660 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f   frameworkVersio
20670 6e 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  n));..          
20680 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a    }..        }..
20690 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
206a0 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  on....        //
206b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
206c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
206d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
206e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
206f0 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
20700 20 23 72 65 67 69 6f 6e 20 50 65 72 2d 46 72 61   #region Per-Fra
20710 6d 65 77 6f 72 6b 2f 50 6c 61 74 66 6f 72 6d 20  mework/Platform 
20720 48 61 6e 64 6c 69 6e 67 0d 0a 20 20 20 20 20 20  Handling..      
20730 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63    private static
20740 20 76 6f 69 64 20 49 6e 69 74 69 61 6c 69 7a 65   void Initialize
20750 46 72 61 6d 65 77 6f 72 6b 4c 69 73 74 28 0d 0a  FrameworkList(..
20760 20 20 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b              Mock
20770 52 65 67 69 73 74 72 79 4b 65 79 20 72 6f 6f 74  RegistryKey root
20780 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  Key,..          
20790 20 20 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20    Configuration 
207a0 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2c 0d 0a  configuration,..
207b0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20              ref 
207c0 46 72 61 6d 65 77 6f 72 6b 4c 69 73 74 20 66 72  FrameworkList fr
207d0 61 6d 65 77 6f 72 6b 4c 69 73 74 0d 0a 20 20 20  ameworkList..   
207e0 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
207f0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
20800 20 20 20 69 66 20 28 66 72 61 6d 65 77 6f 72 6b     if (framework
20810 4c 69 73 74 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  List == null).. 
20820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66                 f
20830 72 61 6d 65 77 6f 72 6b 4c 69 73 74 20 3d 20 6e  rameworkList = n
20840 65 77 20 46 72 61 6d 65 77 6f 72 6b 4c 69 73 74  ew FrameworkList
20850 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ();....         
20860 20 20 20 69 66 20 28 66 72 61 6d 65 77 6f 72 6b     if (framework
20870 4c 69 73 74 2e 52 6f 6f 74 4b 65 79 20 3d 3d 20  List.RootKey == 
20880 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
20890 20 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b         framework
208a0 4c 69 73 74 2e 52 6f 6f 74 4b 65 79 20 3d 20 72  List.RootKey = r
208b0 6f 6f 74 4b 65 79 3b 0d 0a 0d 0a 20 20 20 20 20  ootKey;....     
208c0 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
208d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
208e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
208f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20900 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
20910 20 20 20 20 20 20 20 20 20 20 69 66 20 28 66 72            if (fr
20920 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 4e 61 6d 65  ameworkList.Name
20930 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  s == null)..    
20940 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
20950 20 20 20 20 20 20 20 20 20 20 20 66 72 61 6d 65             frame
20960 77 6f 72 6b 4c 69 73 74 2e 4e 61 6d 65 73 20 3d  workList.Names =
20970 20 6e 65 77 20 53 74 72 69 6e 67 4c 69 73 74 28   new StringList(
20980 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
20990 20 20 20 20 20 20 69 66 20 28 28 63 6f 6e 66 69        if ((confi
209a0 67 75 72 61 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c  guration == null
209b0 29 20 7c 7c 20 21 63 6f 6e 66 69 67 75 72 61 74  ) || !configurat
209c0 69 6f 6e 2e 4e 6f 44 65 73 6b 74 6f 70 29 0d 0a  ion.NoDesktop)..
209d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
209e0 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73      frameworkLis
209f0 74 2e 4e 61 6d 65 73 2e 41 64 64 28 22 2e 4e 45  t.Names.Add(".NE
20a00 54 46 72 61 6d 65 77 6f 72 6b 22 29 3b 0d 0a 0d  TFramework");...
20a10 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
20a20 20 69 66 20 28 28 63 6f 6e 66 69 67 75 72 61 74   if ((configurat
20a30 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20  ion == null) || 
20a40 21 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 4e  !configuration.N
20a50 6f 43 6f 6d 70 61 63 74 29 0d 0a 20 20 20 20 20  oCompact)..     
20a60 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
20a70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20a80 20 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e    frameworkList.
20a90 4e 61 6d 65 73 2e 41 64 64 28 22 2e 4e 45 54 43  Names.Add(".NETC
20aa0 6f 6d 70 61 63 74 46 72 61 6d 65 77 6f 72 6b 22  ompactFramework"
20ab0 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
20ac0 20 20 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72          framewor
20ad0 6b 4c 69 73 74 2e 4e 61 6d 65 73 2e 41 64 64 28  kList.Names.Add(
20ae0 22 2e 4e 45 54 43 6f 6d 70 61 63 74 46 72 61 6d  ".NETCompactFram
20af0 65 77 6f 72 6b 22 29 3b 0d 0a 20 20 20 20 20 20  ework");..      
20b00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 72                fr
20b10 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 4e 61 6d 65  ameworkList.Name
20b20 73 2e 41 64 64 28 22 2e 4e 45 54 43 6f 6d 70 61  s.Add(".NETCompa
20b30 63 74 46 72 61 6d 65 77 6f 72 6b 22 29 3b 0d 0a  ctFramework");..
20b40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20b50 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
20b60 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
20b70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20b80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20b90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20ba0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20bb0 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
20bc0 20 20 20 69 66 20 28 66 72 61 6d 65 77 6f 72 6b     if (framework
20bd0 4c 69 73 74 2e 56 65 72 73 69 6f 6e 73 20 3d 3d  List.Versions ==
20be0 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
20bf0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
20c00 20 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b         framework
20c10 4c 69 73 74 2e 56 65 72 73 69 6f 6e 73 20 3d 20  List.Versions = 
20c20 6e 65 77 20 56 65 72 73 69 6f 6e 4d 61 70 28 29  new VersionMap()
20c30 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
20c40 20 20 20 20 20 69 66 20 28 28 63 6f 6e 66 69 67       if ((config
20c50 75 72 61 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29  uration == null)
20c60 20 7c 7c 20 21 63 6f 6e 66 69 67 75 72 61 74 69   || !configurati
20c70 6f 6e 2e 4e 6f 44 65 73 6b 74 6f 70 29 0d 0a 20  on.NoDesktop).. 
20c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
20c90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
20ca0 20 20 20 20 20 20 56 65 72 73 69 6f 6e 4c 69 73        VersionLis
20cb0 74 20 64 65 73 6b 74 6f 70 56 65 72 73 69 6f 6e  t desktopVersion
20cc0 4c 69 73 74 20 3d 20 6e 65 77 20 56 65 72 73 69  List = new Versi
20cd0 6f 6e 4c 69 73 74 28 29 3b 0d 0a 0d 0a 20 20 20  onList();....   
20ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20cf0 20 69 66 20 28 28 63 6f 6e 66 69 67 75 72 61 74   if ((configurat
20d00 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20  ion == null) || 
20d10 21 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 4e  !configuration.N
20d20 6f 4e 65 74 46 78 32 30 29 0d 0a 20 20 20 20 20  oNetFx20)..     
20d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20d40 20 20 20 64 65 73 6b 74 6f 70 56 65 72 73 69 6f     desktopVersio
20d50 6e 4c 69 73 74 2e 41 64 64 28 6e 65 77 20 56 65  nList.Add(new Ve
20d60 72 73 69 6f 6e 28 32 2c 20 30 2c 20 35 30 37 32  rsion(2, 0, 5072
20d70 37 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  7));....        
20d80 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
20d90 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 3d  (configuration =
20da0 3d 20 6e 75 6c 6c 29 20 7c 7c 20 21 63 6f 6e 66  = null) || !conf
20db0 69 67 75 72 61 74 69 6f 6e 2e 4e 6f 4e 65 74 46  iguration.NoNetF
20dc0 78 34 30 29 0d 0a 20 20 20 20 20 20 20 20 20 20  x40)..          
20dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65                de
20de0 73 6b 74 6f 70 56 65 72 73 69 6f 6e 4c 69 73 74  sktopVersionList
20df0 2e 41 64 64 28 6e 65 77 20 56 65 72 73 69 6f 6e  .Add(new Version
20e00 28 34 2c 20 30 2c 20 33 30 33 31 39 29 29 3b 0d  (4, 0, 30319));.
20e10 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
20e20 20 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b         framework
20e30 4c 69 73 74 2e 56 65 72 73 69 6f 6e 73 2e 41 64  List.Versions.Ad
20e40 64 28 22 2e 4e 45 54 46 72 61 6d 65 77 6f 72 6b  d(".NETFramework
20e50 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
20e60 20 20 20 20 20 20 20 20 20 20 20 20 64 65 73 6b              desk
20e70 74 6f 70 56 65 72 73 69 6f 6e 4c 69 73 74 29 3b  topVersionList);
20e80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
20e90 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
20ea0 20 20 20 20 20 20 20 69 66 20 28 28 63 6f 6e 66         if ((conf
20eb0 69 67 75 72 61 74 69 6f 6e 20 3d 3d 20 6e 75 6c  iguration == nul
20ec0 6c 29 20 7c 7c 20 21 63 6f 6e 66 69 67 75 72 61  l) || !configura
20ed0 74 69 6f 6e 2e 4e 6f 43 6f 6d 70 61 63 74 29 0d  tion.NoCompact).
20ee0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
20ef0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
20f00 20 20 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72          framewor
20f10 6b 4c 69 73 74 2e 56 65 72 73 69 6f 6e 73 2e 41  kList.Versions.A
20f20 64 64 28 22 2e 4e 45 54 43 6f 6d 70 61 63 74 46  dd(".NETCompactF
20f30 72 61 6d 65 77 6f 72 6b 22 2c 0d 0a 20 20 20 20  ramework",..    
20f40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20f50 20 20 20 20 6e 65 77 20 56 65 72 73 69 6f 6e 4c      new VersionL
20f60 69 73 74 28 6e 65 77 20 56 65 72 73 69 6f 6e 5b  ist(new Version[
20f70 5d 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ] {..           
20f80 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 65 77               new
20f90 20 56 65 72 73 69 6f 6e 28 32 2c 20 30 2c 20 30   Version(2, 0, 0
20fa0 2c 20 30 29 2c 20 6e 65 77 20 56 65 72 73 69 6f  , 0), new Versio
20fb0 6e 28 33 2c 20 35 2c 20 30 2c 20 30 29 0d 0a 20  n(3, 5, 0, 0).. 
20fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20fd0 20 20 20 7d 29 29 3b 0d 0a 20 20 20 20 20 20 20     }));..       
20fe0 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
20ff0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
21000 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
21010 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21020 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21030 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21040 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
21050 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
21060 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 50 6c  frameworkList.Pl
21070 61 74 66 6f 72 6d 4e 61 6d 65 73 20 3d 3d 20 6e  atformNames == n
21080 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
21090 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
210a0 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 4c 69       frameworkLi
210b0 73 74 2e 50 6c 61 74 66 6f 72 6d 4e 61 6d 65 73  st.PlatformNames
210c0 20 3d 20 6e 65 77 20 53 74 72 69 6e 67 4c 69 73   = new StringLis
210d0 74 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  t();....        
210e0 20 20 20 20 20 20 20 20 69 66 20 28 28 63 6f 6e          if ((con
210f0 66 69 67 75 72 61 74 69 6f 6e 20 3d 3d 20 6e 75  figuration == nu
21100 6c 6c 29 20 7c 7c 20 21 63 6f 6e 66 69 67 75 72  ll) || !configur
21110 61 74 69 6f 6e 2e 4e 6f 44 65 73 6b 74 6f 70 29  ation.NoDesktop)
21120 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
21130 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 4c        frameworkL
21140 69 73 74 2e 50 6c 61 74 66 6f 72 6d 4e 61 6d 65  ist.PlatformName
21150 73 2e 41 64 64 28 6e 75 6c 6c 29 3b 0d 0a 0d 0a  s.Add(null);....
21160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21170 69 66 20 28 28 63 6f 6e 66 69 67 75 72 61 74 69  if ((configurati
21180 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20 21  on == null) || !
21190 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 4e 6f  configuration.No
211a0 43 6f 6d 70 61 63 74 29 0d 0a 20 20 20 20 20 20  Compact)..      
211b0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
211c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
211d0 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 50   frameworkList.P
211e0 6c 61 74 66 6f 72 6d 4e 61 6d 65 73 2e 41 64 64  latformNames.Add
211f0 28 22 50 6f 63 6b 65 74 50 43 22 29 3b 0d 0a 20  ("PocketPC");.. 
21200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21210 20 20 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74     frameworkList
21220 2e 50 6c 61 74 66 6f 72 6d 4e 61 6d 65 73 2e 41  .PlatformNames.A
21230 64 64 28 22 53 6d 61 72 74 70 68 6f 6e 65 22 29  dd("Smartphone")
21240 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
21250 20 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b         framework
21260 4c 69 73 74 2e 50 6c 61 74 66 6f 72 6d 4e 61 6d  List.PlatformNam
21270 65 73 2e 41 64 64 28 22 57 69 6e 64 6f 77 73 43  es.Add("WindowsC
21280 45 22 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  E");..          
21290 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
212a0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
212b0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  }....        ///
212c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
212d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
212e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
212f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21300 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
21310 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 62  private static b
21320 6f 6f 6c 20 48 61 76 65 46 72 61 6d 65 77 6f 72  ool HaveFramewor
21330 6b 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  k(..            
21340 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20  MockRegistryKey 
21350 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20 20 20 20  rootKey,..      
21360 20 20 20 20 20 20 73 74 72 69 6e 67 20 66 72 61        string fra
21370 6d 65 77 6f 72 6b 4e 61 6d 65 2c 0d 0a 20 20 20  meworkName,..   
21380 20 20 20 20 20 20 20 20 20 56 65 72 73 69 6f 6e           Version
21390 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f   frameworkVersio
213a0 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n,..            
213b0 73 74 72 69 6e 67 20 70 6c 61 74 66 6f 72 6d 4e  string platformN
213c0 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ame,..          
213d0 20 20 62 6f 6f 6c 20 77 6f 77 36 34 2c 0d 0a 20    bool wow64,.. 
213e0 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
213f0 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20  whatIf,..       
21400 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73       bool verbos
21410 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29  e..            )
21420 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
21430 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
21440 6b 65 79 4e 61 6d 65 20 3d 20 47 65 74 46 72 61  keyName = GetFra
21450 6d 65 77 6f 72 6b 4b 65 79 4e 61 6d 65 28 0d 0a  meworkKeyName(..
21460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21470 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c 20 66  frameworkName, f
21480 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 2c  rameworkVersion,
21490 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 2c 20 77   platformName, w
214a0 6f 77 36 34 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  ow64);....      
214b0 20 20 20 20 20 20 75 73 69 6e 67 20 28 4d 6f 63        using (Moc
214c0 6b 52 65 67 69 73 74 72 79 4b 65 79 20 6b 65 79  kRegistryKey key
214d0 20 3d 20 52 65 67 69 73 74 72 79 48 65 6c 70 65   = RegistryHelpe
214e0 72 2e 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20  r.OpenSubKey(.. 
214f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21500 20 20 20 72 6f 6f 74 4b 65 79 2c 20 6b 65 79 4e     rootKey, keyN
21510 61 6d 65 2c 20 66 61 6c 73 65 2c 20 77 68 61 74  ame, false, what
21520 49 66 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a 20  If, verbose)).. 
21530 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
21540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
21550 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a   (key == null)..
21560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21570 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
21580 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
21590 20 20 20 20 20 69 66 20 28 70 6c 61 74 66 6f 72       if (platfor
215a0 6d 4e 61 6d 65 20 21 3d 20 6e 75 6c 6c 29 20 2f  mName != null) /
215b0 2f 20 4e 4f 54 45 3a 20 53 6b 69 70 20 6e 6f 6e  / NOTE: Skip non
215c0 2d 64 65 73 6b 74 6f 70 2e 0d 0a 20 20 20 20 20  -desktop...     
215d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
215e0 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 0d 0a 20  eturn true;.... 
215f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
21600 74 72 69 6e 67 20 64 69 72 65 63 74 6f 72 79 20  tring directory 
21610 3d 20 47 65 74 46 72 61 6d 65 77 6f 72 6b 44 69  = GetFrameworkDi
21620 72 65 63 74 6f 72 79 28 0d 0a 20 20 20 20 20 20  rectory(..      
21630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f                ro
21640 6f 74 4b 65 79 2c 20 66 72 61 6d 65 77 6f 72 6b  otKey, framework
21650 56 65 72 73 69 6f 6e 2c 20 77 6f 77 36 34 2c 20  Version, wow64, 
21660 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29  whatIf, verbose)
21670 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
21680 20 20 20 20 20 69 66 20 28 53 74 72 69 6e 67 2e       if (String.
21690 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 64 69  IsNullOrEmpty(di
216a0 72 65 63 74 6f 72 79 29 29 0d 0a 20 20 20 20 20  rectory))..     
216b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
216c0 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a  eturn false;....
216d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
216e0 69 66 20 28 21 44 69 72 65 63 74 6f 72 79 2e 45  if (!Directory.E
216f0 78 69 73 74 73 28 64 69 72 65 63 74 6f 72 79 29  xists(directory)
21700 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
21710 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
21720 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  lse;....        
21730 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74          return t
21740 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  rue;..          
21750 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a    }..        }..
21760 0d 0a 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21790 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
217a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
217b0 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 5b 4d 65  /....        [Me
217c0 74 68 6f 64 49 6d 70 6c 28 4d 65 74 68 6f 64 49  thodImpl(MethodI
217d0 6d 70 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e 6c  mplOptions.NoInl
217e0 69 6e 69 6e 67 29 5d 0d 0a 20 20 20 20 20 20 20  ining)]..       
217f0 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
21800 62 6f 6f 6c 20 46 6f 72 45 61 63 68 46 72 61 6d  bool ForEachFram
21810 65 77 6f 72 6b 43 6f 6e 66 69 67 28 0d 0a 20 20  eworkConfig(..  
21820 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65            MockRe
21830 67 69 73 74 72 79 20 72 65 67 69 73 74 72 79 2c  gistry registry,
21840 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 46 72  ..            Fr
21850 61 6d 65 77 6f 72 6b 4c 69 73 74 20 66 72 61 6d  ameworkList fram
21860 65 77 6f 72 6b 4c 69 73 74 2c 0d 0a 20 20 20 20  eworkList,..    
21870 20 20 20 20 20 20 20 20 46 72 61 6d 65 77 6f 72          Framewor
21880 6b 43 6f 6e 66 69 67 43 61 6c 6c 62 61 63 6b 20  kConfigCallback 
21890 63 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20  callback,..     
218a0 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 69 6e         string in
218b0 76 61 72 69 61 6e 74 2c 0d 0a 20 20 20 20 20 20  variant,..      
218c0 20 20 20 20 20 20 73 74 72 69 6e 67 20 6e 61 6d        string nam
218d0 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
218e0 73 74 72 69 6e 67 20 64 65 73 63 72 69 70 74 69  string descripti
218f0 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  on,..           
21900 20 73 74 72 69 6e 67 20 74 79 70 65 4e 61 6d 65   string typeName
21910 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 41  ,..            A
21920 73 73 65 6d 62 6c 79 4e 61 6d 65 20 61 73 73 65  ssemblyName asse
21930 6d 62 6c 79 4e 61 6d 65 2c 0d 0a 20 20 20 20 20  mblyName,..     
21940 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 63 6c         object cl
21950 69 65 6e 74 44 61 74 61 2c 0d 0a 20 20 20 20 20  ientData,..     
21960 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36         bool wow6
21970 34 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  4,..            
21980 62 6f 6f 6c 20 74 68 72 6f 77 4f 6e 4d 69 73 73  bool throwOnMiss
21990 69 6e 67 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ing,..          
219a0 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a    bool whatIf,..
219b0 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
219c0 20 76 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20   verbose,..     
219d0 20 20 20 20 20 20 20 72 65 66 20 62 6f 6f 6c 20         ref bool 
219e0 73 61 76 65 64 2c 0d 0a 20 20 20 20 20 20 20 20  saved,..        
219f0 20 20 20 20 72 65 66 20 73 74 72 69 6e 67 20 65      ref string e
21a00 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20  rror..          
21a10 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a    )..        {..
21a20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
21a30 72 65 67 69 73 74 72 79 20 3d 3d 20 6e 75 6c 6c  registry == null
21a40 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
21a50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
21a60 20 20 65 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c    error = "inval
21a70 69 64 20 72 65 67 69 73 74 72 79 22 3b 0d 0a 20  id registry";.. 
21a80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
21a90 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20  eturn false;..  
21aa0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
21ab0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 66             if (f
21ac0 72 61 6d 65 77 6f 72 6b 4c 69 73 74 20 3d 3d 20  rameworkList == 
21ad0 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
21ae0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
21af0 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 69        error = "i
21b00 6e 76 61 6c 69 64 20 66 72 61 6d 65 77 6f 72 6b  nvalid framework
21b10 20 6c 69 73 74 22 3b 0d 0a 20 20 20 20 20 20 20   list";..       
21b20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
21b30 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20  false;..        
21b40 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
21b50 20 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72       MockRegistr
21b60 79 4b 65 79 20 72 6f 6f 74 4b 65 79 20 3d 20 66  yKey rootKey = f
21b70 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 52 6f 6f  rameworkList.Roo
21b80 74 4b 65 79 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  tKey;....       
21b90 20 20 20 20 20 69 66 20 28 72 6f 6f 74 4b 65 79       if (rootKey
21ba0 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
21bb0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
21bc0 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20            error 
21bd0 3d 20 22 69 6e 76 61 6c 69 64 20 72 6f 6f 74 20  = "invalid root 
21be0 6b 65 79 22 3b 0d 0a 20 20 20 20 20 20 20 20 20  key";..         
21bf0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
21c00 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lse;..          
21c10 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
21c20 20 20 20 69 66 20 28 21 4f 62 6a 65 63 74 2e 52     if (!Object.R
21c30 65 66 65 72 65 6e 63 65 45 71 75 61 6c 73 28 72  eferenceEquals(r
21c40 6f 6f 74 4b 65 79 2c 20 72 65 67 69 73 74 72 79  ootKey, registry
21c50 2e 43 75 72 72 65 6e 74 55 73 65 72 29 20 26 26  .CurrentUser) &&
21c60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
21c70 20 20 21 4f 62 6a 65 63 74 2e 52 65 66 65 72 65    !Object.Refere
21c80 6e 63 65 45 71 75 61 6c 73 28 72 6f 6f 74 4b 65  nceEquals(rootKe
21c90 79 2c 20 72 65 67 69 73 74 72 79 2e 4c 6f 63 61  y, registry.Loca
21ca0 6c 4d 61 63 68 69 6e 65 29 29 0d 0a 20 20 20 20  lMachine))..    
21cb0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
21cc0 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72             error
21cd0 20 3d 20 22 72 6f 6f 74 20 6b 65 79 20 6d 75 73   = "root key mus
21ce0 74 20 62 65 20 70 65 72 2d 75 73 65 72 20 6f 72  t be per-user or
21cf0 20 70 65 72 2d 6d 61 63 68 69 6e 65 22 3b 0d 0a   per-machine";..
21d00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21d10 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20  return false;.. 
21d20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
21d30 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
21d40 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 4e 61  frameworkList.Na
21d50 6d 65 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  mes == null)..  
21d60 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
21d70 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
21d80 6f 72 20 3d 20 22 6e 6f 20 66 72 61 6d 65 77 6f  or = "no framewo
21d90 72 6b 20 6e 61 6d 65 73 20 66 6f 75 6e 64 22 3b  rk names found";
21da0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
21db0 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
21dc0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
21dd0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
21de0 20 28 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e   (frameworkList.
21df0 56 65 72 73 69 6f 6e 73 20 3d 3d 20 6e 75 6c 6c  Versions == null
21e00 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
21e10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
21e20 20 20 65 72 72 6f 72 20 3d 20 22 6e 6f 20 66 72    error = "no fr
21e30 61 6d 65 77 6f 72 6b 20 76 65 72 73 69 6f 6e 73  amework versions
21e40 20 66 6f 75 6e 64 22 3b 0d 0a 20 20 20 20 20 20   found";..      
21e50 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
21e60 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20   false;..       
21e70 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
21e80 20 20 20 20 20 20 69 66 20 28 66 72 61 6d 65 77        if (framew
21e90 6f 72 6b 4c 69 73 74 2e 50 6c 61 74 66 6f 72 6d  orkList.Platform
21ea0 4e 61 6d 65 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  Names == null)..
21eb0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
21ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
21ed0 72 72 6f 72 20 3d 20 22 6e 6f 20 70 6c 61 74 66  rror = "no platf
21ee0 6f 72 6d 20 6e 61 6d 65 73 20 66 6f 75 6e 64 22  orm names found"
21ef0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
21f00 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
21f10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
21f20 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
21f30 66 20 28 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74  f (frameworkList
21f40 2e 4e 61 6d 65 73 2e 43 6f 75 6e 74 20 21 3d 20  .Names.Count != 
21f50 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 50 6c  frameworkList.Pl
21f60 61 74 66 6f 72 6d 4e 61 6d 65 73 2e 43 6f 75 6e  atformNames.Coun
21f70 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t)..            
21f80 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
21f90 20 20 20 65 72 72 6f 72 20 3d 20 53 74 72 69 6e     error = Strin
21fa0 67 2e 46 6f 72 6d 61 74 28 22 66 72 61 6d 65 77  g.Format("framew
21fb0 6f 72 6b 20 6e 61 6d 65 20 63 6f 75 6e 74 20 7b  ork name count {
21fc0 30 7d 20 64 6f 65 73 20 6e 6f 74 20 22 20 2b 0d  0} does not " +.
21fd0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
21fe0 20 20 20 20 20 22 6d 61 74 63 68 20 70 6c 61 74       "match plat
21ff0 66 6f 72 6d 20 6e 61 6d 65 20 63 6f 75 6e 74 20  form name count 
22000 7b 31 7d 22 2c 20 66 72 61 6d 65 77 6f 72 6b 4c  {1}", frameworkL
22010 69 73 74 2e 4e 61 6d 65 73 2e 43 6f 75 6e 74 2c  ist.Names.Count,
22020 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
22030 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 4c        frameworkL
22040 69 73 74 2e 50 6c 61 74 66 6f 72 6d 4e 61 6d 65  ist.PlatformName
22050 73 2e 43 6f 75 6e 74 29 3b 0d 0a 0d 0a 20 20 20  s.Count);....   
22060 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
22070 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20  urn false;..    
22080 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
22090 20 20 20 20 20 20 20 20 20 66 6f 72 20 28 69 6e           for (in
220a0 74 20 69 6e 64 65 78 20 3d 20 30 3b 20 69 6e 64  t index = 0; ind
220b0 65 78 20 3c 20 66 72 61 6d 65 77 6f 72 6b 4c 69  ex < frameworkLi
220c0 73 74 2e 4e 61 6d 65 73 2e 43 6f 75 6e 74 3b 20  st.Names.Count; 
220d0 69 6e 64 65 78 2b 2b 29 0d 0a 20 20 20 20 20 20  index++)..      
220e0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
220f0 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
22100 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
22110 4e 4f 54 45 3a 20 47 72 61 62 20 74 68 65 20 6e  NOTE: Grab the n
22120 61 6d 65 20 6f 66 20 74 68 65 20 66 72 61 6d 65  ame of the frame
22130 77 6f 72 6b 20 28 65 2e 67 2e 20 22 2e 4e 45 54  work (e.g. ".NET
22140 46 72 61 6d 65 77 6f 72 6b 22 29 0d 0a 20 20 20  Framework")..   
22150 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
22160 20 20 20 20 20 20 61 6e 64 20 74 68 65 20 6e 61        and the na
22170 6d 65 20 6f 66 20 74 68 65 20 70 6c 61 74 66 6f  me of the platfo
22180 72 6d 20 28 65 2e 67 2e 20 22 57 69 6e 64 6f 77  rm (e.g. "Window
22190 73 43 45 22 29 2e 0d 0a 20 20 20 20 20 20 20 20  sCE")...        
221a0 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
221b0 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
221c0 6e 67 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65  ng frameworkName
221d0 20 3d 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74   = frameworkList
221e0 2e 4e 61 6d 65 73 5b 69 6e 64 65 78 5d 3b 0d 0a  .Names[index];..
221f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22200 73 74 72 69 6e 67 20 70 6c 61 74 66 6f 72 6d 4e  string platformN
22210 61 6d 65 20 3d 20 66 72 61 6d 65 77 6f 72 6b 4c  ame = frameworkL
22220 69 73 74 2e 50 6c 61 74 66 6f 72 6d 4e 61 6d 65  ist.PlatformName
22230 73 5b 69 6e 64 65 78 5d 3b 0d 0a 0d 0a 20 20 20  s[index];....   
22240 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
22250 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
22260 20 2f 2f 20 4e 4f 54 45 3a 20 53 6b 69 70 20 61   // NOTE: Skip a
22270 6c 6c 20 6e 6f 6e 2d 64 65 73 6b 74 6f 70 20 66  ll non-desktop f
22280 72 61 6d 65 77 6f 72 6b 73 20 28 69 2e 65 2e 20  rameworks (i.e. 
22290 69 66 20 74 68 65 20 70 6c 61 74 66 6f 72 6d 0d  if the platform.
222a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
222b0 20 2f 2f 20 20 20 20 20 20 20 6e 61 6d 65 20 69   //       name i
222c0 73 20 6e 6f 74 20 6e 75 6c 6c 29 2e 0d 0a 20 20  s not null)...  
222d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
222e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
222f0 20 20 69 66 20 28 70 6c 61 74 66 6f 72 6d 4e 61    if (platformNa
22300 6d 65 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  me != null)..   
22310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22320 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 0d 0a 20 20   continue;....  
22330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
22340 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
22350 20 20 2f 2f 20 4e 4f 54 45 3a 20 47 72 61 62 20    // NOTE: Grab 
22360 74 68 65 20 73 75 70 70 6f 72 74 65 64 20 76 65  the supported ve
22370 72 73 69 6f 6e 73 20 6f 66 20 74 68 69 73 20 70  rsions of this p
22380 61 72 74 69 63 75 6c 61 72 0d 0a 20 20 20 20 20  articular..     
22390 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
223a0 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 2e 0d 0a      framework...
223b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
223c0 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
223d0 20 20 20 20 56 65 72 73 69 6f 6e 4c 69 73 74 20      VersionList 
223e0 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e  frameworkVersion
223f0 4c 69 73 74 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  List;....       
22400 20 20 20 20 20 20 20 20 20 69 66 20 28 21 66 72           if (!fr
22410 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 56 65 72 73  ameworkList.Vers
22420 69 6f 6e 73 2e 54 72 79 47 65 74 56 61 6c 75 65  ions.TryGetValue
22430 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
22440 20 20 20 20 20 20 20 20 20 20 20 66 72 61 6d 65             frame
22450 77 6f 72 6b 4e 61 6d 65 2c 20 6f 75 74 20 66 72  workName, out fr
22460 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 4c 69  ameworkVersionLi
22470 73 74 29 20 7c 7c 0d 0a 20 20 20 20 20 20 20 20  st) ||..        
22480 20 20 20 20 20 20 20 20 20 20 20 20 28 66 72 61              (fra
22490 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 4c 69 73  meworkVersionLis
224a0 74 20 3d 3d 20 6e 75 6c 6c 29 29 0d 0a 20 20 20  t == null))..   
224b0 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
224c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
224d0 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20      continue;.. 
224e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
224f0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
22500 20 20 20 20 66 6f 72 65 61 63 68 20 28 56 65 72      foreach (Ver
22510 73 69 6f 6e 20 66 72 61 6d 65 77 6f 72 6b 56 65  sion frameworkVe
22520 72 73 69 6f 6e 20 69 6e 20 66 72 61 6d 65 77 6f  rsion in framewo
22530 72 6b 56 65 72 73 69 6f 6e 4c 69 73 74 29 0d 0a  rkVersionList)..
22540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22550 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
22560 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e         TraceOps.
22570 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 54 72  DebugAndTrace(Tr
22580 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65  acePriority.Lowe
22590 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  r,..            
225a0 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62 75              debu
225b0 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65  gCallback, trace
225c0 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67  Callback, String
225d0 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  .Format(..      
225e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
225f0 20 20 22 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65    "frameworkName
22600 20 3d 20 7b 30 7d 2c 20 66 72 61 6d 65 77 6f 72   = {0}, framewor
22610 6b 56 65 72 73 69 6f 6e 20 3d 20 7b 31 7d 2c 20  kVersion = {1}, 
22620 22 20 2b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  " +..           
22630 20 20 20 20 20 20 20 20 20 20 20 20 20 22 70 6c               "pl
22640 61 74 66 6f 72 6d 4e 61 6d 65 20 3d 20 7b 32 7d  atformName = {2}
22650 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 66 72  ", ForDisplay(fr
22660 61 6d 65 77 6f 72 6b 4e 61 6d 65 29 2c 0d 0a 20  ameworkName),.. 
22670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22680 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61         ForDispla
22690 79 28 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69  y(frameworkVersi
226a0 6f 6e 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  on),..          
226b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f                Fo
226c0 72 44 69 73 70 6c 61 79 28 70 6c 61 74 66 6f 72  rDisplay(platfor
226d0 6d 4e 61 6d 65 29 29 2c 20 74 72 61 63 65 43 61  mName)), traceCa
226e0 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
226f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22700 69 66 20 28 21 48 61 76 65 46 72 61 6d 65 77 6f  if (!HaveFramewo
22710 72 6b 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  rk(..           
22720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22730 20 72 6f 6f 74 4b 65 79 2c 20 66 72 61 6d 65 77   rootKey, framew
22740 6f 72 6b 4e 61 6d 65 2c 20 66 72 61 6d 65 77 6f  orkName, framewo
22750 72 6b 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20  rkVersion,..    
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 70 6c 61 74 66 6f 72 6d          platform
22780 4e 61 6d 65 2c 20 77 6f 77 36 34 2c 20 77 68 61  Name, wow64, wha
22790 74 49 66 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a  tIf, verbose))..
227a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
227b0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
227c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
227d0 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64  raceOps.DebugAnd
227e0 54 72 61 63 65 28 54 72 61 63 65 50 72 69 6f 72  Trace(TracePrior
227f0 69 74 79 2e 4c 6f 77 2c 0d 0a 20 20 20 20 20 20  ity.Low,..      
22800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22810 20 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62        debugCallb
22820 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61  ack, traceCallba
22830 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ck,..           
22840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22850 20 22 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b   ".NET Framework
22860 20 6e 6f 74 20 66 6f 75 6e 64 2c 20 73 6b 69 70   not found, skip
22870 70 69 6e 67 2e 2e 2e 22 2c 0d 0a 20 20 20 20 20  ping...",..     
22880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22890 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65         traceCate
228a0 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
228b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
228c0 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20    continue;..   
228d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
228e0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
228f0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 63 61            if (ca
22900 6c 6c 62 61 63 6b 20 3d 3d 20 6e 75 6c 6c 29 0d  llback == null).
22910 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
22920 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75           continu
22930 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
22940 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
22950 20 64 69 72 65 63 74 6f 72 79 20 3d 20 47 65 74   directory = Get
22960 46 72 61 6d 65 77 6f 72 6b 44 69 72 65 63 74 6f  FrameworkDirecto
22970 72 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ry(..           
22980 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f               roo
22990 74 4b 65 79 2c 20 66 72 61 6d 65 77 6f 72 6b 56  tKey, frameworkV
229a0 65 72 73 69 6f 6e 2c 20 77 6f 77 36 34 2c 20 77  ersion, wow64, w
229b0 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 3b  hatIf, verbose);
229c0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
229d0 20 20 20 20 20 20 20 20 69 66 20 28 53 74 72 69          if (Stri
229e0 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79  ng.IsNullOrEmpty
229f0 28 64 69 72 65 63 74 6f 72 79 29 29 0d 0a 20 20  (directory))..  
22a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22a10 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
22a20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61               Tra
22a30 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72  ceOps.DebugAndTr
22a40 61 63 65 28 54 72 61 63 65 50 72 69 6f 72 69 74  ace(TracePriorit
22a50 79 2e 4c 6f 77 2c 0d 0a 20 20 20 20 20 20 20 20  y.Low,..        
22a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22a70 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63      debugCallbac
22a80 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b  k, traceCallback
22a90 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  , String.Format(
22aa0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
22ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2e                ".
22ac0 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b 20 7b 30  NET Framework {0
22ad0 7d 20 64 69 72 65 63 74 6f 72 79 20 69 73 20 69  } directory is i
22ae0 6e 76 61 6c 69 64 2c 20 22 20 2b 0d 0a 20 20 20  nvalid, " +..   
22af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22b00 20 20 20 20 20 20 20 20 20 22 73 6b 69 70 70 69           "skippi
22b10 6e 67 2e 2e 2e 22 2c 20 46 6f 72 44 69 73 70 6c  ng...", ForDispl
22b20 61 79 28 66 72 61 6d 65 77 6f 72 6b 56 65 72 73  ay(frameworkVers
22b30 69 6f 6e 29 29 2c 0d 0a 20 20 20 20 20 20 20 20  ion)),..        
22b40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22b50 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72      traceCategor
22b60 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
22b70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
22b80 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20  ontinue;..      
22b90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
22ba0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
22bb0 20 20 20 20 20 20 20 64 69 72 65 63 74 6f 72 79         directory
22bc0 20 3d 20 50 61 74 68 2e 43 6f 6d 62 69 6e 65 28   = Path.Combine(
22bd0 64 69 72 65 63 74 6f 72 79 2c 20 22 43 6f 6e 66  directory, "Conf
22be0 69 67 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ig");....       
22bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
22c00 28 21 44 69 72 65 63 74 6f 72 79 2e 45 78 69 73  (!Directory.Exis
22c10 74 73 28 64 69 72 65 63 74 6f 72 79 29 29 0d 0a  ts(directory))..
22c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22c30 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
22c40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
22c50 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64  raceOps.DebugAnd
22c60 54 72 61 63 65 28 54 72 61 63 65 50 72 69 6f 72  Trace(TracePrior
22c70 69 74 79 2e 4c 6f 77 2c 0d 0a 20 20 20 20 20 20  ity.Low,..      
22c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22c90 20 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62        debugCallb
22ca0 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61  ack, traceCallba
22cb0 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ck, String.Forma
22cc0 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
22cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22ce0 22 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b 20  ".NET Framework 
22cf0 7b 30 7d 20 64 69 72 65 63 74 6f 72 79 20 7b 31  {0} directory {1
22d00 7d 20 64 6f 65 73 20 6e 6f 74 20 22 20 2b 0d 0a  } does not " +..
22d10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22d20 20 20 20 20 20 20 20 20 20 20 20 20 22 65 78 69              "exi
22d30 73 74 2c 20 73 6b 69 70 70 69 6e 67 2e 2e 2e 22  st, skipping..."
22d40 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 66 72 61  , ForDisplay(fra
22d50 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 29 2c 0d  meworkVersion),.
22d60 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
22d70 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72               For
22d80 44 69 73 70 6c 61 79 28 64 69 72 65 63 74 6f 72  Display(director
22d90 79 29 29 2c 20 74 72 61 63 65 43 61 74 65 67 6f  y)), traceCatego
22da0 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
22db0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22dc0 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20  continue;..     
22dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
22de0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
22df0 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 66          string f
22e00 69 6c 65 4e 61 6d 65 20 3d 20 50 61 74 68 2e 43  ileName = Path.C
22e10 6f 6d 62 69 6e 65 28 64 69 72 65 63 74 6f 72 79  ombine(directory
22e20 2c 20 22 6d 61 63 68 69 6e 65 2e 63 6f 6e 66 69  , "machine.confi
22e30 67 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  g");....        
22e40 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
22e50 21 46 69 6c 65 2e 45 78 69 73 74 73 28 66 69 6c  !File.Exists(fil
22e60 65 4e 61 6d 65 29 29 0d 0a 20 20 20 20 20 20 20  eName))..       
22e70 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
22e80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22e90 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73          TraceOps
22ea0 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 54  .DebugAndTrace(T
22eb0 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77  racePriority.Low
22ec0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
22ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
22ee0 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72  ebugCallback, tr
22ef0 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72  aceCallback, Str
22f00 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
22f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22f20 20 20 20 20 20 20 20 20 20 22 2e 4e 45 54 20 46           ".NET F
22f30 72 61 6d 65 77 6f 72 6b 20 7b 30 7d 20 66 69 6c  ramework {0} fil
22f40 65 20 7b 31 7d 20 64 6f 65 73 20 6e 6f 74 20 65  e {1} does not e
22f50 78 69 73 74 2c 20 22 20 2b 0d 0a 20 20 20 20 20  xist, " +..     
22f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22f70 20 20 20 20 20 20 20 22 73 6b 69 70 70 69 6e 67         "skipping
22f80 2e 2e 2e 22 2c 20 46 6f 72 44 69 73 70 6c 61 79  ...", ForDisplay
22f90 28 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f  (frameworkVersio
22fa0 6e 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n),..           
22fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22fc0 20 46 6f 72 44 69 73 70 6c 61 79 28 66 69 6c 65   ForDisplay(file
22fd0 4e 61 6d 65 29 29 2c 20 74 72 61 63 65 43 61 74  Name)), traceCat
22fe0 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  egory);....     
22ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23000 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20     continue;..  
23010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23020 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
23030 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
23040 6c 6f 63 61 6c 53 61 76 65 64 20 3d 20 66 61 6c  localSaved = fal
23050 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  se;....         
23060 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21             if (!
23070 63 61 6c 6c 62 61 63 6b 28 0d 0a 20 20 20 20 20  callback(..     
23080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23090 20 20 20 20 20 20 20 66 69 6c 65 4e 61 6d 65 2c         fileName,
230a0 20 69 6e 76 61 72 69 61 6e 74 2c 20 6e 61 6d 65   invariant, name
230b0 2c 20 64 65 73 63 72 69 70 74 69 6f 6e 2c 20 74  , description, t
230c0 79 70 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20  ypeName,..      
230d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
230e0 20 20 20 20 20 20 61 73 73 65 6d 62 6c 79 4e 61        assemblyNa
230f0 6d 65 2c 20 63 6c 69 65 6e 74 44 61 74 61 2c 20  me, clientData, 
23100 77 6f 77 36 34 2c 20 74 68 72 6f 77 4f 6e 4d 69  wow64, throwOnMi
23110 73 73 69 6e 67 2c 0d 0a 20 20 20 20 20 20 20 20  ssing,..        
23120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23130 20 20 20 20 77 68 61 74 49 66 2c 20 76 65 72 62      whatIf, verb
23140 6f 73 65 2c 20 72 65 66 20 6c 6f 63 61 6c 53 61  ose, ref localSa
23150 76 65 64 2c 20 72 65 66 20 65 72 72 6f 72 29 29  ved, ref error))
23160 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
23170 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
23180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23190 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
231a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
231b0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
231c0 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d             else.
231d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
231e0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
231f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23200 69 66 20 28 6c 6f 63 61 6c 53 61 76 65 64 20 26  if (localSaved &
23210 26 20 21 73 61 76 65 64 29 0d 0a 20 20 20 20 20  & !saved)..     
23220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23230 20 20 20 20 20 20 20 73 61 76 65 64 20 3d 20 74         saved = t
23240 72 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  rue;....        
23250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23260 69 66 20 28 76 65 72 62 6f 73 65 29 0d 0a 20 20  if (verbose)..  
23270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23280 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f            TraceO
23290 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65  ps.DebugAndTrace
232a0 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c  (TracePriority.L
232b0 6f 77 65 73 74 2c 0d 0a 20 20 20 20 20 20 20 20  owest,..        
232c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
232d0 20 20 20 20 20 20 20 20 64 65 62 75 67 43 61 6c          debugCal
232e0 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c  lback, traceCall
232f0 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72  back, String.For
23300 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
23310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23320 20 20 20 20 20 20 22 6c 6f 63 61 6c 53 61 76 65        "localSave
23330 64 20 3d 20 7b 30 7d 2c 20 73 61 76 65 64 20 3d  d = {0}, saved =
23340 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20   {1}",..        
23350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23360 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c          ForDispl
23370 61 79 28 6c 6f 63 61 6c 53 61 76 65 64 29 2c 20  ay(localSaved), 
23380 46 6f 72 44 69 73 70 6c 61 79 28 73 61 76 65 64  ForDisplay(saved
23390 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  )),..           
233a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
233b0 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f       traceCatego
233c0 72 79 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ry);..          
233d0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
233e0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
233f0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
23400 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
23410 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20 20  urn true;..     
23420 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
23430 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23440 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23450 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23460 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23470 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
23480 20 20 20 5b 4d 65 74 68 6f 64 49 6d 70 6c 28 4d     [MethodImpl(M
23490 65 74 68 6f 64 49 6d 70 6c 4f 70 74 69 6f 6e 73  ethodImplOptions
234a0 2e 4e 6f 49 6e 6c 69 6e 69 6e 67 29 5d 0d 0a 20  .NoInlining)].. 
234b0 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
234c0 74 61 74 69 63 20 62 6f 6f 6c 20 46 6f 72 45 61  tatic bool ForEa
234d0 63 68 46 72 61 6d 65 77 6f 72 6b 52 65 67 69 73  chFrameworkRegis
234e0 74 72 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20  try(..          
234f0 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 20 72    MockRegistry r
23500 65 67 69 73 74 72 79 2c 0d 0a 20 20 20 20 20 20  egistry,..      
23510 20 20 20 20 20 20 46 72 61 6d 65 77 6f 72 6b 4c        FrameworkL
23520 69 73 74 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73  ist frameworkLis
23530 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t,..            
23540 46 72 61 6d 65 77 6f 72 6b 52 65 67 69 73 74 72  FrameworkRegistr
23550 79 43 61 6c 6c 62 61 63 6b 20 63 61 6c 6c 62 61  yCallback callba
23560 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ck,..           
23570 20 6f 62 6a 65 63 74 20 63 6c 69 65 6e 74 44 61   object clientDa
23580 74 61 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ta,..           
23590 20 62 6f 6f 6c 20 77 6f 77 36 34 2c 0d 0a 20 20   bool wow64,..  
235a0 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 74            bool t
235b0 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 2c 0d 0a  hrowOnMissing,..
235c0 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
235d0 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20   whatIf,..      
235e0 20 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f        bool verbo
235f0 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se,..           
23600 20 72 65 66 20 73 74 72 69 6e 67 20 65 72 72 6f   ref string erro
23610 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29  r..            )
23620 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
23630 20 20 20 20 20 20 20 20 20 69 66 20 28 72 65 67           if (reg
23640 69 73 74 72 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  istry == null)..
23650 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
23660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
23670 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64 20  rror = "invalid 
23680 72 65 67 69 73 74 72 79 22 3b 0d 0a 20 20 20 20  registry";..    
23690 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
236a0 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20  rn false;..     
236b0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
236c0 20 20 20 20 20 20 20 20 69 66 20 28 66 72 61 6d          if (fram
236d0 65 77 6f 72 6b 4c 69 73 74 20 3d 3d 20 6e 75 6c  eworkList == nul
236e0 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
236f0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
23700 20 20 20 65 72 72 6f 72 20 3d 20 22 69 6e 76 61     error = "inva
23710 6c 69 64 20 66 72 61 6d 65 77 6f 72 6b 20 6c 69  lid framework li
23720 73 74 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  st";..          
23730 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
23740 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se;..           
23750 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
23760 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65    MockRegistryKe
23770 79 20 72 6f 6f 74 4b 65 79 20 3d 20 66 72 61 6d  y rootKey = fram
23780 65 77 6f 72 6b 4c 69 73 74 2e 52 6f 6f 74 4b 65  eworkList.RootKe
23790 79 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  y;....          
237a0 20 20 69 66 20 28 72 6f 6f 74 4b 65 79 20 3d 3d    if (rootKey ==
237b0 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
237c0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
237d0 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22         error = "
237e0 69 6e 76 61 6c 69 64 20 72 6f 6f 74 20 6b 65 79  invalid root key
237f0 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ";..            
23800 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
23810 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
23820 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
23830 69 66 20 28 21 4f 62 6a 65 63 74 2e 52 65 66 65  if (!Object.Refe
23840 72 65 6e 63 65 45 71 75 61 6c 73 28 72 6f 6f 74  renceEquals(root
23850 4b 65 79 2c 20 72 65 67 69 73 74 72 79 2e 43 75  Key, registry.Cu
23860 72 72 65 6e 74 55 73 65 72 29 20 26 26 0d 0a 20  rrentUser) &&.. 
23870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 21                 !
23880 4f 62 6a 65 63 74 2e 52 65 66 65 72 65 6e 63 65  Object.Reference
23890 45 71 75 61 6c 73 28 72 6f 6f 74 4b 65 79 2c 20  Equals(rootKey, 
238a0 72 65 67 69 73 74 72 79 2e 4c 6f 63 61 6c 4d 61  registry.LocalMa
238b0 63 68 69 6e 65 29 29 0d 0a 20 20 20 20 20 20 20  chine))..       
238c0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
238d0 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
238e0 22 72 6f 6f 74 20 6b 65 79 20 6d 75 73 74 20 62  "root key must b
238f0 65 20 70 65 72 2d 75 73 65 72 20 6f 72 20 70 65  e per-user or pe
23900 72 2d 6d 61 63 68 69 6e 65 22 3b 0d 0a 20 20 20  r-machine";..   
23910 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
23920 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20  urn false;..    
23930 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
23940 20 20 20 20 20 20 20 20 20 69 66 20 28 66 72 61           if (fra
23950 6d 65 77 6f 72 6b 4c 69 73 74 2e 4e 61 6d 65 73  meworkList.Names
23960 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
23970 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
23980 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20            error 
23990 3d 20 22 6e 6f 20 66 72 61 6d 65 77 6f 72 6b 20  = "no framework 
239a0 6e 61 6d 65 73 20 66 6f 75 6e 64 22 3b 0d 0a 20  names found";.. 
239b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
239c0 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20  eturn false;..  
239d0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
239e0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 66             if (f
239f0 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 56 65 72  rameworkList.Ver
23a00 73 69 6f 6e 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  sions == null)..
23a10 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
23a20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
23a30 72 72 6f 72 20 3d 20 22 6e 6f 20 66 72 61 6d 65  rror = "no frame
23a40 77 6f 72 6b 20 76 65 72 73 69 6f 6e 73 20 66 6f  work versions fo
23a50 75 6e 64 22 3b 0d 0a 20 20 20 20 20 20 20 20 20  und";..         
23a60 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
23a70 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lse;..          
23a80 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
23a90 20 20 20 69 66 20 28 66 72 61 6d 65 77 6f 72 6b     if (framework
23aa0 4c 69 73 74 2e 50 6c 61 74 66 6f 72 6d 4e 61 6d  List.PlatformNam
23ab0 65 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  es == null)..   
23ac0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
23ad0 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
23ae0 72 20 3d 20 22 6e 6f 20 70 6c 61 74 66 6f 72 6d  r = "no platform
23af0 20 6e 61 6d 65 73 20 66 6f 75 6e 64 22 3b 0d 0a   names found";..
23b00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23b10 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20  return false;.. 
23b20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
23b30 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
23b40 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 4e 61  frameworkList.Na
23b50 6d 65 73 2e 43 6f 75 6e 74 20 21 3d 20 66 72 61  mes.Count != fra
23b60 6d 65 77 6f 72 6b 4c 69 73 74 2e 50 6c 61 74 66  meworkList.Platf
23b70 6f 72 6d 4e 61 6d 65 73 2e 43 6f 75 6e 74 29 0d  ormNames.Count).
23b80 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
23b90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23ba0 65 72 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46  error = String.F
23bb0 6f 72 6d 61 74 28 22 66 72 61 6d 65 77 6f 72 6b  ormat("framework
23bc0 20 6e 61 6d 65 20 63 6f 75 6e 74 20 7b 30 7d 20   name count {0} 
23bd0 64 6f 65 73 20 6e 6f 74 20 22 20 2b 0d 0a 20 20  does not " +..  
23be0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23bf0 20 20 22 6d 61 74 63 68 20 70 6c 61 74 66 6f 72    "match platfor
23c00 6d 20 6e 61 6d 65 20 63 6f 75 6e 74 20 7b 31 7d  m name count {1}
23c10 22 2c 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74  ", frameworkList
23c20 2e 4e 61 6d 65 73 2e 43 6f 75 6e 74 2c 0d 0a 20  .Names.Count,.. 
23c30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23c40 20 20 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74     frameworkList
23c50 2e 50 6c 61 74 66 6f 72 6d 4e 61 6d 65 73 2e 43  .PlatformNames.C
23c60 6f 75 6e 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  ount);....      
23c70 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
23c80 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20   false;..       
23c90 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
23ca0 20 20 20 20 20 20 66 6f 72 20 28 69 6e 74 20 69        for (int i
23cb0 6e 64 65 78 20 3d 20 30 3b 20 69 6e 64 65 78 20  ndex = 0; index 
23cc0 3c 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e  < frameworkList.
23cd0 4e 61 6d 65 73 2e 43 6f 75 6e 74 3b 20 69 6e 64  Names.Count; ind
23ce0 65 78 2b 2b 29 0d 0a 20 20 20 20 20 20 20 20 20  ex++)..         
23cf0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
23d00 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
23d10 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54            // NOT
23d20 45 3a 20 47 72 61 62 20 74 68 65 20 6e 61 6d 65  E: Grab the name
23d30 20 6f 66 20 74 68 65 20 66 72 61 6d 65 77 6f 72   of the framewor
23d40 6b 20 28 65 2e 67 2e 20 22 2e 4e 45 54 46 72 61  k (e.g. ".NETFra
23d50 6d 65 77 6f 72 6b 22 29 0d 0a 20 20 20 20 20 20  mework")..      
23d60 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
23d70 20 20 20 61 6e 64 20 74 68 65 20 6e 61 6d 65 20     and the name 
23d80 6f 66 20 74 68 65 20 70 6c 61 74 66 6f 72 6d 20  of the platform 
23d90 28 65 2e 67 2e 20 22 57 69 6e 64 6f 77 73 43 45  (e.g. "WindowsCE
23da0 22 29 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ")...           
23db0 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
23dc0 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
23dd0 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 20 3d 20  frameworkName = 
23de0 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 4e 61  frameworkList.Na
23df0 6d 65 73 5b 69 6e 64 65 78 5d 3b 0d 0a 20 20 20  mes[index];..   
23e00 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72               str
23e10 69 6e 67 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65  ing platformName
23e20 20 3d 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74   = frameworkList
23e30 2e 50 6c 61 74 66 6f 72 6d 4e 61 6d 65 73 5b 69  .PlatformNames[i
23e40 6e 64 65 78 5d 3b 0d 0a 0d 0a 20 20 20 20 20 20  ndex];....      
23e50 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
23e60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
23e70 20 4e 4f 54 45 3a 20 47 72 61 62 20 74 68 65 20   NOTE: Grab the 
23e80 73 75 70 70 6f 72 74 65 64 20 76 65 72 73 69 6f  supported versio
23e90 6e 73 20 6f 66 20 74 68 69 73 20 70 61 72 74 69  ns of this parti
23ea0 63 75 6c 61 72 0d 0a 20 20 20 20 20 20 20 20 20  cular..         
23eb0 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
23ec0 66 72 61 6d 65 77 6f 72 6b 2e 0d 0a 20 20 20 20  framework...    
23ed0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
23ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23ef0 56 65 72 73 69 6f 6e 4c 69 73 74 20 66 72 61 6d  VersionList fram
23f00 65 77 6f 72 6b 56 65 72 73 69 6f 6e 4c 69 73 74  eworkVersionList
23f10 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
23f20 20 20 20 20 20 69 66 20 28 21 66 72 61 6d 65 77       if (!framew
23f30 6f 72 6b 4c 69 73 74 2e 56 65 72 73 69 6f 6e 73  orkList.Versions
23f40 2e 54 72 79 47 65 74 56 61 6c 75 65 28 0d 0a 20  .TryGetValue(.. 
23f50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23f60 20 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b         framework
23f70 4e 61 6d 65 2c 20 6f 75 74 20 66 72 61 6d 65 77  Name, out framew
23f80 6f 72 6b 56 65 72 73 69 6f 6e 4c 69 73 74 29 20  orkVersionList) 
23f90 7c 7c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ||..            
23fa0 20 20 20 20 20 20 20 20 28 66 72 61 6d 65 77 6f          (framewo
23fb0 72 6b 56 65 72 73 69 6f 6e 4c 69 73 74 20 3d 3d  rkVersionList ==
23fc0 20 6e 75 6c 6c 29 29 0d 0a 20 20 20 20 20 20 20   null))..       
23fd0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
23fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23ff0 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20  continue;..     
24000 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
24010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24020 66 6f 72 65 61 63 68 20 28 56 65 72 73 69 6f 6e  foreach (Version
24030 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f   frameworkVersio
24040 6e 20 69 6e 20 66 72 61 6d 65 77 6f 72 6b 56 65  n in frameworkVe
24050 72 73 69 6f 6e 4c 69 73 74 29 0d 0a 20 20 20 20  rsionList)..    
24060 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
24070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24080 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75     TraceOps.Debu
24090 67 41 6e 64 54 72 61 63 65 28 54 72 61 63 65 50  gAndTrace(TraceP
240a0 72 69 6f 72 69 74 79 2e 4c 6f 77 65 72 2c 0d 0a  riority.Lower,..
240b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
240c0 20 20 20 20 20 20 20 20 64 65 62 75 67 43 61 6c          debugCal
240d0 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c  lback, traceCall
240e0 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72  back, String.For
240f0 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
24100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 66                "f
24110 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 20 3d 20 7b  rameworkName = {
24120 30 7d 2c 20 66 72 61 6d 65 77 6f 72 6b 56 65 72  0}, frameworkVer
24130 73 69 6f 6e 20 3d 20 7b 31 7d 2c 20 22 20 2b 0d  sion = {1}, " +.
24140 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
24150 20 20 20 20 20 20 20 20 20 22 70 6c 61 74 66 6f           "platfo
24160 72 6d 4e 61 6d 65 20 3d 20 7b 32 7d 22 2c 20 46  rmName = {2}", F
24170 6f 72 44 69 73 70 6c 61 79 28 66 72 61 6d 65 77  orDisplay(framew
24180 6f 72 6b 4e 61 6d 65 29 2c 0d 0a 20 20 20 20 20  orkName),..     
24190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
241a0 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 66 72     ForDisplay(fr
241b0 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 29 2c  ameworkVersion),
241c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
241d0 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73            ForDis
241e0 70 6c 61 79 28 70 6c 61 74 66 6f 72 6d 4e 61 6d  play(platformNam
241f0 65 29 29 2c 20 74 72 61 63 65 43 61 74 65 67 6f  e)), traceCatego
24200 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
24210 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
24220 21 48 61 76 65 46 72 61 6d 65 77 6f 72 6b 28 0d  !HaveFramework(.
24230 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
24240 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f               roo
24250 74 4b 65 79 2c 20 66 72 61 6d 65 77 6f 72 6b 4e  tKey, frameworkN
24260 61 6d 65 2c 20 66 72 61 6d 65 77 6f 72 6b 56 65  ame, frameworkVe
24270 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20  rsion,..        
24280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24290 20 20 20 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65      platformName
242a0 2c 20 77 6f 77 36 34 2c 20 77 68 61 74 49 66 2c  , wow64, whatIf,
242b0 20 76 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 20   verbose))..    
242c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
242d0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
242e0 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
242f0 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63  Ops.DebugAndTrac
24300 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e  e(TracePriority.
24310 4c 6f 77 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  Low,..          
24320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24330 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c    debugCallback,
24340 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 0d   traceCallback,.
24350 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
24360 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2e 4e               ".N
24370 45 54 20 46 72 61 6d 65 77 6f 72 6b 20 6e 6f 74  ET Framework not
24380 20 66 6f 75 6e 64 2c 20 73 6b 69 70 70 69 6e 67   found, skipping
24390 2e 2e 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  ...",..         
243a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
243b0 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
243c0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
243d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
243e0 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20  ntinue;..       
243f0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
24400 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
24410 20 20 20 20 20 20 69 66 20 28 63 61 6c 6c 62 61        if (callba
24420 63 6b 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ck == null)..   
24430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24440 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a       continue;..
24450 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
24460 20 20 20 20 20 20 69 66 20 28 21 63 61 6c 6c 62        if (!callb
24470 61 63 6b 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ack(..          
24480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24490 20 20 72 6f 6f 74 4b 65 79 2c 20 66 72 61 6d 65    rootKey, frame
244a0 77 6f 72 6b 4e 61 6d 65 2c 20 66 72 61 6d 65 77  workName, framew
244b0 6f 72 6b 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20  orkVersion,..   
244c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
244d0 20 20 20 20 20 20 20 20 20 70 6c 61 74 66 6f 72           platfor
244e0 6d 4e 61 6d 65 2c 20 63 6c 69 65 6e 74 44 61 74  mName, clientDat
244f0 61 2c 20 77 6f 77 36 34 2c 20 74 68 72 6f 77 4f  a, wow64, throwO
24500 6e 4d 69 73 73 69 6e 67 2c 0d 0a 20 20 20 20 20  nMissing,..     
24510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24520 20 20 20 20 20 20 20 77 68 61 74 49 66 2c 20 76         whatIf, v
24530 65 72 62 6f 73 65 2c 20 72 65 66 20 65 72 72 6f  erbose, ref erro
24540 72 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  r))..           
24550 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
24560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24570 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
24580 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
24590 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
245a0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
245b0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
245c0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
245d0 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20   true;..        
245e0 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72  }..        #endr
245f0 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20  egion....       
24600 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
24610 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24620 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24630 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24640 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
24650 20 20 20 20 23 72 65 67 69 6f 6e 20 50 65 72 2d      #region Per-
24660 56 69 73 75 61 6c 20 53 74 75 64 69 6f 20 56 65  Visual Studio Ve
24670 72 73 69 6f 6e 20 48 61 6e 64 6c 69 6e 67 0d 0a  rsion Handling..
24680 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
24690 73 74 61 74 69 63 20 76 6f 69 64 20 49 6e 69 74  static void Init
246a0 69 61 6c 69 7a 65 56 73 4c 69 73 74 28 0d 0a 20  ializeVsList(.. 
246b0 20 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52             MockR
246c0 65 67 69 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b  egistryKey rootK
246d0 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ey,..           
246e0 20 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 63   Configuration c
246f0 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2c 0d 0a 20  onfiguration,.. 
24700 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20 56             ref V
24710 73 4c 69 73 74 20 76 73 4c 69 73 74 0d 0a 20 20  sList vsList..  
24720 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
24730 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
24740 20 20 20 20 69 66 20 28 76 73 4c 69 73 74 20 3d      if (vsList =
24750 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
24760 20 20 20 20 20 20 20 20 20 76 73 4c 69 73 74 20           vsList 
24770 3d 20 6e 65 77 20 56 73 4c 69 73 74 28 29 3b 0d  = new VsList();.
24780 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
24790 66 20 28 76 73 4c 69 73 74 2e 52 6f 6f 74 4b 65  f (vsList.RootKe
247a0 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  y == null)..    
247b0 20 20 20 20 20 20 20 20 20 20 20 20 76 73 4c 69              vsLi
247c0 73 74 2e 52 6f 6f 74 4b 65 79 20 3d 20 72 6f 6f  st.RootKey = roo
247d0 74 4b 65 79 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  tKey;....       
247e0 20 20 20 20 20 69 66 20 28 76 73 4c 69 73 74 2e       if (vsList.
247f0 56 65 72 73 69 6f 6e 73 20 3d 3d 20 6e 75 6c 6c  Versions == null
24800 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
24810 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
24820 20 20 76 73 4c 69 73 74 2e 56 65 72 73 69 6f 6e    vsList.Version
24830 73 20 3d 20 6e 65 77 20 56 65 72 73 69 6f 6e 4c  s = new VersionL
24840 69 73 74 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  ist();....      
24850 20 20 20 20 20 20 20 20 20 20 2f 2f 20 76 73 4c            // vsL
24860 69 73 74 2e 56 65 72 73 69 6f 6e 73 2e 41 64 64  ist.Versions.Add
24870 28 6e 65 77 20 56 65 72 73 69 6f 6e 28 38 2c 20  (new Version(8, 
24880 30 29 29 3b 20 2f 2f 20 56 69 73 75 61 6c 20 53  0)); // Visual S
24890 74 75 64 69 6f 20 32 30 30 35 0d 0a 0d 0a 20 20  tudio 2005....  
248a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
248b0 20 28 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e   ((configuration
248c0 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20 21 63 6f   == null) || !co
248d0 6e 66 69 67 75 72 61 74 69 6f 6e 2e 4e 6f 56 73  nfiguration.NoVs
248e0 32 30 30 38 29 0d 0a 20 20 20 20 20 20 20 20 20  2008)..         
248f0 20 20 20 20 20 20 20 20 20 20 20 76 73 4c 69 73             vsLis
24900 74 2e 56 65 72 73 69 6f 6e 73 2e 41 64 64 28 6e  t.Versions.Add(n
24910 65 77 20 56 65 72 73 69 6f 6e 28 39 2c 20 30 29  ew Version(9, 0)
24920 29 3b 20 2f 2f 20 56 69 73 75 61 6c 20 53 74 75  ); // Visual Stu
24930 64 69 6f 20 32 30 30 38 0d 0a 0d 0a 20 20 20 20  dio 2008....    
24940 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
24950 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 3d  (configuration =
24960 3d 20 6e 75 6c 6c 29 20 7c 7c 20 21 63 6f 6e 66  = null) || !conf
24970 69 67 75 72 61 74 69 6f 6e 2e 4e 6f 56 73 32 30  iguration.NoVs20
24980 31 30 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  10)..           
24990 20 20 20 20 20 20 20 20 20 76 73 4c 69 73 74 2e           vsList.
249a0 56 65 72 73 69 6f 6e 73 2e 41 64 64 28 6e 65 77  Versions.Add(new
249b0 20 56 65 72 73 69 6f 6e 28 31 30 2c 20 30 29 29   Version(10, 0))
249c0 3b 2f 2f 20 56 69 73 75 61 6c 20 53 74 75 64 69  ;// Visual Studi
249d0 6f 20 32 30 31 30 0d 0a 20 20 20 20 20 20 20 20  o 2010..        
249e0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d      }..        }
249f0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
24a00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24a10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24a20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24a30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24a40 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70  ///....        p
24a50 72 69 76 61 74 65 20 73 74 61 74 69 63 20 62 6f  rivate static bo
24a60 6f 6c 20 48 61 76 65 56 73 56 65 72 73 69 6f 6e  ol HaveVsVersion
24a70 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 4d  (..            M
24a80 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 72  ockRegistryKey r
24a90 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20  ootKey,..       
24aa0 20 20 20 20 20 56 65 72 73 69 6f 6e 20 76 73 56       Version vsV
24ab0 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20  ersion,..       
24ac0 20 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34 2c       bool wow64,
24ad0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
24ae0 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20  ol whatIf,..    
24af0 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65 72          bool ver
24b00 62 6f 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20  bose..          
24b10 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a    )..        {..
24b20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
24b30 76 73 56 65 72 73 69 6f 6e 20 3d 3d 20 6e 75 6c  vsVersion == nul
24b40 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
24b50 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
24b60 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
24b70 20 73 74 72 69 6e 67 20 6b 65 79 4e 61 6d 65 20   string keyName 
24b80 3d 20 47 65 74 56 73 4b 65 79 4e 61 6d 65 28 76  = GetVsKeyName(v
24b90 73 56 65 72 73 69 6f 6e 2c 20 77 6f 77 36 34 29  sVersion, wow64)
24ba0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
24bb0 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69   using (MockRegi
24bc0 73 74 72 79 4b 65 79 20 6b 65 79 20 3d 20 52 65  stryKey key = Re
24bd0 67 69 73 74 72 79 48 65 6c 70 65 72 2e 4f 70 65  gistryHelper.Ope
24be0 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20  nSubKey(..      
24bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f                ro
24c00 6f 74 4b 65 79 2c 20 6b 65 79 4e 61 6d 65 2c 20  otKey, keyName, 
24c10 66 61 6c 73 65 2c 20 77 68 61 74 49 66 2c 20 76  false, whatIf, v
24c20 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20 20  erbose))..      
24c30 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
24c40 20 20 20 20 20 20 20 20 20 69 66 20 28 6b 65 79           if (key
24c50 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
24c60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
24c70 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a  eturn false;....
24c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24c90 6f 62 6a 65 63 74 20 76 61 6c 75 65 20 3d 20 52  object value = R
24ca0 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 47 65  egistryHelper.Ge
24cb0 74 56 61 6c 75 65 28 0d 0a 20 20 20 20 20 20 20  tValue(..       
24cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 6b 65 79               key
24cd0 2c 20 22 49 6e 73 74 61 6c 6c 44 69 72 22 2c 20  , "InstallDir", 
24ce0 6e 75 6c 6c 2c 20 77 68 61 74 49 66 2c 20 76 65  null, whatIf, ve
24cf0 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20  rbose);....     
24d00 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21             if (!
24d10 28 76 61 6c 75 65 20 69 73 20 73 74 72 69 6e 67  (value is string
24d20 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
24d30 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
24d40 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  alse;....       
24d50 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
24d60 64 69 72 65 63 74 6f 72 79 20 3d 20 28 73 74 72  directory = (str
24d70 69 6e 67 29 76 61 6c 75 65 3b 0d 0a 0d 0a 20 20  ing)value;....  
24d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
24d90 20 28 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f   (String.IsNullO
24da0 72 45 6d 70 74 79 28 64 69 72 65 63 74 6f 72 79  rEmpty(directory
24db0 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
24dc0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
24dd0 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  alse;....       
24de0 20 20 20 20 20 20 20 20 20 69 66 20 28 21 44 69           if (!Di
24df0 72 65 63 74 6f 72 79 2e 45 78 69 73 74 73 28 64  rectory.Exists(d
24e00 69 72 65 63 74 6f 72 79 29 29 0d 0a 20 20 20 20  irectory))..    
24e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24e20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d  return false;...
24e30 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
24e40 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20   return true;.. 
24e50 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
24e60 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
24e70 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
24e80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24e90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24ea0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24eb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
24ec0 20 20 20 20 20 20 5b 4d 65 74 68 6f 64 49 6d 70        [MethodImp
24ed0 6c 28 4d 65 74 68 6f 64 49 6d 70 6c 4f 70 74 69  l(MethodImplOpti
24ee0 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e 69 6e 67 29 5d  ons.NoInlining)]
24ef0 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
24f00 65 20 73 74 61 74 69 63 20 62 6f 6f 6c 20 46 6f  e static bool Fo
24f10 72 45 61 63 68 56 73 56 65 72 73 69 6f 6e 52 65  rEachVsVersionRe
24f20 67 69 73 74 72 79 28 0d 0a 20 20 20 20 20 20 20  gistry(..       
24f30 20 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72       MockRegistr
24f40 79 20 72 65 67 69 73 74 72 79 2c 0d 0a 20 20 20  y registry,..   
24f50 20 20 20 20 20 20 20 20 20 56 73 4c 69 73 74 20           VsList 
24f60 76 73 4c 69 73 74 2c 0d 0a 20 20 20 20 20 20 20  vsList,..       
24f70 20 20 20 20 20 56 69 73 75 61 6c 53 74 75 64 69       VisualStudi
24f80 6f 52 65 67 69 73 74 72 79 43 61 6c 6c 62 61 63  oRegistryCallbac
24f90 6b 20 63 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20  k callback,..   
24fa0 20 20 20 20 20 20 20 20 20 50 61 63 6b 61 67 65           Package
24fb0 20 70 61 63 6b 61 67 65 2c 0d 0a 20 20 20 20 20   package,..     
24fc0 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 63 6c         object cl
24fd0 69 65 6e 74 44 61 74 61 2c 0d 0a 20 20 20 20 20  ientData,..     
24fe0 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36         bool wow6
24ff0 34 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  4,..            
25000 62 6f 6f 6c 20 74 68 72 6f 77 4f 6e 4d 69 73 73  bool throwOnMiss
25010 69 6e 67 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ing,..          
25020 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a    bool whatIf,..
25030 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
25040 20 76 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20   verbose,..     
25050 20 20 20 20 20 20 20 72 65 66 20 73 74 72 69 6e         ref strin
25060 67 20 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20  g error..       
25070 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
25080 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  {..            i
25090 66 20 28 72 65 67 69 73 74 72 79 20 3d 3d 20 6e  f (registry == n
250a0 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
250b0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
250c0 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 69 6e       error = "in
250d0 76 61 6c 69 64 20 72 65 67 69 73 74 72 79 22 3b  valid registry";
250e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
250f0 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
25100 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
25110 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
25120 20 28 76 73 4c 69 73 74 20 3d 3d 20 6e 75 6c 6c   (vsList == null
25130 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
25140 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
25150 20 20 65 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c    error = "inval
25160 69 64 20 56 53 20 6c 69 73 74 22 3b 0d 0a 20 20  id VS list";..  
25170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
25180 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20  turn false;..   
25190 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
251a0 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65            MockRe
251b0 67 69 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65  gistryKey rootKe
251c0 79 20 3d 20 76 73 4c 69 73 74 2e 52 6f 6f 74 4b  y = vsList.RootK
251d0 65 79 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ey;....         
251e0 20 20 20 69 66 20 28 72 6f 6f 74 4b 65 79 20 3d     if (rootKey =
251f0 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
25200 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
25210 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
25220 22 69 6e 76 61 6c 69 64 20 72 6f 6f 74 20 6b 65  "invalid root ke
25230 79 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  y";..           
25240 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
25250 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
25260 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
25270 20 69 66 20 28 21 4f 62 6a 65 63 74 2e 52 65 66   if (!Object.Ref
25280 65 72 65 6e 63 65 45 71 75 61 6c 73 28 72 6f 6f  erenceEquals(roo
25290 74 4b 65 79 2c 20 72 65 67 69 73 74 72 79 2e 43  tKey, registry.C
252a0 75 72 72 65 6e 74 55 73 65 72 29 20 26 26 0d 0a  urrentUser) &&..
252b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
252c0 21 4f 62 6a 65 63 74 2e 52 65 66 65 72 65 6e 63  !Object.Referenc
252d0 65 45 71 75 61 6c 73 28 72 6f 6f 74 4b 65 79 2c  eEquals(rootKey,
252e0 20 72 65 67 69 73 74 72 79 2e 4c 6f 63 61 6c 4d   registry.LocalM
252f0 61 63 68 69 6e 65 29 29 0d 0a 20 20 20 20 20 20  achine))..      
25300 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
25310 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
25320 20 22 72 6f 6f 74 20 6b 65 79 20 6d 75 73 74 20   "root key must 
25330 62 65 20 70 65 72 2d 75 73 65 72 20 6f 72 20 70  be per-user or p
25340 65 72 2d 6d 61 63 68 69 6e 65 22 3b 0d 0a 20 20  er-machine";..  
25350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
25360 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20  turn false;..   
25370 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
25380 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76 73            if (vs
25390 4c 69 73 74 2e 56 65 72 73 69 6f 6e 73 20 3d 3d  List.Versions ==
253a0 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
253b0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
253c0 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22         error = "
253d0 6e 6f 20 56 53 20 76 65 72 73 69 6f 6e 73 20 66  no VS versions f
253e0 6f 75 6e 64 22 3b 0d 0a 20 20 20 20 20 20 20 20  ound";..        
253f0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
25400 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alse;..         
25410 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
25420 20 20 20 20 66 6f 72 65 61 63 68 20 28 56 65 72      foreach (Ver
25430 73 69 6f 6e 20 76 73 56 65 72 73 69 6f 6e 20 69  sion vsVersion i
25440 6e 20 76 73 4c 69 73 74 2e 56 65 72 73 69 6f 6e  n vsList.Version
25450 73 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  s)..            
25460 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
25470 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75     TraceOps.Debu
25480 67 41 6e 64 54 72 61 63 65 28 54 72 61 63 65 50  gAndTrace(TraceP
25490 72 69 6f 72 69 74 79 2e 4c 6f 77 65 72 2c 0d 0a  riority.Lower,..
254a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
254b0 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63      debugCallbac
254c0 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b  k, traceCallback
254d0 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  , String.Format(
254e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
254f0 20 20 20 20 20 20 22 76 73 56 65 72 73 69 6f 6e        "vsVersion
25500 20 3d 20 7b 30 7d 22 2c 20 46 6f 72 44 69 73 70   = {0}", ForDisp
25510 6c 61 79 28 76 73 56 65 72 73 69 6f 6e 29 29 2c  lay(vsVersion)),
25520 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
25530 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67        traceCateg
25540 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
25550 20 20 20 20 20 20 20 20 20 69 66 20 28 21 48 61           if (!Ha
25560 76 65 56 73 56 65 72 73 69 6f 6e 28 72 6f 6f 74  veVsVersion(root
25570 4b 65 79 2c 20 76 73 56 65 72 73 69 6f 6e 2c 20  Key, vsVersion, 
25580 77 6f 77 36 34 2c 20 77 68 61 74 49 66 2c 20 76  wow64, whatIf, v
25590 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20 20  erbose))..      
255a0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
255b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
255c0 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41   TraceOps.DebugA
255d0 6e 64 54 72 61 63 65 28 54 72 61 63 65 50 72 69  ndTrace(TracePri
255e0 6f 72 69 74 79 2e 4c 6f 77 2c 0d 0a 20 20 20 20  ority.Low,..    
255f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25600 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63      debugCallbac
25610 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b  k, traceCallback
25620 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
25630 20 20 20 20 20 20 20 20 20 20 20 22 56 69 73 75             "Visu
25640 61 6c 20 53 74 75 64 69 6f 20 76 65 72 73 69 6f  al Studio versio
25650 6e 20 6e 6f 74 20 66 6f 75 6e 64 2c 20 73 6b 69  n not found, ski
25660 70 70 69 6e 67 2e 2e 2e 22 2c 0d 0a 20 20 20 20  pping...",..    
25670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25680 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72      traceCategor
25690 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
256a0 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69             conti
256b0 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  nue;..          
256c0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
256d0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 63             if (c
256e0 61 6c 6c 62 61 63 6b 20 3d 3d 20 6e 75 6c 6c 29  allback == null)
256f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
25700 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d        continue;.
25710 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
25720 20 20 20 69 66 20 28 21 63 61 6c 6c 62 61 63 6b     if (!callback
25730 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
25740 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b             rootK
25750 65 79 2c 20 76 73 56 65 72 73 69 6f 6e 2c 20 70  ey, vsVersion, p
25760 61 63 6b 61 67 65 2c 20 63 6c 69 65 6e 74 44 61  ackage, clientDa
25770 74 61 2c 20 77 6f 77 36 34 2c 0d 0a 20 20 20 20  ta, wow64,..    
25780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25790 20 20 20 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69      throwOnMissi
257a0 6e 67 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62  ng, whatIf, verb
257b0 6f 73 65 2c 20 72 65 66 20 65 72 72 6f 72 29 29  ose, ref error))
257c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
257d0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
257e0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
257f0 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20  false;..        
25800 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
25810 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
25820 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74          return t
25830 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  rue;..        }.
25840 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67  .        #endreg
25850 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  ion....        /
25860 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25870 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25880 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25890 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
258a0 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
258b0 20 20 23 72 65 67 69 6f 6e 20 43 6f 6e 66 69 67    #region Config
258c0 75 72 61 74 69 6f 6e 20 46 69 6c 65 20 48 61 6e  uration File Han
258d0 64 6c 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 5b  dling..        [
258e0 4d 65 74 68 6f 64 49 6d 70 6c 28 4d 65 74 68 6f  MethodImpl(Metho
258f0 64 49 6d 70 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49  dImplOptions.NoI
25900 6e 6c 69 6e 69 6e 67 29 5d 0d 0a 20 20 20 20 20  nlining)]..     
25910 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69     private stati
25920 63 20 62 6f 6f 6c 20 41 64 64 44 62 50 72 6f 76  c bool AddDbProv
25930 69 64 65 72 46 61 63 74 6f 72 79 28 0d 0a 20 20  iderFactory(..  
25940 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
25950 20 66 69 6c 65 4e 61 6d 65 2c 0d 0a 20 20 20 20   fileName,..    
25960 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 69          string i
25970 6e 76 61 72 69 61 6e 74 2c 0d 0a 20 20 20 20 20  nvariant,..     
25980 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6e 61         string na
25990 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me,..           
259a0 20 73 74 72 69 6e 67 20 64 65 73 63 72 69 70 74   string descript
259b0 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ion,..          
259c0 20 20 73 74 72 69 6e 67 20 74 79 70 65 4e 61 6d    string typeNam
259d0 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
259e0 41 73 73 65 6d 62 6c 79 4e 61 6d 65 20 61 73 73  AssemblyName ass
259f0 65 6d 62 6c 79 4e 61 6d 65 2c 0d 0a 20 20 20 20  emblyName,..    
25a00 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61          bool wha
25a10 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  tIf,..          
25a20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 0d    bool verbose,.
25a30 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66  .            ref
25a40 20 62 6f 6f 6c 20 73 61 76 65 64 2c 0d 0a 20 20   bool saved,..  
25a50 20 20 20 20 20 20 20 20 20 20 72 65 66 20 73 74            ref st
25a60 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20 20  ring error..    
25a70 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
25a80 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
25a90 20 20 62 6f 6f 6c 20 64 69 72 74 79 20 3d 20 66    bool dirty = f
25aa0 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alse;..         
25ab0 20 20 20 58 6d 6c 44 6f 63 75 6d 65 6e 74 20 64     XmlDocument d
25ac0 6f 63 75 6d 65 6e 74 20 3d 20 6e 65 77 20 58 6d  ocument = new Xm
25ad0 6c 44 6f 63 75 6d 65 6e 74 28 29 3b 0d 0a 0d 0a  lDocument();....
25ae0 20 20 20 20 20 20 20 20 20 20 20 20 64 6f 63 75              docu
25af0 6d 65 6e 74 2e 50 72 65 73 65 72 76 65 57 68 69  ment.PreserveWhi
25b00 74 65 73 70 61 63 65 20 3d 20 74 72 75 65 3b 0d  tespace = true;.
25b10 0a 20 20 20 20 20 20 20 20 20 20 20 20 64 6f 63  .            doc
25b20 75 6d 65 6e 74 2e 4c 6f 61 64 28 66 69 6c 65 4e  ument.Load(fileN
25b30 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ame);....       
25b40 20 20 20 20 20 58 6d 6c 45 6c 65 6d 65 6e 74 20       XmlElement 
25b50 65 6c 65 6d 65 6e 74 20 3d 20 64 6f 63 75 6d 65  element = docume
25b60 6e 74 2e 53 65 6c 65 63 74 53 69 6e 67 6c 65 4e  nt.SelectSingleN
25b70 6f 64 65 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ode(String.Forma
25b80 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
25b90 20 20 20 20 58 50 61 74 68 46 6f 72 41 64 64 45      XPathForAddE
25ba0 6c 65 6d 65 6e 74 2c 20 69 6e 76 61 72 69 61 6e  lement, invarian
25bb0 74 29 29 20 61 73 20 58 6d 6c 45 6c 65 6d 65 6e  t)) as XmlElemen
25bc0 74 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  t;....          
25bd0 20 20 69 66 20 28 65 6c 65 6d 65 6e 74 20 3d 3d    if (element ==
25be0 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
25bf0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
25c00 20 20 20 20 20 20 20 73 74 72 69 6e 67 5b 5d 20         string[] 
25c10 65 6c 65 6d 65 6e 74 4e 61 6d 65 73 20 3d 20 7b  elementNames = {
25c20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
25c30 20 20 20 20 20 20 20 20 20 20 22 73 79 73 74 65            "syste
25c40 6d 2e 64 61 74 61 22 2c 20 22 44 62 50 72 6f 76  m.data", "DbProv
25c50 69 64 65 72 46 61 63 74 6f 72 69 65 73 22 0d 0a  iderFactories"..
25c60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25c70 20 20 20 20 7d 3b 0d 0a 0d 0a 20 20 20 20 20 20      };....      
25c80 20 20 20 20 20 20 20 20 20 20 58 6d 6c 45 6c 65            XmlEle
25c90 6d 65 6e 74 20 70 72 65 76 69 6f 75 73 45 6c 65  ment previousEle
25ca0 6d 65 6e 74 20 3d 0d 0a 20 20 20 20 20 20 20 20  ment =..        
25cb0 20 20 20 20 20 20 20 20 20 20 20 20 64 6f 63 75              docu
25cc0 6d 65 6e 74 2e 44 6f 63 75 6d 65 6e 74 45 6c 65  ment.DocumentEle
25cd0 6d 65 6e 74 3b 20 2f 2a 20 63 6f 6e 66 69 67 75  ment; /* configu
25ce0 72 61 74 69 6f 6e 20 2a 2f 0d 0a 0d 0a 20 20 20  ration */....   
25cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72               for
25d00 65 61 63 68 20 28 73 74 72 69 6e 67 20 65 6c 65  each (string ele
25d10 6d 65 6e 74 4e 61 6d 65 20 69 6e 20 65 6c 65 6d  mentName in elem
25d20 65 6e 74 4e 61 6d 65 73 29 0d 0a 20 20 20 20 20  entNames)..     
25d30 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
25d40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25d50 20 20 65 6c 65 6d 65 6e 74 20 3d 20 70 72 65 76    element = prev
25d60 69 6f 75 73 45 6c 65 6d 65 6e 74 2e 53 65 6c 65  iousElement.Sele
25d70 63 74 53 69 6e 67 6c 65 4e 6f 64 65 28 0d 0a 20  ctSingleNode(.. 
25d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25d90 20 20 20 20 20 20 20 65 6c 65 6d 65 6e 74 4e 61         elementNa
25da0 6d 65 29 20 61 73 20 58 6d 6c 45 6c 65 6d 65 6e  me) as XmlElemen
25db0 74 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  t;....          
25dc0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 65 6c            if (el
25dd0 65 6d 65 6e 74 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  ement == null)..
25de0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25df0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
25e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
25e10 6c 65 6d 65 6e 74 20 3d 20 64 6f 63 75 6d 65 6e  lement = documen
25e20 74 2e 43 72 65 61 74 65 45 6c 65 6d 65 6e 74 28  t.CreateElement(
25e30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
25e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c                el
25e50 65 6d 65 6e 74 4e 61 6d 65 2c 20 53 74 72 69 6e  ementName, Strin
25e60 67 2e 45 6d 70 74 79 29 3b 0d 0a 0d 0a 20 20 20  g.Empty);....   
25e70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25e80 20 20 20 20 20 70 72 65 76 69 6f 75 73 45 6c 65       previousEle
25e90 6d 65 6e 74 2e 41 70 70 65 6e 64 43 68 69 6c 64  ment.AppendChild
25ea0 28 65 6c 65 6d 65 6e 74 29 3b 0d 0a 20 20 20 20  (element);..    
25eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25ec0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
25ed0 20 20 20 20 20 20 20 20 20 70 72 65 76 69 6f 75           previou
25ee0 73 45 6c 65 6d 65 6e 74 20 3d 20 65 6c 65 6d 65  sElement = eleme
25ef0 6e 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  nt;..           
25f00 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
25f10 20 20 20 20 20 20 20 20 20 20 65 6c 65 6d 65 6e            elemen
25f20 74 20 3d 20 64 6f 63 75 6d 65 6e 74 2e 43 72 65  t = document.Cre
25f30 61 74 65 45 6c 65 6d 65 6e 74 28 0d 0a 20 20 20  ateElement(..   
25f40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25f50 20 22 61 64 64 22 2c 20 53 74 72 69 6e 67 2e 45   "add", String.E
25f60 6d 70 74 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  mpty);....      
25f70 20 20 20 20 20 20 20 20 20 20 70 72 65 76 69 6f            previo
25f80 75 73 45 6c 65 6d 65 6e 74 2e 41 70 70 65 6e 64  usElement.Append
25f90 43 68 69 6c 64 28 65 6c 65 6d 65 6e 74 29 3b 0d  Child(element);.
25fa0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
25fb0 20 20 20 64 69 72 74 79 20 3d 20 74 72 75 65 3b     dirty = true;
25fc0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
25fd0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
25fe0 66 20 28 21 53 74 72 69 6e 67 2e 45 71 75 61 6c  f (!String.Equal
25ff0 73 28 65 6c 65 6d 65 6e 74 2e 47 65 74 41 74 74  s(element.GetAtt
26000 72 69 62 75 74 65 28 22 6e 61 6d 65 22 29 2c 0d  ribute("name"),.
26010 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
26020 20 20 20 20 20 6e 61 6d 65 2c 20 53 74 72 69 6e       name, Strin
26030 67 43 6f 6d 70 61 72 69 73 6f 6e 2e 49 6e 76 61  gComparison.Inva
26040 72 69 61 6e 74 43 75 6c 74 75 72 65 29 29 0d 0a  riantCulture))..
26050 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
26060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
26070 6c 65 6d 65 6e 74 2e 53 65 74 41 74 74 72 69 62  lement.SetAttrib
26080 75 74 65 28 22 6e 61 6d 65 22 2c 20 6e 61 6d 65  ute("name", name
26090 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
260a0 20 20 20 20 64 69 72 74 79 20 3d 20 74 72 75 65      dirty = true
260b0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
260c0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
260d0 69 66 20 28 21 53 74 72 69 6e 67 2e 45 71 75 61  if (!String.Equa
260e0 6c 73 28 65 6c 65 6d 65 6e 74 2e 47 65 74 41 74  ls(element.GetAt
260f0 74 72 69 62 75 74 65 28 22 69 6e 76 61 72 69 61  tribute("invaria
26100 6e 74 22 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  nt"),..         
26110 20 20 20 20 20 20 20 20 20 20 20 69 6e 76 61 72             invar
26120 69 61 6e 74 2c 20 53 74 72 69 6e 67 43 6f 6d 70  iant, StringComp
26130 61 72 69 73 6f 6e 2e 49 6e 76 61 72 69 61 6e 74  arison.Invariant
26140 43 75 6c 74 75 72 65 29 29 0d 0a 20 20 20 20 20  Culture))..     
26150 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
26160 20 20 20 20 20 20 20 20 20 20 65 6c 65 6d 65 6e            elemen
26170 74 2e 53 65 74 41 74 74 72 69 62 75 74 65 28 22  t.SetAttribute("
26180 69 6e 76 61 72 69 61 6e 74 22 2c 20 69 6e 76 61  invariant", inva
26190 72 69 61 6e 74 29 3b 0d 0a 20 20 20 20 20 20 20  riant);..       
261a0 20 20 20 20 20 20 20 20 20 64 69 72 74 79 20 3d           dirty =
261b0 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20   true;..        
261c0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
261d0 20 20 20 20 20 69 66 20 28 21 53 74 72 69 6e 67       if (!String
261e0 2e 45 71 75 61 6c 73 28 65 6c 65 6d 65 6e 74 2e  .Equals(element.
261f0 47 65 74 41 74 74 72 69 62 75 74 65 28 22 64 65  GetAttribute("de
26200 73 63 72 69 70 74 69 6f 6e 22 29 2c 0d 0a 20 20  scription"),..  
26210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26220 20 20 64 65 73 63 72 69 70 74 69 6f 6e 2c 20 53    description, S
26230 74 72 69 6e 67 43 6f 6d 70 61 72 69 73 6f 6e 2e  tringComparison.
26240 49 6e 76 61 72 69 61 6e 74 43 75 6c 74 75 72 65  InvariantCulture
26250 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
26260 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
26270 20 20 20 65 6c 65 6d 65 6e 74 2e 53 65 74 41 74     element.SetAt
26280 74 72 69 62 75 74 65 28 22 64 65 73 63 72 69 70  tribute("descrip
26290 74 69 6f 6e 22 2c 20 64 65 73 63 72 69 70 74 69  tion", descripti
262a0 6f 6e 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  on);..          
262b0 20 20 20 20 20 20 64 69 72 74 79 20 3d 20 74 72        dirty = tr
262c0 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
262d0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
262e0 20 20 73 74 72 69 6e 67 20 66 75 6c 6c 54 79 70    string fullTyp
262f0 65 4e 61 6d 65 20 3d 20 53 74 72 69 6e 67 2e 46  eName = String.F
26300 6f 72 6d 61 74 28 22 7b 30 7d 2c 20 7b 31 7d 22  ormat("{0}, {1}"
26310 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
26320 20 20 20 74 79 70 65 4e 61 6d 65 2c 20 61 73 73     typeName, ass
26330 65 6d 62 6c 79 4e 61 6d 65 29 3b 0d 0a 0d 0a 20  emblyName);.... 
26340 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21             if (!
26350 53 74 72 69 6e 67 2e 45 71 75 61 6c 73 28 65 6c  String.Equals(el
26360 65 6d 65 6e 74 2e 47 65 74 41 74 74 72 69 62 75  ement.GetAttribu
26370 74 65 28 22 74 79 70 65 22 29 2c 0d 0a 20 20 20  te("type"),..   
26380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26390 20 66 75 6c 6c 54 79 70 65 4e 61 6d 65 2c 20 53   fullTypeName, S
263a0 74 72 69 6e 67 43 6f 6d 70 61 72 69 73 6f 6e 2e  tringComparison.
263b0 49 6e 76 61 72 69 61 6e 74 43 75 6c 74 75 72 65  InvariantCulture
263c0 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
263d0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
263e0 20 20 20 65 6c 65 6d 65 6e 74 2e 53 65 74 41 74     element.SetAt
263f0 74 72 69 62 75 74 65 28 22 74 79 70 65 22 2c 20  tribute("type", 
26400 66 75 6c 6c 54 79 70 65 4e 61 6d 65 29 3b 0d 0a  fullTypeName);..
26410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26420 64 69 72 74 79 20 3d 20 74 72 75 65 3b 0d 0a 20  dirty = true;.. 
26430 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
26440 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
26450 64 69 72 74 79 20 7c 7c 20 77 68 61 74 49 66 29  dirty || whatIf)
26460 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
26470 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
26480 20 69 66 20 28 76 65 72 62 6f 73 65 29 0d 0a 20   if (verbose).. 
26490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
264a0 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75     TraceOps.Debu
264b0 67 41 6e 64 54 72 61 63 65 28 54 72 61 63 65 50  gAndTrace(TraceP
264c0 72 69 6f 72 69 74 79 2e 48 69 67 68 65 73 74 2c  riority.Highest,
264d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
264e0 20 20 20 20 20 20 20 20 20 20 64 65 62 75 67 43            debugC
264f0 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61  allback, traceCa
26500 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46  llback, String.F
26510 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
26520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26530 22 65 6c 65 6d 65 6e 74 20 3d 20 7b 30 7d 22 2c  "element = {0}",
26540 20 46 6f 72 44 69 73 70 6c 61 79 28 65 6c 65 6d   ForDisplay(elem
26550 65 6e 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20  ent)),..        
26560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26570 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
26580 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
26590 20 20 20 69 66 20 28 21 77 68 61 74 49 66 29 0d     if (!whatIf).
265a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
265b0 20 20 20 20 20 64 6f 63 75 6d 65 6e 74 2e 53 61       document.Sa
265c0 76 65 28 66 69 6c 65 4e 61 6d 65 29 3b 0d 0a 0d  ve(fileName);...
265d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
265e0 20 73 61 76 65 64 20 3d 20 74 72 75 65 3b 0d 0a   saved = true;..
265f0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
26600 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
26610 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20 20  urn true;..     
26620 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
26630 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26640 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26650 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26660 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26670 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
26680 20 20 20 5b 4d 65 74 68 6f 64 49 6d 70 6c 28 4d     [MethodImpl(M
26690 65 74 68 6f 64 49 6d 70 6c 4f 70 74 69 6f 6e 73  ethodImplOptions
266a0 2e 4e 6f 49 6e 6c 69 6e 69 6e 67 29 5d 0d 0a 20  .NoInlining)].. 
266b0 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
266c0 74 61 74 69 63 20 62 6f 6f 6c 20 52 65 6d 6f 76  tatic bool Remov
266d0 65 44 62 50 72 6f 76 69 64 65 72 46 61 63 74 6f  eDbProviderFacto
266e0 72 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ry(..           
266f0 20 73 74 72 69 6e 67 20 66 69 6c 65 4e 61 6d 65   string fileName
26700 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  ,..            s
26710 74 72 69 6e 67 20 69 6e 76 61 72 69 61 6e 74 2c  tring invariant,
26720 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
26730 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20  ol whatIf,..    
26740 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65 72          bool ver
26750 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  bose,..         
26760 20 20 20 72 65 66 20 62 6f 6f 6c 20 73 61 76 65     ref bool save
26770 64 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  d,..            
26780 72 65 66 20 73 74 72 69 6e 67 20 65 72 72 6f 72  ref string error
26790 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d  ..            ).
267a0 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
267b0 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 64 69 72          bool dir
267c0 74 79 20 3d 20 66 61 6c 73 65 3b 0d 0a 20 20 20  ty = false;..   
267d0 20 20 20 20 20 20 20 20 20 58 6d 6c 44 6f 63 75           XmlDocu
267e0 6d 65 6e 74 20 64 6f 63 75 6d 65 6e 74 20 3d 20  ment document = 
267f0 6e 65 77 20 58 6d 6c 44 6f 63 75 6d 65 6e 74 28  new XmlDocument(
26800 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
26810 20 20 64 6f 63 75 6d 65 6e 74 2e 50 72 65 73 65    document.Prese
26820 72 76 65 57 68 69 74 65 73 70 61 63 65 20 3d 20  rveWhitespace = 
26830 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  true;..         
26840 20 20 20 64 6f 63 75 6d 65 6e 74 2e 4c 6f 61 64     document.Load
26850 28 66 69 6c 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20  (fileName);.... 
26860 20 20 20 20 20 20 20 20 20 20 20 58 6d 6c 45 6c             XmlEl
26870 65 6d 65 6e 74 20 65 6c 65 6d 65 6e 74 20 3d 20  ement element = 
26880 64 6f 63 75 6d 65 6e 74 2e 53 65 6c 65 63 74 53  document.SelectS
26890 69 6e 67 6c 65 4e 6f 64 65 28 53 74 72 69 6e 67  ingleNode(String
268a0 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  .Format(..      
268b0 20 20 20 20 20 20 20 20 20 20 58 50 61 74 68 46            XPathF
268c0 6f 72 41 64 64 45 6c 65 6d 65 6e 74 2c 20 69 6e  orAddElement, in
268d0 76 61 72 69 61 6e 74 29 29 20 61 73 20 58 6d 6c  variant)) as Xml
268e0 45 6c 65 6d 65 6e 74 3b 0d 0a 0d 0a 20 20 20 20  Element;....    
268f0 20 20 20 20 20 20 20 20 69 66 20 28 65 6c 65 6d          if (elem
26900 65 6e 74 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20  ent != null)..  
26910 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
26920 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 65               ele
26930 6d 65 6e 74 2e 50 61 72 65 6e 74 4e 6f 64 65 2e  ment.ParentNode.
26940 52 65 6d 6f 76 65 43 68 69 6c 64 28 65 6c 65 6d  RemoveChild(elem
26950 65 6e 74 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ent);..         
26960 20 20 20 20 20 20 20 64 69 72 74 79 20 3d 20 74         dirty = t
26970 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  rue;..          
26980 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
26990 20 20 20 65 6c 65 6d 65 6e 74 20 3d 20 64 6f 63     element = doc
269a0 75 6d 65 6e 74 2e 53 65 6c 65 63 74 53 69 6e 67  ument.SelectSing
269b0 6c 65 4e 6f 64 65 28 53 74 72 69 6e 67 2e 46 6f  leNode(String.Fo
269c0 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
269d0 20 20 20 20 20 20 20 58 50 61 74 68 46 6f 72 52         XPathForR
269e0 65 6d 6f 76 65 45 6c 65 6d 65 6e 74 2c 20 69 6e  emoveElement, in
269f0 76 61 72 69 61 6e 74 29 29 20 61 73 20 58 6d 6c  variant)) as Xml
26a00 45 6c 65 6d 65 6e 74 3b 0d 0a 0d 0a 20 20 20 20  Element;....    
26a10 20 20 20 20 20 20 20 20 69 66 20 28 65 6c 65 6d          if (elem
26a20 65 6e 74 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20  ent != null)..  
26a30 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
26a40 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 65               ele
26a50 6d 65 6e 74 2e 50 61 72 65 6e 74 4e 6f 64 65 2e  ment.ParentNode.
26a60 52 65 6d 6f 76 65 43 68 69 6c 64 28 65 6c 65 6d  RemoveChild(elem
26a70 65 6e 74 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ent);..         
26a80 20 20 20 20 20 20 20 64 69 72 74 79 20 3d 20 74         dirty = t
26a90 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  rue;..          
26aa0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
26ab0 20 20 20 69 66 20 28 64 69 72 74 79 20 7c 7c 20     if (dirty || 
26ac0 77 68 61 74 49 66 29 0d 0a 20 20 20 20 20 20 20  whatIf)..       
26ad0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
26ae0 20 20 20 20 20 20 20 20 69 66 20 28 76 65 72 62          if (verb
26af0 6f 73 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ose)..          
26b00 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f            TraceO
26b10 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65  ps.DebugAndTrace
26b20 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 48  (TracePriority.H
26b30 69 67 68 65 73 74 2c 0d 0a 20 20 20 20 20 20 20  ighest,..       
26b40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26b50 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20   debugCallback, 
26b60 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53  traceCallback, S
26b70 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
26b80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26b90 20 20 20 20 20 20 20 22 65 6c 65 6d 65 6e 74 20         "element 
26ba0 3d 20 7b 30 7d 22 2c 20 46 6f 72 44 69 73 70 6c  = {0}", ForDispl
26bb0 61 79 28 65 6c 65 6d 65 6e 74 29 29 2c 0d 0a 20  ay(element)),.. 
26bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26bd0 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65         traceCate
26be0 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
26bf0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21 77            if (!w
26c00 68 61 74 49 66 29 0d 0a 20 20 20 20 20 20 20 20  hatIf)..        
26c10 20 20 20 20 20 20 20 20 20 20 20 20 64 6f 63 75              docu
26c20 6d 65 6e 74 2e 53 61 76 65 28 66 69 6c 65 4e 61  ment.Save(fileNa
26c30 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  me);....        
26c40 20 20 20 20 20 20 20 20 73 61 76 65 64 20 3d 20          saved = 
26c50 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  true;..         
26c60 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
26c70 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b      return true;
26c80 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
26c90 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
26ca0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26cb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26cc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26cd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
26ce0 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
26cf0 65 20 73 74 61 74 69 63 20 62 6f 6f 6c 20 50 72  e static bool Pr
26d00 6f 63 65 73 73 44 62 50 72 6f 76 69 64 65 72 46  ocessDbProviderF
26d10 61 63 74 6f 72 79 28 0d 0a 20 20 20 20 20 20 20  actory(..       
26d20 20 20 20 20 20 73 74 72 69 6e 67 20 66 69 6c 65       string file
26d30 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  Name,..         
26d40 20 20 20 73 74 72 69 6e 67 20 69 6e 76 61 72 69     string invari
26d50 61 6e 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ant,..          
26d60 20 20 73 74 72 69 6e 67 20 6e 61 6d 65 2c 0d 0a    string name,..
26d70 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
26d80 6e 67 20 64 65 73 63 72 69 70 74 69 6f 6e 2c 0d  ng description,.
26d90 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72  .            str
26da0 69 6e 67 20 74 79 70 65 4e 61 6d 65 2c 0d 0a 20  ing typeName,.. 
26db0 20 20 20 20 20 20 20 20 20 20 20 41 73 73 65 6d             Assem
26dc0 62 6c 79 4e 61 6d 65 20 61 73 73 65 6d 62 6c 79  blyName assembly
26dd0 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  Name,..         
26de0 20 20 20 6f 62 6a 65 63 74 20 63 6c 69 65 6e 74     object client
26df0 44 61 74 61 2c 0d 0a 20 20 20 20 20 20 20 20 20  Data,..         
26e00 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34 2c 0d 0a     bool wow64,..
26e10 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
26e20 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 2c   throwOnMissing,
26e30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
26e40 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20  ol whatIf,..    
26e50 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65 72          bool ver
26e60 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  bose,..         
26e70 20 20 20 72 65 66 20 62 6f 6f 6c 20 73 61 76 65     ref bool save
26e80 64 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  d,..            
26e90 72 65 66 20 73 74 72 69 6e 67 20 65 72 72 6f 72  ref string error
26ea0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d  ..            ).
26eb0 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
26ec0 20 20 20 20 20 20 20 20 41 6e 79 50 61 69 72 3c          AnyPair<
26ed0 73 74 72 69 6e 67 2c 20 62 6f 6f 6c 3e 20 70 61  string, bool> pa
26ee0 69 72 20 3d 20 63 6c 69 65 6e 74 44 61 74 61 20  ir = clientData 
26ef0 61 73 20 41 6e 79 50 61 69 72 3c 73 74 72 69 6e  as AnyPair<strin
26f00 67 2c 20 62 6f 6f 6c 3e 3b 0d 0a 0d 0a 20 20 20  g, bool>;....   
26f10 20 20 20 20 20 20 20 20 20 69 66 20 28 70 61 69           if (pai
26f20 72 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  r == null)..    
26f30 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
26f40 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72             error
26f50 20 3d 20 22 69 6e 76 61 6c 69 64 20 66 72 61 6d   = "invalid fram
26f60 65 77 6f 72 6b 20 63 6f 6e 66 69 67 20 63 61 6c  ework config cal
26f70 6c 62 61 63 6b 20 64 61 74 61 22 3b 0d 0a 20 20  lback data";..  
26f80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
26f90 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20  turn false;..   
26fa0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
26fb0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 70 61            if (pa
26fc0 69 72 2e 59 29 0d 0a 20 20 20 20 20 20 20 20 20  ir.Y)..         
26fd0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
26fe0 20 20 20 20 20 20 72 65 74 75 72 6e 20 52 65 6d        return Rem
26ff0 6f 76 65 44 62 50 72 6f 76 69 64 65 72 46 61 63  oveDbProviderFac
27000 74 6f 72 79 28 0d 0a 20 20 20 20 20 20 20 20 20  tory(..         
27010 20 20 20 20 20 20 20 20 20 20 20 66 69 6c 65 4e             fileN
27020 61 6d 65 2c 20 69 6e 76 61 72 69 61 6e 74 2c 20  ame, invariant, 
27030 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 2c  whatIf, verbose,
27040 20 72 65 66 20 73 61 76 65 64 2c 0d 0a 20 20 20   ref saved,..   
27050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27060 20 72 65 66 20 65 72 72 6f 72 29 20 26 26 0d 0a   ref error) &&..
27070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27080 41 64 64 44 62 50 72 6f 76 69 64 65 72 46 61 63  AddDbProviderFac
27090 74 6f 72 79 28 0d 0a 20 20 20 20 20 20 20 20 20  tory(..         
270a0 20 20 20 20 20 20 20 20 20 20 20 66 69 6c 65 4e             fileN
270b0 61 6d 65 2c 20 69 6e 76 61 72 69 61 6e 74 2c 20  ame, invariant, 
270c0 6e 61 6d 65 2c 20 64 65 73 63 72 69 70 74 69 6f  name, descriptio
270d0 6e 2c 20 74 79 70 65 4e 61 6d 65 2c 0d 0a 20 20  n, typeName,..  
270e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
270f0 20 20 61 73 73 65 6d 62 6c 79 4e 61 6d 65 2c 20    assemblyName, 
27100 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 2c  whatIf, verbose,
27110 20 72 65 66 20 73 61 76 65 64 2c 20 72 65 66 20   ref saved, ref 
27120 65 72 72 6f 72 29 3b 0d 0a 20 20 20 20 20 20 20  error);..       
27130 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
27140 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20      else..      
27150 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
27160 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
27170 52 65 6d 6f 76 65 44 62 50 72 6f 76 69 64 65 72  RemoveDbProvider
27180 46 61 63 74 6f 72 79 28 0d 0a 20 20 20 20 20 20  Factory(..      
27190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 69                fi
271a0 6c 65 4e 61 6d 65 2c 20 69 6e 76 61 72 69 61 6e  leName, invarian
271b0 74 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f  t, whatIf, verbo
271c0 73 65 2c 20 72 65 66 20 73 61 76 65 64 2c 0d 0a  se, ref saved,..
271d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
271e0 20 20 20 20 72 65 66 20 65 72 72 6f 72 29 3b 0d      ref error);.
271f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
27200 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
27210 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
27220 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
27230 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27240 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27250 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27260 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27270 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67  ....        #reg
27280 69 6f 6e 20 41 73 73 65 6d 62 6c 79 20 46 6f 6c  ion Assembly Fol
27290 64 65 72 73 20 48 61 6e 64 6c 69 6e 67 0d 0a 20  ders Handling.. 
272a0 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
272b0 74 61 74 69 63 20 73 74 72 69 6e 67 20 47 65 74  tatic string Get
272c0 41 73 73 65 6d 62 6c 79 46 6f 6c 64 65 72 73 4b  AssemblyFoldersK
272d0 65 79 4e 61 6d 65 28 0d 0a 20 20 20 20 20 20 20  eyName(..       
272e0 20 20 20 20 20 73 74 72 69 6e 67 20 66 72 61 6d       string fram
272f0 65 77 6f 72 6b 4e 61 6d 65 2c 0d 0a 20 20 20 20  eworkName,..    
27300 20 20 20 20 20 20 20 20 56 65 72 73 69 6f 6e 20          Version 
27310 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e  frameworkVersion
27320 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  ,..            s
27330 74 72 69 6e 67 20 70 6c 61 74 66 6f 72 6d 4e 61  tring platformNa
27340 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me,..           
27350 20 62 6f 6f 6c 20 77 6f 77 36 34 0d 0a 20 20 20   bool wow64..   
27360 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
27370 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
27380 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
27390 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 54 68 69 73     // NOTE: This
273a0 20 72 65 67 69 73 74 72 79 20 6b 65 79 20 61 70   registry key ap
273b0 70 65 61 72 73 20 74 6f 20 61 6c 77 61 79 73 20  pears to always 
273c0 62 65 20 33 32 2d 62 69 74 20 6f 6e 6c 79 0d 0a  be 32-bit only..
273d0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
273e0 20 20 20 20 20 28 69 2e 65 2e 20 70 72 6f 62 61       (i.e. proba
273f0 62 6c 79 20 62 65 63 61 75 73 65 20 69 74 20 69  bly because it i
27400 73 20 6f 6e 6c 79 20 75 73 65 64 20 62 79 20 56  s only used by V
27410 69 73 75 61 6c 0d 0a 20 20 20 20 20 20 20 20 20  isual..         
27420 20 20 20 2f 2f 20 20 20 20 20 20 20 53 74 75 64     //       Stud
27430 69 6f 2c 20 77 68 69 63 68 20 69 73 20 63 75 72  io, which is cur
27440 72 65 6e 74 6c 79 20 61 6c 77 61 79 73 20 33 32  rently always 32
27450 2d 62 69 74 20 6f 6e 6c 79 29 2e 0d 0a 20 20 20  -bit only)...   
27460 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
27470 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
27480 66 6f 72 6d 61 74 20 3d 20 21 53 74 72 69 6e 67  format = !String
27490 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 70  .IsNullOrEmpty(p
274a0 6c 61 74 66 6f 72 6d 4e 61 6d 65 29 20 3f 0d 0a  latformName) ?..
274b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
274c0 22 7b 30 7d 5c 5c 4d 69 63 72 6f 73 6f 66 74 5c  "{0}\\Microsoft\
274d0 5c 7b 31 7d 5c 5c 76 7b 32 7d 5c 5c 7b 33 7d 5c  \{1}\\v{2}\\{3}\
274e0 5c 41 73 73 65 6d 62 6c 79 46 6f 6c 64 65 72 73  \AssemblyFolders
274f0 45 78 22 20 3a 0d 0a 20 20 20 20 20 20 20 20 20  Ex" :..         
27500 20 20 20 20 20 20 20 22 7b 30 7d 5c 5c 4d 69 63         "{0}\\Mic
27510 72 6f 73 6f 66 74 5c 5c 7b 31 7d 5c 5c 76 7b 32  rosoft\\{1}\\v{2
27520 7d 5c 5c 41 73 73 65 6d 62 6c 79 46 6f 6c 64 65  }\\AssemblyFolde
27530 72 73 45 78 22 3b 0d 0a 0d 0a 20 20 20 20 20 20  rsEx";....      
27540 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 74 72        return Str
27550 69 6e 67 2e 46 6f 72 6d 61 74 28 66 6f 72 6d 61  ing.Format(forma
27560 74 2c 20 47 65 74 52 6f 6f 74 4b 65 79 4e 61 6d  t, GetRootKeyNam
27570 65 28 77 6f 77 36 34 29 2c 0d 0a 20 20 20 20 20  e(wow64),..     
27580 20 20 20 20 20 20 20 20 20 20 20 66 72 61 6d 65             frame
27590 77 6f 72 6b 4e 61 6d 65 2c 20 66 72 61 6d 65 77  workName, framew
275a0 6f 72 6b 56 65 72 73 69 6f 6e 2c 20 70 6c 61 74  orkVersion, plat
275b0 66 6f 72 6d 4e 61 6d 65 29 3b 0d 0a 20 20 20 20  formName);..    
275c0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
275d0 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
275e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
275f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27600 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27610 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
27620 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74      private stat
27630 69 63 20 62 6f 6f 6c 20 41 64 64 54 6f 41 73 73  ic bool AddToAss
27640 65 6d 62 6c 79 46 6f 6c 64 65 72 73 28 0d 0a 20  emblyFolders(.. 
27650 20 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52             MockR
27660 65 67 69 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b  egistryKey rootK
27670 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ey,..           
27680 20 73 74 72 69 6e 67 20 66 72 61 6d 65 77 6f 72   string framewor
27690 6b 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20  kName,..        
276a0 20 20 20 20 56 65 72 73 69 6f 6e 20 66 72 61 6d      Version fram
276b0 65 77 6f 72 6b 56 65 72 73 69 6f 6e 2c 0d 0a 20  eworkVersion,.. 
276c0 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
276d0 67 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 2c 0d  g platformName,.
276e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72  .            str
276f0 69 6e 67 20 73 75 62 4b 65 79 4e 61 6d 65 2c 0d  ing subKeyName,.
27700 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72  .            str
27710 69 6e 67 20 64 69 72 65 63 74 6f 72 79 2c 0d 0a  ing directory,..
27720 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
27730 20 77 6f 77 36 34 2c 0d 0a 20 20 20 20 20 20 20   wow64,..       
27740 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66       bool whatIf
27750 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  ,..            b
27760 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 0d 0a 20 20  ool verbose,..  
27770 20 20 20 20 20 20 20 20 20 20 72 65 66 20 73 74            ref st
27780 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20 20  ring error..    
27790 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
277a0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
277b0 20 20 73 74 72 69 6e 67 20 6b 65 79 4e 61 6d 65    string keyName
277c0 20 3d 20 47 65 74 41 73 73 65 6d 62 6c 79 46 6f   = GetAssemblyFo
277d0 6c 64 65 72 73 4b 65 79 4e 61 6d 65 28 0d 0a 20  ldersKeyName(.. 
277e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66                 f
277f0 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c 20 66 72  rameworkName, fr
27800 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 2c 20  ameworkVersion, 
27810 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 2c 20 77 6f  platformName, wo
27820 77 36 34 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  w64);....       
27830 20 20 20 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b       using (Mock
27840 52 65 67 69 73 74 72 79 4b 65 79 20 6b 65 79 20  RegistryKey key 
27850 3d 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72  = RegistryHelper
27860 2e 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20  .OpenSubKey(..  
27870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27880 20 20 72 6f 6f 74 4b 65 79 2c 20 6b 65 79 4e 61    rootKey, keyNa
27890 6d 65 2c 20 74 72 75 65 2c 20 77 68 61 74 49 66  me, true, whatIf
278a0 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a 20 20 20  , verbose))..   
278b0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
278c0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
278d0 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  key == null)..  
278e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
278f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
27900 20 20 20 20 20 65 72 72 6f 72 20 3d 20 53 74 72       error = Str
27910 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
27920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27930 20 20 20 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20       "could not 
27940 6f 70 65 6e 20 72 65 67 69 73 74 72 79 20 6b 65  open registry ke
27950 79 3a 20 7b 30 7d 5c 5c 7b 31 7d 22 2c 0d 0a 20  y: {0}\\{1}",.. 
27960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27970 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20         rootKey, 
27980 6b 65 79 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20  keyName);....   
27990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
279a0 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
279b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
279c0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
279d0 20 20 20 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b       using (Mock
279e0 52 65 67 69 73 74 72 79 4b 65 79 20 73 75 62 4b  RegistryKey subK
279f0 65 79 20 3d 20 52 65 67 69 73 74 72 79 48 65 6c  ey = RegistryHel
27a00 70 65 72 2e 43 72 65 61 74 65 53 75 62 4b 65 79  per.CreateSubKey
27a10 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
27a20 20 20 20 20 20 20 20 20 20 20 20 6b 65 79 2c 20             key, 
27a30 73 75 62 4b 65 79 4e 61 6d 65 2c 20 77 68 61 74  subKeyName, what
27a40 49 66 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a 20  If, verbose)).. 
27a50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
27a60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
27a70 20 20 20 20 20 20 69 66 20 28 73 75 62 4b 65 79        if (subKey
27a80 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
27a90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
27aa0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
27ab0 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20            error 
27ac0 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  = String.Format(
27ad0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
27ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 63                "c
27af0 6f 75 6c 64 20 6e 6f 74 20 63 72 65 61 74 65 20  ould not create 
27b00 72 65 67 69 73 74 72 79 20 6b 65 79 3a 20 7b 30  registry key: {0
27b10 7d 5c 5c 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20  }\\{1}",..      
27b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27b30 20 20 20 20 20 20 6b 65 79 2c 20 73 75 62 4b 65        key, subKe
27b40 79 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20  yName);....     
27b50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27b60 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
27b70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
27b80 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
27b90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52                 R
27ba0 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 53 65  egistryHelper.Se
27bb0 74 56 61 6c 75 65 28 0d 0a 20 20 20 20 20 20 20  tValue(..       
27bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27bd0 20 73 75 62 4b 65 79 2c 20 6e 75 6c 6c 2c 20 64   subKey, null, d
27be0 69 72 65 63 74 6f 72 79 2c 20 77 68 61 74 49 66  irectory, whatIf
27bf0 2c 20 76 65 72 62 6f 73 65 29 3b 0d 0a 20 20 20  , verbose);..   
27c00 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
27c10 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
27c20 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
27c30 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20 20  urn true;..     
27c40 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
27c50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27c60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27c70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27c80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27c90 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
27ca0 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69     private stati
27cb0 63 20 62 6f 6f 6c 20 52 65 6d 6f 76 65 46 72 6f  c bool RemoveFro
27cc0 6d 41 73 73 65 6d 62 6c 79 46 6f 6c 64 65 72 73  mAssemblyFolders
27cd0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 4d  (..            M
27ce0 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 72  ockRegistryKey r
27cf0 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20  ootKey,..       
27d00 20 20 20 20 20 73 74 72 69 6e 67 20 66 72 61 6d       string fram
27d10 65 77 6f 72 6b 4e 61 6d 65 2c 0d 0a 20 20 20 20  eworkName,..    
27d20 20 20 20 20 20 20 20 20 56 65 72 73 69 6f 6e 20          Version 
27d30 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e  frameworkVersion
27d40 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  ,..            s
27d50 74 72 69 6e 67 20 70 6c 61 74 66 6f 72 6d 4e 61  tring platformNa
27d60 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me,..           
27d70 20 73 74 72 69 6e 67 20 73 75 62 4b 65 79 4e 61   string subKeyNa
27d80 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me,..           
27d90 20 62 6f 6f 6c 20 77 6f 77 36 34 2c 0d 0a 20 20   bool wow64,..  
27da0 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 74            bool t
27db0 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 2c 0d 0a  hrowOnMissing,..
27dc0 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
27dd0 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20   whatIf,..      
27de0 20 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f        bool verbo
27df0 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se,..           
27e00 20 72 65 66 20 73 74 72 69 6e 67 20 65 72 72 6f   ref string erro
27e10 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29  r..            )
27e20 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
27e30 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
27e40 6b 65 79 4e 61 6d 65 20 3d 20 47 65 74 41 73 73  keyName = GetAss
27e50 65 6d 62 6c 79 46 6f 6c 64 65 72 73 4b 65 79 4e  emblyFoldersKeyN
27e60 61 6d 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ame(..          
27e70 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 4e        frameworkN
27e80 61 6d 65 2c 20 66 72 61 6d 65 77 6f 72 6b 56 65  ame, frameworkVe
27e90 72 73 69 6f 6e 2c 20 70 6c 61 74 66 6f 72 6d 4e  rsion, platformN
27ea0 61 6d 65 2c 20 77 6f 77 36 34 29 3b 0d 0a 0d 0a  ame, wow64);....
27eb0 20 20 20 20 20 20 20 20 20 20 20 20 75 73 69 6e              usin
27ec0 67 20 28 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b  g (MockRegistryK
27ed0 65 79 20 6b 65 79 20 3d 20 52 65 67 69 73 74 72  ey key = Registr
27ee0 79 48 65 6c 70 65 72 2e 4f 70 65 6e 53 75 62 4b  yHelper.OpenSubK
27ef0 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ey(..           
27f00 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79           rootKey
27f10 2c 20 6b 65 79 4e 61 6d 65 2c 20 74 72 75 65 2c  , keyName, true,
27f20 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65   whatIf, verbose
27f30 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
27f40 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
27f50 20 20 20 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75     if (key == nu
27f60 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
27f70 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
27f80 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
27f90 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  r = String.Forma
27fa0 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
27fb0 20 20 20 20 20 20 20 20 20 20 20 20 22 63 6f 75              "cou
27fc0 6c 64 20 6e 6f 74 20 6f 70 65 6e 20 72 65 67 69  ld not open regi
27fd0 73 74 72 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c 7b  stry key: {0}\\{
27fe0 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  1}",..          
27ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f                ro
28000 6f 74 4b 65 79 2c 20 6b 65 79 4e 61 6d 65 29 3b  otKey, keyName);
28010 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
28020 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
28030 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alse;..         
28040 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
28050 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69              Regi
28060 73 74 72 79 48 65 6c 70 65 72 2e 44 65 6c 65 74  stryHelper.Delet
28070 65 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20  eSubKey(..      
28080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6b 65                ke
28090 79 2c 20 73 75 62 4b 65 79 4e 61 6d 65 2c 20 74  y, subKeyName, t
280a0 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 2c 20 77  hrowOnMissing, w
280b0 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 3b  hatIf, verbose);
280c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
280d0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  ...            r
280e0 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20  eturn true;..   
280f0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
28100 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
28110 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28120 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28130 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28140 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
28150 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61       private sta
28160 74 69 63 20 62 6f 6f 6c 20 50 72 6f 63 65 73 73  tic bool Process
28170 41 73 73 65 6d 62 6c 79 46 6f 6c 64 65 72 73 28  AssemblyFolders(
28180 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 4d 6f  ..            Mo
28190 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 72 6f  ckRegistryKey ro
281a0 6f 74 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20  otKey,..        
281b0 20 20 20 20 73 74 72 69 6e 67 20 66 72 61 6d 65      string frame
281c0 77 6f 72 6b 4e 61 6d 65 2c 0d 0a 20 20 20 20 20  workName,..     
281d0 20 20 20 20 20 20 20 56 65 72 73 69 6f 6e 20 66         Version f
281e0 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 2c  rameworkVersion,
281f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74  ..            st
28200 72 69 6e 67 20 70 6c 61 74 66 6f 72 6d 4e 61 6d  ring platformNam
28210 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
28220 6f 62 6a 65 63 74 20 63 6c 69 65 6e 74 44 61 74  object clientDat
28230 61 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  a,..            
28240 62 6f 6f 6c 20 77 6f 77 36 34 2c 0d 0a 20 20 20  bool wow64,..   
28250 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 74 68           bool th
28260 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 2c 0d 0a 20  rowOnMissing,.. 
28270 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
28280 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20  whatIf,..       
28290 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73       bool verbos
282a0 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
282b0 72 65 66 20 73 74 72 69 6e 67 20 65 72 72 6f 72  ref string error
282c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d  ..            ).
282d0 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
282e0 20 20 20 20 20 20 20 20 41 6e 79 50 61 69 72 3c          AnyPair<
282f0 73 74 72 69 6e 67 2c 20 62 6f 6f 6c 3e 20 70 61  string, bool> pa
28300 69 72 20 3d 20 63 6c 69 65 6e 74 44 61 74 61 20  ir = clientData 
28310 61 73 20 41 6e 79 50 61 69 72 3c 73 74 72 69 6e  as AnyPair<strin
28320 67 2c 20 62 6f 6f 6c 3e 3b 0d 0a 0d 0a 20 20 20  g, bool>;....   
28330 20 20 20 20 20 20 20 20 20 69 66 20 28 70 61 69           if (pai
28340 72 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  r == null)..    
28350 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
28360 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72             error
28370 20 3d 20 22 69 6e 76 61 6c 69 64 20 66 72 61 6d   = "invalid fram
28380 65 77 6f 72 6b 20 63 61 6c 6c 62 61 63 6b 20 64  ework callback d
28390 61 74 61 22 3b 0d 0a 20 20 20 20 20 20 20 20 20  ata";..         
283a0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
283b0 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lse;..          
283c0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
283d0 20 20 20 69 66 20 28 70 61 69 72 2e 59 29 0d 0a     if (pair.Y)..
283e0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
283f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
28400 65 74 75 72 6e 20 52 65 6d 6f 76 65 46 72 6f 6d  eturn RemoveFrom
28410 41 73 73 65 6d 62 6c 79 46 6f 6c 64 65 72 73 28  AssemblyFolders(
28420 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
28430 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 66        rootKey, f
28440 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c 20 66 72  rameworkName, fr
28450 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 2c 20  ameworkVersion, 
28460 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 2c 0d 0a 20  platformName,.. 
28470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28480 20 20 20 4c 65 67 61 63 79 50 72 6f 6a 65 63 74     LegacyProject
28490 4e 61 6d 65 2c 20 77 6f 77 36 34 2c 20 66 61 6c  Name, wow64, fal
284a0 73 65 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62  se, whatIf, verb
284b0 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ose,..          
284c0 20 20 20 20 20 20 20 20 20 20 72 65 66 20 65 72            ref er
284d0 72 6f 72 29 20 26 26 0d 0a 20 20 20 20 20 20 20  ror) &&..       
284e0 20 20 20 20 20 20 20 20 20 41 64 64 54 6f 41 73           AddToAs
284f0 73 65 6d 62 6c 79 46 6f 6c 64 65 72 73 28 0d 0a  semblyFolders(..
28500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28510 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 66 72 61      rootKey, fra
28520 6d 65 77 6f 72 6b 4e 61 6d 65 2c 20 66 72 61 6d  meworkName, fram
28530 65 77 6f 72 6b 56 65 72 73 69 6f 6e 2c 20 70 6c  eworkVersion, pl
28540 61 74 66 6f 72 6d 4e 61 6d 65 2c 0d 0a 20 20 20  atformName,..   
28550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28560 20 50 72 6f 6a 65 63 74 4e 61 6d 65 2c 20 70 61   ProjectName, pa
28570 69 72 2e 58 2c 20 77 6f 77 36 34 2c 20 77 68 61  ir.X, wow64, wha
28580 74 49 66 2c 20 76 65 72 62 6f 73 65 2c 20 72 65  tIf, verbose, re
28590 66 20 65 72 72 6f 72 29 3b 0d 0a 20 20 20 20 20  f error);..     
285a0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
285b0 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20        else..    
285c0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
285d0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
285e0 6e 20 52 65 6d 6f 76 65 46 72 6f 6d 41 73 73 65  n RemoveFromAsse
285f0 6d 62 6c 79 46 6f 6c 64 65 72 73 28 0d 0a 20 20  mblyFolders(..  
28600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28610 20 20 72 6f 6f 74 4b 65 79 2c 20 66 72 61 6d 65    rootKey, frame
28620 77 6f 72 6b 4e 61 6d 65 2c 20 66 72 61 6d 65 77  workName, framew
28630 6f 72 6b 56 65 72 73 69 6f 6e 2c 20 70 6c 61 74  orkVersion, plat
28640 66 6f 72 6d 4e 61 6d 65 2c 0d 0a 20 20 20 20 20  formName,..     
28650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 50                 P
28660 72 6f 6a 65 63 74 4e 61 6d 65 2c 20 77 6f 77 36  rojectName, wow6
28670 34 2c 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e  4, throwOnMissin
28680 67 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f  g, whatIf, verbo
28690 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se,..           
286a0 20 20 20 20 20 20 20 20 20 72 65 66 20 65 72 72           ref err
286b0 6f 72 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  or);..          
286c0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a    }..        }..
286d0 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
286e0 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  on....        //
286f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28700 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28710 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28720 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28730 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
28740 20 23 72 65 67 69 6f 6e 20 56 69 73 75 61 6c 20   #region Visual 
28750 53 74 75 64 69 6f 20 48 61 6e 64 6c 69 6e 67 0d  Studio Handling.
28760 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
28770 20 73 74 61 74 69 63 20 73 74 72 69 6e 67 20 47   static string G
28780 65 74 56 73 52 6f 6f 74 4b 65 79 4e 61 6d 65 28  etVsRootKeyName(
28790 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
287a0 6f 6c 20 77 6f 77 36 34 0d 0a 20 20 20 20 20 20  ol wow64..      
287b0 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
287c0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
287d0 72 65 74 75 72 6e 20 53 74 72 69 6e 67 2e 46 6f  return String.Fo
287e0 72 6d 61 74 28 22 7b 30 7d 5c 5c 4d 69 63 72 6f  rmat("{0}\\Micro
287f0 73 6f 66 74 5c 5c 56 69 73 75 61 6c 53 74 75 64  soft\\VisualStud
28800 69 6f 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  io",..          
28810 20 20 20 20 20 20 47 65 74 52 6f 6f 74 4b 65 79        GetRootKey
28820 4e 61 6d 65 28 77 6f 77 36 34 29 29 3b 0d 0a 20  Name(wow64));.. 
28830 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
28840 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
28850 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28860 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28870 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28880 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
28890 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
288a0 74 61 74 69 63 20 73 74 72 69 6e 67 20 47 65 74  tatic string Get
288b0 56 73 4b 65 79 4e 61 6d 65 28 0d 0a 20 20 20 20  VsKeyName(..    
288c0 20 20 20 20 20 20 20 20 56 65 72 73 69 6f 6e 20          Version 
288d0 76 73 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20  vsVersion,..    
288e0 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 6f 77          bool wow
288f0 36 34 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  64..            
28900 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
28910 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76 73            if (vs
28920 56 65 72 73 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29  Version == null)
28930 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
28940 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a    return null;..
28950 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
28960 74 75 72 6e 20 53 74 72 69 6e 67 2e 46 6f 72 6d  turn String.Form
28970 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
28980 20 20 20 20 20 22 7b 30 7d 5c 5c 7b 31 7d 22 2c       "{0}\\{1}",
28990 20 47 65 74 56 73 52 6f 6f 74 4b 65 79 4e 61 6d   GetVsRootKeyNam
289a0 65 28 77 6f 77 36 34 29 2c 20 76 73 56 65 72 73  e(wow64), vsVers
289b0 69 6f 6e 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d  ion);..        }
289c0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
289d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
289e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
289f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28a00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28a10 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23  ///....        #
28a20 72 65 67 69 6f 6e 20 56 69 73 75 61 6c 20 53 74  region Visual St
28a30 75 64 69 6f 20 44 61 74 61 20 53 6f 75 72 63 65  udio Data Source
28a40 20 48 61 6e 64 6c 69 6e 67 0d 0a 20 20 20 20 20   Handling..     
28a50 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69     private stati
28a60 63 20 62 6f 6f 6c 20 41 64 64 56 73 44 61 74 61  c bool AddVsData
28a70 53 6f 75 72 63 65 28 0d 0a 20 20 20 20 20 20 20  Source(..       
28a80 20 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72       MockRegistr
28a90 79 4b 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20  yKey rootKey,.. 
28aa0 20 20 20 20 20 20 20 20 20 20 20 56 65 72 73 69             Versi
28ab0 6f 6e 20 76 73 56 65 72 73 69 6f 6e 2c 0d 0a 20  on vsVersion,.. 
28ac0 20 20 20 20 20 20 20 20 20 20 20 50 61 63 6b 61             Packa
28ad0 67 65 20 70 61 63 6b 61 67 65 2c 0d 0a 20 20 20  ge package,..   
28ae0 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 6f           bool wo
28af0 77 36 34 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  w64,..          
28b00 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a    bool whatIf,..
28b10 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
28b20 20 76 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20   verbose,..     
28b30 20 20 20 20 20 20 20 72 65 66 20 73 74 72 69 6e         ref strin
28b40 67 20 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20  g error..       
28b50 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
28b60 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  {..            i
28b70 66 20 28 76 73 56 65 72 73 69 6f 6e 20 3d 3d 20  f (vsVersion == 
28b80 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
28b90 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
28ba0 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 69        error = "i
28bb0 6e 76 61 6c 69 64 20 56 53 20 76 65 72 73 69 6f  nvalid VS versio
28bc0 6e 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n";..           
28bd0 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
28be0 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
28bf0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
28c00 20 69 66 20 28 70 61 63 6b 61 67 65 20 3d 3d 20   if (package == 
28c10 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
28c20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
28c30 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 69        error = "i
28c40 6e 76 61 6c 69 64 20 56 53 20 70 61 63 6b 61 67  nvalid VS packag
28c50 65 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e";..           
28c60 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
28c70 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
28c80 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
28c90 20 73 74 72 69 6e 67 20 6b 65 79 4e 61 6d 65 20   string keyName 
28ca0 3d 20 47 65 74 56 73 4b 65 79 4e 61 6d 65 28 76  = GetVsKeyName(v
28cb0 73 56 65 72 73 69 6f 6e 2c 20 77 6f 77 36 34 29  sVersion, wow64)
28cc0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
28cd0 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69   using (MockRegi
28ce0 73 74 72 79 4b 65 79 20 6b 65 79 20 3d 20 52 65  stryKey key = Re
28cf0 67 69 73 74 72 79 48 65 6c 70 65 72 2e 4f 70 65  gistryHelper.Ope
28d00 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20  nSubKey(..      
28d10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f                ro
28d20 6f 74 4b 65 79 2c 20 6b 65 79 4e 61 6d 65 2c 20  otKey, keyName, 
28d30 66 61 6c 73 65 2c 20 77 68 61 74 49 66 2c 20 76  false, whatIf, v
28d40 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20 20  erbose))..      
28d50 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
28d60 20 20 20 20 20 20 20 20 20 69 66 20 28 6b 65 79           if (key
28d70 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
28d80 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
28d90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28da0 20 20 65 72 72 6f 72 20 3d 20 53 74 72 69 6e 67    error = String
28db0 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  .Format(..      
28dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28dd0 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20 6f 70 65    "could not ope
28de0 6e 20 72 65 67 69 73 74 72 79 20 6b 65 79 3a 20  n registry key: 
28df0 7b 30 7d 5c 5c 7b 31 7d 22 2c 0d 0a 20 20 20 20  {0}\\{1}",..    
28e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28e10 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 6b 65 79      rootKey, key
28e20 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  Name);....      
28e30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
28e40 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20  turn false;..   
28e50 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
28e60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
28e70 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67    using (MockReg
28e80 69 73 74 72 79 4b 65 79 20 73 75 62 4b 65 79 20  istryKey subKey 
28e90 3d 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72  = RegistryHelper
28ea0 2e 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20  .OpenSubKey(..  
28eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28ec0 20 20 20 20 20 20 6b 65 79 2c 20 22 44 61 74 61        key, "Data
28ed0 53 6f 75 72 63 65 73 22 2c 20 74 72 75 65 2c 20  Sources", true, 
28ee0 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29  whatIf, verbose)
28ef0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
28f00 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
28f10 20 20 20 20 20 20 20 20 20 20 69 66 20 28 73 75            if (su
28f20 62 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  bKey == null).. 
28f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28f40 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
28f50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72                er
28f60 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72  ror = String.For
28f70 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
28f80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28f90 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20 6f 70 65    "could not ope
28fa0 6e 20 72 65 67 69 73 74 72 79 20 6b 65 79 3a 20  n registry key: 
28fb0 7b 30 7d 5c 5c 44 61 74 61 53 6f 75 72 63 65 73  {0}\\DataSources
28fc0 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
28fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28fe0 6b 65 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  key);....       
28ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29000 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
29010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29020 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
29030 20 20 20 20 20 20 20 20 20 20 20 20 20 75 73 69               usi
29040 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73 74 72 79  ng (MockRegistry
29050 4b 65 79 20 64 61 74 61 53 6f 75 72 63 65 4b 65  Key dataSourceKe
29060 79 20 3d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  y =..           
29070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29080 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e   RegistryHelper.
29090 43 72 65 61 74 65 53 75 62 4b 65 79 28 73 75 62  CreateSubKey(sub
290a0 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  Key,..          
290b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
290c0 20 20 70 61 63 6b 61 67 65 2e 44 61 74 61 53 6f    package.DataSo
290d0 75 72 63 65 49 64 2e 54 6f 53 74 72 69 6e 67 28  urceId.ToString(
290e0 56 73 49 64 46 6f 72 6d 61 74 29 2c 0d 0a 20 20  VsIdFormat),..  
290f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29100 20 20 20 20 20 20 20 20 20 20 77 68 61 74 49 66            whatIf
29110 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a 20 20 20  , verbose))..   
29120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29130 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
29140 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
29150 64 61 74 61 53 6f 75 72 63 65 4b 65 79 20 3d 3d  dataSourceKey ==
29160 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
29170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29180 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
29190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
291a0 72 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f  rror = String.Fo
291b0 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
291c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
291d0 20 20 20 20 20 20 20 22 63 6f 75 6c 64 20 6e 6f         "could no
291e0 74 20 63 72 65 61 74 65 20 72 65 67 69 73 74 72  t create registr
291f0 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c 7b 31 7d 22  y key: {0}\\{1}"
29200 2c 20 6b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20  , key,..        
29210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29220 20 20 20 20 20 20 20 20 70 61 63 6b 61 67 65 2e          package.
29230 44 61 74 61 53 6f 75 72 63 65 49 64 2e 54 6f 53  DataSourceId.ToS
29240 74 72 69 6e 67 28 56 73 49 64 46 6f 72 6d 61 74  tring(VsIdFormat
29250 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ));....         
29260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29270 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
29280 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
29290 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
292a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
292b0 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79 48         RegistryH
292c0 65 6c 70 65 72 2e 53 65 74 56 61 6c 75 65 28 0d  elper.SetValue(.
292d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
292e0 20 20 20 20 20 20 20 20 20 20 20 20 20 64 61 74               dat
292f0 61 53 6f 75 72 63 65 4b 65 79 2c 20 6e 75 6c 6c  aSourceKey, null
29300 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  , String.Format(
29310 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
29320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 7b                "{
29330 30 7d 20 44 61 74 61 62 61 73 65 20 46 69 6c 65  0} Database File
29340 22 2c 20 50 72 6f 6a 65 63 74 4e 61 6d 65 29 2c  ", ProjectName),
29350 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20   whatIf,..      
29360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29370 20 20 20 20 20 20 76 65 72 62 6f 73 65 29 3b 0d        verbose);.
29380 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
29390 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73             Regis
293a0 74 72 79 48 65 6c 70 65 72 2e 43 72 65 61 74 65  tryHelper.Create
293b0 53 75 62 4b 65 79 28 64 61 74 61 53 6f 75 72 63  SubKey(dataSourc
293c0 65 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20  eKey,..         
293d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
293e0 20 20 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74     String.Format
293f0 28 22 53 75 70 70 6f 72 74 69 6e 67 50 72 6f 76  ("SupportingProv
29400 69 64 65 72 73 5c 5c 7b 30 7d 22 2c 0d 0a 20 20  iders\\{0}",..  
29410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29420 20 20 20 20 20 20 20 20 20 20 70 61 63 6b 61 67            packag
29430 65 2e 44 61 74 61 50 72 6f 76 69 64 65 72 49 64  e.DataProviderId
29440 2e 54 6f 53 74 72 69 6e 67 28 56 73 49 64 46 6f  .ToString(VsIdFo
29450 72 6d 61 74 29 29 2c 0d 0a 20 20 20 20 20 20 20  rmat)),..       
29460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29470 20 20 20 20 20 77 68 61 74 49 66 2c 20 76 65 72       whatIf, ver
29480 62 6f 73 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  bose);..        
29490 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
294a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
294b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
294c0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  ...            r
294d0 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20  eturn true;..   
294e0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
294f0 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
29500 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29510 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29520 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29530 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
29540 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61       private sta
29550 74 69 63 20 62 6f 6f 6c 20 52 65 6d 6f 76 65 56  tic bool RemoveV
29560 73 44 61 74 61 53 6f 75 72 63 65 28 0d 0a 20 20  sDataSource(..  
29570 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65            MockRe
29580 67 69 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65  gistryKey rootKe
29590 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y,..            
295a0 56 65 72 73 69 6f 6e 20 76 73 56 65 72 73 69 6f  Version vsVersio
295b0 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n,..            
295c0 50 61 63 6b 61 67 65 20 70 61 63 6b 61 67 65 2c  Package package,
295d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
295e0 6f 6c 20 77 6f 77 36 34 2c 0d 0a 20 20 20 20 20  ol wow64,..     
295f0 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74         bool what
29600 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  If,..           
29610 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 0d 0a   bool verbose,..
29620 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20              ref 
29630 73 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20  string error..  
29640 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
29650 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
29660 20 20 20 20 69 66 20 28 76 73 56 65 72 73 69 6f      if (vsVersio
29670 6e 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  n == null)..    
29680 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
29690 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72             error
296a0 20 3d 20 22 69 6e 76 61 6c 69 64 20 56 53 20 76   = "invalid VS v
296b0 65 72 73 69 6f 6e 22 3b 0d 0a 20 20 20 20 20 20  ersion";..      
296c0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
296d0 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20   false;..       
296e0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
296f0 20 20 20 20 20 20 69 66 20 28 70 61 63 6b 61 67        if (packag
29700 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  e == null)..    
29710 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
29720 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72             error
29730 20 3d 20 22 69 6e 76 61 6c 69 64 20 56 53 20 70   = "invalid VS p
29740 61 63 6b 61 67 65 22 3b 0d 0a 20 20 20 20 20 20  ackage";..      
29750 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
29760 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20   false;..       
29770 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
29780 20 20 20 20 20 20 73 74 72 69 6e 67 20 6b 65 79        string key
29790 4e 61 6d 65 20 3d 20 47 65 74 56 73 4b 65 79 4e  Name = GetVsKeyN
297a0 61 6d 65 28 76 73 56 65 72 73 69 6f 6e 2c 20 77  ame(vsVersion, w
297b0 6f 77 36 34 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  ow64);....      
297c0 20 20 20 20 20 20 75 73 69 6e 67 20 28 4d 6f 63        using (Moc
297d0 6b 52 65 67 69 73 74 72 79 4b 65 79 20 6b 65 79  kRegistryKey key
297e0 20 3d 20 52 65 67 69 73 74 72 79 48 65 6c 70 65   = RegistryHelpe
297f0 72 2e 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20  r.OpenSubKey(.. 
29800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29810 20 20 20 72 6f 6f 74 4b 65 79 2c 20 6b 65 79 4e     rootKey, keyN
29820 61 6d 65 2c 20 66 61 6c 73 65 2c 20 77 68 61 74  ame, false, what
29830 49 66 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a 20  If, verbose)).. 
29840 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
29850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
29860 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a   (key == null)..
29870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29880 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
29890 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 53         error = S
298a0 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
298b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
298c0 20 20 20 20 20 20 20 22 63 6f 75 6c 64 20 6e 6f         "could no
298d0 74 20 6f 70 65 6e 20 72 65 67 69 73 74 72 79 20  t open registry 
298e0 6b 65 79 3a 20 7b 30 7d 5c 5c 7b 31 7d 22 2c 0d  key: {0}\\{1}",.
298f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
29900 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79           rootKey
29910 2c 20 6b 65 79 4e 61 6d 65 29 3b 0d 0a 0d 0a 20  , keyName);.... 
29920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29930 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
29940 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
29950 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
29960 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 4d 6f         using (Mo
29970 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 73 75  ckRegistryKey su
29980 62 4b 65 79 20 3d 20 52 65 67 69 73 74 72 79 48  bKey = RegistryH
29990 65 6c 70 65 72 2e 4f 70 65 6e 53 75 62 4b 65 79  elper.OpenSubKey
299a0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
299b0 20 20 20 20 20 20 20 20 20 20 20 6b 65 79 2c 20             key, 
299c0 22 44 61 74 61 53 6f 75 72 63 65 73 22 2c 20 74  "DataSources", t
299d0 72 75 65 2c 20 77 68 61 74 49 66 2c 20 76 65 72  rue, whatIf, ver
299e0 62 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20  bose))..        
299f0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
29a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
29a10 66 20 28 73 75 62 4b 65 79 20 3d 3d 20 6e 75 6c  f (subKey == nul
29a20 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
29a30 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
29a40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29a50 20 20 20 65 72 72 6f 72 20 3d 20 53 74 72 69 6e     error = Strin
29a60 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
29a70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29a80 20 20 20 20 20 20 20 22 63 6f 75 6c 64 20 6e 6f         "could no
29a90 74 20 6f 70 65 6e 20 72 65 67 69 73 74 72 79 20  t open registry 
29aa0 6b 65 79 3a 20 7b 30 7d 5c 5c 44 61 74 61 53 6f  key: {0}\\DataSo
29ab0 75 72 63 65 73 22 2c 0d 0a 20 20 20 20 20 20 20  urces",..       
29ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29ad0 20 20 20 20 20 6b 65 79 29 3b 0d 0a 0d 0a 20 20       key);....  
29ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29af0 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
29b00 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se;..           
29b10 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
29b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29b30 20 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72    RegistryHelper
29b40 2e 44 65 6c 65 74 65 53 75 62 4b 65 79 54 72 65  .DeleteSubKeyTre
29b50 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
29b60 20 20 20 20 20 20 20 20 20 20 20 20 73 75 62 4b              subK
29b70 65 79 2c 20 70 61 63 6b 61 67 65 2e 44 61 74 61  ey, package.Data
29b80 53 6f 75 72 63 65 49 64 2e 54 6f 53 74 72 69 6e  SourceId.ToStrin
29b90 67 28 56 73 49 64 46 6f 72 6d 61 74 29 2c 0d 0a  g(VsIdFormat),..
29ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29bb0 20 20 20 20 20 20 20 20 77 68 61 74 49 66 2c 20          whatIf, 
29bc0 76 65 72 62 6f 73 65 29 3b 0d 0a 20 20 20 20 20  verbose);..     
29bd0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
29be0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
29bf0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
29c00 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20  n true;..       
29c10 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f   }....        //
29c20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29c30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29c40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29c50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29c60 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
29c70 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
29c80 62 6f 6f 6c 20 50 72 6f 63 65 73 73 56 73 44 61  bool ProcessVsDa
29c90 74 61 53 6f 75 72 63 65 28 0d 0a 20 20 20 20 20  taSource(..     
29ca0 20 20 20 20 20 20 20 4d 6f 63 6b 52 65 67 69 73         MockRegis
29cb0 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79 2c 0d  tryKey rootKey,.
29cc0 0a 20 20 20 20 20 20 20 20 20 20 20 20 56 65 72  .            Ver
29cd0 73 69 6f 6e 20 76 73 56 65 72 73 69 6f 6e 2c 0d  sion vsVersion,.
29ce0 0a 20 20 20 20 20 20 20 20 20 20 20 20 50 61 63  .            Pac
29cf0 6b 61 67 65 20 70 61 63 6b 61 67 65 2c 0d 0a 20  kage package,.. 
29d00 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63             objec
29d10 74 20 63 6c 69 65 6e 74 44 61 74 61 2c 0d 0a 20  t clientData,.. 
29d20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
29d30 77 6f 77 36 34 2c 0d 0a 20 20 20 20 20 20 20 20  wow64,..        
29d40 20 20 20 20 62 6f 6f 6c 20 74 68 72 6f 77 4f 6e      bool throwOn
29d50 4d 69 73 73 69 6e 67 2c 0d 0a 20 20 20 20 20 20  Missing,..      
29d60 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49        bool whatI
29d70 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  f,..            
29d80 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 0d 0a 20  bool verbose,.. 
29d90 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20 73             ref s
29da0 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20  tring error..   
29db0 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
29dc0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
29dd0 20 20 20 69 66 20 28 70 61 63 6b 61 67 65 20 3d     if (package =
29de0 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
29df0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
29e00 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
29e10 22 69 6e 76 61 6c 69 64 20 56 53 20 70 61 63 6b  "invalid VS pack
29e20 61 67 65 22 3b 0d 0a 20 20 20 20 20 20 20 20 20  age";..         
29e30 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
29e40 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lse;..          
29e50 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
29e60 20 20 20 41 6e 79 50 61 69 72 3c 73 74 72 69 6e     AnyPair<strin
29e70 67 2c 20 62 6f 6f 6c 3e 20 70 61 69 72 20 3d 20  g, bool> pair = 
29e80 63 6c 69 65 6e 74 44 61 74 61 20 61 73 20 41 6e  clientData as An
29e90 79 50 61 69 72 3c 73 74 72 69 6e 67 2c 20 62 6f  yPair<string, bo
29ea0 6f 6c 3e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ol>;....        
29eb0 20 20 20 20 69 66 20 28 70 61 69 72 20 3d 3d 20      if (pair == 
29ec0 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
29ed0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
29ee0 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 69        error = "i
29ef0 6e 76 61 6c 69 64 20 56 53 20 63 61 6c 6c 62 61  nvalid VS callba
29f00 63 6b 20 64 61 74 61 22 3b 0d 0a 20 20 20 20 20  ck data";..     
29f10 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
29f20 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  n false;..      
29f30 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
29f40 20 20 20 20 20 20 20 69 66 20 28 70 61 69 72 2e         if (pair.
29f50 59 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  Y)..            
29f60 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
29f70 20 20 20 72 65 74 75 72 6e 20 41 64 64 56 73 44     return AddVsD
29f80 61 74 61 53 6f 75 72 63 65 28 0d 0a 20 20 20 20  ataSource(..    
29f90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29fa0 72 6f 6f 74 4b 65 79 2c 20 76 73 56 65 72 73 69  rootKey, vsVersi
29fb0 6f 6e 2c 20 70 61 63 6b 61 67 65 2c 20 77 6f 77  on, package, wow
29fc0 36 34 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62  64, whatIf, verb
29fd0 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ose,..          
29fe0 20 20 20 20 20 20 20 20 20 20 72 65 66 20 65 72            ref er
29ff0 72 6f 72 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ror);..         
2a000 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
2a010 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20    else..        
2a020 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
2a030 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 52 65         return Re
2a040 6d 6f 76 65 56 73 44 61 74 61 53 6f 75 72 63 65  moveVsDataSource
2a050 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
2a060 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20         rootKey, 
2a070 76 73 56 65 72 73 69 6f 6e 2c 20 70 61 63 6b 61  vsVersion, packa
2a080 67 65 2c 20 77 6f 77 36 34 2c 20 77 68 61 74 49  ge, wow64, whatI
2a090 66 2c 20 76 65 72 62 6f 73 65 2c 0d 0a 20 20 20  f, verbose,..   
2a0a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a0b0 20 72 65 66 20 65 72 72 6f 72 29 3b 0d 0a 20 20   ref error);..  
2a0c0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
2a0d0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
2a0e0 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20  #endregion....  
2a0f0 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
2a100 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a110 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a120 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a130 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
2a140 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e  .        #region
2a150 20 56 69 73 75 61 6c 20 53 74 75 64 69 6f 20 44   Visual Studio D
2a160 61 74 61 20 50 72 6f 76 69 64 65 72 20 48 61 6e  ata Provider Han
2a170 64 6c 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 70  dling..        p
2a180 72 69 76 61 74 65 20 73 74 61 74 69 63 20 62 6f  rivate static bo
2a190 6f 6c 20 41 64 64 56 73 44 61 74 61 50 72 6f 76  ol AddVsDataProv
2a1a0 69 64 65 72 28 0d 0a 20 20 20 20 20 20 20 20 20  ider(..         
2a1b0 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b     MockRegistryK
2a1c0 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20  ey rootKey,..   
2a1d0 20 20 20 20 20 20 20 20 20 56 65 72 73 69 6f 6e           Version
2a1e0 20 76 73 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20   vsVersion,..   
2a1f0 20 20 20 20 20 20 20 20 20 50 61 63 6b 61 67 65           Package
2a200 20 70 61 63 6b 61 67 65 2c 0d 0a 20 20 20 20 20   package,..     
2a210 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 66 69         string fi
2a220 6c 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20  leName,..       
2a230 20 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34 2c       bool wow64,
2a240 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
2a250 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20  ol whatIf,..    
2a260 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65 72          bool ver
2a270 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  bose,..         
2a280 20 20 20 72 65 66 20 73 74 72 69 6e 67 20 65 72     ref string er
2a290 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ror..           
2a2a0 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20   )..        {.. 
2a2b0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76             if (v
2a2c0 73 56 65 72 73 69 6f 6e 20 3d 3d 20 6e 75 6c 6c  sVersion == null
2a2d0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
2a2e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2a2f0 20 20 65 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c    error = "inval
2a300 69 64 20 56 53 20 76 65 72 73 69 6f 6e 22 3b 0d  id VS version";.
2a310 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2a320 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
2a330 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
2a340 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
2a350 28 70 61 63 6b 61 67 65 20 3d 3d 20 6e 75 6c 6c  (package == null
2a360 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
2a370 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2a380 20 20 65 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c    error = "inval
2a390 69 64 20 56 53 20 70 61 63 6b 61 67 65 22 3b 0d  id VS package";.
2a3a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2a3b0 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
2a3c0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
2a3d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72  .            str
2a3e0 69 6e 67 20 6b 65 79 4e 61 6d 65 20 3d 20 47 65  ing keyName = Ge
2a3f0 74 56 73 4b 65 79 4e 61 6d 65 28 76 73 56 65 72  tVsKeyName(vsVer
2a400 73 69 6f 6e 2c 20 77 6f 77 36 34 29 3b 0d 0a 0d  sion, wow64);...
2a410 0a 20 20 20 20 20 20 20 20 20 20 20 20 75 73 69  .            usi
2a420 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73 74 72 79  ng (MockRegistry
2a430 4b 65 79 20 6b 65 79 20 3d 20 52 65 67 69 73 74  Key key = Regist
2a440 72 79 48 65 6c 70 65 72 2e 4f 70 65 6e 53 75 62  ryHelper.OpenSub
2a450 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20  Key(..          
2a460 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65            rootKe
2a470 79 2c 20 6b 65 79 4e 61 6d 65 2c 20 66 61 6c 73  y, keyName, fals
2a480 65 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f  e, whatIf, verbo
2a490 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  se))..          
2a4a0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
2a4b0 20 20 20 20 20 69 66 20 28 6b 65 79 20 3d 3d 20       if (key == 
2a4c0 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
2a4d0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
2a4e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72                er
2a4f0 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72  ror = String.For
2a500 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
2a510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 63                "c
2a520 6f 75 6c 64 20 6e 6f 74 20 6f 70 65 6e 20 72 65  ould not open re
2a530 67 69 73 74 72 79 20 6b 65 79 3a 20 7b 30 7d 5c  gistry key: {0}\
2a540 5c 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20  \{1}",..        
2a550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a560 72 6f 6f 74 4b 65 79 2c 20 6b 65 79 4e 61 6d 65  rootKey, keyName
2a570 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
2a580 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
2a590 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20   false;..       
2a5a0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
2a5b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 75 73                us
2a5c0 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73 74 72  ing (MockRegistr
2a5d0 79 4b 65 79 20 73 75 62 4b 65 79 20 3d 20 52 65  yKey subKey = Re
2a5e0 67 69 73 74 72 79 48 65 6c 70 65 72 2e 4f 70 65  gistryHelper.Ope
2a5f0 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20  nSubKey(..      
2a600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a610 20 20 6b 65 79 2c 20 22 44 61 74 61 50 72 6f 76    key, "DataProv
2a620 69 64 65 72 73 22 2c 20 74 72 75 65 2c 20 77 68  iders", true, wh
2a630 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 29 0d  atIf, verbose)).
2a640 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2a650 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
2a660 20 20 20 20 20 20 20 20 69 66 20 28 73 75 62 4b          if (subK
2a670 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ey == null)..   
2a680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a690 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
2a6a0 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
2a6b0 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  r = String.Forma
2a6c0 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
2a6d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a6e0 22 63 6f 75 6c 64 20 6e 6f 74 20 6f 70 65 6e 20  "could not open 
2a6f0 72 65 67 69 73 74 72 79 20 6b 65 79 3a 20 7b 30  registry key: {0
2a700 7d 5c 5c 44 61 74 61 50 72 6f 76 69 64 65 72 73  }\\DataProviders
2a710 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
2a720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a730 6b 65 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  key);....       
2a740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a750 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
2a760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a770 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
2a780 20 20 20 20 20 20 20 20 20 20 20 20 20 75 73 69               usi
2a790 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73 74 72 79  ng (MockRegistry
2a7a0 4b 65 79 20 64 61 74 61 50 72 6f 76 69 64 65 72  Key dataProvider
2a7b0 4b 65 79 20 3d 0d 0a 20 20 20 20 20 20 20 20 20  Key =..         
2a7c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a7d0 20 20 20 52 65 67 69 73 74 72 79 48 65 6c 70 65     RegistryHelpe
2a7e0 72 2e 43 72 65 61 74 65 53 75 62 4b 65 79 28 73  r.CreateSubKey(s
2a7f0 75 62 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20  ubKey,..        
2a800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a810 20 20 20 20 70 61 63 6b 61 67 65 2e 44 61 74 61      package.Data
2a820 50 72 6f 76 69 64 65 72 49 64 2e 54 6f 53 74 72  ProviderId.ToStr
2a830 69 6e 67 28 56 73 49 64 46 6f 72 6d 61 74 29 2c  ing(VsIdFormat),
2a840 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2a850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 77 68                wh
2a860 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 29 0d  atIf, verbose)).
2a870 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2a880 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
2a890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a8a0 69 66 20 28 64 61 74 61 50 72 6f 76 69 64 65 72  if (dataProvider
2a8b0 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  Key == null)..  
2a8c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a8d0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
2a8e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a8f0 20 20 20 20 20 65 72 72 6f 72 20 3d 20 53 74 72       error = Str
2a900 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
2a910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a920 20 20 20 20 20 20 20 20 20 20 20 20 20 22 63 6f               "co
2a930 75 6c 64 20 6e 6f 74 20 63 72 65 61 74 65 20 72  uld not create r
2a940 65 67 69 73 74 72 79 20 6b 65 79 3a 20 7b 30 7d  egistry key: {0}
2a950 5c 5c 7b 31 7d 22 2c 20 6b 65 79 2c 0d 0a 20 20  \\{1}", key,..  
2a960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 61                pa
2a980 63 6b 61 67 65 2e 44 61 74 61 50 72 6f 76 69 64  ckage.DataProvid
2a990 65 72 49 64 2e 54 6f 53 74 72 69 6e 67 28 56 73  erId.ToString(Vs
2a9a0 49 64 46 6f 72 6d 61 74 29 29 3b 0d 0a 0d 0a 20  IdFormat));.... 
2a9b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a9c0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
2a9d0 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  n false;..      
2a9e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a9f0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
2aa00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52                 R
2aa10 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 53 65  egistryHelper.Se
2aa20 74 56 61 6c 75 65 28 0d 0a 20 20 20 20 20 20 20  tValue(..       
2aa30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2aa40 20 20 20 20 20 64 61 74 61 50 72 6f 76 69 64 65       dataProvide
2aa50 72 4b 65 79 2c 20 6e 75 6c 6c 2c 20 44 65 73 63  rKey, null, Desc
2aa60 72 69 70 74 69 6f 6e 2c 20 77 68 61 74 49 66 2c  ription, whatIf,
2aa70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2aa80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 76 65                ve
2aa90 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20  rbose);....     
2aaa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2aab0 20 20 20 52 65 67 69 73 74 72 79 48 65 6c 70 65     RegistryHelpe
2aac0 72 2e 53 65 74 56 61 6c 75 65 28 0d 0a 20 20 20  r.SetValue(..   
2aad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2aae0 20 20 20 20 20 20 20 20 20 64 61 74 61 50 72 6f           dataPro
2aaf0 76 69 64 65 72 4b 65 79 2c 20 22 49 6e 76 61 72  viderKey, "Invar
2ab00 69 61 6e 74 4e 61 6d 65 22 2c 20 49 6e 76 61 72  iantName", Invar
2ab10 69 61 6e 74 4e 61 6d 65 2c 0d 0a 20 20 20 20 20  iantName,..     
2ab20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ab30 20 20 20 20 20 20 20 77 68 61 74 49 66 2c 20 76         whatIf, v
2ab40 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20  erbose);....    
2ab50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ab60 20 20 20 20 52 65 67 69 73 74 72 79 48 65 6c 70      RegistryHelp
2ab70 65 72 2e 53 65 74 56 61 6c 75 65 28 0d 0a 20 20  er.SetValue(..  
2ab80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ab90 20 20 20 20 20 20 20 20 20 20 64 61 74 61 50 72            dataPr
2aba0 6f 76 69 64 65 72 4b 65 79 2c 20 22 54 65 63 68  oviderKey, "Tech
2abb0 6e 6f 6c 6f 67 79 22 2c 0d 0a 20 20 20 20 20 20  nology",..      
2abc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2abd0 20 20 20 20 20 20 70 61 63 6b 61 67 65 2e 41 64        package.Ad
2abe0 6f 4e 65 74 54 65 63 68 6e 6f 6c 6f 67 79 49 64  oNetTechnologyId
2abf0 2e 54 6f 53 74 72 69 6e 67 28 56 73 49 64 46 6f  .ToString(VsIdFo
2ac00 72 6d 61 74 29 2c 0d 0a 20 20 20 20 20 20 20 20  rmat),..        
2ac10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ac20 20 20 20 20 77 68 61 74 49 66 2c 20 76 65 72 62      whatIf, verb
2ac30 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ose);....       
2ac40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ac50 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e   RegistryHelper.
2ac60 53 65 74 56 61 6c 75 65 28 0d 0a 20 20 20 20 20  SetValue(..     
2ac70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ac80 20 20 20 20 20 20 20 64 61 74 61 50 72 6f 76 69         dataProvi
2ac90 64 65 72 4b 65 79 2c 20 22 43 6f 64 65 42 61 73  derKey, "CodeBas
2aca0 65 22 2c 20 66 69 6c 65 4e 61 6d 65 2c 20 77 68  e", fileName, wh
2acb0 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20  atIf,..         
2acc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2acd0 20 20 20 76 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a     verbose);....
2ace0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2acf0 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79          Registry
2ad00 48 65 6c 70 65 72 2e 53 65 74 56 61 6c 75 65 28  Helper.SetValue(
2ad10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2ad20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 61                da
2ad30 74 61 50 72 6f 76 69 64 65 72 4b 65 79 2c 20 22  taProviderKey, "
2ad40 46 61 63 74 6f 72 79 53 65 72 76 69 63 65 22 2c  FactoryService",
2ad50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2ad60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 61                pa
2ad70 63 6b 61 67 65 2e 53 65 72 76 69 63 65 49 64 2e  ckage.ServiceId.
2ad80 54 6f 53 74 72 69 6e 67 28 56 73 49 64 46 6f 72  ToString(VsIdFor
2ad90 6d 61 74 29 2c 20 77 68 61 74 49 66 2c 0d 0a 20  mat), whatIf,.. 
2ada0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2adb0 20 20 20 20 20 20 20 20 20 20 20 76 65 72 62 6f             verbo
2adc0 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  se);....        
2add0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ade0 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 43  RegistryHelper.C
2adf0 72 65 61 74 65 53 75 62 4b 65 79 28 64 61 74 61  reateSubKey(data
2ae00 50 72 6f 76 69 64 65 72 4b 65 79 2c 0d 0a 20 20  ProviderKey,..  
2ae10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ae20 20 20 20 20 20 20 20 20 20 20 22 53 75 70 70 6f            "Suppo
2ae30 72 74 65 64 4f 62 6a 65 63 74 73 5c 5c 44 61 74  rtedObjects\\Dat
2ae40 61 43 6f 6e 6e 65 63 74 69 6f 6e 55 49 43 6f 6e  aConnectionUICon
2ae50 74 72 6f 6c 22 2c 0d 0a 20 20 20 20 20 20 20 20  trol",..        
2ae60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ae70 20 20 20 20 77 68 61 74 49 66 2c 20 76 65 72 62      whatIf, verb
2ae80 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ose);....       
2ae90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2aea0 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e   RegistryHelper.
2aeb0 43 72 65 61 74 65 53 75 62 4b 65 79 28 64 61 74  CreateSubKey(dat
2aec0 61 50 72 6f 76 69 64 65 72 4b 65 79 2c 0d 0a 20  aProviderKey,.. 
2aed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2aee0 20 20 20 20 20 20 20 20 20 20 20 22 53 75 70 70             "Supp
2aef0 6f 72 74 65 64 4f 62 6a 65 63 74 73 5c 5c 44 61  ortedObjects\\Da
2af00 74 61 43 6f 6e 6e 65 63 74 69 6f 6e 50 72 6f 70  taConnectionProp
2af10 65 72 74 69 65 73 22 2c 0d 0a 20 20 20 20 20 20  erties",..      
2af20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2af30 20 20 20 20 20 20 77 68 61 74 49 66 2c 20 76 65        whatIf, ve
2af40 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20  rbose);....     
2af50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2af60 20 20 20 52 65 67 69 73 74 72 79 48 65 6c 70 65     RegistryHelpe
2af70 72 2e 43 72 65 61 74 65 53 75 62 4b 65 79 28 64  r.CreateSubKey(d
2af80 61 74 61 50 72 6f 76 69 64 65 72 4b 65 79 2c 0d  ataProviderKey,.
2af90 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2afa0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 53 75               "Su
2afb0 70 70 6f 72 74 65 64 4f 62 6a 65 63 74 73 5c 5c  pportedObjects\\
2afc0 44 61 74 61 43 6f 6e 6e 65 63 74 69 6f 6e 53 75  DataConnectionSu
2afd0 70 70 6f 72 74 22 2c 20 77 68 61 74 49 66 2c 0d  pport", whatIf,.
2afe0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2aff0 20 20 20 20 20 20 20 20 20 20 20 20 20 76 65 72               ver
2b000 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  bose);....      
2b010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b020 20 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72    RegistryHelper
2b030 2e 43 72 65 61 74 65 53 75 62 4b 65 79 28 64 61  .CreateSubKey(da
2b040 74 61 50 72 6f 76 69 64 65 72 4b 65 79 2c 0d 0a  taProviderKey,..
2b050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b060 20 20 20 20 20 20 20 20 20 20 20 20 22 53 75 70              "Sup
2b070 70 6f 72 74 65 64 4f 62 6a 65 63 74 73 5c 5c 44  portedObjects\\D
2b080 61 74 61 4f 62 6a 65 63 74 53 75 70 70 6f 72 74  ataObjectSupport
2b090 22 2c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20  ", whatIf,..    
2b0a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b0b0 20 20 20 20 20 20 20 20 76 65 72 62 6f 73 65 29          verbose)
2b0c0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
2b0d0 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67               Reg
2b0e0 69 73 74 72 79 48 65 6c 70 65 72 2e 43 72 65 61  istryHelper.Crea
2b0f0 74 65 53 75 62 4b 65 79 28 64 61 74 61 50 72 6f  teSubKey(dataPro
2b100 76 69 64 65 72 4b 65 79 2c 0d 0a 20 20 20 20 20  viderKey,..     
2b110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b120 20 20 20 20 20 20 20 22 53 75 70 70 6f 72 74 65         "Supporte
2b130 64 4f 62 6a 65 63 74 73 5c 5c 44 61 74 61 56 69  dObjects\\DataVi
2b140 65 77 53 75 70 70 6f 72 74 22 2c 20 77 68 61 74  ewSupport", what
2b150 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  If,..           
2b160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b170 20 76 65 72 62 6f 73 65 29 3b 0d 0a 20 20 20 20   verbose);..    
2b180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b190 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
2b1a0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
2b1b0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
2b1c0 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d     return true;.
2b1d0 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....  
2b1e0 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
2b1f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b200 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b210 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b220 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
2b230 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
2b240 20 73 74 61 74 69 63 20 62 6f 6f 6c 20 52 65 6d   static bool Rem
2b250 6f 76 65 56 73 44 61 74 61 50 72 6f 76 69 64 65  oveVsDataProvide
2b260 72 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  r(..            
2b270 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20  MockRegistryKey 
2b280 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20 20 20 20  rootKey,..      
2b290 20 20 20 20 20 20 56 65 72 73 69 6f 6e 20 76 73        Version vs
2b2a0 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20  Version,..      
2b2b0 20 20 20 20 20 20 50 61 63 6b 61 67 65 20 70 61        Package pa
2b2c0 63 6b 61 67 65 2c 0d 0a 20 20 20 20 20 20 20 20  ckage,..        
2b2d0 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34 2c 0d      bool wow64,.
2b2e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f  .            boo
2b2f0 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20  l whatIf,..     
2b300 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62         bool verb
2b310 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ose,..          
2b320 20 20 72 65 66 20 73 74 72 69 6e 67 20 65 72 72    ref string err
2b330 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  or..            
2b340 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
2b350 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76 73            if (vs
2b360 56 65 72 73 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29  Version == null)
2b370 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
2b380 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2b390 20 65 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69   error = "invali
2b3a0 64 20 56 53 20 76 65 72 73 69 6f 6e 22 3b 0d 0a  d VS version";..
2b3b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b3c0 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20  return false;.. 
2b3d0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
2b3e0 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
2b3f0 6e 67 20 6b 65 79 4e 61 6d 65 20 3d 20 47 65 74  ng keyName = Get
2b400 56 73 4b 65 79 4e 61 6d 65 28 76 73 56 65 72 73  VsKeyName(vsVers
2b410 69 6f 6e 2c 20 77 6f 77 36 34 29 3b 0d 0a 0d 0a  ion, wow64);....
2b420 20 20 20 20 20 20 20 20 20 20 20 20 75 73 69 6e              usin
2b430 67 20 28 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b  g (MockRegistryK
2b440 65 79 20 6b 65 79 20 3d 20 52 65 67 69 73 74 72  ey key = Registr
2b450 79 48 65 6c 70 65 72 2e 4f 70 65 6e 53 75 62 4b  yHelper.OpenSubK
2b460 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ey(..           
2b470 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79           rootKey
2b480 2c 20 6b 65 79 4e 61 6d 65 2c 20 66 61 6c 73 65  , keyName, false
2b490 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73  , whatIf, verbos
2b4a0 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e))..           
2b4b0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
2b4c0 20 20 20 20 69 66 20 28 6b 65 79 20 3d 3d 20 6e      if (key == n
2b4d0 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
2b4e0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
2b4f0 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
2b500 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d  or = String.Form
2b510 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
2b520 20 20 20 20 20 20 20 20 20 20 20 20 20 22 63 6f               "co
2b530 75 6c 64 20 6e 6f 74 20 6f 70 65 6e 20 72 65 67  uld not open reg
2b540 69 73 74 72 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c  istry key: {0}\\
2b550 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  {1}",..         
2b560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
2b570 6f 6f 74 4b 65 79 2c 20 6b 65 79 4e 61 6d 65 29  ootKey, keyName)
2b580 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
2b590 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
2b5a0 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20  false;..        
2b5b0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
2b5c0 20 20 20 20 20 20 20 20 20 20 20 20 20 75 73 69               usi
2b5d0 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73 74 72 79  ng (MockRegistry
2b5e0 4b 65 79 20 73 75 62 4b 65 79 20 3d 20 52 65 67  Key subKey = Reg
2b5f0 69 73 74 72 79 48 65 6c 70 65 72 2e 4f 70 65 6e  istryHelper.Open
2b600 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20  SubKey(..       
2b610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b620 20 6b 65 79 2c 20 22 44 61 74 61 50 72 6f 76 69   key, "DataProvi
2b630 64 65 72 73 22 2c 20 74 72 75 65 2c 20 77 68 61  ders", true, wha
2b640 74 49 66 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a  tIf, verbose))..
2b650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b660 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
2b670 20 20 20 20 20 20 20 69 66 20 28 73 75 62 4b 65         if (subKe
2b680 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  y == null)..    
2b690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b6a0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
2b6b0 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72             error
2b6c0 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74   = String.Format
2b6d0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
2b6e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
2b6f0 63 6f 75 6c 64 20 6e 6f 74 20 6f 70 65 6e 20 72  could not open r
2b700 65 67 69 73 74 72 79 20 6b 65 79 3a 20 7b 30 7d  egistry key: {0}
2b710 5c 5c 44 61 74 61 50 72 6f 76 69 64 65 72 73 22  \\DataProviders"
2b720 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
2b730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6b                 k
2b740 65 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ey);....        
2b750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b760 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20  return false;.. 
2b770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b780 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
2b790 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69              Regi
2b7a0 73 74 72 79 48 65 6c 70 65 72 2e 44 65 6c 65 74  stryHelper.Delet
2b7b0 65 53 75 62 4b 65 79 54 72 65 65 28 0d 0a 20 20  eSubKeyTree(..  
2b7c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b7d0 20 20 20 20 20 20 73 75 62 4b 65 79 2c 20 70 61        subKey, pa
2b7e0 63 6b 61 67 65 2e 44 61 74 61 50 72 6f 76 69 64  ckage.DataProvid
2b7f0 65 72 49 64 2e 54 6f 53 74 72 69 6e 67 28 56 73  erId.ToString(Vs
2b800 49 64 46 6f 72 6d 61 74 29 2c 0d 0a 20 20 20 20  IdFormat),..    
2b810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b820 20 20 20 20 77 68 61 74 49 66 2c 20 76 65 72 62      whatIf, verb
2b830 6f 73 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ose);..         
2b840 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
2b850 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
2b860 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72         return tr
2b870 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  ue;..        }..
2b880 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
2b890 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b8a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b8b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b8c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b8d0 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69  /....        pri
2b8e0 76 61 74 65 20 73 74 61 74 69 63 20 62 6f 6f 6c  vate static bool
2b8f0 20 50 72 6f 63 65 73 73 56 73 44 61 74 61 50 72   ProcessVsDataPr
2b900 6f 76 69 64 65 72 28 0d 0a 20 20 20 20 20 20 20  ovider(..       
2b910 20 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72       MockRegistr
2b920 79 4b 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20  yKey rootKey,.. 
2b930 20 20 20 20 20 20 20 20 20 20 20 56 65 72 73 69             Versi
2b940 6f 6e 20 76 73 56 65 72 73 69 6f 6e 2c 0d 0a 20  on vsVersion,.. 
2b950 20 20 20 20 20 20 20 20 20 20 20 50 61 63 6b 61             Packa
2b960 67 65 20 70 61 63 6b 61 67 65 2c 0d 0a 20 20 20  ge package,..   
2b970 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20           object 
2b980 63 6c 69 65 6e 74 44 61 74 61 2c 0d 0a 20 20 20  clientData,..   
2b990 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 6f           bool wo
2b9a0 77 36 34 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  w64,..          
2b9b0 20 20 62 6f 6f 6c 20 74 68 72 6f 77 4f 6e 4d 69    bool throwOnMi
2b9c0 73 73 69 6e 67 2c 0d 0a 20 20 20 20 20 20 20 20  ssing,..        
2b9d0 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c      bool whatIf,
2b9e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
2b9f0 6f 6c 20 76 65 72 62 6f 73 65 2c 0d 0a 20 20 20  ol verbose,..   
2ba00 20 20 20 20 20 20 20 20 20 72 65 66 20 73 74 72           ref str
2ba10 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20 20 20  ing error..     
2ba20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
2ba30 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
2ba40 20 41 6e 79 50 61 69 72 3c 73 74 72 69 6e 67 2c   AnyPair<string,
2ba50 20 62 6f 6f 6c 3e 20 70 61 69 72 20 3d 20 63 6c   bool> pair = cl
2ba60 69 65 6e 74 44 61 74 61 20 61 73 20 41 6e 79 50  ientData as AnyP
2ba70 61 69 72 3c 73 74 72 69 6e 67 2c 20 62 6f 6f 6c  air<string, bool
2ba80 3e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  >;....          
2ba90 20 20 69 66 20 28 70 61 69 72 20 3d 3d 20 6e 75    if (pair == nu
2baa0 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
2bab0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
2bac0 20 20 20 20 65 72 72 6f 72 20 3d 20 22 69 6e 76      error = "inv
2bad0 61 6c 69 64 20 56 53 20 63 61 6c 6c 62 61 63 6b  alid VS callback
2bae0 20 64 61 74 61 22 3b 0d 0a 20 20 20 20 20 20 20   data";..       
2baf0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
2bb00 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20  false;..        
2bb10 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
2bb20 20 20 20 20 20 69 66 20 28 70 61 69 72 2e 59 29       if (pair.Y)
2bb30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
2bb40 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2bb50 20 72 65 74 75 72 6e 20 41 64 64 56 73 44 61 74   return AddVsDat
2bb60 61 50 72 6f 76 69 64 65 72 28 0d 0a 20 20 20 20  aProvider(..    
2bb70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bb80 72 6f 6f 74 4b 65 79 2c 20 76 73 56 65 72 73 69  rootKey, vsVersi
2bb90 6f 6e 2c 20 70 61 63 6b 61 67 65 2c 20 70 61 69  on, package, pai
2bba0 72 2e 58 2c 20 77 6f 77 36 34 2c 20 77 68 61 74  r.X, wow64, what
2bbb0 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  If,..           
2bbc0 20 20 20 20 20 20 20 20 20 76 65 72 62 6f 73 65           verbose
2bbd0 2c 20 72 65 66 20 65 72 72 6f 72 29 3b 0d 0a 20  , ref error);.. 
2bbe0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
2bbf0 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a            else..
2bc00 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
2bc10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
2bc20 65 74 75 72 6e 20 52 65 6d 6f 76 65 56 73 44 61  eturn RemoveVsDa
2bc30 74 61 50 72 6f 76 69 64 65 72 28 0d 0a 20 20 20  taProvider(..   
2bc40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bc50 20 72 6f 6f 74 4b 65 79 2c 20 76 73 56 65 72 73   rootKey, vsVers
2bc60 69 6f 6e 2c 20 70 61 63 6b 61 67 65 2c 20 77 6f  ion, package, wo
2bc70 77 36 34 2c 20 77 68 61 74 49 66 2c 20 76 65 72  w64, whatIf, ver
2bc80 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  bose,..         
2bc90 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20 65             ref e
2bca0 72 72 6f 72 29 3b 0d 0a 20 20 20 20 20 20 20 20  rror);..        
2bcb0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d      }..        }
2bcc0 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65  ..        #endre
2bcd0 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20  gion....        
2bce0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2bcf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2bd00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2bd10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2bd20 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
2bd30 20 20 20 23 72 65 67 69 6f 6e 20 56 69 73 75 61     #region Visua
2bd40 6c 20 53 74 75 64 69 6f 20 50 61 63 6b 61 67 65  l Studio Package
2bd50 20 48 61 6e 64 6c 69 6e 67 0d 0a 20 20 20 20 20   Handling..     
2bd60 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69     private stati
2bd70 63 20 76 6f 69 64 20 49 6e 69 74 69 61 6c 69 7a  c void Initializ
2bd80 65 56 73 50 61 63 6b 61 67 65 28 0d 0a 20 20 20  eVsPackage(..   
2bd90 20 20 20 20 20 20 20 20 20 72 65 66 20 50 61 63           ref Pac
2bda0 6b 61 67 65 20 70 61 63 6b 61 67 65 0d 0a 20 20  kage package..  
2bdb0 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
2bdc0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
2bdd0 20 20 20 20 69 66 20 28 70 61 63 6b 61 67 65 20      if (package 
2bde0 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
2bdf0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
2be00 20 20 20 20 20 20 20 20 20 70 61 63 6b 61 67 65           package
2be10 20 3d 20 6e 65 77 20 50 61 63 6b 61 67 65 28 29   = new Package()
2be20 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
2be30 20 20 20 20 20 70 61 63 6b 61 67 65 2e 41 64 6f       package.Ado
2be40 4e 65 74 54 65 63 68 6e 6f 6c 6f 67 79 49 64 20  NetTechnologyId 
2be50 3d 20 6e 65 77 20 47 75 69 64 28 0d 0a 20 20 20  = new Guid(..   
2be60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2be70 20 22 37 37 41 42 39 41 39 44 2d 37 38 42 39 2d   "77AB9A9D-78B9-
2be80 34 42 41 37 2d 39 31 41 43 2d 38 37 33 46 35 33  4BA7-91AC-873F53
2be90 33 38 46 31 44 32 22 29 3b 0d 0a 0d 0a 20 20 20  38F1D2");....   
2bea0 20 20 20 20 20 20 20 20 20 20 20 20 20 70 61 63               pac
2beb0 6b 61 67 65 2e 50 61 63 6b 61 67 65 49 64 20 3d  kage.PackageId =
2bec0 20 6e 65 77 20 47 75 69 64 28 0d 0a 20 20 20 20   new Guid(..    
2bed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bee0 22 44 43 42 45 36 43 38 44 2d 30 45 35 37 2d 34  "DCBE6C8D-0E57-4
2bef0 30 39 39 2d 41 31 38 33 2d 39 38 46 46 37 34 43  099-A183-98FF74C
2bf00 36 34 44 39 43 22 29 3b 0d 0a 0d 0a 20 20 20 20  64D9C");....    
2bf10 20 20 20 20 20 20 20 20 20 20 20 20 70 61 63 6b              pack
2bf20 61 67 65 2e 53 65 72 76 69 63 65 49 64 20 3d 20  age.ServiceId = 
2bf30 6e 65 77 20 47 75 69 64 28 0d 0a 20 20 20 20 20  new Guid(..     
2bf40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
2bf50 44 43 42 45 36 43 38 44 2d 30 45 35 37 2d 34 30  DCBE6C8D-0E57-40
2bf60 39 39 2d 41 31 38 33 2d 39 38 46 46 37 34 43 36  99-A183-98FF74C6
2bf70 34 44 39 44 22 29 3b 0d 0a 0d 0a 20 20 20 20 20  4D9D");....     
2bf80 20 20 20 20 20 20 20 20 20 20 20 70 61 63 6b 61             packa
2bf90 67 65 2e 44 61 74 61 53 6f 75 72 63 65 49 64 20  ge.DataSourceId 
2bfa0 3d 20 6e 65 77 20 47 75 69 64 28 0d 0a 20 20 20  = new Guid(..   
2bfb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bfc0 20 22 30 45 42 41 41 42 36 45 2d 43 41 38 30 2d   "0EBAAB6E-CA80-
2bfd0 34 42 34 41 2d 38 44 44 46 2d 43 42 45 36 42 46  4B4A-8DDF-CBE6BF
2bfe0 30 35 38 43 37 31 22 29 3b 0d 0a 0d 0a 20 20 20  058C71");....   
2bff0 20 20 20 20 20 20 20 20 20 20 20 20 20 70 61 63               pac
2c000 6b 61 67 65 2e 44 61 74 61 50 72 6f 76 69 64 65  kage.DataProvide
2c010 72 49 64 20 3d 20 6e 65 77 20 47 75 69 64 28 0d  rId = new Guid(.
2c020 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2c030 20 20 20 20 20 22 30 45 42 41 41 42 36 45 2d 43       "0EBAAB6E-C
2c040 41 38 30 2d 34 42 34 41 2d 38 44 44 46 2d 43 42  A80-4B4A-8DDF-CB
2c050 45 36 42 46 30 35 38 43 37 30 22 29 3b 0d 0a 20  E6BF058C70");.. 
2c060 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
2c070 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
2c080 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
2c090 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c0a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c0b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c0c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
2c0d0 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74        private st
2c0e0 61 74 69 63 20 62 6f 6f 6c 20 41 64 64 56 73 50  atic bool AddVsP
2c0f0 61 63 6b 61 67 65 28 0d 0a 20 20 20 20 20 20 20  ackage(..       
2c100 20 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72       MockRegistr
2c110 79 4b 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20  yKey rootKey,.. 
2c120 20 20 20 20 20 20 20 20 20 20 20 56 65 72 73 69             Versi
2c130 6f 6e 20 76 73 56 65 72 73 69 6f 6e 2c 0d 0a 20  on vsVersion,.. 
2c140 20 20 20 20 20 20 20 20 20 20 20 50 61 63 6b 61             Packa
2c150 67 65 20 70 61 63 6b 61 67 65 2c 0d 0a 20 20 20  ge package,..   
2c160 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
2c170 66 69 6c 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20  fileName,..     
2c180 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36         bool wow6
2c190 34 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  4,..            
2c1a0 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20  bool whatIf,..  
2c1b0 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76            bool v
2c1c0 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20  erbose,..       
2c1d0 20 20 20 20 20 72 65 66 20 73 74 72 69 6e 67 20       ref string 
2c1e0 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 20  error..         
2c1f0 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d     )..        {.
2c200 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
2c210 28 76 73 56 65 72 73 69 6f 6e 20 3d 3d 20 6e 75  (vsVersion == nu
2c220 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
2c230 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
2c240 20 20 20 20 65 72 72 6f 72 20 3d 20 22 69 6e 76      error = "inv
2c250 61 6c 69 64 20 56 53 20 76 65 72 73 69 6f 6e 22  alid VS version"
2c260 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
2c270 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
2c280 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
2c290 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
2c2a0 66 20 28 70 61 63 6b 61 67 65 20 3d 3d 20 6e 75  f (package == nu
2c2b0 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
2c2c0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
2c2d0 20 20 20 20 65 72 72 6f 72 20 3d 20 22 69 6e 76      error = "inv
2c2e0 61 6c 69 64 20 56 53 20 70 61 63 6b 61 67 65 22  alid VS package"
2c2f0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
2c300 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
2c310 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
2c320 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  ...            s
2c330 74 72 69 6e 67 20 6b 65 79 4e 61 6d 65 20 3d 20  tring keyName = 
2c340 47 65 74 56 73 4b 65 79 4e 61 6d 65 28 76 73 56  GetVsKeyName(vsV
2c350 65 72 73 69 6f 6e 2c 20 77 6f 77 36 34 29 3b 0d  ersion, wow64);.
2c360 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 75  ...            u
2c370 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73 74  sing (MockRegist
2c380 72 79 4b 65 79 20 6b 65 79 20 3d 20 52 65 67 69  ryKey key = Regi
2c390 73 74 72 79 48 65 6c 70 65 72 2e 4f 70 65 6e 53  stryHelper.OpenS
2c3a0 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20  ubKey(..        
2c3b0 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74              root
2c3c0 4b 65 79 2c 20 6b 65 79 4e 61 6d 65 2c 20 66 61  Key, keyName, fa
2c3d0 6c 73 65 2c 20 77 68 61 74 49 66 2c 20 76 65 72  lse, whatIf, ver
2c3e0 62 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20  bose))..        
2c3f0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
2c400 20 20 20 20 20 20 20 69 66 20 28 6b 65 79 20 3d         if (key =
2c410 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
2c420 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
2c430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c440 65 72 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46  error = String.F
2c450 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
2c460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c470 22 63 6f 75 6c 64 20 6e 6f 74 20 6f 70 65 6e 20  "could not open 
2c480 72 65 67 69 73 74 72 79 20 6b 65 79 3a 20 7b 30  registry key: {0
2c490 7d 5c 5c 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20  }\\{1}",..      
2c4a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c4b0 20 20 72 6f 6f 74 4b 65 79 2c 20 6b 65 79 4e 61    rootKey, keyNa
2c4c0 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  me);....        
2c4d0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
2c4e0 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20  rn false;..     
2c4f0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
2c500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c510 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73  using (MockRegis
2c520 74 72 79 4b 65 79 20 73 75 62 4b 65 79 20 3d 20  tryKey subKey = 
2c530 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 4f  RegistryHelper.O
2c540 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20 20  penSubKey(..    
2c550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c560 20 20 20 20 6b 65 79 2c 20 22 50 61 63 6b 61 67      key, "Packag
2c570 65 73 22 2c 20 74 72 75 65 2c 20 77 68 61 74 49  es", true, whatI
2c580 66 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a 20 20  f, verbose))..  
2c590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
2c5a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2c5b0 20 20 20 20 20 69 66 20 28 73 75 62 4b 65 79 20       if (subKey 
2c5c0 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
2c5d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
2c5e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2c5f0 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
2c600 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d   String.Format(.
2c610 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2c620 20 20 20 20 20 20 20 20 20 20 20 20 20 22 63 6f               "co
2c630 75 6c 64 20 6e 6f 74 20 6f 70 65 6e 20 72 65 67  uld not open reg
2c640 69 73 74 72 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c  istry key: {0}\\
2c650 50 61 63 6b 61 67 65 73 22 2c 0d 0a 20 20 20 20  Packages",..    
2c660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c670 20 20 20 20 20 20 20 20 6b 65 79 29 3b 0d 0a 0d          key);...
2c680 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2c690 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
2c6a0 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20  false;..        
2c6b0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
2c6c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2c6d0 20 20 20 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b       using (Mock
2c6e0 52 65 67 69 73 74 72 79 4b 65 79 20 70 61 63 6b  RegistryKey pack
2c6f0 61 67 65 4b 65 79 20 3d 0d 0a 20 20 20 20 20 20  ageKey =..      
2c700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c710 20 20 20 20 20 20 52 65 67 69 73 74 72 79 48 65        RegistryHe
2c720 6c 70 65 72 2e 43 72 65 61 74 65 53 75 62 4b 65  lper.CreateSubKe
2c730 79 28 73 75 62 4b 65 79 2c 0d 0a 20 20 20 20 20  y(subKey,..     
2c740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c750 20 20 20 20 20 20 20 70 61 63 6b 61 67 65 2e 50         package.P
2c760 61 63 6b 61 67 65 49 64 2e 54 6f 53 74 72 69 6e  ackageId.ToStrin
2c770 67 28 56 73 49 64 46 6f 72 6d 61 74 29 2c 20 77  g(VsIdFormat), w
2c780 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20  hatIf,..        
2c790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c7a0 20 20 20 20 76 65 72 62 6f 73 65 29 29 0d 0a 20      verbose)).. 
2c7b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c7c0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
2c7d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
2c7e0 20 28 70 61 63 6b 61 67 65 4b 65 79 20 3d 3d 20   (packageKey == 
2c7f0 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
2c800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
2c810 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2c820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72                er
2c830 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72  ror = String.For
2c840 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
2c850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c860 20 20 20 20 20 20 22 63 6f 75 6c 64 20 6e 6f 74        "could not
2c870 20 63 72 65 61 74 65 20 72 65 67 69 73 74 72 79   create registry
2c880 20 6b 65 79 3a 20 7b 30 7d 5c 5c 7b 31 7d 22 2c   key: {0}\\{1}",
2c890 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2c8a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c8b0 20 20 6b 65 79 2c 20 70 61 63 6b 61 67 65 2e 50    key, package.P
2c8c0 61 63 6b 61 67 65 49 64 2e 54 6f 53 74 72 69 6e  ackageId.ToStrin
2c8d0 67 28 56 73 49 64 46 6f 72 6d 61 74 29 29 3b 0d  g(VsIdFormat));.
2c8e0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
2c8f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
2c900 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20  eturn false;..  
2c910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c920 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
2c930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c940 20 20 20 52 65 67 69 73 74 72 79 48 65 6c 70 65     RegistryHelpe
2c950 72 2e 53 65 74 56 61 6c 75 65 28 70 61 63 6b 61  r.SetValue(packa
2c960 67 65 4b 65 79 2c 20 6e 75 6c 6c 2c 0d 0a 20 20  geKey, null,..  
2c970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c980 20 20 20 20 20 20 20 20 20 20 53 74 72 69 6e 67            String
2c990 2e 46 6f 72 6d 61 74 28 22 7b 30 7d 20 44 65 73  .Format("{0} Des
2c9a0 69 67 6e 65 72 20 50 61 63 6b 61 67 65 22 2c 20  igner Package", 
2c9b0 50 72 6f 6a 65 63 74 4e 61 6d 65 29 2c 0d 0a 20  ProjectName),.. 
2c9c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c9d0 20 20 20 20 20 20 20 20 20 20 20 77 68 61 74 49             whatI
2c9e0 66 2c 20 76 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a  f, verbose);....
2c9f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ca00 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79          Registry
2ca10 48 65 6c 70 65 72 2e 53 65 74 56 61 6c 75 65 28  Helper.SetValue(
2ca20 70 61 63 6b 61 67 65 4b 65 79 2c 20 22 43 6c 61  packageKey, "Cla
2ca30 73 73 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ss",..          
2ca40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ca50 20 20 22 53 51 4c 69 74 65 2e 44 65 73 69 67 6e    "SQLite.Design
2ca60 65 72 2e 53 51 4c 69 74 65 50 61 63 6b 61 67 65  er.SQLitePackage
2ca70 22 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f  ", whatIf, verbo
2ca80 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  se);....        
2ca90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2caa0 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 53  RegistryHelper.S
2cab0 65 74 56 61 6c 75 65 28 70 61 63 6b 61 67 65 4b  etValue(packageK
2cac0 65 79 2c 20 22 43 6f 64 65 42 61 73 65 22 2c 0d  ey, "CodeBase",.
2cad0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2cae0 20 20 20 20 20 20 20 20 20 20 20 20 20 66 69 6c               fil
2caf0 65 4e 61 6d 65 2c 20 77 68 61 74 49 66 2c 20 76  eName, whatIf, v
2cb00 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20  erbose);....    
2cb10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cb20 20 20 20 20 52 65 67 69 73 74 72 79 48 65 6c 70      RegistryHelp
2cb30 65 72 2e 53 65 74 56 61 6c 75 65 28 70 61 63 6b  er.SetValue(pack
2cb40 61 67 65 4b 65 79 2c 20 22 49 44 22 2c 20 34 30  ageKey, "ID", 40
2cb50 30 2c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20  0, whatIf,..    
2cb60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cb70 20 20 20 20 20 20 20 20 76 65 72 62 6f 73 65 29          verbose)
2cb80 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
2cb90 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67               Reg
2cba0 69 73 74 72 79 48 65 6c 70 65 72 2e 53 65 74 56  istryHelper.SetV
2cbb0 61 6c 75 65 28 70 61 63 6b 61 67 65 4b 65 79 2c  alue(packageKey,
2cbc0 20 22 49 6e 70 72 6f 63 53 65 72 76 65 72 33 32   "InprocServer32
2cbd0 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
2cbe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cbf0 50 61 74 68 2e 43 6f 6d 62 69 6e 65 28 45 6e 76  Path.Combine(Env
2cc00 69 72 6f 6e 6d 65 6e 74 2e 53 79 73 74 65 6d 44  ironment.SystemD
2cc10 69 72 65 63 74 6f 72 79 2c 0d 0a 20 20 20 20 20  irectory,..     
2cc20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cc30 20 20 20 20 20 20 20 20 20 20 20 22 6d 73 63 6f             "msco
2cc40 72 65 65 2e 64 6c 6c 22 29 2c 20 77 68 61 74 49  ree.dll"), whatI
2cc50 66 2c 20 76 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a  f, verbose);....
2cc60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cc70 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79          Registry
2cc80 48 65 6c 70 65 72 2e 53 65 74 56 61 6c 75 65 28  Helper.SetValue(
2cc90 70 61 63 6b 61 67 65 4b 65 79 2c 20 22 43 6f 6d  packageKey, "Com
2cca0 70 61 6e 79 4e 61 6d 65 22 2c 0d 0a 20 20 20 20  panyName",..    
2ccb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ccc0 20 20 20 20 20 20 20 20 22 68 74 74 70 3a 2f 2f          "http://
2ccd0 73 79 73 74 65 6d 2e 64 61 74 61 2e 73 71 6c 69  system.data.sqli
2cce0 74 65 2e 6f 72 67 2f 22 2c 20 77 68 61 74 49 66  te.org/", whatIf
2ccf0 2c 20 76 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20  , verbose);.... 
2cd00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cd10 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79 48         RegistryH
2cd20 65 6c 70 65 72 2e 53 65 74 56 61 6c 75 65 28 70  elper.SetValue(p
2cd30 61 63 6b 61 67 65 4b 65 79 2c 20 22 4d 69 6e 45  ackageKey, "MinE
2cd40 64 69 74 69 6f 6e 22 2c 0d 0a 20 20 20 20 20 20  dition",..      
2cd50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cd60 20 20 20 20 20 20 22 73 74 61 6e 64 61 72 64 22        "standard"
2cd70 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73  , whatIf, verbos
2cd80 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e);....         
2cd90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52                 R
2cda0 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 53 65  egistryHelper.Se
2cdb0 74 56 61 6c 75 65 28 70 61 63 6b 61 67 65 4b 65  tValue(packageKe
2cdc0 79 2c 20 22 50 72 6f 64 75 63 74 4e 61 6d 65 22  y, "ProductName"
2cdd0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
2cde0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53                 S
2cdf0 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 22 7b 30  tring.Format("{0
2ce00 7d 20 44 65 73 69 67 6e 65 72 20 50 61 63 6b 61  } Designer Packa
2ce10 67 65 22 2c 20 50 72 6f 6a 65 63 74 4e 61 6d 65  ge", ProjectName
2ce20 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
2ce30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ce40 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29  whatIf, verbose)
2ce50 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
2ce60 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67               Reg
2ce70 69 73 74 72 79 48 65 6c 70 65 72 2e 53 65 74 56  istryHelper.SetV
2ce80 61 6c 75 65 28 70 61 63 6b 61 67 65 4b 65 79 2c  alue(packageKey,
2ce90 20 22 50 72 6f 64 75 63 74 56 65 72 73 69 6f 6e   "ProductVersion
2cea0 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
2ceb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cec0 22 31 2e 30 22 2c 20 77 68 61 74 49 66 2c 20 76  "1.0", whatIf, v
2ced0 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20  erbose);....    
2cee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cef0 20 20 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52      using (MockR
2cf00 65 67 69 73 74 72 79 4b 65 79 20 74 6f 6f 6c 62  egistryKey toolb
2cf10 6f 78 4b 65 79 20 3d 0d 0a 20 20 20 20 20 20 20  oxKey =..       
2cf20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cf30 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72           Registr
2cf40 79 48 65 6c 70 65 72 2e 43 72 65 61 74 65 53 75  yHelper.CreateSu
2cf50 62 4b 65 79 28 70 61 63 6b 61 67 65 4b 65 79 2c  bKey(packageKey,
2cf60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2cf70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cf80 20 20 22 54 6f 6f 6c 62 6f 78 22 2c 20 77 68 61    "Toolbox", wha
2cf90 74 49 66 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a  tIf, verbose))..
2cfa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cfb0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
2cfc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cfd0 20 20 20 20 20 20 20 69 66 20 28 74 6f 6f 6c 62         if (toolb
2cfe0 6f 78 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  oxKey == null)..
2cff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d000 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
2d010 20 20 20 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 20 20 20 20 65                 e
2d030 72 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f  rror = String.Fo
2d040 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
2d050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d060 20 20 20 20 20 20 20 20 20 20 20 22 63 6f 75 6c             "coul
2d070 64 20 6e 6f 74 20 63 72 65 61 74 65 20 72 65 67  d not create reg
2d080 69 73 74 72 79 20 6b 65 79 3a 20 22 20 2b 0d 0a  istry key: " +..
2d090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d0a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d0b0 20 20 20 20 22 7b 30 7d 5c 5c 54 6f 6f 6c 62 6f      "{0}\\Toolbo
2d0c0 78 22 2c 20 70 61 63 6b 61 67 65 4b 65 79 29 3b  x", packageKey);
2d0d0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2d0e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d0f0 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
2d100 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
2d110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
2d120 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2d130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d140 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 53  RegistryHelper.S
2d150 65 74 56 61 6c 75 65 28 0d 0a 20 20 20 20 20 20  etValue(..      
2d160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d170 20 20 20 20 20 20 20 20 20 20 74 6f 6f 6c 62 6f            toolbo
2d180 78 4b 65 79 2c 20 22 44 65 66 61 75 6c 74 20 49  xKey, "Default I
2d190 74 65 6d 73 22 2c 20 33 2c 20 77 68 61 74 49 66  tems", 3, whatIf
2d1a0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
2d1b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d1c0 20 20 20 76 65 72 62 6f 73 65 29 3b 0d 0a 20 20     verbose);..  
2d1d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d1e0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
2d1f0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
2d200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d210 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
2d220 20 20 20 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b       using (Mock
2d230 52 65 67 69 73 74 72 79 4b 65 79 20 73 75 62 4b  RegistryKey subK
2d240 65 79 20 3d 20 52 65 67 69 73 74 72 79 48 65 6c  ey = RegistryHel
2d250 70 65 72 2e 4f 70 65 6e 53 75 62 4b 65 79 28 0d  per.OpenSubKey(.
2d260 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2d270 20 20 20 20 20 20 20 20 20 6b 65 79 2c 20 22 4d           key, "M
2d280 65 6e 75 73 22 2c 20 74 72 75 65 2c 20 77 68 61  enus", true, wha
2d290 74 49 66 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a  tIf, verbose))..
2d2a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d2b0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
2d2c0 20 20 20 20 20 20 20 69 66 20 28 73 75 62 4b 65         if (subKe
2d2d0 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  y == null)..    
2d2e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d2f0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
2d300 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72             error
2d310 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74   = String.Format
2d320 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
2d330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
2d340 63 6f 75 6c 64 20 6e 6f 74 20 6f 70 65 6e 20 72  could not open r
2d350 65 67 69 73 74 72 79 20 6b 65 79 3a 20 7b 30 7d  egistry key: {0}
2d360 5c 5c 4d 65 6e 75 73 22 2c 0d 0a 20 20 20 20 20  \\Menus",..     
2d370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d380 20 20 20 20 20 20 20 6b 65 79 29 3b 0d 0a 0d 0a         key);....
2d390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d3a0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
2d3b0 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alse;..         
2d3c0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
2d3d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d3e0 20 20 20 20 52 65 67 69 73 74 72 79 48 65 6c 70      RegistryHelp
2d3f0 65 72 2e 53 65 74 56 61 6c 75 65 28 0d 0a 20 20  er.SetValue(..  
2d400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d410 20 20 20 20 20 20 73 75 62 4b 65 79 2c 20 70 61        subKey, pa
2d420 63 6b 61 67 65 2e 50 61 63 6b 61 67 65 49 64 2e  ckage.PackageId.
2d430 54 6f 53 74 72 69 6e 67 28 56 73 49 64 46 6f 72  ToString(VsIdFor
2d440 6d 61 74 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  mat),..         
2d450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
2d460 2c 20 31 30 30 30 2c 20 33 22 2c 20 77 68 61 74  , 1000, 3", what
2d470 49 66 2c 20 76 65 72 62 6f 73 65 29 3b 0d 0a 20  If, verbose);.. 
2d480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
2d490 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2d4a0 20 20 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52      using (MockR
2d4b0 65 67 69 73 74 72 79 4b 65 79 20 73 75 62 4b 65  egistryKey subKe
2d4c0 79 20 3d 20 52 65 67 69 73 74 72 79 48 65 6c 70  y = RegistryHelp
2d4d0 65 72 2e 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a  er.OpenSubKey(..
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 6b 65 79 2c 20 22 53 65          key, "Se
2d500 72 76 69 63 65 73 22 2c 20 74 72 75 65 2c 20 77  rvices", true, w
2d510 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 29  hatIf, verbose))
2d520 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2d530 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
2d540 20 20 20 20 20 20 20 20 20 69 66 20 28 73 75 62           if (sub
2d550 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  Key == null)..  
2d560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d570 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
2d580 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
2d590 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d  or = String.Form
2d5a0 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
2d5b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d5c0 20 22 63 6f 75 6c 64 20 6e 6f 74 20 6f 70 65 6e   "could not open
2d5d0 20 72 65 67 69 73 74 72 79 20 6b 65 79 3a 20 7b   registry key: {
2d5e0 30 7d 5c 5c 53 65 72 76 69 63 65 73 22 2c 0d 0a  0}\\Services",..
2d5f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d600 20 20 20 20 20 20 20 20 20 20 20 20 6b 65 79 29              key)
2d610 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
2d620 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
2d630 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20  urn false;..    
2d640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d650 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
2d660 20 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28           using (
2d670 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20  MockRegistryKey 
2d680 73 65 72 76 69 63 65 4b 65 79 20 3d 0d 0a 20 20  serviceKey =..  
2d690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d6a0 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74            Regist
2d6b0 72 79 48 65 6c 70 65 72 2e 43 72 65 61 74 65 53  ryHelper.CreateS
2d6c0 75 62 4b 65 79 28 73 75 62 4b 65 79 2c 0d 0a 20  ubKey(subKey,.. 
2d6d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d6e0 20 20 20 20 20 20 20 20 20 20 20 70 61 63 6b 61             packa
2d6f0 67 65 2e 53 65 72 76 69 63 65 49 64 2e 54 6f 53  ge.ServiceId.ToS
2d700 74 72 69 6e 67 28 56 73 49 64 46 6f 72 6d 61 74  tring(VsIdFormat
2d710 29 2c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20  ), whatIf,..    
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 76 65 72 62 6f 73 65 29          verbose)
2d740 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
2d750 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
2d760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d770 20 20 69 66 20 28 73 65 72 76 69 63 65 4b 65 79    if (serviceKey
2d780 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
2d790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d7a0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
2d7b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d7c0 20 20 65 72 72 6f 72 20 3d 20 53 74 72 69 6e 67    error = String
2d7d0 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  .Format(..      
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 20 20 20 22 63 6f 75 6c 64            "could
2d800 20 6e 6f 74 20 63 72 65 61 74 65 20 72 65 67 69   not create regi
2d810 73 74 72 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c 7b  stry key: {0}\\{
2d820 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  1}",..          
2d830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d840 20 20 20 20 20 20 6b 65 79 2c 20 70 61 63 6b 61        key, packa
2d850 67 65 2e 53 65 72 76 69 63 65 49 64 2e 54 6f 53  ge.ServiceId.ToS
2d860 74 72 69 6e 67 28 56 73 49 64 46 6f 72 6d 61 74  tring(VsIdFormat
2d870 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ));....         
2d880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d890 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
2d8a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2d8b0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
2d8c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d8d0 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79 48         RegistryH
2d8e0 65 6c 70 65 72 2e 53 65 74 56 61 6c 75 65 28 73  elper.SetValue(s
2d8f0 65 72 76 69 63 65 4b 65 79 2c 20 6e 75 6c 6c 2c  erviceKey, null,
2d900 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2d910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 61                pa
2d920 63 6b 61 67 65 2e 50 61 63 6b 61 67 65 49 64 2e  ckage.PackageId.
2d930 54 6f 53 74 72 69 6e 67 28 56 73 49 64 46 6f 72  ToString(VsIdFor
2d940 6d 61 74 29 2c 20 77 68 61 74 49 66 2c 0d 0a 20  mat), whatIf,.. 
2d950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d960 20 20 20 20 20 20 20 20 20 20 20 76 65 72 62 6f             verbo
2d970 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  se);....        
2d980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d990 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 53  RegistryHelper.S
2d9a0 65 74 56 61 6c 75 65 28 73 65 72 76 69 63 65 4b  etValue(serviceK
2d9b0 65 79 2c 20 22 4e 61 6d 65 22 2c 0d 0a 20 20 20  ey, "Name",..   
2d9c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d9d0 20 20 20 20 20 20 20 20 20 53 74 72 69 6e 67 2e           String.
2d9e0 46 6f 72 6d 61 74 28 22 7b 30 7d 20 44 65 73 69  Format("{0} Desi
2d9f0 67 6e 65 72 20 53 65 72 76 69 63 65 22 2c 20 50  gner Service", P
2da00 72 6f 6a 65 63 74 4e 61 6d 65 29 2c 0d 0a 20 20  rojectName),..  
2da10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2da20 20 20 20 20 20 20 20 20 20 20 77 68 61 74 49 66            whatIf
2da30 2c 20 76 65 72 62 6f 73 65 29 3b 0d 0a 20 20 20  , verbose);..   
2da40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2da50 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
2da60 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
2da70 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
2da80 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b      return true;
2da90 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
2daa0 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
2dab0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2dac0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2dad0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2dae0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
2daf0 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
2db00 65 20 73 74 61 74 69 63 20 62 6f 6f 6c 20 52 65  e static bool Re
2db10 6d 6f 76 65 56 73 50 61 63 6b 61 67 65 28 0d 0a  moveVsPackage(..
2db20 20 20 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b              Mock
2db30 52 65 67 69 73 74 72 79 4b 65 79 20 72 6f 6f 74  RegistryKey root
2db40 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  Key,..          
2db50 20 20 56 65 72 73 69 6f 6e 20 76 73 56 65 72 73    Version vsVers
2db60 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ion,..          
2db70 20 20 50 61 63 6b 61 67 65 20 70 61 63 6b 61 67    Package packag
2db80 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
2db90 62 6f 6f 6c 20 77 6f 77 36 34 2c 0d 0a 20 20 20  bool wow64,..   
2dba0 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 74 68           bool th
2dbb0 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 2c 0d 0a 20  rowOnMissing,.. 
2dbc0 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
2dbd0 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20  whatIf,..       
2dbe0 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73       bool verbos
2dbf0 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
2dc00 72 65 66 20 73 74 72 69 6e 67 20 65 72 72 6f 72  ref string error
2dc10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d  ..            ).
2dc20 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
2dc30 20 20 20 20 20 20 20 20 69 66 20 28 76 73 56 65          if (vsVe
2dc40 72 73 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  rsion == null)..
2dc50 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
2dc60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
2dc70 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64 20  rror = "invalid 
2dc80 56 53 20 76 65 72 73 69 6f 6e 22 3b 0d 0a 20 20  VS version";..  
2dc90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
2dca0 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20  turn false;..   
2dcb0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
2dcc0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 70 61            if (pa
2dcd0 63 6b 61 67 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  ckage == null)..
2dce0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
2dcf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
2dd00 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64 20  rror = "invalid 
2dd10 56 53 20 70 61 63 6b 61 67 65 22 3b 0d 0a 20 20  VS package";..  
2dd20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
2dd30 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20  turn false;..   
2dd40 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
2dd50 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
2dd60 20 6b 65 79 4e 61 6d 65 20 3d 20 47 65 74 56 73   keyName = GetVs
2dd70 4b 65 79 4e 61 6d 65 28 76 73 56 65 72 73 69 6f  KeyName(vsVersio
2dd80 6e 2c 20 77 6f 77 36 34 29 3b 0d 0a 0d 0a 20 20  n, wow64);....  
2dd90 20 20 20 20 20 20 20 20 20 20 75 73 69 6e 67 20            using 
2dda0 28 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79  (MockRegistryKey
2ddb0 20 6b 65 79 20 3d 20 52 65 67 69 73 74 72 79 48   key = RegistryH
2ddc0 65 6c 70 65 72 2e 4f 70 65 6e 53 75 62 4b 65 79  elper.OpenSubKey
2ddd0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
2dde0 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20         rootKey, 
2ddf0 6b 65 79 4e 61 6d 65 2c 20 66 61 6c 73 65 2c 20  keyName, false, 
2de00 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29  whatIf, verbose)
2de10 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
2de20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2de30 20 20 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75 6c    if (key == nul
2de40 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
2de50 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
2de60 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72             error
2de70 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74   = String.Format
2de80 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
2de90 20 20 20 20 20 20 20 20 20 20 20 22 63 6f 75 6c             "coul
2dea0 64 20 6e 6f 74 20 6f 70 65 6e 20 72 65 67 69 73  d not open regis
2deb0 74 72 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c 7b 31  try key: {0}\\{1
2dec0 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }",..           
2ded0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f               roo
2dee0 74 4b 65 79 2c 20 6b 65 79 4e 61 6d 65 29 3b 0d  tKey, keyName);.
2def0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
2df00 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
2df10 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lse;..          
2df20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
2df30 20 20 20 20 20 20 20 20 20 20 20 75 73 69 6e 67             using
2df40 20 28 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65   (MockRegistryKe
2df50 79 20 73 75 62 4b 65 79 20 3d 20 52 65 67 69 73  y subKey = Regis
2df60 74 72 79 48 65 6c 70 65 72 2e 4f 70 65 6e 53 75  tryHelper.OpenSu
2df70 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20  bKey(..         
2df80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6b                 k
2df90 65 79 2c 20 22 50 61 63 6b 61 67 65 73 22 2c 20  ey, "Packages", 
2dfa0 74 72 75 65 2c 20 77 68 61 74 49 66 2c 20 76 65  true, whatIf, ve
2dfb0 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 20  rbose))..       
2dfc0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
2dfd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2dfe0 69 66 20 28 73 75 62 4b 65 79 20 3d 3d 20 6e 75  if (subKey == nu
2dff0 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
2e000 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
2e010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e020 20 20 20 20 65 72 72 6f 72 20 3d 20 53 74 72 69      error = Stri
2e030 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ng.Format(..    
2e040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e050 20 20 20 20 20 20 20 20 22 63 6f 75 6c 64 20 6e          "could n
2e060 6f 74 20 6f 70 65 6e 20 72 65 67 69 73 74 72 79  ot open registry
2e070 20 6b 65 79 3a 20 7b 30 7d 5c 5c 50 61 63 6b 61   key: {0}\\Packa
2e080 67 65 73 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  ges",..         
2e090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e0a0 20 20 20 6b 65 79 29 3b 0d 0a 0d 0a 20 20 20 20     key);....    
2e0b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e0c0 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
2e0d0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
2e0e0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
2e0f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e100 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 44  RegistryHelper.D
2e110 65 6c 65 74 65 53 75 62 4b 65 79 54 72 65 65 28  eleteSubKeyTree(
2e120 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2e130 20 20 20 20 20 20 20 20 20 20 73 75 62 4b 65 79            subKey
2e140 2c 20 70 61 63 6b 61 67 65 2e 50 61 63 6b 61 67  , package.Packag
2e150 65 49 64 2e 54 6f 53 74 72 69 6e 67 28 56 73 49  eId.ToString(VsI
2e160 64 46 6f 72 6d 61 74 29 2c 0d 0a 20 20 20 20 20  dFormat),..     
2e170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e180 20 20 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f     whatIf, verbo
2e190 73 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  se);..          
2e1a0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
2e1b0 20 20 20 20 20 20 20 20 20 20 20 75 73 69 6e 67             using
2e1c0 20 28 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65   (MockRegistryKe
2e1d0 79 20 73 75 62 4b 65 79 20 3d 20 52 65 67 69 73  y subKey = Regis
2e1e0 74 72 79 48 65 6c 70 65 72 2e 4f 70 65 6e 53 75  tryHelper.OpenSu
2e1f0 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20  bKey(..         
2e200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6b                 k
2e210 65 79 2c 20 22 4d 65 6e 75 73 22 2c 20 74 72 75  ey, "Menus", tru
2e220 65 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f  e, whatIf, verbo
2e230 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  se))..          
2e240 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
2e250 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
2e260 28 73 75 62 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29  (subKey == null)
2e270 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2e280 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
2e290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e2a0 20 65 72 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e   error = String.
2e2b0 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
2e2c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e2d0 20 20 20 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20       "could not 
2e2e0 6f 70 65 6e 20 72 65 67 69 73 74 72 79 20 6b 65  open registry ke
2e2f0 79 3a 20 7b 30 7d 5c 5c 4d 65 6e 75 73 22 2c 0d  y: {0}\\Menus",.
2e300 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2e310 20 20 20 20 20 20 20 20 20 20 20 20 20 6b 65 79               key
2e320 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
2e330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
2e340 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20  turn false;..   
2e350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e360 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
2e370 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74            Regist
2e380 72 79 48 65 6c 70 65 72 2e 44 65 6c 65 74 65 56  ryHelper.DeleteV
2e390 61 6c 75 65 28 0d 0a 20 20 20 20 20 20 20 20 20  alue(..         
2e3a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
2e3b0 75 62 4b 65 79 2c 20 70 61 63 6b 61 67 65 2e 50  ubKey, package.P
2e3c0 61 63 6b 61 67 65 49 64 2e 54 6f 53 74 72 69 6e  ackageId.ToStrin
2e3d0 67 28 56 73 49 64 46 6f 72 6d 61 74 29 2c 0d 0a  g(VsIdFormat),..
2e3e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e3f0 20 20 20 20 20 20 20 20 74 68 72 6f 77 4f 6e 4d          throwOnM
2e400 69 73 73 69 6e 67 2c 20 77 68 61 74 49 66 2c 20  issing, whatIf, 
2e410 76 65 72 62 6f 73 65 29 3b 0d 0a 20 20 20 20 20  verbose);..     
2e420 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
2e430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e440 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73  using (MockRegis
2e450 74 72 79 4b 65 79 20 73 75 62 4b 65 79 20 3d 20  tryKey subKey = 
2e460 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 4f  RegistryHelper.O
2e470 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20 20  penSubKey(..    
2e480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e490 20 20 20 20 6b 65 79 2c 20 22 53 65 72 76 69 63      key, "Servic
2e4a0 65 73 22 2c 20 74 72 75 65 2c 20 77 68 61 74 49  es", true, whatI
2e4b0 66 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a 20 20  f, verbose))..  
2e4c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
2e4d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2e4e0 20 20 20 20 20 69 66 20 28 73 75 62 4b 65 79 20       if (subKey 
2e4f0 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
2e500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
2e510 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2e520 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
2e530 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d   String.Format(.
2e540 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2e550 20 20 20 20 20 20 20 20 20 20 20 20 20 22 63 6f               "co
2e560 75 6c 64 20 6e 6f 74 20 6f 70 65 6e 20 72 65 67  uld not open reg
2e570 69 73 74 72 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c  istry key: {0}\\
2e580 53 65 72 76 69 63 65 73 22 2c 0d 0a 20 20 20 20  Services",..    
2e590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e5a0 20 20 20 20 20 20 20 20 6b 65 79 29 3b 0d 0a 0d          key);...
2e5b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2e5c0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
2e5d0 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20  false;..        
2e5e0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
2e5f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2e600 20 20 20 20 20 52 65 67 69 73 74 72 79 48 65 6c       RegistryHel
2e610 70 65 72 2e 44 65 6c 65 74 65 53 75 62 4b 65 79  per.DeleteSubKey
2e620 54 72 65 65 28 0d 0a 20 20 20 20 20 20 20 20 20  Tree(..         
2e630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
2e640 75 62 4b 65 79 2c 20 70 61 63 6b 61 67 65 2e 53  ubKey, package.S
2e650 65 72 76 69 63 65 49 64 2e 54 6f 53 74 72 69 6e  erviceId.ToStrin
2e660 67 28 56 73 49 64 46 6f 72 6d 61 74 29 2c 0d 0a  g(VsIdFormat),..
2e670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e680 20 20 20 20 20 20 20 20 77 68 61 74 49 66 2c 20          whatIf, 
2e690 76 65 72 62 6f 73 65 29 3b 0d 0a 20 20 20 20 20  verbose);..     
2e6a0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
2e6b0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
2e6c0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
2e6d0 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20  n true;..       
2e6e0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f   }....        //
2e6f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e700 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e710 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e720 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e730 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
2e740 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
2e750 62 6f 6f 6c 20 50 72 6f 63 65 73 73 56 73 50 61  bool ProcessVsPa
2e760 63 6b 61 67 65 28 0d 0a 20 20 20 20 20 20 20 20  ckage(..        
2e770 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79      MockRegistry
2e780 4b 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20  Key rootKey,..  
2e790 20 20 20 20 20 20 20 20 20 20 56 65 72 73 69 6f            Versio
2e7a0 6e 20 76 73 56 65 72 73 69 6f 6e 2c 0d 0a 20 20  n vsVersion,..  
2e7b0 20 20 20 20 20 20 20 20 20 20 50 61 63 6b 61 67            Packag
2e7c0 65 20 70 61 63 6b 61 67 65 2c 0d 0a 20 20 20 20  e package,..    
2e7d0 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 63          object c
2e7e0 6c 69 65 6e 74 44 61 74 61 2c 0d 0a 20 20 20 20  lientData,..    
2e7f0 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 6f 77          bool wow
2e800 36 34 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  64,..           
2e810 20 62 6f 6f 6c 20 74 68 72 6f 77 4f 6e 4d 69 73   bool throwOnMis
2e820 73 69 6e 67 2c 0d 0a 20 20 20 20 20 20 20 20 20  sing,..         
2e830 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d     bool whatIf,.
2e840 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f  .            boo
2e850 6c 20 76 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20  l verbose,..    
2e860 20 20 20 20 20 20 20 20 72 65 66 20 73 74 72 69          ref stri
2e870 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20 20 20 20  ng error..      
2e880 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
2e890 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
2e8a0 41 6e 79 50 61 69 72 3c 73 74 72 69 6e 67 2c 20  AnyPair<string, 
2e8b0 62 6f 6f 6c 3e 20 70 61 69 72 20 3d 20 63 6c 69  bool> pair = cli
2e8c0 65 6e 74 44 61 74 61 20 61 73 20 41 6e 79 50 61  entData as AnyPa
2e8d0 69 72 3c 73 74 72 69 6e 67 2c 20 62 6f 6f 6c 3e  ir<string, bool>
2e8e0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
2e8f0 20 69 66 20 28 70 61 69 72 20 3d 3d 20 6e 75 6c   if (pair == nul
2e900 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
2e910 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
2e920 20 20 20 65 72 72 6f 72 20 3d 20 22 69 6e 76 61     error = "inva
2e930 6c 69 64 20 56 53 20 63 61 6c 6c 62 61 63 6b 20  lid VS callback 
2e940 64 61 74 61 22 3b 0d 0a 20 20 20 20 20 20 20 20  data";..        
2e950 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
2e960 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alse;..         
2e970 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
2e980 20 20 20 20 69 66 20 28 70 61 69 72 2e 59 29 0d      if (pair.Y).
2e990 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
2e9a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e9b0 72 65 74 75 72 6e 20 41 64 64 56 73 50 61 63 6b  return AddVsPack
2e9c0 61 67 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  age(..          
2e9d0 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65            rootKe
2e9e0 79 2c 20 76 73 56 65 72 73 69 6f 6e 2c 20 70 61  y, vsVersion, pa
2e9f0 63 6b 61 67 65 2c 20 70 61 69 72 2e 58 2c 20 77  ckage, pair.X, w
2ea00 6f 77 36 34 2c 20 77 68 61 74 49 66 2c 0d 0a 20  ow64, whatIf,.. 
2ea10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ea20 20 20 20 76 65 72 62 6f 73 65 2c 20 72 65 66 20     verbose, ref 
2ea30 65 72 72 6f 72 29 3b 0d 0a 20 20 20 20 20 20 20  error);..       
2ea40 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
2ea50 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20      else..      
2ea60 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
2ea70 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
2ea80 52 65 6d 6f 76 65 56 73 50 61 63 6b 61 67 65 28  RemoveVsPackage(
2ea90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2eaa0 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 76        rootKey, v
2eab0 73 56 65 72 73 69 6f 6e 2c 20 70 61 63 6b 61 67  sVersion, packag
2eac0 65 2c 20 77 6f 77 36 34 2c 20 74 68 72 6f 77 4f  e, wow64, throwO
2ead0 6e 4d 69 73 73 69 6e 67 2c 0d 0a 20 20 20 20 20  nMissing,..     
2eae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 77                 w
2eaf0 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 2c 20  hatIf, verbose, 
2eb00 72 65 66 20 65 72 72 6f 72 29 3b 0d 0a 20 20 20  ref error);..   
2eb10 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
2eb20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23      }..        #
2eb30 65 6e 64 72 65 67 69 6f 6e 0d 0a 20 20 20 20 20  endregion..     
2eb40 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
2eb50 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
2eb60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2eb70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2eb80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2eb90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2eba0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67  ....        #reg
2ebb0 69 6f 6e 20 41 70 70 6c 69 63 61 74 69 6f 6e 20  ion Application 
2ebc0 45 6e 74 72 79 20 50 6f 69 6e 74 0d 0a 20 20 20  Entry Point..   
2ebd0 20 20 20 20 20 5b 4d 65 74 68 6f 64 49 6d 70 6c       [MethodImpl
2ebe0 28 4d 65 74 68 6f 64 49 6d 70 6c 4f 70 74 69 6f  (MethodImplOptio
2ebf0 6e 73 2e 4e 6f 49 6e 6c 69 6e 69 6e 67 29 5d 0d  ns.NoInlining)].
2ec00 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
2ec10 20 73 74 61 74 69 63 20 69 6e 74 20 4d 61 69 6e   static int Main
2ec20 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  (..            s
2ec30 74 72 69 6e 67 5b 5d 20 61 72 67 73 0d 0a 20 20  tring[] args..  
2ec40 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
2ec50 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
2ec60 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20      try..       
2ec70 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
2ec80 20 20 20 20 20 20 20 20 43 6f 6e 66 69 67 75 72          Configur
2ec90 61 74 69 6f 6e 20 63 6f 6e 66 69 67 75 72 61 74  ation configurat
2eca0 69 6f 6e 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20  ion = null;..   
2ecb0 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72               str
2ecc0 69 6e 67 20 65 72 72 6f 72 20 3d 20 6e 75 6c 6c  ing error = null
2ecd0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
2ece0 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
2ecf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ed00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ed10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ed20 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
2ed30 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20          #region 
2ed40 43 6f 6d 6d 61 6e 64 20 4c 69 6e 65 20 50 72 6f  Command Line Pro
2ed50 63 65 73 73 69 6e 67 0d 0a 20 20 20 20 20 20 20  cessing..       
2ed60 20 20 20 20 20 20 20 20 20 69 66 20 28 21 43 6f           if (!Co
2ed70 6e 66 69 67 75 72 61 74 69 6f 6e 2e 46 72 6f 6d  nfiguration.From
2ed80 41 72 67 73 28 0d 0a 20 20 20 20 20 20 20 20 20  Args(..         
2ed90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61                 a
2eda0 72 67 73 2c 20 74 72 75 65 2c 20 72 65 66 20 63  rgs, true, ref c
2edb0 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2c 20 72 65  onfiguration, re
2edc0 66 20 65 72 72 6f 72 29 20 7c 7c 0d 0a 20 20 20  f error) ||..   
2edd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ede0 20 21 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e   !Configuration.
2edf0 50 72 6f 63 65 73 73 28 0d 0a 20 20 20 20 20 20  Process(..      
2ee00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ee10 20 20 61 72 67 73 2c 20 63 6f 6e 66 69 67 75 72    args, configur
2ee20 61 74 69 6f 6e 2c 20 74 72 75 65 2c 20 72 65 66  ation, true, ref
2ee30 20 65 72 72 6f 72 29 20 7c 7c 0d 0a 20 20 20 20   error) ||..    
2ee40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ee50 21 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 43  !Configuration.C
2ee60 68 65 63 6b 52 75 6e 74 69 6d 65 56 65 72 73 69  heckRuntimeVersi
2ee70 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  on(..           
2ee80 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
2ee90 66 69 67 75 72 61 74 69 6f 6e 2c 20 74 72 75 65  figuration, true
2eea0 2c 20 72 65 66 20 65 72 72 6f 72 29 29 0d 0a 20  , ref error)).. 
2eeb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
2eec0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2eed0 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 53        TraceOps.S
2eee0 68 6f 77 4d 65 73 73 61 67 65 28 54 72 61 63 65  howMessage(Trace
2eef0 50 72 69 6f 72 69 74 79 2e 48 69 67 68 65 73 74  Priority.Highest
2ef00 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
2ef10 20 20 20 20 20 20 20 20 20 20 20 64 65 62 75 67             debug
2ef20 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43  Callback, traceC
2ef30 61 6c 6c 62 61 63 6b 2c 20 74 68 69 73 41 73 73  allback, thisAss
2ef40 65 6d 62 6c 79 2c 0d 0a 20 20 20 20 20 20 20 20  embly,..        
2ef50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ef60 65 72 72 6f 72 2c 20 74 72 61 63 65 43 61 74 65  error, traceCate
2ef70 67 6f 72 79 2c 20 4d 65 73 73 61 67 65 42 6f 78  gory, MessageBox
2ef80 42 75 74 74 6f 6e 73 2e 4f 4b 2c 0d 0a 20 20 20  Buttons.OK,..   
2ef90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2efa0 20 20 20 20 20 4d 65 73 73 61 67 65 42 6f 78 49       MessageBoxI
2efb0 63 6f 6e 2e 45 72 72 6f 72 29 3b 0d 0a 0d 0a 20  con.Error);.... 
2efc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2efd0 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75     TraceOps.Debu
2efe0 67 41 6e 64 54 72 61 63 65 28 54 72 61 63 65 50  gAndTrace(TraceP
2eff0 72 69 6f 72 69 74 79 2e 4d 65 64 69 75 6d 48 69  riority.MediumHi
2f000 67 68 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  gh,..           
2f010 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62               deb
2f020 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63  ugCallback, trac
2f030 65 43 61 6c 6c 62 61 63 6b 2c 20 22 46 61 69 6c  eCallback, "Fail
2f040 75 72 65 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20  ure.",..        
2f050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f060 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
2f070 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
2f080 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 31 3b         return 1;
2f090 20 2f 2a 20 46 41 49 4c 55 52 45 20 2a 2f 0d 0a   /* FAILURE */..
2f0a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f0b0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
2f0c0 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
2f0d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2f0e0 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
2f0f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f100 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f110 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f120 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2f130 20 20 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52      using (MockR
2f140 65 67 69 73 74 72 79 20 72 65 67 69 73 74 72 79  egistry registry
2f150 20 3d 20 6e 65 77 20 4d 6f 63 6b 52 65 67 69 73   = new MockRegis
2f160 74 72 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20  try(..          
2f170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
2f180 6e 66 69 67 75 72 61 74 69 6f 6e 2e 57 68 61 74  nfiguration.What
2f190 49 66 2c 20 66 61 6c 73 65 2c 20 66 61 6c 73 65  If, false, false
2f1a0 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
2f1b0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
2f1c0 20 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69             #regi
2f1d0 6f 6e 20 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72  on .NET Framewor
2f1e0 6b 20 2f 20 56 69 73 75 61 6c 20 53 74 75 64 69  k / Visual Studi
2f1f0 6f 20 44 61 74 61 0d 0a 20 20 20 20 20 20 20 20  o Data..        
2f200 20 20 20 20 20 20 20 20 20 20 20 20 50 61 63 6b              Pack
2f210 61 67 65 20 70 61 63 6b 61 67 65 20 3d 20 6e 75  age package = nu
2f220 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll;..           
2f230 20 20 20 20 20 20 20 20 20 46 72 61 6d 65 77 6f           Framewo
2f240 72 6b 4c 69 73 74 20 66 72 61 6d 65 77 6f 72 6b  rkList framework
2f250 4c 69 73 74 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20  List = null;..  
2f260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f270 20 20 56 73 4c 69 73 74 20 76 73 4c 69 73 74 20    VsList vsList 
2f280 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20  = null;....     
2f290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
2f2a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f2b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f2c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f2d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
2f2e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f2f0 20 20 49 6e 69 74 69 61 6c 69 7a 65 56 73 50 61    InitializeVsPa
2f300 63 6b 61 67 65 28 72 65 66 20 70 61 63 6b 61 67  ckage(ref packag
2f310 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e);....         
2f320 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
2f330 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f340 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f350 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f360 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
2f370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 49 6e                In
2f380 69 74 69 61 6c 69 7a 65 46 72 61 6d 65 77 6f 72  itializeFramewor
2f390 6b 4c 69 73 74 28 72 65 67 69 73 74 72 79 2e 4c  kList(registry.L
2f3a0 6f 63 61 6c 4d 61 63 68 69 6e 65 2c 0d 0a 20 20  ocalMachine,..  
2f3b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f3c0 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74        configurat
2f3d0 69 6f 6e 2c 20 72 65 66 20 66 72 61 6d 65 77 6f  ion, ref framewo
2f3e0 72 6b 4c 69 73 74 29 3b 0d 0a 0d 0a 20 20 20 20  rkList);....    
2f3f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f400 49 6e 69 74 69 61 6c 69 7a 65 56 73 4c 69 73 74  InitializeVsList
2f410 28 72 65 67 69 73 74 72 79 2e 4c 6f 63 61 6c 4d  (registry.LocalM
2f420 61 63 68 69 6e 65 2c 20 63 6f 6e 66 69 67 75 72  achine, configur
2f430 61 74 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20  ation,..        
2f440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f450 72 65 66 20 76 73 4c 69 73 74 29 3b 0d 0a 20 20  ref vsList);..  
2f460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f470 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a    #endregion....
2f480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f490 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
2f4a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f4b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f4c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
2f4d0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
2f4e0 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 43         #region C
2f4f0 6f 72 65 20 41 73 73 65 6d 62 6c 79 20 4e 61 6d  ore Assembly Nam
2f500 65 20 43 68 65 63 6b 0d 0a 20 20 20 20 20 20 20  e Check..       
2f510 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
2f520 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2f530 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 44 6f       // NOTE: Do
2f540 20 74 68 69 73 20 66 69 72 73 74 2c 20 62 65 66   this first, bef
2f550 6f 72 65 20 6d 61 6b 69 6e 67 20 61 6e 79 20 63  ore making any c
2f560 68 61 6e 67 65 73 20 74 6f 20 74 68 65 0d 0a 20  hanges to the.. 
2f570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f580 20 20 20 2f 2f 20 20 20 20 20 20 20 73 79 73 74     //       syst
2f590 65 6d 2c 20 62 65 63 61 75 73 65 20 69 74 20 77  em, because it w
2f5a0 69 6c 6c 20 74 68 72 6f 77 20 61 6e 20 65 78 63  ill throw an exc
2f5b0 65 70 74 69 6f 6e 20 69 66 20 74 68 65 0d 0a 20  eption if the.. 
2f5c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f5d0 20 20 20 2f 2f 20 20 20 20 20 20 20 66 69 6c 65     //       file
2f5e0 20 6e 61 6d 65 20 64 6f 65 73 20 6e 6f 74 20 72   name does not r
2f5f0 65 70 72 65 73 65 6e 74 20 61 20 76 61 6c 69 64  epresent a valid
2f600 20 6d 61 6e 61 67 65 64 0d 0a 20 20 20 20 20 20   managed..      
2f610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
2f620 20 20 20 20 20 20 20 61 73 73 65 6d 62 6c 79 2e         assembly.
2f630 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2f640 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
2f650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 41 73                As
2f660 73 65 6d 62 6c 79 4e 61 6d 65 20 61 73 73 65 6d  semblyName assem
2f670 62 6c 79 4e 61 6d 65 20 3d 20 41 73 73 65 6d 62  blyName = Assemb
2f680 6c 79 4e 61 6d 65 2e 47 65 74 41 73 73 65 6d 62  lyName.GetAssemb
2f690 6c 79 4e 61 6d 65 28 0d 0a 20 20 20 20 20 20 20  lyName(..       
2f6a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f6b0 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 43   configuration.C
2f6c0 6f 72 65 46 69 6c 65 4e 61 6d 65 29 3b 20 2f 2a  oreFileName); /*
2f6d0 20 74 68 72 6f 77 20 2a 2f 0d 0a 20 20 20 20 20   throw */..     
2f6e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23                 #
2f6f0 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20  endregion....   
2f700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f710 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
2f720 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f730 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f740 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
2f750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f760 20 20 20 20 23 72 65 67 69 6f 6e 20 53 68 61 72      #region Shar
2f770 65 64 20 43 6c 69 65 6e 74 20 44 61 74 61 20 43  ed Client Data C
2f780 72 65 61 74 69 6f 6e 0d 0a 20 20 20 20 20 20 20  reation..       
2f790 20 20 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a               obj
2f7a0 65 63 74 20 64 69 72 65 63 74 6f 72 79 44 61 74  ect directoryDat
2f7b0 61 20 3d 20 6e 65 77 20 41 6e 79 50 61 69 72 3c  a = new AnyPair<
2f7c0 73 74 72 69 6e 67 2c 20 62 6f 6f 6c 3e 28 0d 0a  string, bool>(..
2f7d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f7e0 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72          configur
2f7f0 61 74 69 6f 6e 2e 44 69 72 65 63 74 6f 72 79 2c  ation.Directory,
2f800 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 49   configuration.I
2f810 6e 73 74 61 6c 6c 29 3b 0d 0a 0d 0a 20 20 20 20  nstall);....    
2f820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f830 6f 62 6a 65 63 74 20 66 69 6c 65 4e 61 6d 65 44  object fileNameD
2f840 61 74 61 20 3d 20 6e 65 77 20 41 6e 79 50 61 69  ata = new AnyPai
2f850 72 3c 73 74 72 69 6e 67 2c 20 62 6f 6f 6c 3e 28  r<string, bool>(
2f860 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2f870 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67            config
2f880 75 72 61 74 69 6f 6e 2e 44 65 73 69 67 6e 65 72  uration.Designer
2f890 46 69 6c 65 4e 61 6d 65 2c 20 63 6f 6e 66 69 67  FileName, config
2f8a0 75 72 61 74 69 6f 6e 2e 49 6e 73 74 61 6c 6c 29  uration.Install)
2f8b0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
2f8c0 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f         #endregio
2f8d0 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n....           
2f8e0 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
2f8f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f900 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f910 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f920 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
2f930 20 20 20 20 20 20 20 20 20 20 20 20 23 72 65 67              #reg
2f940 69 6f 6e 20 2e 4e 45 54 20 47 41 43 20 49 6e 73  ion .NET GAC Ins
2f950 74 61 6c 6c 2f 52 65 6d 6f 76 65 0d 0a 20 20 20  tall/Remove..   
2f960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f970 20 69 66 20 28 63 6f 6e 66 69 67 75 72 61 74 69   if (configurati
2f980 6f 6e 2e 48 61 73 46 6c 61 67 73 28 49 6e 73 74  on.HasFlags(Inst
2f990 61 6c 6c 46 6c 61 67 73 2e 47 41 43 2c 20 74 72  allFlags.GAC, tr
2f9a0 75 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ue))..          
2f9b0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
2f9c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f9d0 20 20 20 20 20 50 75 62 6c 69 73 68 20 70 75 62       Publish pub
2f9e0 6c 69 73 68 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a  lish = null;....
2f9f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fa00 20 20 20 20 20 20 20 20 69 66 20 28 21 63 6f 6e          if (!con
2fa10 66 69 67 75 72 61 74 69 6f 6e 2e 57 68 61 74 49  figuration.WhatI
2fa20 66 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  f)..            
2fa30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fa40 70 75 62 6c 69 73 68 20 3d 20 6e 65 77 20 50 75  publish = new Pu
2fa50 62 6c 69 73 68 28 29 3b 0d 0a 0d 0a 20 20 20 20  blish();....    
2fa60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fa70 20 20 20 20 69 66 20 28 63 6f 6e 66 69 67 75 72      if (configur
2fa80 61 74 69 6f 6e 2e 49 6e 73 74 61 6c 6c 29 0d 0a  ation.Install)..
2fa90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2faa0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
2fab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fac0 20 20 20 20 20 20 20 69 66 20 28 21 63 6f 6e 66         if (!conf
2fad0 69 67 75 72 61 74 69 6f 6e 2e 57 68 61 74 49 66  iguration.WhatIf
2fae0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
2faf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fb00 20 20 20 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a     /* throw */..
2fb10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fb20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fb30 70 75 62 6c 69 73 68 2e 47 61 63 49 6e 73 74 61  publish.GacInsta
2fb40 6c 6c 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  ll(configuration
2fb50 2e 43 6f 72 65 46 69 6c 65 4e 61 6d 65 29 3b 0d  .CoreFileName);.
2fb60 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
2fb70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
2fb80 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64  raceOps.DebugAnd
2fb90 54 72 61 63 65 28 54 72 61 63 65 50 72 69 6f 72  Trace(TracePrior
2fba0 69 74 79 2e 48 69 67 68 65 73 74 2c 0d 0a 20 20  ity.Highest,..  
2fbb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fbc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65                de
2fbd0 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61  bugCallback, tra
2fbe0 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69  ceCallback, Stri
2fbf0 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ng.Format(..    
2fc00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fc10 20 20 20 20 20 20 20 20 20 20 20 20 22 47 61 63              "Gac
2fc20 49 6e 73 74 61 6c 6c 3a 20 61 73 73 65 6d 62 6c  Install: assembl
2fc30 79 50 61 74 68 20 3d 20 7b 30 7d 22 2c 0d 0a 20  yPath = {0}",.. 
2fc40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fc50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46                 F
2fc60 6f 72 44 69 73 70 6c 61 79 28 63 6f 6e 66 69 67  orDisplay(config
2fc70 75 72 61 74 69 6f 6e 2e 43 6f 72 65 46 69 6c 65  uration.CoreFile
2fc80 4e 61 6d 65 29 29 2c 0d 0a 20 20 20 20 20 20 20  Name)),..       
2fc90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fca0 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
2fcb0 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
2fcc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fcd0 20 20 20 20 20 20 20 20 69 66 20 28 21 63 6f 6e          if (!con
2fce0 66 69 67 75 72 61 74 69 6f 6e 2e 57 68 61 74 49  figuration.WhatI
2fcf0 66 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  f)..            
2fd00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fd10 20 20 20 20 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d      /* throw */.
2fd20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2fd30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fd40 20 70 75 62 6c 69 73 68 2e 47 61 63 49 6e 73 74   publish.GacInst
2fd50 61 6c 6c 28 63 6f 6e 66 69 67 75 72 61 74 69 6f  all(configuratio
2fd60 6e 2e 4c 69 6e 71 46 69 6c 65 4e 61 6d 65 29 3b  n.LinqFileName);
2fd70 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2fd80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fd90 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e  TraceOps.DebugAn
2fda0 64 54 72 61 63 65 28 54 72 61 63 65 50 72 69 6f  dTrace(TracePrio
2fdb0 72 69 74 79 2e 48 69 67 68 65 73 74 2c 0d 0a 20  rity.Highest,.. 
2fdc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fdd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
2fde0 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72  ebugCallback, tr
2fdf0 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72  aceCallback, Str
2fe00 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
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 22 47 61               "Ga
2fe30 63 49 6e 73 74 61 6c 6c 3a 20 61 73 73 65 6d 62  cInstall: assemb
2fe40 6c 79 50 61 74 68 20 3d 20 7b 30 7d 22 2c 0d 0a  lyPath = {0}",..
2fe50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fe60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fe70 46 6f 72 44 69 73 70 6c 61 79 28 63 6f 6e 66 69  ForDisplay(confi
2fe80 67 75 72 61 74 69 6f 6e 2e 4c 69 6e 71 46 69 6c  guration.LinqFil
2fe90 65 4e 61 6d 65 29 29 2c 0d 0a 20 20 20 20 20 20  eName)),..      
2fea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2feb0 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
2fec0 61 74 65 67 6f 72 79 29 3b 0d 0a 20 20 20 20 20  ategory);..     
2fed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fee0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
2fef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c                el
2ff00 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  se..            
2ff10 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
2ff20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ff30 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21             if (!
2ff40 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 57 68  configuration.Wh
2ff50 61 74 49 66 29 0d 0a 20 20 20 20 20 20 20 20 20  atIf)..         
2ff60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ff70 20 20 20 20 20 20 20 2f 2a 20 74 68 72 6f 77 20         /* throw 
2ff80 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  */..            
2ff90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ffa0 20 20 20 20 70 75 62 6c 69 73 68 2e 47 61 63 52      publish.GacR
2ffb0 65 6d 6f 76 65 28 63 6f 6e 66 69 67 75 72 61 74  emove(configurat
2ffc0 69 6f 6e 2e 4c 69 6e 71 46 69 6c 65 4e 61 6d 65  ion.LinqFileName
2ffd0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
2ffe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fff0 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67    TraceOps.Debug
30000 41 6e 64 54 72 61 63 65 28 54 72 61 63 65 50 72  AndTrace(TracePr
30010 69 6f 72 69 74 79 2e 48 69 67 68 65 73 74 2c 0d  iority.Highest,.
30020 0a 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 20 20 20 20                  
30040 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20   debugCallback, 
30050 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53  traceCallback, S
30060 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
30070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
30090 47 61 63 52 65 6d 6f 76 65 3a 20 61 73 73 65 6d  GacRemove: assem
300a0 62 6c 79 50 61 74 68 20 3d 20 7b 30 7d 22 2c 0d  blyPath = {0}",.
300b0 0a 20 20 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 20 20 20 20 20                  
300d0 20 46 6f 72 44 69 73 70 6c 61 79 28 63 6f 6e 66   ForDisplay(conf
300e0 69 67 75 72 61 74 69 6f 6e 2e 4c 69 6e 71 46 69  iguration.LinqFi
300f0 6c 65 4e 61 6d 65 29 29 2c 0d 0a 20 20 20 20 20  leName)),..     
30100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30110 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
30120 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
30130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30140 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21 63            if (!c
30150 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 57 68 61  onfiguration.Wha
30160 74 49 66 29 0d 0a 20 20 20 20 20 20 20 20 20 20  tIf)..          
30170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30180 20 20 20 20 20 20 2f 2a 20 74 68 72 6f 77 20 2a        /* throw *
30190 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
301a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
301b0 20 20 20 70 75 62 6c 69 73 68 2e 47 61 63 52 65     publish.GacRe
301c0 6d 6f 76 65 28 63 6f 6e 66 69 67 75 72 61 74 69  move(configurati
301d0 6f 6e 2e 43 6f 72 65 46 69 6c 65 4e 61 6d 65 29  on.CoreFileName)
301e0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
301f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30200 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41   TraceOps.DebugA
30210 6e 64 54 72 61 63 65 28 54 72 61 63 65 50 72 69  ndTrace(TracePri
30220 6f 72 69 74 79 2e 48 69 67 68 65 73 74 2c 0d 0a  ority.Highest,..
30230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30250 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74  debugCallback, t
30260 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74  raceCallback, St
30270 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
30280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 47                "G
302a0 61 63 52 65 6d 6f 76 65 3a 20 61 73 73 65 6d 62  acRemove: assemb
302b0 6c 79 50 61 74 68 20 3d 20 7b 30 7d 22 2c 0d 0a  lyPath = {0}",..
302c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
302d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
302e0 46 6f 72 44 69 73 70 6c 61 79 28 63 6f 6e 66 69  ForDisplay(confi
302f0 67 75 72 61 74 69 6f 6e 2e 43 6f 72 65 46 69 6c  guration.CoreFil
30300 65 4e 61 6d 65 29 29 2c 0d 0a 20 20 20 20 20 20  eName)),..      
30310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30320 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
30330 61 74 65 67 6f 72 79 29 3b 0d 0a 20 20 20 20 20  ategory);..     
30340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30350 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
30360 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
30370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30380 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20   #endregion.... 
30390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
303a0 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
303b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
303c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
303d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
303e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
303f0 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 2e 4e        #region .N
30400 45 54 20 41 73 73 65 6d 62 6c 79 46 6f 6c 64 65  ET AssemblyFolde
30410 72 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  rs..            
30420 20 20 20 20 20 20 20 20 69 66 20 28 63 6f 6e 66          if (conf
30430 69 67 75 72 61 74 69 6f 6e 2e 48 61 73 46 6c 61  iguration.HasFla
30440 67 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  gs(..           
30450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30460 20 49 6e 73 74 61 6c 6c 46 6c 61 67 73 2e 41 73   InstallFlags.As
30470 73 65 6d 62 6c 79 46 6f 6c 64 65 72 73 2c 20 74  semblyFolders, t
30480 72 75 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20  rue))..         
30490 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
304a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
304b0 20 20 20 20 20 20 69 66 20 28 21 46 6f 72 45 61        if (!ForEa
304c0 63 68 46 72 61 6d 65 77 6f 72 6b 52 65 67 69 73  chFrameworkRegis
304d0 74 72 79 28 72 65 67 69 73 74 72 79 2c 0d 0a 20  try(registry,.. 
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 20 20 20 20 66                 f
30500 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2c 20 50 72  rameworkList, Pr
30510 6f 63 65 73 73 41 73 73 65 6d 62 6c 79 46 6f 6c  ocessAssemblyFol
30520 64 65 72 73 2c 0d 0a 20 20 20 20 20 20 20 20 20  ders,..         
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 64 69 72 65 63 74 6f 72 79         directory
30550 44 61 74 61 2c 0d 0a 20 20 20 20 20 20 20 20 20  Data,..         
30560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30570 20 20 20 20 20 20 20 4e 65 74 46 78 49 73 33 32         NetFxIs32
30580 42 69 74 4f 6e 6c 79 20 7c 7c 20 63 6f 6e 66 69  BitOnly || confi
30590 67 75 72 61 74 69 6f 6e 2e 57 6f 77 36 34 2c 0d  guration.Wow64,.
305a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
305b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
305c0 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 54   configuration.T
305d0 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 2c 0d 0a  hrowOnMissing,..
305e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
305f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30600 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 57 68  configuration.Wh
30610 61 74 49 66 2c 20 63 6f 6e 66 69 67 75 72 61 74  atIf, configurat
30620 69 6f 6e 2e 56 65 72 62 6f 73 65 2c 0d 0a 20 20  ion.Verbose,..  
30630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
30650 66 20 65 72 72 6f 72 29 29 0d 0a 20 20 20 20 20  f error))..     
30660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30670 20 20 20 7b 0d 0a 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 20 20                  
30690 20 20 54 72 61 63 65 4f 70 73 2e 53 68 6f 77 4d    TraceOps.ShowM
306a0 65 73 73 61 67 65 28 54 72 61 63 65 50 72 69 6f  essage(TracePrio
306b0 72 69 74 79 2e 48 69 67 68 65 73 74 2c 0d 0a 20  rity.Highest,.. 
306c0 20 20 20 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 64                 d
306e0 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72  ebugCallback, tr
306f0 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 74 68 69  aceCallback, thi
30700 73 41 73 73 65 6d 62 6c 79 2c 0d 0a 20 20 20 20  sAssembly,..    
30710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30720 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
30730 72 2c 20 74 72 61 63 65 43 61 74 65 67 6f 72 79  r, traceCategory
30740 2c 20 4d 65 73 73 61 67 65 42 6f 78 42 75 74 74  , MessageBoxButt
30750 6f 6e 73 2e 4f 4b 2c 0d 0a 20 20 20 20 20 20 20  ons.OK,..       
30760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30770 20 20 20 20 20 20 20 20 20 4d 65 73 73 61 67 65           Message
30780 42 6f 78 49 63 6f 6e 2e 45 72 72 6f 72 29 3b 0d  BoxIcon.Error);.
30790 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
307a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
307b0 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64  raceOps.DebugAnd
307c0 54 72 61 63 65 28 54 72 61 63 65 50 72 69 6f 72  Trace(TracePrior
307d0 69 74 79 2e 4d 65 64 69 75 6d 48 69 67 68 2c 0d  ity.MediumHigh,.
307e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
307f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30800 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20   debugCallback, 
30810 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 22  traceCallback, "
30820 46 61 69 6c 75 72 65 2e 22 2c 0d 0a 20 20 20 20  Failure.",..    
30830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30840 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
30850 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
30860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30870 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
30880 6e 20 31 3b 20 2f 2a 20 46 41 49 4c 55 52 45 20  n 1; /* FAILURE 
30890 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  */..            
308a0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
308b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
308c0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
308d0 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65            #endre
308e0 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20  gion....        
308f0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
30900 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30910 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30920 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30930 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
30940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23                 #
30950 72 65 67 69 6f 6e 20 2e 4e 45 54 20 44 62 50 72  region .NET DbPr
30960 6f 76 69 64 65 72 46 61 63 74 6f 72 79 0d 0a 20  oviderFactory.. 
30970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30980 20 20 20 69 66 20 28 63 6f 6e 66 69 67 75 72 61     if (configura
30990 74 69 6f 6e 2e 48 61 73 46 6c 61 67 73 28 0d 0a  tion.HasFlags(..
309a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
309b0 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 73 74              Inst
309c0 61 6c 6c 46 6c 61 67 73 2e 44 62 50 72 6f 76 69  allFlags.DbProvi
309d0 64 65 72 46 61 63 74 6f 72 79 2c 20 74 72 75 65  derFactory, true
309e0 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
309f0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
30a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30a10 20 20 20 62 6f 6f 6c 20 73 61 76 65 64 20 3d 20     bool saved = 
30a20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  false;....      
30a30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30a40 20 20 69 66 20 28 21 46 6f 72 45 61 63 68 46 72    if (!ForEachFr
30a50 61 6d 65 77 6f 72 6b 43 6f 6e 66 69 67 28 72 65  ameworkConfig(re
30a60 67 69 73 74 72 79 2c 0d 0a 20 20 20 20 20 20 20  gistry,..       
30a70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30a80 20 20 20 20 20 20 20 20 20 66 72 61 6d 65 77 6f           framewo
30a90 72 6b 4c 69 73 74 2c 20 50 72 6f 63 65 73 73 44  rkList, ProcessD
30aa0 62 50 72 6f 76 69 64 65 72 46 61 63 74 6f 72 79  bProviderFactory
30ab0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
30ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30ad0 20 20 20 49 6e 76 61 72 69 61 6e 74 4e 61 6d 65     InvariantName
30ae0 2c 20 50 72 6f 76 69 64 65 72 4e 61 6d 65 2c 20  , ProviderName, 
30af0 44 65 73 63 72 69 70 74 69 6f 6e 2c 0d 0a 20 20  Description,..  
30b00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46 61                Fa
30b20 63 74 6f 72 79 54 79 70 65 4e 61 6d 65 2c 20 61  ctoryTypeName, a
30b30 73 73 65 6d 62 6c 79 4e 61 6d 65 2c 20 64 69 72  ssemblyName, dir
30b40 65 63 74 6f 72 79 44 61 74 61 2c 0d 0a 20 20 20  ectoryData,..   
30b50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30b60 20 20 20 20 20 20 20 20 20 20 20 20 20 4e 65 74               Net
30b70 46 78 49 73 33 32 42 69 74 4f 6e 6c 79 20 7c 7c  FxIs32BitOnly ||
30b80 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 57   configuration.W
30b90 6f 77 36 34 2c 0d 0a 20 20 20 20 20 20 20 20 20  ow64,..         
30ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30bb0 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61         configura
30bc0 74 69 6f 6e 2e 54 68 72 6f 77 4f 6e 4d 69 73 73  tion.ThrowOnMiss
30bd0 69 6e 67 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ing,..          
30be0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30bf0 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74        configurat
30c00 69 6f 6e 2e 57 68 61 74 49 66 2c 20 63 6f 6e 66  ion.WhatIf, conf
30c10 69 67 75 72 61 74 69 6f 6e 2e 56 65 72 62 6f 73  iguration.Verbos
30c20 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
30c30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30c40 20 20 20 20 72 65 66 20 73 61 76 65 64 2c 20 72      ref saved, r
30c50 65 66 20 65 72 72 6f 72 29 29 0d 0a 20 20 20 20  ef error))..    
30c60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30c70 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
30c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30c90 20 20 20 54 72 61 63 65 4f 70 73 2e 53 68 6f 77     TraceOps.Show
30ca0 4d 65 73 73 61 67 65 28 54 72 61 63 65 50 72 69  Message(TracePri
30cb0 6f 72 69 74 79 2e 48 69 67 68 65 73 74 2c 0d 0a  ority.Highest,..
30cc0 20 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 20 20 20 20 20 20 20                  
30ce0 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74  debugCallback, t
30cf0 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 74 68  raceCallback, th
30d00 69 73 41 73 73 65 6d 62 6c 79 2c 0d 0a 20 20 20  isAssembly,..   
30d10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30d20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
30d30 6f 72 2c 20 74 72 61 63 65 43 61 74 65 67 6f 72  or, traceCategor
30d40 79 2c 20 4d 65 73 73 61 67 65 42 6f 78 42 75 74  y, MessageBoxBut
30d50 74 6f 6e 73 2e 4f 4b 2c 0d 0a 20 20 20 20 20 20  tons.OK,..      
30d60 20 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 20 4d 65 73 73 61 67            Messag
30d80 65 42 6f 78 49 63 6f 6e 2e 45 72 72 6f 72 29 3b  eBoxIcon.Error);
30d90 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
30da0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30db0 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e  TraceOps.DebugAn
30dc0 64 54 72 61 63 65 28 54 72 61 63 65 50 72 69 6f  dTrace(TracePrio
30dd0 72 69 74 79 2e 4d 65 64 69 75 6d 48 69 67 68 2c  rity.MediumHigh,
30de0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
30df0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30e00 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c    debugCallback,
30e10 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20   traceCallback, 
30e20 22 46 61 69 6c 75 72 65 2e 22 2c 0d 0a 20 20 20  "Failure.",..   
30e30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30e40 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
30e50 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
30e60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30e70 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
30e80 72 6e 20 31 3b 20 2f 2a 20 46 41 49 4c 55 52 45  rn 1; /* FAILURE
30e90 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   */..           
30ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
30eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30ec0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
30ed0 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 72             #endr
30ee0 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20  egion....       
30ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f               ///
30f00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30f10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30f20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30f30 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
30f40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30f50 23 72 65 67 69 6f 6e 20 56 53 20 50 61 63 6b 61  #region VS Packa
30f60 67 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ge..            
30f70 20 20 20 20 20 20 20 20 69 66 20 28 63 6f 6e 66          if (conf
30f80 69 67 75 72 61 74 69 6f 6e 2e 48 61 73 46 6c 61  iguration.HasFla
30f90 67 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  gs(..           
30fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30fb0 20 49 6e 73 74 61 6c 6c 46 6c 61 67 73 2e 56 73   InstallFlags.Vs
30fc0 50 61 63 6b 61 67 65 2c 20 74 72 75 65 29 29 0d  Package, true)).
30fd0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
30fe0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
30ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31000 69 66 20 28 21 46 6f 72 45 61 63 68 56 73 56 65  if (!ForEachVsVe
31010 72 73 69 6f 6e 52 65 67 69 73 74 72 79 28 72 65  rsionRegistry(re
31020 67 69 73 74 72 79 2c 0d 0a 20 20 20 20 20 20 20  gistry,..       
31030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31040 20 20 20 20 20 20 20 20 20 76 73 4c 69 73 74 2c           vsList,
31050 20 50 72 6f 63 65 73 73 56 73 50 61 63 6b 61 67   ProcessVsPackag
31060 65 2c 20 70 61 63 6b 61 67 65 2c 0d 0a 20 20 20  e, package,..   
31070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31080 20 20 20 20 20 20 20 20 20 20 20 20 20 66 69 6c               fil
31090 65 4e 61 6d 65 44 61 74 61 2c 0d 0a 20 20 20 20  eNameData,..    
310a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
310b0 20 20 20 20 20 20 20 20 20 20 20 20 56 73 49 73              VsIs
310c0 33 32 42 69 74 4f 6e 6c 79 20 7c 7c 20 63 6f 6e  32BitOnly || con
310d0 66 69 67 75 72 61 74 69 6f 6e 2e 57 6f 77 36 34  figuration.Wow64
310e0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
310f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31100 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e     configuration
31110 2e 54 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 2c  .ThrowOnMissing,
31120 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
31130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31140 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e    configuration.
31150 57 68 61 74 49 66 2c 20 63 6f 6e 66 69 67 75 72  WhatIf, configur
31160 61 74 69 6f 6e 2e 56 65 72 62 6f 73 65 2c 0d 0a  ation.Verbose,..
31170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31190 72 65 66 20 65 72 72 6f 72 29 29 0d 0a 20 20 20  ref error))..   
311a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
311b0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
311c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
311d0 20 20 20 20 54 72 61 63 65 4f 70 73 2e 53 68 6f      TraceOps.Sho
311e0 77 4d 65 73 73 61 67 65 28 54 72 61 63 65 50 72  wMessage(TracePr
311f0 69 6f 72 69 74 79 2e 48 69 67 68 65 73 74 2c 0d  iority.Highest,.
31200 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
31210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31220 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20   debugCallback, 
31230 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 74  traceCallback, t
31240 68 69 73 41 73 73 65 6d 62 6c 79 2c 0d 0a 20 20  hisAssembly,..  
31250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72                er
31270 72 6f 72 2c 20 74 72 61 63 65 43 61 74 65 67 6f  ror, traceCatego
31280 72 79 2c 20 4d 65 73 73 61 67 65 42 6f 78 42 75  ry, MessageBoxBu
31290 74 74 6f 6e 73 2e 4f 4b 2c 0d 0a 20 20 20 20 20  ttons.OK,..     
312a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
312b0 20 20 20 20 20 20 20 20 20 20 20 4d 65 73 73 61             Messa
312c0 67 65 42 6f 78 49 63 6f 6e 2e 45 72 72 6f 72 29  geBoxIcon.Error)
312d0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
312e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
312f0 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41   TraceOps.DebugA
31300 6e 64 54 72 61 63 65 28 54 72 61 63 65 50 72 69  ndTrace(TracePri
31310 6f 72 69 74 79 2e 4d 65 64 69 75 6d 48 69 67 68  ority.MediumHigh
31320 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
31330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31340 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b     debugCallback
31350 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c  , traceCallback,
31360 20 22 46 61 69 6c 75 72 65 2e 22 2c 0d 0a 20 20   "Failure.",..  
31370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
31390 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  aceCategory);...
313a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
313b0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
313c0 75 72 6e 20 31 3b 20 2f 2a 20 46 41 49 4c 55 52  urn 1; /* FAILUR
313d0 45 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20  E */..          
313e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
313f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
31400 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
31410 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64              #end
31420 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20  region....      
31430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
31440 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31450 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31460 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31470 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
31480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31490 20 23 72 65 67 69 6f 6e 20 56 53 20 44 61 74 61   #region VS Data
314a0 53 6f 75 72 63 65 0d 0a 20 20 20 20 20 20 20 20  Source..        
314b0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
314c0 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 48 61  configuration.Ha
314d0 73 46 6c 61 67 73 28 0d 0a 20 20 20 20 20 20 20  sFlags(..       
314e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
314f0 20 20 20 20 20 49 6e 73 74 61 6c 6c 46 6c 61 67       InstallFlag
31500 73 2e 56 73 44 61 74 61 53 6f 75 72 63 65 2c 20  s.VsDataSource, 
31510 74 72 75 65 29 29 0d 0a 20 20 20 20 20 20 20 20  true))..        
31520 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
31530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31540 20 20 20 20 20 20 20 69 66 20 28 21 46 6f 72 45         if (!ForE
31550 61 63 68 56 73 56 65 72 73 69 6f 6e 52 65 67 69  achVsVersionRegi
31560 73 74 72 79 28 72 65 67 69 73 74 72 79 2c 0d 0a  stry(registry,..
31570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31590 76 73 4c 69 73 74 2c 20 50 72 6f 63 65 73 73 56  vsList, ProcessV
315a0 73 44 61 74 61 53 6f 75 72 63 65 2c 20 70 61 63  sDataSource, pac
315b0 6b 61 67 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  kage,..         
315c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
315d0 20 20 20 20 20 20 20 66 69 6c 65 4e 61 6d 65 44         fileNameD
315e0 61 74 61 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ata,..          
315f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31600 20 20 20 20 20 20 56 73 49 73 33 32 42 69 74 4f        VsIs32BitO
31610 6e 6c 79 20 7c 7c 20 63 6f 6e 66 69 67 75 72 61  nly || configura
31620 74 69 6f 6e 2e 57 6f 77 36 34 2c 0d 0a 20 20 20  tion.Wow64,..   
31630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31640 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
31650 66 69 67 75 72 61 74 69 6f 6e 2e 54 68 72 6f 77  figuration.Throw
31660 4f 6e 4d 69 73 73 69 6e 67 2c 0d 0a 20 20 20 20  OnMissing,..    
31670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31680 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66              conf
31690 69 67 75 72 61 74 69 6f 6e 2e 57 68 61 74 49 66  iguration.WhatIf
316a0 2c 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e  , configuration.
316b0 56 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20  Verbose,..      
316c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
316d0 20 20 20 20 20 20 20 20 20 20 72 65 66 20 65 72            ref er
316e0 72 6f 72 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ror))..         
316f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
31700 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
31710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
31720 61 63 65 4f 70 73 2e 53 68 6f 77 4d 65 73 73 61  aceOps.ShowMessa
31730 67 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 79  ge(TracePriority
31740 2e 48 69 67 68 65 73 74 2c 0d 0a 20 20 20 20 20  .Highest,..     
31750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31760 20 20 20 20 20 20 20 20 20 20 20 64 65 62 75 67             debug
31770 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43  Callback, traceC
31780 61 6c 6c 62 61 63 6b 2c 20 74 68 69 73 41 73 73  allback, thisAss
31790 65 6d 62 6c 79 2c 0d 0a 20 20 20 20 20 20 20 20  embly,..        
317a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
317b0 20 20 20 20 20 20 20 20 65 72 72 6f 72 2c 20 74          error, t
317c0 72 61 63 65 43 61 74 65 67 6f 72 79 2c 20 4d 65  raceCategory, Me
317d0 73 73 61 67 65 42 6f 78 42 75 74 74 6f 6e 73 2e  ssageBoxButtons.
317e0 4f 4b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  OK,..           
317f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31800 20 20 20 20 20 4d 65 73 73 61 67 65 42 6f 78 49       MessageBoxI
31810 63 6f 6e 2e 45 72 72 6f 72 29 3b 0d 0a 0d 0a 20  con.Error);.... 
31820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31830 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
31840 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63  Ops.DebugAndTrac
31850 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e  e(TracePriority.
31860 4d 65 64 69 75 6d 48 69 67 68 2c 0d 0a 20 20 20  MediumHigh,..   
31870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31880 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62               deb
31890 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63  ugCallback, trac
318a0 65 43 61 6c 6c 62 61 63 6b 2c 20 22 46 61 69 6c  eCallback, "Fail
318b0 75 72 65 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20  ure.",..        
318c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
318d0 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74          traceCat
318e0 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  egory);....     
318f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31900 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 31 3b         return 1;
31910 20 2f 2a 20 46 41 49 4c 55 52 45 20 2a 2f 0d 0a   /* FAILURE */..
31920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31930 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
31940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
31950 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
31960 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
31970 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
31980 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
31990 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
319d0 20 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69             #regi
319e0 6f 6e 20 56 53 20 44 61 74 61 50 72 6f 76 69 64  on VS DataProvid
319f0 65 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  er..            
31a00 20 20 20 20 20 20 20 20 69 66 20 28 63 6f 6e 66          if (conf
31a10 69 67 75 72 61 74 69 6f 6e 2e 48 61 73 46 6c 61  iguration.HasFla
31a20 67 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  gs(..           
31a30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31a40 20 49 6e 73 74 61 6c 6c 46 6c 61 67 73 2e 56 73   InstallFlags.Vs
31a50 44 61 74 61 50 72 6f 76 69 64 65 72 2c 20 74 72  DataProvider, tr
31a60 75 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ue))..          
31a70 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
31a80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31a90 20 20 20 20 20 69 66 20 28 21 46 6f 72 45 61 63       if (!ForEac
31aa0 68 56 73 56 65 72 73 69 6f 6e 52 65 67 69 73 74  hVsVersionRegist
31ab0 72 79 28 72 65 67 69 73 74 72 79 2c 0d 0a 20 20  ry(registry,..  
31ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 76 73                vs
31ae0 4c 69 73 74 2c 20 50 72 6f 63 65 73 73 56 73 44  List, ProcessVsD
31af0 61 74 61 50 72 6f 76 69 64 65 72 2c 20 70 61 63  ataProvider, pac
31b00 6b 61 67 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  kage,..         
31b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31b20 20 20 20 20 20 20 20 66 69 6c 65 4e 61 6d 65 44         fileNameD
31b30 61 74 61 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ata,..          
31b40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31b50 20 20 20 20 20 20 56 73 49 73 33 32 42 69 74 4f        VsIs32BitO
31b60 6e 6c 79 20 7c 7c 20 63 6f 6e 66 69 67 75 72 61  nly || configura
31b70 74 69 6f 6e 2e 57 6f 77 36 34 2c 0d 0a 20 20 20  tion.Wow64,..   
31b80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31b90 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
31ba0 66 69 67 75 72 61 74 69 6f 6e 2e 54 68 72 6f 77  figuration.Throw
31bb0 4f 6e 4d 69 73 73 69 6e 67 2c 0d 0a 20 20 20 20  OnMissing,..    
31bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31bd0 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66              conf
31be0 69 67 75 72 61 74 69 6f 6e 2e 57 68 61 74 49 66  iguration.WhatIf
31bf0 2c 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e  , configuration.
31c00 56 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20  Verbose,..      
31c10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31c20 20 20 20 20 20 20 20 20 20 20 72 65 66 20 65 72            ref er
31c30 72 6f 72 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ror))..         
31c40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
31c50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
31c60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
31c70 61 63 65 4f 70 73 2e 53 68 6f 77 4d 65 73 73 61  aceOps.ShowMessa
31c80 67 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 79  ge(TracePriority
31c90 2e 48 69 67 68 65 73 74 2c 0d 0a 20 20 20 20 20  .Highest,..     
31ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31cb0 20 20 20 20 20 20 20 20 20 20 20 64 65 62 75 67             debug
31cc0 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43  Callback, traceC
31cd0 61 6c 6c 62 61 63 6b 2c 20 74 68 69 73 41 73 73  allback, thisAss
31ce0 65 6d 62 6c 79 2c 0d 0a 20 20 20 20 20 20 20 20  embly,..        
31cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31d00 20 20 20 20 20 20 20 20 65 72 72 6f 72 2c 20 74          error, t
31d10 72 61 63 65 43 61 74 65 67 6f 72 79 2c 20 4d 65  raceCategory, Me
31d20 73 73 61 67 65 42 6f 78 42 75 74 74 6f 6e 73 2e  ssageBoxButtons.
31d30 4f 4b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  OK,..           
31d40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31d50 20 20 20 20 20 4d 65 73 73 61 67 65 42 6f 78 49       MessageBoxI
31d60 63 6f 6e 2e 45 72 72 6f 72 29 3b 0d 0a 0d 0a 20  con.Error);.... 
31d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31d80 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
31d90 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63  Ops.DebugAndTrac
31da0 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e  e(TracePriority.
31db0 4d 65 64 69 75 6d 48 69 67 68 2c 0d 0a 20 20 20  MediumHigh,..   
31dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62               deb
31de0 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63  ugCallback, trac
31df0 65 43 61 6c 6c 62 61 63 6b 2c 20 22 46 61 69 6c  eCallback, "Fail
31e00 75 72 65 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20  ure.",..        
31e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31e20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74          traceCat
31e30 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  egory);....     
31e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31e50 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 31 3b         return 1;
31e60 20 2f 2a 20 46 41 49 4c 55 52 45 20 2a 2f 0d 0a   /* FAILURE */..
31e70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31e80 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
31e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
31ea0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
31eb0 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
31ec0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
31ed0 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
31ee0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31ef0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31f00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31f10 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
31f20 20 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69             #regi
31f30 6f 6e 20 4c 6f 67 20 53 75 6d 6d 61 72 79 0d 0a  on Log Summary..
31f40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31f50 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62      TraceOps.Deb
31f60 75 67 41 6e 64 54 72 61 63 65 28 54 72 61 63 65  ugAndTrace(Trace
31f70 50 72 69 6f 72 69 74 79 2e 4d 65 64 69 75 6d 48  Priority.MediumH
31f80 69 67 68 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  igh,..          
31f90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65                de
31fa0 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61  bugCallback, tra
31fb0 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69  ceCallback, Stri
31fc0 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ng.Format(..    
31fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31fe0 20 20 20 20 22 73 75 62 4b 65 79 73 43 72 65 61      "subKeysCrea
31ff0 74 65 64 20 3d 20 7b 30 7d 2c 20 73 75 62 4b 65  ted = {0}, subKe
32000 79 73 44 65 6c 65 74 65 64 20 3d 20 7b 31 7d 2c  ysDeleted = {1},
32010 20 22 20 2b 0d 0a 20 20 20 20 20 20 20 20 20 20   " +..          
32020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 6b                "k
32030 65 79 56 61 6c 75 65 73 53 65 74 20 3d 20 7b 32  eyValuesSet = {2
32040 7d 2c 20 6b 65 79 56 61 6c 75 65 73 44 65 6c 65  }, keyValuesDele
32050 74 65 64 20 3d 20 7b 33 7d 22 2c 0d 0a 20 20 20  ted = {3}",..   
32060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32070 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28       ForDisplay(
32080 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 53  RegistryHelper.S
32090 75 62 4b 65 79 73 43 72 65 61 74 65 64 29 2c 0d  ubKeysCreated),.
320a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
320b0 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70           ForDisp
320c0 6c 61 79 28 52 65 67 69 73 74 72 79 48 65 6c 70  lay(RegistryHelp
320d0 65 72 2e 53 75 62 4b 65 79 73 44 65 6c 65 74 65  er.SubKeysDelete
320e0 64 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  d),..           
320f0 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72               For
32100 44 69 73 70 6c 61 79 28 52 65 67 69 73 74 72 79  Display(Registry
32110 48 65 6c 70 65 72 2e 4b 65 79 56 61 6c 75 65 73  Helper.KeyValues
32120 53 65 74 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  Set),..         
32130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46                 F
32140 6f 72 44 69 73 70 6c 61 79 28 52 65 67 69 73 74  orDisplay(Regist
32150 72 79 48 65 6c 70 65 72 2e 4b 65 79 56 61 6c 75  ryHelper.KeyValu
32160 65 73 44 65 6c 65 74 65 64 29 29 2c 0d 0a 20 20  esDeleted)),..  
32170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32180 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67        traceCateg
32190 6f 72 79 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ory);..         
321a0 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 72             #endr
321b0 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20  egion....       
321c0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f               ///
321d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
321e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
321f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32200 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
32210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32220 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e  TraceOps.DebugAn
32230 64 54 72 61 63 65 28 54 72 61 63 65 50 72 69 6f  dTrace(TracePrio
32240 72 69 74 79 2e 4d 65 64 69 75 6d 48 69 67 68 2c  rity.MediumHigh,
32250 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
32260 20 20 20 20 20 20 20 20 20 20 64 65 62 75 67 43            debugC
32270 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61  allback, traceCa
32280 6c 6c 62 61 63 6b 2c 20 22 53 75 63 63 65 73 73  llback, "Success
32290 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  .",..           
322a0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
322b0 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
322c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
322d0 20 20 20 20 72 65 74 75 72 6e 20 30 3b 20 2f 2a      return 0; /*
322e0 20 53 55 43 43 45 53 53 20 2a 2f 0d 0a 20 20 20   SUCCESS */..   
322f0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
32300 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
32310 20 20 20 20 20 20 20 20 20 20 20 63 61 74 63 68             catch
32320 20 28 45 78 63 65 70 74 69 6f 6e 20 65 29 0d 0a   (Exception e)..
32330 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
32340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
32350 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64  raceOps.DebugAnd
32360 54 72 61 63 65 28 54 72 61 63 65 50 72 69 6f 72  Trace(TracePrior
32370 69 74 79 2e 48 69 67 68 65 73 74 2c 0d 0a 20 20  ity.Highest,..  
32380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32390 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c    debugCallback,
323a0 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20   traceCallback, 
323b0 65 2c 20 74 72 61 63 65 43 61 74 65 67 6f 72 79  e, traceCategory
323c0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
323d0 20 20 20 20 20 20 74 68 72 6f 77 3b 0d 0a 20 20        throw;..  
323e0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
323f0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
32400 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 20 20 20 20  #endregion..    
32410 7d 0d 0a 20 20 20 20 23 65 6e 64 72 65 67 69 6f  }..    #endregio
32420 6e 0d 0a 7d 0d 0a                                n..}..