System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact 79ffd6e051a9fcd9730890a90d1252fbd9f27f12:


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 70  s..            p
1b80: 75 62 6c 69 63 20 73 74 61 74 69 63 20 44 69 61  ublic static Dia
1b90: 6c 6f 67 52 65 73 75 6c 74 20 53 68 6f 77 4d 65  logResult ShowMe
1ba0: 73 73 61 67 65 28 0d 0a 20 20 20 20 20 20 20 20  ssage(..        
1bb0: 20 20 20 20 20 20 20 20 54 72 61 63 65 50 72 69          TracePri
1bc0: 6f 72 69 74 79 20 74 72 61 63 65 50 72 69 6f 72  ority tracePrior
1bd0: 69 74 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ity,..          
1be0: 20 20 20 20 20 20 54 72 61 63 65 43 61 6c 6c 62        TraceCallb
1bf0: 61 63 6b 20 64 65 62 75 67 43 61 6c 6c 62 61 63  ack debugCallbac
1c00: 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  k,..            
1c10: 20 20 20 20 54 72 61 63 65 43 61 6c 6c 62 61 63      TraceCallbac
1c20: 6b 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c  k traceCallback,
1c30: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1c40: 20 20 41 73 73 65 6d 62 6c 79 20 61 73 73 65 6d    Assembly assem
1c50: 62 6c 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  bly,..          
1c60: 20 20 20 20 20 20 73 74 72 69 6e 67 20 6d 65 73        string mes
1c70: 73 61 67 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  sage,..         
1c80: 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 63 61         string ca
1c90: 74 65 67 6f 72 79 2c 0d 0a 20 20 20 20 20 20 20  tegory,..       
1ca0: 20 20 20 20 20 20 20 20 20 4d 65 73 73 61 67 65           Message
1cb0: 42 6f 78 42 75 74 74 6f 6e 73 20 62 75 74 74 6f  BoxButtons butto
1cc0: 6e 73 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ns,..           
1cd0: 20 20 20 20 20 4d 65 73 73 61 67 65 42 6f 78 49       MessageBoxI
1ce0: 63 6f 6e 20 69 63 6f 6e 0d 0a 20 20 20 20 20 20  con icon..      
1cf0: 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
1d00: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
1d10: 20 20 20 20 20 20 20 20 20 20 20 20 44 69 61 6c              Dial
1d20: 6f 67 52 65 73 75 6c 74 20 72 65 73 75 6c 74 20  ogResult result 
1d30: 3d 20 44 69 61 6c 6f 67 52 65 73 75 6c 74 2e 4f  = DialogResult.O
1d40: 4b 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  K;....          
1d50: 20 20 20 20 20 20 44 65 62 75 67 41 6e 64 54 72        DebugAndTr
1d60: 61 63 65 28 74 72 61 63 65 50 72 69 6f 72 69 74  ace(tracePriorit
1d70: 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y,..            
1d80: 20 20 20 20 20 20 20 20 64 65 62 75 67 43 61 6c          debugCal
1d90: 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c  lback, traceCall
1da0: 62 61 63 6b 2c 20 6d 65 73 73 61 67 65 2c 20 63  back, message, c
1db0: 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20  ategory);....   
1dc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
1dd0: 28 53 79 73 74 65 6d 49 6e 66 6f 72 6d 61 74 69  (SystemInformati
1de0: 6f 6e 2e 55 73 65 72 49 6e 74 65 72 61 63 74 69  on.UserInteracti
1df0: 76 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ve)..           
1e00: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
1e10: 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
1e20: 6e 67 20 74 69 74 6c 65 20 3d 20 47 65 74 41 73  ng title = GetAs
1e30: 73 65 6d 62 6c 79 54 69 74 6c 65 28 61 73 73 65  semblyTitle(asse
1e40: 6d 62 6c 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  mbly);....      
1e50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
1e60: 20 28 74 69 74 6c 65 20 3d 3d 20 6e 75 6c 6c 29   (title == null)
1e70: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1e80: 20 20 20 20 20 20 20 20 20 20 74 69 74 6c 65 20            title 
1e90: 3d 20 41 70 70 6c 69 63 61 74 69 6f 6e 2e 50 72  = Application.Pr
1ea0: 6f 64 75 63 74 4e 61 6d 65 3b 0d 0a 0d 0a 20 20  oductName;....  
1eb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ec0: 20 20 72 65 73 75 6c 74 20 3d 20 4d 65 73 73 61    result = Messa
1ed0: 67 65 42 6f 78 2e 53 68 6f 77 28 6d 65 73 73 61  geBox.Show(messa
1ee0: 67 65 2c 20 74 69 74 6c 65 2c 20 62 75 74 74 6f  ge, title, butto
1ef0: 6e 73 2c 20 69 63 6f 6e 29 3b 0d 0a 0d 0a 20 20  ns, icon);....  
1f00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f10: 20 20 44 65 62 75 67 41 6e 64 54 72 61 63 65 28    DebugAndTrace(
1f20: 74 72 61 63 65 50 72 69 6f 72 69 74 79 2c 0d 0a  tracePriority,..
1f30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f40: 20 20 20 20 20 20 20 20 64 65 62 75 67 43 61 6c          debugCal
1f50: 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c  lback, traceCall
1f60: 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72  back, String.For
1f70: 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
1f80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 55                "U
1f90: 73 65 72 20 63 68 6f 69 63 65 20 6f 66 20 7b 30  ser choice of {0
1fa0: 7d 2e 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28  }.", ForDisplay(
1fb0: 72 65 73 75 6c 74 29 29 2c 0d 0a 20 20 20 20 20  result)),..     
1fc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fd0: 20 20 20 63 61 74 65 67 6f 72 79 29 3b 0d 0a 0d     category);...
1fe0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1ff0: 20 20 20 20 20 72 65 74 75 72 6e 20 72 65 73 75       return resu
2000: 6c 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  lt;..           
2010: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
2020: 20 20 20 20 20 20 20 20 20 20 44 65 62 75 67 41            DebugA
2030: 6e 64 54 72 61 63 65 28 74 72 61 63 65 50 72 69  ndTrace(tracePri
2040: 6f 72 69 74 79 2c 0d 0a 20 20 20 20 20 20 20 20  ority,..        
2050: 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62 75              debu
2060: 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65  gCallback, trace
2070: 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67  Callback, String
2080: 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  .Format(..      
2090: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 44                "D
20a0: 65 66 61 75 6c 74 20 63 68 6f 69 63 65 20 6f 66  efault choice of
20b0: 20 7b 30 7d 2e 22 2c 20 46 6f 72 44 69 73 70 6c   {0}.", ForDispl
20c0: 61 79 28 72 65 73 75 6c 74 29 29 2c 0d 0a 20 20  ay(result)),..  
20d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20e0: 20 20 63 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a    category);....
20f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2100: 72 65 74 75 72 6e 20 72 65 73 75 6c 74 3b 0d 0a  return result;..
2110: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
2120: 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 72             #endr
2130: 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20  egion....       
2140: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
2150: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2160: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2170: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2180: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
2190: 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20          #region 
21a0: 54 72 61 63 69 6e 67 20 53 75 70 70 6f 72 74 20  Tracing Support 
21b0: 4d 65 74 68 6f 64 73 0d 0a 20 20 20 20 20 20 20  Methods..       
21c0: 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74       public stat
21d0: 69 63 20 76 6f 69 64 20 53 65 74 75 70 44 65 62  ic void SetupDeb
21e0: 75 67 4c 69 73 74 65 6e 65 72 73 28 29 0d 0a 20  ugListeners().. 
21f0: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
2200: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
2210: 20 28 64 65 62 75 67 4c 69 73 74 65 6e 65 72 73   (debugListeners
2220: 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
2230: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
2240: 65 62 75 67 4c 69 73 74 65 6e 65 72 73 20 3d 20  ebugListeners = 
2250: 6e 65 77 20 4c 69 73 74 3c 54 72 61 63 65 4c 69  new List<TraceLi
2260: 73 74 65 6e 65 72 3e 28 29 3b 0d 0a 0d 0a 20 20  stener>();....  
2270: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65                de
2280: 62 75 67 4c 69 73 74 65 6e 65 72 73 2e 41 64 64  bugListeners.Add
2290: 28 6e 65 77 20 43 6f 6e 73 6f 6c 65 54 72 61 63  (new ConsoleTrac
22a0: 65 4c 69 73 74 65 6e 65 72 28 29 29 3b 0d 0a 20  eListener());.. 
22b0: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
22c0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
22d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2300: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
2310: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
2320: 75 62 6c 69 63 20 73 74 61 74 69 63 20 6c 6f 6e  ublic static lon
2330: 67 20 4e 65 78 74 44 65 62 75 67 49 64 28 29 0d  g NextDebugId().
2340: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
2350: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2360: 72 65 74 75 72 6e 20 49 6e 74 65 72 6c 6f 63 6b  return Interlock
2370: 65 64 2e 49 6e 63 72 65 6d 65 6e 74 28 72 65 66  ed.Increment(ref
2380: 20 6e 65 78 74 44 65 62 75 67 49 64 29 3b 0d 0a   nextDebugId);..
2390: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
23a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
23b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23f0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2400: 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 6c 6f  public static lo
2410: 6e 67 20 4e 65 78 74 54 72 61 63 65 49 64 28 29  ng NextTraceId()
2420: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
2430: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2440: 20 72 65 74 75 72 6e 20 49 6e 74 65 72 6c 6f 63   return Interloc
2450: 6b 65 64 2e 49 6e 63 72 65 6d 65 6e 74 28 72 65  ked.Increment(re
2460: 66 20 6e 65 78 74 54 72 61 63 65 49 64 29 3b 0d  f nextTraceId);.
2470: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
2480: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
2490: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24d0: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
24e0: 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 73   public static s
24f0: 74 72 69 6e 67 20 54 69 6d 65 53 74 61 6d 70 28  tring TimeStamp(
2500: 44 61 74 65 54 69 6d 65 20 64 61 74 65 54 69 6d  DateTime dateTim
2510: 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e)..            
2520: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
2530: 20 20 20 72 65 74 75 72 6e 20 64 61 74 65 54 69     return dateTi
2540: 6d 65 2e 54 6f 53 74 72 69 6e 67 28 49 73 6f 38  me.ToString(Iso8
2550: 36 30 31 44 61 74 65 54 69 6d 65 4f 75 74 70 75  601DateTimeOutpu
2560: 74 46 6f 72 6d 61 74 29 3b 0d 0a 20 20 20 20 20  tFormat);..     
2570: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
2580: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
2590: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
25d0: 20 20 20 20 20 20 20 20 20 20 20 5b 4d 65 74 68             [Meth
25e0: 6f 64 49 6d 70 6c 28 4d 65 74 68 6f 64 49 6d 70  odImpl(MethodImp
25f0: 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e  lOptions.NoInlin
2600: 69 6e 67 29 5d 0d 0a 20 20 20 20 20 20 20 20 20  ing)]..         
2610: 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69     private stati
2620: 63 20 73 74 72 69 6e 67 20 47 65 74 4d 65 74 68  c string GetMeth
2630: 6f 64 4e 61 6d 65 28 0d 0a 20 20 20 20 20 20 20  odName(..       
2640: 20 20 20 20 20 20 20 20 20 53 74 61 63 6b 54 72           StackTr
2650: 61 63 65 20 73 74 61 63 6b 54 72 61 63 65 2c 0d  ace stackTrace,.
2660: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2670: 20 69 6e 74 20 6c 65 76 65 6c 0d 0a 20 20 20 20   int level..    
2680: 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
2690: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
26a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
26b0: 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  y..             
26c0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
26d0: 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
26e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26f0: 20 20 2f 2f 20 4e 4f 54 45 3a 20 49 66 20 61 20    // NOTE: If a 
2700: 76 61 6c 69 64 20 73 74 61 63 6b 20 74 72 61 63  valid stack trac
2710: 65 20 77 61 73 20 6e 6f 74 20 73 75 70 70 6c 69  e was not suppli
2720: 65 64 20 62 79 20 74 68 65 0d 0a 20 20 20 20 20  ed by the..     
2730: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
2740: 2f 20 20 20 20 20 20 20 63 61 6c 6c 65 72 2c 20  /       caller, 
2750: 63 72 65 61 74 65 20 6f 6e 65 20 6e 6f 77 20 62  create one now b
2760: 61 73 65 64 20 6f 6e 20 74 68 65 20 63 75 72 72  ased on the curr
2770: 65 6e 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ent..           
2780: 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
2790: 20 20 65 78 65 63 75 74 69 6f 6e 20 73 74 61 63    execution stac
27a0: 6b 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  k...            
27b0: 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
27c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27d0: 69 66 20 28 73 74 61 63 6b 54 72 61 63 65 20 3d  if (stackTrace =
27e0: 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
27f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
2800: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2810: 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
2820: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2830: 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 47 72 61      // NOTE: Gra
2840: 62 20 74 68 65 20 63 75 72 72 65 6e 74 20 65 78  b the current ex
2850: 65 63 75 74 69 6f 6e 20 73 74 61 63 6b 2e 0d 0a  ecution stack...
2860: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2870: 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
2880: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2890: 20 20 20 20 73 74 61 63 6b 54 72 61 63 65 20 3d      stackTrace =
28a0: 20 6e 65 77 20 53 74 61 63 6b 54 72 61 63 65 28   new StackTrace(
28b0: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
28c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
28d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
28e0: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54            // NOT
28f0: 45 3a 20 41 6c 77 61 79 73 20 73 6b 69 70 20 74  E: Always skip t
2900: 68 69 73 20 63 61 6c 6c 20 66 72 61 6d 65 20 77  his call frame w
2910: 68 65 6e 20 77 65 20 63 61 70 74 75 72 65 0d 0a  hen we capture..
2920: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2930: 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
2940: 20 74 68 65 20 73 74 61 63 6b 20 74 72 61 63 65   the stack trace
2950: 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
2960: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
2970: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2980: 20 20 20 20 20 20 20 6c 65 76 65 6c 2b 2b 3b 0d         level++;.
2990: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
29a0: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
29b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
29c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
29d0: 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 47        // NOTE: G
29e0: 65 74 20 74 68 65 20 73 70 65 63 69 66 69 65 64  et the specified
29f0: 20 73 74 61 63 6b 20 66 72 61 6d 65 20 28 61 6c   stack frame (al
2a00: 77 61 79 73 20 61 64 64 20 6f 6e 65 20 74 6f 0d  ways add one to.
2a10: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2a20: 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 73 6b       //       sk
2a30: 69 70 20 74 68 69 73 20 6d 65 74 68 6f 64 29 2e  ip this method).
2a40: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2a50: 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
2a60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 74                St
2a70: 61 63 6b 46 72 61 6d 65 20 73 74 61 63 6b 46 72  ackFrame stackFr
2a80: 61 6d 65 20 3d 20 73 74 61 63 6b 54 72 61 63 65  ame = stackTrace
2a90: 2e 47 65 74 46 72 61 6d 65 28 6c 65 76 65 6c 29  .GetFrame(level)
2aa0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
2ab0: 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
2ac0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ad0: 20 2f 2f 20 4e 4f 54 45 3a 20 47 65 74 20 74 68   // NOTE: Get th
2ae0: 65 20 6d 65 74 68 6f 64 20 66 6f 72 20 74 68 65  e method for the
2af0: 20 73 74 61 63 6b 20 66 72 61 6d 65 2e 0d 0a 20   stack frame... 
2b00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b10: 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
2b20: 20 20 20 20 20 20 20 20 20 20 20 4d 65 74 68 6f             Metho
2b30: 64 42 61 73 65 20 6d 65 74 68 6f 64 42 61 73 65  dBase methodBase
2b40: 20 3d 20 73 74 61 63 6b 46 72 61 6d 65 2e 47 65   = stackFrame.Ge
2b50: 74 4d 65 74 68 6f 64 28 29 3b 0d 0a 0d 0a 20 20  tMethod();....  
2b60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b70: 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
2b80: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54            // NOT
2b90: 45 3a 20 47 65 74 20 74 68 65 20 74 79 70 65 20  E: Get the type 
2ba0: 66 6f 72 20 74 68 65 20 6d 65 74 68 6f 64 2e 0d  for the method..
2bb0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2bc0: 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
2bd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 54 79 70               Typ
2be0: 65 20 74 79 70 65 20 3d 20 6d 65 74 68 6f 64 42  e type = methodB
2bf0: 61 73 65 2e 44 65 63 6c 61 72 69 6e 67 54 79 70  ase.DeclaringTyp
2c00: 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
2c10: 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
2c20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c30: 20 20 2f 2f 20 4e 4f 54 45 3a 20 47 65 74 20 74    // NOTE: Get t
2c40: 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 6d  he name of the m
2c50: 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20  ethod...        
2c60: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
2c70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c80: 20 20 20 20 73 74 72 69 6e 67 20 6e 61 6d 65 20      string name 
2c90: 3d 20 6d 65 74 68 6f 64 42 61 73 65 2e 4e 61 6d  = methodBase.Nam
2ca0: 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
2cb0: 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
2cc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cd0: 20 20 2f 2f 20 4e 4f 54 45 3a 20 52 65 74 75 72    // NOTE: Retur
2ce0: 6e 20 74 68 65 20 70 72 6f 70 65 72 6c 79 20 66  n the properly f
2cf0: 6f 72 6d 61 74 74 65 64 20 72 65 73 75 6c 74 2e  ormatted result.
2d00: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2d10: 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
2d20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
2d30: 74 75 72 6e 20 53 74 72 69 6e 67 2e 46 6f 72 6d  turn String.Form
2d40: 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
2d50: 20 20 20 20 20 20 20 20 20 20 20 20 20 22 7b 30               "{0
2d60: 7d 7b 31 7d 7b 32 7d 22 2c 20 74 79 70 65 2e 4e  }{1}{2}", type.N
2d70: 61 6d 65 2c 20 54 79 70 65 2e 44 65 6c 69 6d 69  ame, Type.Delimi
2d80: 74 65 72 2c 20 6e 61 6d 65 29 3b 0d 0a 20 20 20  ter, name);..   
2d90: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
2da0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2db0: 63 61 74 63 68 0d 0a 20 20 20 20 20 20 20 20 20  catch..         
2dc0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
2dd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
2de0: 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20   do nothing...  
2df0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
2e00: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
2e10: 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d     return null;.
2e20: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
2e30: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
2e40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e80: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
2e90: 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 76   public static v
2ea0: 6f 69 64 20 44 65 62 75 67 43 6f 72 65 28 0d 0a  oid DebugCore(..
2eb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ec0: 73 74 72 69 6e 67 20 6d 65 73 73 61 67 65 2c 0d  string message,.
2ed0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2ee0: 20 73 74 72 69 6e 67 20 63 61 74 65 67 6f 72 79   string category
2ef0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2f00: 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20    )..           
2f10: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
2f20: 20 20 20 20 6c 6f 63 6b 20 28 73 79 6e 63 52 6f      lock (syncRo
2f30: 6f 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ot)..           
2f40: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
2f50: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
2f60: 64 65 62 75 67 4c 69 73 74 65 6e 65 72 73 20 21  debugListeners !
2f70: 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
2f80: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
2f90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fa0: 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20          foreach 
2fb0: 28 54 72 61 63 65 4c 69 73 74 65 6e 65 72 20 6c  (TraceListener l
2fc0: 69 73 74 65 6e 65 72 20 69 6e 20 64 65 62 75 67  istener in debug
2fd0: 4c 69 73 74 65 6e 65 72 73 29 0d 0a 20 20 20 20  Listeners)..    
2fe0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ff0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
3000: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3010: 20 20 20 6c 69 73 74 65 6e 65 72 2e 57 72 69 74     listener.Writ
3020: 65 4c 69 6e 65 28 6d 65 73 73 61 67 65 2c 20 63  eLine(message, c
3030: 61 74 65 67 6f 72 79 29 3b 0d 0a 20 20 20 20 20  ategory);..     
3040: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3050: 20 20 20 20 20 20 20 6c 69 73 74 65 6e 65 72 2e         listener.
3060: 46 6c 75 73 68 28 29 3b 0d 0a 20 20 20 20 20 20  Flush();..      
3070: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3080: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
3090: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
30a0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
30b0: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
30c0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
30d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3100: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
3110: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
3120: 75 62 6c 69 63 20 73 74 61 74 69 63 20 76 6f 69  ublic static voi
3130: 64 20 54 72 61 63 65 43 6f 72 65 28 0d 0a 20 20  d TraceCore(..  
3140: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
3150: 72 69 6e 67 20 6d 65 73 73 61 67 65 2c 0d 0a 20  ring message,.. 
3160: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
3170: 74 72 69 6e 67 20 63 61 74 65 67 6f 72 79 0d 0a  tring category..
3180: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3190: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
31a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
31b0: 20 20 6c 6f 63 6b 20 28 73 79 6e 63 52 6f 6f 74    lock (syncRoot
31c0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
31d0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
31e0: 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
31f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3200: 20 20 2f 2f 20 4e 4f 54 45 3a 20 57 72 69 74 65    // NOTE: Write
3210: 20 74 68 65 20 6d 65 73 73 61 67 65 20 74 6f 20   the message to 
3220: 61 6c 6c 20 74 68 65 20 61 63 74 69 76 65 20 74  all the active t
3230: 72 61 63 65 0d 0a 20 20 20 20 20 20 20 20 20 20  race..          
3240: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
3250: 20 20 20 6c 69 73 74 65 6e 65 72 73 2e 0d 0a 20     listeners... 
3260: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3270: 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
3280: 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
3290: 2e 57 72 69 74 65 4c 69 6e 65 28 6d 65 73 73 61  .WriteLine(messa
32a0: 67 65 2c 20 63 61 74 65 67 6f 72 79 29 3b 0d 0a  ge, category);..
32b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32c0: 20 20 20 20 54 72 61 63 65 2e 46 6c 75 73 68 28      Trace.Flush(
32d0: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
32e0: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
32f0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
3300: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
3310: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3320: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3330: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3340: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
3350: 20 20 20 20 20 20 20 5b 4d 65 74 68 6f 64 49 6d         [MethodIm
3360: 70 6c 28 4d 65 74 68 6f 64 49 6d 70 6c 4f 70 74  pl(MethodImplOpt
3370: 69 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e 69 6e 67 29  ions.NoInlining)
3380: 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ]..            p
3390: 75 62 6c 69 63 20 73 74 61 74 69 63 20 73 74 72  ublic static str
33a0: 69 6e 67 20 44 65 62 75 67 41 6e 64 54 72 61 63  ing DebugAndTrac
33b0: 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
33c0: 20 20 20 20 54 72 61 63 65 50 72 69 6f 72 69 74      TracePriorit
33d0: 79 20 74 72 61 63 65 50 72 69 6f 72 69 74 79 2c  y tracePriority,
33e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
33f0: 20 20 54 72 61 63 65 43 61 6c 6c 62 61 63 6b 20    TraceCallback 
3400: 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a  debugCallback,..
3410: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3420: 54 72 61 63 65 43 61 6c 6c 62 61 63 6b 20 74 72  TraceCallback tr
3430: 61 63 65 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20  aceCallback,..  
3440: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 45 78                Ex
3450: 63 65 70 74 69 6f 6e 20 65 78 63 65 70 74 69 6f  ception exceptio
3460: 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n,..            
3470: 20 20 20 20 73 74 72 69 6e 67 20 63 61 74 65 67      string categ
3480: 6f 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ory..           
3490: 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
34a0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
34b0: 20 20 20 20 20 20 20 69 66 20 28 65 78 63 65 70         if (excep
34c0: 74 69 6f 6e 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20  tion != null).. 
34d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34e0: 20 20 20 72 65 74 75 72 6e 20 44 65 62 75 67 41     return DebugA
34f0: 6e 64 54 72 61 63 65 28 74 72 61 63 65 50 72 69  ndTrace(tracePri
3500: 6f 72 69 74 79 2c 20 64 65 62 75 67 43 61 6c 6c  ority, debugCall
3510: 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20  back,..         
3520: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
3530: 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 6e 65  raceCallback, ne
3540: 77 20 53 74 61 63 6b 54 72 61 63 65 28 65 78 63  w StackTrace(exc
3550: 65 70 74 69 6f 6e 2c 20 74 72 75 65 29 2c 20 30  eption, true), 0
3560: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
3570: 20 20 20 20 20 20 20 20 20 20 20 65 78 63 65 70             excep
3580: 74 69 6f 6e 2e 54 6f 53 74 72 69 6e 67 28 29 2c  tion.ToString(),
3590: 20 63 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20   category);.... 
35a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
35b0: 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 20 20 20  eturn null;..   
35c0: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
35d0: 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
35e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3600: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3610: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
3620: 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 4d 65  .            [Me
3630: 74 68 6f 64 49 6d 70 6c 28 4d 65 74 68 6f 64 49  thodImpl(MethodI
3640: 6d 70 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e 6c  mplOptions.NoInl
3650: 69 6e 69 6e 67 29 5d 0d 0a 20 20 20 20 20 20 20  ining)]..       
3660: 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74       public stat
3670: 69 63 20 73 74 72 69 6e 67 20 44 65 62 75 67 41  ic string DebugA
3680: 6e 64 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20  ndTrace(..      
3690: 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 50            TraceP
36a0: 72 69 6f 72 69 74 79 20 74 72 61 63 65 50 72 69  riority tracePri
36b0: 6f 72 69 74 79 2c 0d 0a 20 20 20 20 20 20 20 20  ority,..        
36c0: 20 20 20 20 20 20 20 20 54 72 61 63 65 43 61 6c          TraceCal
36d0: 6c 62 61 63 6b 20 64 65 62 75 67 43 61 6c 6c 62  lback debugCallb
36e0: 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ack,..          
36f0: 20 20 20 20 20 20 54 72 61 63 65 43 61 6c 6c 62        TraceCallb
3700: 61 63 6b 20 74 72 61 63 65 43 61 6c 6c 62 61 63  ack traceCallbac
3710: 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  k,..            
3720: 20 20 20 20 73 74 72 69 6e 67 20 6d 65 73 73 61      string messa
3730: 67 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ge,..           
3740: 20 20 20 20 20 73 74 72 69 6e 67 20 63 61 74 65       string cate
3750: 67 6f 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20  gory..          
3760: 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
3770: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
3780: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 44          return D
3790: 65 62 75 67 41 6e 64 54 72 61 63 65 28 0d 0a 20  ebugAndTrace(.. 
37a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37b0: 20 20 20 74 72 61 63 65 50 72 69 6f 72 69 74 79     tracePriority
37c0: 2c 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c  , debugCallback,
37d0: 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20   traceCallback, 
37e0: 6e 75 6c 6c 2c 20 31 2c 0d 0a 20 20 20 20 20 20  null, 1,..      
37f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6d 65                me
3800: 73 73 61 67 65 2c 20 63 61 74 65 67 6f 72 79 29  ssage, category)
3810: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
3820: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
3830: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3840: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3850: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3860: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3870: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
3880: 20 20 20 5b 4d 65 74 68 6f 64 49 6d 70 6c 28 4d     [MethodImpl(M
3890: 65 74 68 6f 64 49 6d 70 6c 4f 70 74 69 6f 6e 73  ethodImplOptions
38a0: 2e 4e 6f 49 6e 6c 69 6e 69 6e 67 29 5d 0d 0a 20  .NoInlining)].. 
38b0: 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
38c0: 74 65 20 73 74 61 74 69 63 20 73 74 72 69 6e 67  te static string
38d0: 20 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 0d   DebugAndTrace(.
38e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
38f0: 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 20 74   TracePriority t
3900: 72 61 63 65 50 72 69 6f 72 69 74 79 2c 0d 0a 20  racePriority,.. 
3910: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
3920: 72 61 63 65 43 61 6c 6c 62 61 63 6b 20 64 65 62  raceCallback deb
3930: 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20  ugCallback,..   
3940: 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61               Tra
3950: 63 65 43 61 6c 6c 62 61 63 6b 20 74 72 61 63 65  ceCallback trace
3960: 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20  Callback,..     
3970: 20 20 20 20 20 20 20 20 20 20 20 53 74 61 63 6b             Stack
3980: 54 72 61 63 65 20 73 74 61 63 6b 54 72 61 63 65  Trace stackTrace
3990: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
39a0: 20 20 20 69 6e 74 20 6c 65 76 65 6c 2c 0d 0a 20     int level,.. 
39b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
39c0: 74 72 69 6e 67 20 6d 65 73 73 61 67 65 2c 0d 0a  tring message,..
39d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
39e0: 73 74 72 69 6e 67 20 63 61 74 65 67 6f 72 79 0d  string category.
39f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
3a00: 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   )..            
3a10: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
3a20: 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
3a30: 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20         // NOTE: 
3a40: 41 6c 77 61 79 73 20 73 6b 69 70 20 74 68 69 73  Always skip this
3a50: 20 63 61 6c 6c 20 66 72 61 6d 65 20 69 66 20 74   call frame if t
3a60: 68 65 20 73 74 61 63 6b 20 74 72 61 63 65 20 69  he stack trace i
3a70: 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  s..             
3a80: 20 20 20 2f 2f 20 20 20 20 20 20 20 67 6f 69 6e     //       goin
3a90: 67 20 74 6f 20 62 65 20 63 61 70 74 75 72 65 64  g to be captured
3aa0: 20 62 79 20 47 65 74 4d 65 74 68 6f 64 4e 61 6d   by GetMethodNam
3ab0: 65 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e...            
3ac0: 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
3ad0: 20 20 20 20 20 20 20 20 69 66 20 28 73 74 61 63          if (stac
3ae0: 6b 54 72 61 63 65 20 3d 3d 20 6e 75 6c 6c 29 0d  kTrace == null).
3af0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
3b00: 20 20 20 20 20 6c 65 76 65 6c 2b 2b 3b 0d 0a 0d       level++;...
3b10: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
3b20: 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
3b30: 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 46 6f       // NOTE: Fo
3b40: 72 6d 61 74 20 74 68 65 20 6d 65 73 73 61 67 65  rmat the message
3b50: 20 66 6f 72 20 64 69 73 70 6c 61 79 20 28 6f 6e   for display (on
3b60: 63 65 29 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  ce)...          
3b70: 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
3b80: 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
3b90: 20 66 6f 72 6d 61 74 74 65 64 20 3d 20 53 74 72   formatted = Str
3ba0: 69 6e 67 2e 46 6f 72 6d 61 74 28 22 7b 30 7d 3a  ing.Format("{0}:
3bb0: 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20   {1}",..        
3bc0: 20 20 20 20 20 20 20 20 20 20 20 20 47 65 74 4d              GetM
3bd0: 65 74 68 6f 64 4e 61 6d 65 28 73 74 61 63 6b 54  ethodName(stackT
3be0: 72 61 63 65 2c 20 6c 65 76 65 6c 29 2c 20 6d 65  race, level), me
3bf0: 73 73 61 67 65 29 3b 0d 0a 0d 0a 20 20 20 20 20  ssage);....     
3c00: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
3c10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
3c20: 2f 20 4e 4f 54 45 3a 20 49 66 20 74 68 65 20 64  / NOTE: If the d
3c30: 65 62 75 67 20 63 61 6c 6c 62 61 63 6b 20 69 73  ebug callback is
3c40: 20 69 6e 76 61 6c 69 64 20 6f 72 20 74 68 65 20   invalid or the 
3c50: 74 72 61 63 65 20 70 72 69 6f 72 69 74 79 0d 0a  trace priority..
3c60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3c70: 2f 2f 20 20 20 20 20 20 20 6f 66 20 74 68 69 73  //       of this
3c80: 20 6d 65 73 73 61 67 65 20 69 73 20 6c 65 73 73   message is less
3c90: 20 74 68 61 6e 20 77 68 61 74 20 77 65 20 63 75   than what we cu
3ca0: 72 72 65 6e 74 6c 79 20 77 61 6e 74 20 74 6f 0d  rrently want to.
3cb0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
3cc0: 20 2f 2f 20 20 20 20 20 20 20 64 65 62 75 67 2c   //       debug,
3cd0: 20 73 6b 69 70 20 69 74 2e 0d 0a 20 20 20 20 20   skip it...     
3ce0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
3cf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
3d00: 66 20 28 28 64 65 62 75 67 43 61 6c 6c 62 61 63  f ((debugCallbac
3d10: 6b 20 21 3d 20 6e 75 6c 6c 29 20 26 26 0d 0a 20  k != null) &&.. 
3d20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3d30: 20 20 20 28 74 72 61 63 65 50 72 69 6f 72 69 74     (tracePriorit
3d40: 79 20 3e 3d 20 44 65 62 75 67 50 72 69 6f 72 69  y >= DebugPriori
3d50: 74 79 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ty))..          
3d60: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
3d70: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
3d80: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
3d90: 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 49 6e       // NOTE: In
3da0: 76 6f 6b 65 20 74 68 65 20 64 65 62 75 67 20 63  voke the debug c
3db0: 61 6c 6c 62 61 63 6b 20 77 69 74 68 20 74 68 65  allback with the
3dc0: 20 66 6f 72 6d 61 74 74 65 64 0d 0a 20 20 20 20   formatted..    
3dd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3de0: 2f 2f 20 20 20 20 20 20 20 6d 65 73 73 61 67 65  //       message
3df0: 20 61 6e 64 20 74 68 65 20 63 61 74 65 67 6f 72   and the categor
3e00: 79 20 73 70 65 63 69 66 69 65 64 20 62 79 20 74  y specified by t
3e10: 68 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  he..            
3e20: 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
3e30: 20 63 61 6c 6c 65 72 2e 0d 0a 20 20 20 20 20 20   caller...      
3e40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
3e50: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
3e60: 20 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62        debugCallb
3e70: 61 63 6b 28 66 6f 72 6d 61 74 74 65 64 2c 20 63  ack(formatted, c
3e80: 61 74 65 67 6f 72 79 29 3b 0d 0a 20 20 20 20 20  ategory);..     
3e90: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
3ea0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3eb0: 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
3ec0: 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 49 66 20      // NOTE: If 
3ed0: 74 68 65 20 74 72 61 63 65 20 63 61 6c 6c 62 61  the trace callba
3ee0: 63 6b 20 69 73 20 69 6e 76 61 6c 69 64 20 6f 72  ck is invalid or
3ef0: 20 74 68 65 20 74 72 61 63 65 20 70 72 69 6f 72   the trace prior
3f00: 69 74 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ity..           
3f10: 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 6f 66       //       of
3f20: 20 74 68 69 73 20 6d 65 73 73 61 67 65 20 69 73   this message is
3f30: 20 6c 65 73 73 20 74 68 61 6e 20 77 68 61 74 20   less than what 
3f40: 77 65 20 63 75 72 72 65 6e 74 6c 79 20 77 61 6e  we currently wan
3f50: 74 20 74 6f 0d 0a 20 20 20 20 20 20 20 20 20 20  t to..          
3f60: 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 74        //       t
3f70: 72 61 63 65 2c 20 73 6b 69 70 20 69 74 2e 0d 0a  race, skip it...
3f80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3f90: 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
3fa0: 20 20 20 20 69 66 20 28 28 74 72 61 63 65 43 61      if ((traceCa
3fb0: 6c 6c 62 61 63 6b 20 21 3d 20 6e 75 6c 6c 29 20  llback != null) 
3fc0: 26 26 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  &&..            
3fd0: 20 20 20 20 20 20 20 20 28 74 72 61 63 65 50 72          (tracePr
3fe0: 69 6f 72 69 74 79 20 3e 3d 20 54 72 61 63 65 50  iority >= TraceP
3ff0: 72 69 6f 72 69 74 79 29 29 0d 0a 20 20 20 20 20  riority))..     
4000: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
4010: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4020: 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
4030: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54            // NOT
4040: 45 3a 20 49 6e 76 6f 6b 65 20 74 68 65 20 74 72  E: Invoke the tr
4050: 61 63 65 20 63 61 6c 6c 62 61 63 6b 20 77 69 74  ace callback wit
4060: 68 20 74 68 65 20 66 6f 72 6d 61 74 74 65 64 0d  h the formatted.
4070: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
4080: 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 6d 65       //       me
4090: 73 73 61 67 65 20 61 6e 64 20 74 68 65 20 63 61  ssage and the ca
40a0: 74 65 67 6f 72 79 20 73 70 65 63 69 66 69 65 64  tegory specified
40b0: 20 62 79 20 74 68 65 0d 0a 20 20 20 20 20 20 20   by the..       
40c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
40d0: 20 20 20 20 20 20 63 61 6c 6c 65 72 2e 0d 0a 20        caller... 
40e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
40f0: 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
4100: 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
4110: 43 61 6c 6c 62 61 63 6b 28 66 6f 72 6d 61 74 74  Callback(formatt
4120: 65 64 2c 20 63 61 74 65 67 6f 72 79 29 3b 0d 0a  ed, category);..
4130: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4140: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
4150: 20 20 20 20 20 72 65 74 75 72 6e 20 6d 65 73 73       return mess
4160: 61 67 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  age;..          
4170: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
4180: 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 20 20 20   #endregion..   
4190: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
41a0: 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20  #endregion....  
41b0: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
41c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
41d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
41e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
41f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
4200: 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e  .        #region
4210: 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 20 43 6c   MockRegistry Cl
4220: 61 73 73 0d 0a 20 20 20 20 20 20 20 20 70 72 69  ass..        pri
4230: 76 61 74 65 20 73 65 61 6c 65 64 20 63 6c 61 73  vate sealed clas
4240: 73 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 20 3a  s MockRegistry :
4250: 20 49 44 69 73 70 6f 73 61 62 6c 65 0d 0a 20 20   IDisposable..  
4260: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
4270: 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 75 62       #region Pub
4280: 6c 69 63 20 43 6f 6e 73 74 72 75 63 74 6f 72 73  lic Constructors
4290: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
42a0: 62 6c 69 63 20 4d 6f 63 6b 52 65 67 69 73 74 72  blic MockRegistr
42b0: 79 28 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  y()..           
42c0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
42d0: 20 20 20 20 77 68 61 74 49 66 20 3d 20 74 72 75      whatIf = tru
42e0: 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
42f0: 20 20 20 20 72 65 61 64 4f 6e 6c 79 20 3d 20 74      readOnly = t
4300: 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  rue;..          
4310: 20 20 20 20 20 20 73 61 66 65 20 3d 20 74 72 75        safe = tru
4320: 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
4330: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
4340: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
4350: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4360: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4370: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4380: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
4390: 20 20 20 20 70 75 62 6c 69 63 20 4d 6f 63 6b 52      public MockR
43a0: 65 67 69 73 74 72 79 28 0d 0a 20 20 20 20 20 20  egistry(..      
43b0: 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77            bool w
43c0: 68 61 74 49 66 0d 0a 20 20 20 20 20 20 20 20 20  hatIf..         
43d0: 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
43e0: 20 20 20 20 20 20 20 20 20 20 3a 20 74 68 69 73            : this
43f0: 28 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ()..            
4400: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
4410: 20 20 20 74 68 69 73 2e 77 68 61 74 49 66 20 3d     this.whatIf =
4420: 20 77 68 61 74 49 66 3b 0d 0a 20 20 20 20 20 20   whatIf;..      
4430: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
4440: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
4450: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4460: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4470: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4480: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
4490: 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
44a0: 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 28 0d 0a   MockRegistry(..
44b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
44c0: 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20  bool whatIf,..  
44d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f                bo
44e0: 6f 6c 20 72 65 61 64 4f 6e 6c 79 0d 0a 20 20 20  ol readOnly..   
44f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a               )..
4500: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4510: 3a 20 74 68 69 73 28 77 68 61 74 49 66 29 0d 0a  : this(whatIf)..
4520: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
4530: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
4540: 68 69 73 2e 72 65 61 64 4f 6e 6c 79 20 3d 20 72  his.readOnly = r
4550: 65 61 64 4f 6e 6c 79 3b 0d 0a 20 20 20 20 20 20  eadOnly;..      
4560: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
4570: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
4580: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4590: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
45a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
45b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
45c0: 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
45d0: 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 28 0d 0a   MockRegistry(..
45e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
45f0: 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20  bool whatIf,..  
4600: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f                bo
4610: 6f 6c 20 72 65 61 64 4f 6e 6c 79 2c 0d 0a 20 20  ol readOnly,..  
4620: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f                bo
4630: 6f 6c 20 73 61 66 65 0d 0a 20 20 20 20 20 20 20  ol safe..       
4640: 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
4650: 20 20 20 20 20 20 20 20 20 20 20 20 3a 20 74 68              : th
4660: 69 73 28 77 68 61 74 49 66 2c 20 72 65 61 64 4f  is(whatIf, readO
4670: 6e 6c 79 29 0d 0a 20 20 20 20 20 20 20 20 20 20  nly)..          
4680: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
4690: 20 20 20 20 20 74 68 69 73 2e 73 61 66 65 20 3d       this.safe =
46a0: 20 73 61 66 65 3b 0d 0a 20 20 20 20 20 20 20 20   safe;..        
46b0: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
46c0: 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
46d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
46e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
46f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4700: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4710: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4720: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
4730: 23 72 65 67 69 6f 6e 20 50 75 62 6c 69 63 20 50  #region Public P
4740: 72 6f 70 65 72 74 69 65 73 0d 0a 20 20 20 20 20  roperties..     
4750: 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 62         private b
4760: 6f 6f 6c 20 77 68 61 74 49 66 3b 0d 0a 20 20 20  ool whatIf;..   
4770: 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
4780: 62 6f 6f 6c 20 57 68 61 74 49 66 0d 0a 20 20 20  bool WhatIf..   
4790: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
47a0: 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20              get 
47b0: 7b 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28  { CheckDisposed(
47c0: 29 3b 20 72 65 74 75 72 6e 20 77 68 61 74 49 66  ); return whatIf
47d0: 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
47e0: 20 20 20 20 20 73 65 74 20 7b 20 43 68 65 63 6b       set { Check
47f0: 44 69 73 70 6f 73 65 64 28 29 3b 20 77 68 61 74  Disposed(); what
4800: 49 66 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20  If = value; }.. 
4810: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
4820: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
4830: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4840: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4850: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4860: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
4870: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
4880: 72 69 76 61 74 65 20 62 6f 6f 6c 20 72 65 61 64  rivate bool read
4890: 4f 6e 6c 79 3b 0d 0a 20 20 20 20 20 20 20 20 20  Only;..         
48a0: 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 52     public bool R
48b0: 65 61 64 4f 6e 6c 79 0d 0a 20 20 20 20 20 20 20  eadOnly..       
48c0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
48d0: 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 43 68          get { Ch
48e0: 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 20 72  eckDisposed(); r
48f0: 65 74 75 72 6e 20 72 65 61 64 4f 6e 6c 79 3b 20  eturn readOnly; 
4900: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
4910: 20 20 20 73 65 74 20 7b 20 43 68 65 63 6b 44 69     set { CheckDi
4920: 73 70 6f 73 65 64 28 29 3b 20 72 65 61 64 4f 6e  sposed(); readOn
4930: 6c 79 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20  ly = value; }.. 
4940: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
4950: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
4960: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4970: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4980: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4990: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
49a0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
49b0: 72 69 76 61 74 65 20 62 6f 6f 6c 20 73 61 66 65  rivate bool safe
49c0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ;..            p
49d0: 75 62 6c 69 63 20 62 6f 6f 6c 20 53 61 66 65 0d  ublic bool Safe.
49e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
49f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4a00: 67 65 74 20 7b 20 43 68 65 63 6b 44 69 73 70 6f  get { CheckDispo
4a10: 73 65 64 28 29 3b 20 72 65 74 75 72 6e 20 73 61  sed(); return sa
4a20: 66 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  fe; }..         
4a30: 20 20 20 20 20 20 20 73 65 74 20 7b 20 43 68 65         set { Che
4a40: 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 20 73 61  ckDisposed(); sa
4a50: 66 65 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20  fe = value; }.. 
4a60: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
4a70: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
4a80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4a90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4aa0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4ab0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
4ac0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
4ad0: 72 69 76 61 74 65 20 4d 6f 63 6b 52 65 67 69 73  rivate MockRegis
4ae0: 74 72 79 4b 65 79 20 63 6c 61 73 73 65 73 52 6f  tryKey classesRo
4af0: 6f 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ot;..           
4b00: 20 70 75 62 6c 69 63 20 4d 6f 63 6b 52 65 67 69   public MockRegi
4b10: 73 74 72 79 4b 65 79 20 43 6c 61 73 73 65 73 52  stryKey ClassesR
4b20: 6f 6f 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20  oot..           
4b30: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
4b40: 20 20 20 20 67 65 74 0d 0a 20 20 20 20 20 20 20      get..       
4b50: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
4b60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4b70: 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b  CheckDisposed();
4b80: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
4b90: 20 20 20 20 20 20 20 20 69 66 20 28 63 6c 61 73          if (clas
4ba0: 73 65 73 52 6f 6f 74 20 3d 3d 20 6e 75 6c 6c 29  sesRoot == null)
4bb0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
4bc0: 20 20 20 20 20 20 20 20 20 20 63 6c 61 73 73 65            classe
4bd0: 73 52 6f 6f 74 20 3d 20 6e 65 77 20 4d 6f 63 6b  sRoot = new Mock
4be0: 52 65 67 69 73 74 72 79 4b 65 79 28 0d 0a 20 20  RegistryKey(..  
4bf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4c00: 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74            Regist
4c10: 72 79 2e 43 6c 61 73 73 65 73 52 6f 6f 74 2c 20  ry.ClassesRoot, 
4c20: 77 68 61 74 49 66 2c 20 72 65 61 64 4f 6e 6c 79  whatIf, readOnly
4c30: 2c 20 73 61 66 65 29 3b 0d 0a 0d 0a 20 20 20 20  , safe);....    
4c40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4c50: 72 65 74 75 72 6e 20 63 6c 61 73 73 65 73 52 6f  return classesRo
4c60: 6f 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ot;..           
4c70: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
4c80: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
4c90: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
4ca0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4cb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4cc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4cd0: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
4ce0: 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
4cf0: 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20  MockRegistryKey 
4d00: 63 75 72 72 65 6e 74 43 6f 6e 66 69 67 3b 0d 0a  currentConfig;..
4d10: 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
4d20: 69 63 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b  ic MockRegistryK
4d30: 65 79 20 43 75 72 72 65 6e 74 43 6f 6e 66 69 67  ey CurrentConfig
4d40: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
4d50: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
4d60: 20 67 65 74 0d 0a 20 20 20 20 20 20 20 20 20 20   get..          
4d70: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
4d80: 20 20 20 20 20 20 20 20 20 20 20 20 20 43 68 65               Che
4d90: 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 0d  ckDisposed();...
4da0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
4db0: 20 20 20 20 20 69 66 20 28 63 75 72 72 65 6e 74       if (current
4dc0: 43 6f 6e 66 69 67 20 3d 3d 20 6e 75 6c 6c 29 0d  Config == null).
4dd0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
4de0: 20 20 20 20 20 20 20 20 20 63 75 72 72 65 6e 74           current
4df0: 43 6f 6e 66 69 67 20 3d 20 6e 65 77 20 4d 6f 63  Config = new Moc
4e00: 6b 52 65 67 69 73 74 72 79 4b 65 79 28 0d 0a 20  kRegistryKey(.. 
4e10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4e20: 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73             Regis
4e30: 74 72 79 2e 43 75 72 72 65 6e 74 43 6f 6e 66 69  try.CurrentConfi
4e40: 67 2c 20 77 68 61 74 49 66 2c 20 72 65 61 64 4f  g, whatIf, readO
4e50: 6e 6c 79 2c 20 73 61 66 65 29 3b 0d 0a 0d 0a 20  nly, safe);.... 
4e60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4e70: 20 20 20 72 65 74 75 72 6e 20 63 75 72 72 65 6e     return curren
4e80: 74 43 6f 6e 66 69 67 3b 0d 0a 20 20 20 20 20 20  tConfig;..      
4e90: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
4ea0: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
4eb0: 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
4ec0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4ed0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4ee0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4ef0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
4f00: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69  .            pri
4f10: 76 61 74 65 20 4d 6f 63 6b 52 65 67 69 73 74 72  vate MockRegistr
4f20: 79 4b 65 79 20 63 75 72 72 65 6e 74 55 73 65 72  yKey currentUser
4f30: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ;..            p
4f40: 75 62 6c 69 63 20 4d 6f 63 6b 52 65 67 69 73 74  ublic MockRegist
4f50: 72 79 4b 65 79 20 43 75 72 72 65 6e 74 55 73 65  ryKey CurrentUse
4f60: 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  r..            {
4f70: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
4f80: 20 20 67 65 74 0d 0a 20 20 20 20 20 20 20 20 20    get..         
4f90: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
4fa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43 68                Ch
4fb0: 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a  eckDisposed();..
4fc0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
4fd0: 20 20 20 20 20 20 69 66 20 28 63 75 72 72 65 6e        if (curren
4fe0: 74 55 73 65 72 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  tUser == null)..
4ff0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5000: 20 20 20 20 20 20 20 20 63 75 72 72 65 6e 74 55          currentU
5010: 73 65 72 20 3d 20 6e 65 77 20 4d 6f 63 6b 52 65  ser = new MockRe
5020: 67 69 73 74 72 79 4b 65 79 28 0d 0a 20 20 20 20  gistryKey(..    
5030: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5040: 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79          Registry
5050: 2e 43 75 72 72 65 6e 74 55 73 65 72 2c 20 77 68  .CurrentUser, wh
5060: 61 74 49 66 2c 20 72 65 61 64 4f 6e 6c 79 2c 20  atIf, readOnly, 
5070: 73 61 66 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  safe);....      
5080: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
5090: 74 75 72 6e 20 63 75 72 72 65 6e 74 55 73 65 72  turn currentUser
50a0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
50b0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
50c0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
50d0: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
50e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
50f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5100: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5110: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
5120: 20 20 20 20 20 20 70 72 69 76 61 74 65 20 4d 6f        private Mo
5130: 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 64 79  ckRegistryKey dy
5140: 6e 44 61 74 61 3b 0d 0a 20 20 20 20 20 20 20 20  nData;..        
5150: 20 20 20 20 70 75 62 6c 69 63 20 4d 6f 63 6b 52      public MockR
5160: 65 67 69 73 74 72 79 4b 65 79 20 44 79 6e 44 61  egistryKey DynDa
5170: 74 61 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ta..            
5180: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
5190: 20 20 20 67 65 74 0d 0a 20 20 20 20 20 20 20 20     get..        
51a0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
51b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43                 C
51c0: 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d  heckDisposed();.
51d0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
51e0: 20 20 20 20 20 20 20 69 66 20 28 64 79 6e 44 61         if (dynDa
51f0: 74 61 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ta == null)..   
5200: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5210: 20 20 20 20 20 64 79 6e 44 61 74 61 20 3d 20 6e       dynData = n
5220: 65 77 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b  ew MockRegistryK
5230: 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ey(..           
5240: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5250: 20 52 65 67 69 73 74 72 79 2e 44 79 6e 44 61 74   Registry.DynDat
5260: 61 2c 20 77 68 61 74 49 66 2c 20 72 65 61 64 4f  a, whatIf, readO
5270: 6e 6c 79 2c 20 73 61 66 65 29 3b 0d 0a 0d 0a 20  nly, safe);.... 
5280: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5290: 20 20 20 72 65 74 75 72 6e 20 64 79 6e 44 61 74     return dynDat
52a0: 61 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  a;..            
52b0: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
52c0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
52d0: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
52e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
52f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5300: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5310: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
5320: 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 4d         private M
5330: 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 6c  ockRegistryKey l
5340: 6f 63 61 6c 4d 61 63 68 69 6e 65 3b 0d 0a 20 20  ocalMachine;..  
5350: 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
5360: 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79   MockRegistryKey
5370: 20 4c 6f 63 61 6c 4d 61 63 68 69 6e 65 0d 0a 20   LocalMachine.. 
5380: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
5390: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65                ge
53a0: 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  t..             
53b0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
53c0: 20 20 20 20 20 20 20 20 20 20 43 68 65 63 6b 44            CheckD
53d0: 69 73 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20 20  isposed();....  
53e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
53f0: 20 20 69 66 20 28 6c 6f 63 61 6c 4d 61 63 68 69    if (localMachi
5400: 6e 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ne == null)..   
5410: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5420: 20 20 20 20 20 6c 6f 63 61 6c 4d 61 63 68 69 6e       localMachin
5430: 65 20 3d 20 6e 65 77 20 4d 6f 63 6b 52 65 67 69  e = new MockRegi
5440: 73 74 72 79 4b 65 79 28 0d 0a 20 20 20 20 20 20  stryKey(..      
5450: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5460: 20 20 20 20 20 20 52 65 67 69 73 74 72 79 2e 4c        Registry.L
5470: 6f 63 61 6c 4d 61 63 68 69 6e 65 2c 20 77 68 61  ocalMachine, wha
5480: 74 49 66 2c 20 72 65 61 64 4f 6e 6c 79 2c 20 73  tIf, readOnly, s
5490: 61 66 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  afe);....       
54a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
54b0: 75 72 6e 20 6c 6f 63 61 6c 4d 61 63 68 69 6e 65  urn localMachine
54c0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
54d0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
54e0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
54f0: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
5500: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5510: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5520: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5530: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
5540: 20 20 20 20 20 20 70 72 69 76 61 74 65 20 4d 6f        private Mo
5550: 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 70 65  ckRegistryKey pe
5560: 72 66 6f 72 6d 61 6e 63 65 44 61 74 61 3b 0d 0a  rformanceData;..
5570: 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
5580: 69 63 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b  ic MockRegistryK
5590: 65 79 20 50 65 72 66 6f 72 6d 61 6e 63 65 44 61  ey PerformanceDa
55a0: 74 61 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ta..            
55b0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
55c0: 20 20 20 67 65 74 0d 0a 20 20 20 20 20 20 20 20     get..        
55d0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
55e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43                 C
55f0: 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d  heckDisposed();.
5600: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
5610: 20 20 20 20 20 20 20 69 66 20 28 70 65 72 66 6f         if (perfo
5620: 72 6d 61 6e 63 65 44 61 74 61 20 3d 3d 20 6e 75  rmanceData == nu
5630: 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
5640: 20 20 20 20 20 20 20 20 20 20 20 20 20 70 65 72               per
5650: 66 6f 72 6d 61 6e 63 65 44 61 74 61 20 3d 20 6e  formanceData = n
5660: 65 77 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b  ew MockRegistryK
5670: 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ey(..           
5680: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5690: 20 52 65 67 69 73 74 72 79 2e 50 65 72 66 6f 72   Registry.Perfor
56a0: 6d 61 6e 63 65 44 61 74 61 2c 20 77 68 61 74 49  manceData, whatI
56b0: 66 2c 20 72 65 61 64 4f 6e 6c 79 2c 20 73 61 66  f, readOnly, saf
56c0: 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e);....         
56d0: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
56e0: 6e 20 70 65 72 66 6f 72 6d 61 6e 63 65 44 61 74  n performanceDat
56f0: 61 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  a;..            
5700: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
5710: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
5720: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
5730: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5740: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5750: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5760: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
5770: 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 4d         private M
5780: 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 75  ockRegistryKey u
5790: 73 65 72 73 3b 0d 0a 20 20 20 20 20 20 20 20 20  sers;..         
57a0: 20 20 20 70 75 62 6c 69 63 20 4d 6f 63 6b 52 65     public MockRe
57b0: 67 69 73 74 72 79 4b 65 79 20 55 73 65 72 73 0d  gistryKey Users.
57c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
57d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
57e0: 67 65 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20  get..           
57f0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
5800: 20 20 20 20 20 20 20 20 20 20 20 20 43 68 65 63              Chec
5810: 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a  kDisposed();....
5820: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5830: 20 20 20 20 69 66 20 28 75 73 65 72 73 20 3d 3d      if (users ==
5840: 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
5850: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5860: 75 73 65 72 73 20 3d 20 6e 65 77 20 4d 6f 63 6b  users = new Mock
5870: 52 65 67 69 73 74 72 79 4b 65 79 28 0d 0a 20 20  RegistryKey(..  
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 20 20 52 65 67 69 73 74            Regist
58a0: 72 79 2e 55 73 65 72 73 2c 20 77 68 61 74 49 66  ry.Users, whatIf
58b0: 2c 20 72 65 61 64 4f 6e 6c 79 2c 20 73 61 66 65  , readOnly, safe
58c0: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
58d0: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
58e0: 20 75 73 65 72 73 3b 0d 0a 20 20 20 20 20 20 20   users;..       
58f0: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
5900: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
5910: 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f         #endregio
5920: 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n....           
5930: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
5940: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5950: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5960: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5970: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
5980: 20 20 20 20 23 72 65 67 69 6f 6e 20 50 75 62 6c      #region Publ
5990: 69 63 20 22 52 65 67 69 73 74 72 79 22 20 4d 65  ic "Registry" Me
59a0: 74 68 6f 64 73 0d 0a 20 20 20 20 20 20 20 20 20  thods..         
59b0: 20 20 20 70 75 62 6c 69 63 20 6f 62 6a 65 63 74     public object
59c0: 20 47 65 74 56 61 6c 75 65 28 0d 0a 20 20 20 20   GetValue(..    
59d0: 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
59e0: 6e 67 20 6b 65 79 4e 61 6d 65 2c 0d 0a 20 20 20  ng keyName,..   
59f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72               str
5a00: 69 6e 67 20 76 61 6c 75 65 4e 61 6d 65 2c 0d 0a  ing valueName,..
5a10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5a20: 6f 62 6a 65 63 74 20 64 65 66 61 75 6c 74 56 61  object defaultVa
5a30: 6c 75 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  lue..           
5a40: 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
5a50: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
5a60: 20 20 20 20 20 20 20 43 68 65 63 6b 44 69 73 70         CheckDisp
5a70: 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20  osed();....     
5a80: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
5a90: 6e 20 52 65 67 69 73 74 72 79 2e 47 65 74 56 61  n Registry.GetVa
5aa0: 6c 75 65 28 6b 65 79 4e 61 6d 65 2c 20 76 61 6c  lue(keyName, val
5ab0: 75 65 4e 61 6d 65 2c 20 64 65 66 61 75 6c 74 56  ueName, defaultV
5ac0: 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  alue);..        
5ad0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
5ae0: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
5af0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5b00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5b10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5b20: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
5b30: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 76          public v
5b40: 6f 69 64 20 53 65 74 56 61 6c 75 65 28 0d 0a 20  oid SetValue(.. 
5b50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
5b60: 74 72 69 6e 67 20 6b 65 79 4e 61 6d 65 2c 0d 0a  tring keyName,..
5b70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5b80: 73 74 72 69 6e 67 20 76 61 6c 75 65 4e 61 6d 65  string valueName
5b90: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
5ba0: 20 20 20 6f 62 6a 65 63 74 20 76 61 6c 75 65 0d     object value.
5bb0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
5bc0: 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   )..            
5bd0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
5be0: 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64     CheckDisposed
5bf0: 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ();..           
5c00: 20 20 20 20 20 43 68 65 63 6b 52 65 61 64 4f 6e       CheckReadOn
5c10: 6c 79 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ly();....       
5c20: 20 20 20 20 20 20 20 20 20 69 66 20 28 21 77 68           if (!wh
5c30: 61 74 49 66 29 0d 0a 20 20 20 20 20 20 20 20 20  atIf)..         
5c40: 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73             Regis
5c50: 74 72 79 2e 53 65 74 56 61 6c 75 65 28 6b 65 79  try.SetValue(key
5c60: 4e 61 6d 65 2c 20 76 61 6c 75 65 4e 61 6d 65 2c  Name, valueName,
5c70: 20 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20   value);..      
5c80: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
5c90: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
5ca0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5cb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5cc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5cd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
5ce0: 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
5cf0: 20 76 6f 69 64 20 53 65 74 56 61 6c 75 65 28 0d   void SetValue(.
5d00: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
5d10: 20 73 74 72 69 6e 67 20 6b 65 79 4e 61 6d 65 2c   string keyName,
5d20: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
5d30: 20 20 73 74 72 69 6e 67 20 76 61 6c 75 65 4e 61    string valueNa
5d40: 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me,..           
5d50: 20 20 20 20 20 6f 62 6a 65 63 74 20 76 61 6c 75       object valu
5d60: 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
5d70: 20 20 20 20 52 65 67 69 73 74 72 79 56 61 6c 75      RegistryValu
5d80: 65 4b 69 6e 64 20 76 61 6c 75 65 4b 69 6e 64 0d  eKind valueKind.
5d90: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
5da0: 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   )..            
5db0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
5dc0: 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64     CheckDisposed
5dd0: 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ();..           
5de0: 20 20 20 20 20 43 68 65 63 6b 52 65 61 64 4f 6e       CheckReadOn
5df0: 6c 79 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ly();....       
5e00: 20 20 20 20 20 20 20 20 20 69 66 20 28 21 77 68           if (!wh
5e10: 61 74 49 66 29 0d 0a 20 20 20 20 20 20 20 20 20  atIf)..         
5e20: 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73             Regis
5e30: 74 72 79 2e 53 65 74 56 61 6c 75 65 28 6b 65 79  try.SetValue(key
5e40: 4e 61 6d 65 2c 20 76 61 6c 75 65 4e 61 6d 65 2c  Name, valueName,
5e50: 20 76 61 6c 75 65 2c 20 76 61 6c 75 65 4b 69 6e   value, valueKin
5e60: 64 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  d);..           
5e70: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
5e80: 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20  #endregion....  
5e90: 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
5ea0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5eb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5ec0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5ed0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
5ee0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 72 65  .            #re
5ef0: 67 69 6f 6e 20 50 72 69 76 61 74 65 20 4d 65 74  gion Private Met
5f00: 68 6f 64 73 0d 0a 20 20 20 20 20 20 20 20 20 20  hods..          
5f10: 20 20 70 72 69 76 61 74 65 20 76 6f 69 64 20 43    private void C
5f20: 68 65 63 6b 52 65 61 64 4f 6e 6c 79 28 29 0d 0a  heckReadOnly()..
5f30: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
5f40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
5f50: 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
5f60: 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 49 6e 20 22     // NOTE: In "
5f70: 72 65 61 64 2d 6f 6e 6c 79 22 20 6d 6f 64 65 2c  read-only" mode,
5f80: 20 77 65 20 64 69 73 61 6c 6c 6f 77 20 61 6c 6c   we disallow all
5f90: 20 77 72 69 74 65 20 61 63 63 65 73 73 2e 0d 0a   write access...
5fa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5fb0: 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
5fc0: 20 20 20 20 69 66 20 28 21 72 65 61 64 4f 6e 6c      if (!readOnl
5fd0: 79 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y)..            
5fe0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 3b 0d          return;.
5ff0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
6000: 20 20 20 74 68 72 6f 77 20 6e 65 77 20 49 6e 76     throw new Inv
6010: 61 6c 69 64 4f 70 65 72 61 74 69 6f 6e 45 78 63  alidOperationExc
6020: 65 70 74 69 6f 6e 28 29 3b 0d 0a 20 20 20 20 20  eption();..     
6030: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
6040: 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
6050: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
6060: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6070: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6080: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6090: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
60a0: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
60b0: 20 20 20 23 72 65 67 69 6f 6e 20 49 44 69 73 70     #region IDisp
60c0: 6f 73 61 62 6c 65 20 22 50 61 74 74 65 72 6e 22  osable "Pattern"
60d0: 20 4d 65 6d 62 65 72 73 0d 0a 20 20 20 20 20 20   Members..      
60e0: 20 20 20 20 20 20 70 72 69 76 61 74 65 20 62 6f        private bo
60f0: 6f 6c 20 64 69 73 70 6f 73 65 64 3b 0d 0a 20 20  ol disposed;..  
6100: 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
6110: 65 20 76 6f 69 64 20 43 68 65 63 6b 44 69 73 70  e void CheckDisp
6120: 6f 73 65 64 28 29 20 2f 2a 20 74 68 72 6f 77 20  osed() /* throw 
6130: 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  */..            
6140: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
6150: 20 20 20 69 66 20 28 21 64 69 73 70 6f 73 65 64     if (!disposed
6160: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
6170: 20 20 20 20 20 20 20 72 65 74 75 72 6e 3b 0d 0a         return;..
6180: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
6190: 20 20 74 68 72 6f 77 20 6e 65 77 20 4f 62 6a 65    throw new Obje
61a0: 63 74 44 69 73 70 6f 73 65 64 45 78 63 65 70 74  ctDisposedExcept
61b0: 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ion(..          
61c0: 20 20 20 20 20 20 20 20 20 20 74 79 70 65 6f 66            typeof
61d0: 28 4d 6f 63 6b 52 65 67 69 73 74 72 79 29 2e 4e  (MockRegistry).N
61e0: 61 6d 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ame);..         
61f0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
6200: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
6210: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6220: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6230: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6240: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
6250: 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 2f         private /
6260: 2a 20 70 72 6f 74 65 63 74 65 64 20 76 69 72 74  * protected virt
6270: 75 61 6c 20 2a 2f 20 76 6f 69 64 20 44 69 73 70  ual */ void Disp
6280: 6f 73 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ose(..          
6290: 20 20 20 20 20 20 62 6f 6f 6c 20 64 69 73 70 6f        bool dispo
62a0: 73 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 20 20  sing..          
62b0: 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
62c0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
62d0: 20 20 20 20 20 20 20 20 69 66 20 28 21 64 69 73          if (!dis
62e0: 70 6f 73 65 64 29 0d 0a 20 20 20 20 20 20 20 20  posed)..        
62f0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
6300: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
6310: 66 20 28 64 69 73 70 6f 73 69 6e 67 29 0d 0a 20  f (disposing).. 
6320: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6330: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
6340: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
6350: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6360: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6370: 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
6380: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64              // d
6390: 69 73 70 6f 73 65 20 6d 61 6e 61 67 65 64 20 72  ispose managed r
63a0: 65 73 6f 75 72 63 65 73 20 68 65 72 65 2e 2e 2e  esources here...
63b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
63c0: 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
63d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
63e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
63f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
6400: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 63 6c            if (cl
6410: 61 73 73 65 73 52 6f 6f 74 20 21 3d 20 6e 75 6c  assesRoot != nul
6420: 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
6430: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
6440: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6450: 20 20 20 20 20 20 20 20 20 20 20 63 6c 61 73 73             class
6460: 65 73 52 6f 6f 74 2e 43 6c 6f 73 65 28 29 3b 0d  esRoot.Close();.
6470: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
6480: 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6c 61               cla
6490: 73 73 65 73 52 6f 6f 74 20 3d 20 6e 75 6c 6c 3b  ssesRoot = null;
64a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
64b0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
64c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
64d0: 20 20 20 20 20 20 20 69 66 20 28 63 75 72 72 65         if (curre
64e0: 6e 74 43 6f 6e 66 69 67 20 21 3d 20 6e 75 6c 6c  ntConfig != null
64f0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
6500: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
6510: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6520: 20 20 20 20 20 20 20 20 20 20 63 75 72 72 65 6e            curren
6530: 74 43 6f 6e 66 69 67 2e 43 6c 6f 73 65 28 29 3b  tConfig.Close();
6540: 0d 0a 20 20 20 20 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 63 75                cu
6560: 72 72 65 6e 74 43 6f 6e 66 69 67 20 3d 20 6e 75  rrentConfig = nu
6570: 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll;..           
6580: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
6590: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
65a0: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 63 75            if (cu
65b0: 72 72 65 6e 74 55 73 65 72 20 21 3d 20 6e 75 6c  rrentUser != nul
65c0: 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
65d0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
65e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
65f0: 20 20 20 20 20 20 20 20 20 20 20 63 75 72 72 65             curre
6600: 6e 74 55 73 65 72 2e 43 6c 6f 73 65 28 29 3b 0d  ntUser.Close();.
6610: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
6620: 20 20 20 20 20 20 20 20 20 20 20 20 20 63 75 72               cur
6630: 72 65 6e 74 55 73 65 72 20 3d 20 6e 75 6c 6c 3b  rentUser = null;
6640: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
6650: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
6660: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6670: 20 20 20 20 20 20 20 69 66 20 28 64 79 6e 44 61         if (dynDa
6680: 74 61 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ta != null)..   
6690: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
66a0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
66b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
66c0: 20 20 20 20 64 79 6e 44 61 74 61 2e 43 6c 6f 73      dynData.Clos
66d0: 65 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  e();..          
66e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
66f0: 20 20 64 79 6e 44 61 74 61 20 3d 20 6e 75 6c 6c    dynData = null
6700: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
6710: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
6720: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6730: 20 20 20 20 20 20 20 20 69 66 20 28 6c 6f 63 61          if (loca
6740: 6c 4d 61 63 68 69 6e 65 20 21 3d 20 6e 75 6c 6c  lMachine != null
6750: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
6760: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
6770: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6780: 20 20 20 20 20 20 20 20 20 20 6c 6f 63 61 6c 4d            localM
6790: 61 63 68 69 6e 65 2e 43 6c 6f 73 65 28 29 3b 0d  achine.Close();.
67a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
67b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 6c 6f 63               loc
67c0: 61 6c 4d 61 63 68 69 6e 65 20 3d 20 6e 75 6c 6c  alMachine = null
67d0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
67e0: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
67f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6800: 20 20 20 20 20 20 20 20 69 66 20 28 70 65 72 66          if (perf
6810: 6f 72 6d 61 6e 63 65 44 61 74 61 20 21 3d 20 6e  ormanceData != n
6820: 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
6830: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
6840: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
6850: 20 20 20 20 20 20 20 20 20 20 20 20 20 70 65 72               per
6860: 66 6f 72 6d 61 6e 63 65 44 61 74 61 2e 43 6c 6f  formanceData.Clo
6870: 73 65 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  se();..         
6880: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6890: 20 20 20 70 65 72 66 6f 72 6d 61 6e 63 65 44 61     performanceDa
68a0: 74 61 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20  ta = null;..    
68b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
68c0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
68d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
68e0: 20 69 66 20 28 75 73 65 72 73 20 21 3d 20 6e 75   if (users != nu
68f0: 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
6900: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
6910: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6920: 20 20 20 20 20 20 20 20 20 20 20 20 75 73 65 72              user
6930: 73 2e 43 6c 6f 73 65 28 29 3b 0d 0a 20 20 20 20  s.Close();..    
6940: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6950: 20 20 20 20 20 20 20 20 75 73 65 72 73 20 3d 20          users = 
6960: 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20  null;..         
6970: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
6980: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
6990: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
69a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
69b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
69c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
69d0: 2f 2f 2f 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20  /////..         
69e0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 72 65             // re
69f0: 6c 65 61 73 65 20 75 6e 6d 61 6e 61 67 65 64 20  lease unmanaged 
6a00: 72 65 73 6f 75 72 63 65 73 20 68 65 72 65 2e 2e  resources here..
6a10: 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
6a20: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
6a30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6a40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
6a50: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
6a60: 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
6a70: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
6a80: 4e 4f 54 45 3a 20 54 68 69 73 20 6f 62 6a 65 63  NOTE: This objec
6a90: 74 20 69 73 20 6e 6f 77 20 64 69 73 70 6f 73 65  t is now dispose
6aa0: 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  d...            
6ab0: 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
6ac0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6ad0: 64 69 73 70 6f 73 65 64 20 3d 20 74 72 75 65 3b  disposed = true;
6ae0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
6af0: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
6b00: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
6b10: 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20  #endregion....  
6b20: 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
6b30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6b40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6b50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6b60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
6b70: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 72 65  .            #re
6b80: 67 69 6f 6e 20 49 44 69 73 70 6f 73 61 62 6c 65  gion IDisposable
6b90: 20 4d 65 6d 62 65 72 73 0d 0a 20 20 20 20 20 20   Members..      
6ba0: 20 20 20 20 20 20 70 75 62 6c 69 63 20 76 6f 69        public voi
6bb0: 64 20 44 69 73 70 6f 73 65 28 29 0d 0a 20 20 20  d Dispose()..   
6bc0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
6bd0: 20 20 20 20 20 20 20 20 20 20 20 20 44 69 73 70              Disp
6be0: 6f 73 65 28 74 72 75 65 29 3b 0d 0a 20 20 20 20  ose(true);..    
6bf0: 20 20 20 20 20 20 20 20 20 20 20 20 47 43 2e 53              GC.S
6c00: 75 70 70 72 65 73 73 46 69 6e 61 6c 69 7a 65 28  uppressFinalize(
6c10: 74 68 69 73 29 3b 0d 0a 20 20 20 20 20 20 20 20  this);..        
6c20: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
6c30: 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
6c40: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
6c50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6c60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6c70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6c80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6c90: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
6ca0: 23 72 65 67 69 6f 6e 20 44 65 73 74 72 75 63 74  #region Destruct
6cb0: 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  or..            
6cc0: 7e 4d 6f 63 6b 52 65 67 69 73 74 72 79 28 29 0d  ~MockRegistry().
6cd0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
6ce0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6cf0: 44 69 73 70 6f 73 65 28 66 61 6c 73 65 29 3b 0d  Dispose(false);.
6d00: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
6d10: 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64              #end
6d20: 72 65 67 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20  region..        
6d30: 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72  }..        #endr
6d40: 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20  egion....       
6d50: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
6d60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6d70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6d80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6d90: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
6da0: 20 20 20 20 23 72 65 67 69 6f 6e 20 4d 6f 63 6b      #region Mock
6db0: 52 65 67 69 73 74 72 79 4b 65 79 20 43 6c 61 73  RegistryKey Clas
6dc0: 73 0d 0a 20 20 20 20 20 20 20 20 69 6e 74 65 72  s..        inter
6dd0: 6e 61 6c 20 73 65 61 6c 65 64 20 63 6c 61 73 73  nal sealed class
6de0: 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79   MockRegistryKey
6df0: 20 3a 20 49 44 69 73 70 6f 73 61 62 6c 65 0d 0a   : IDisposable..
6e00: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
6e10: 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50         #region P
6e20: 72 69 76 61 74 65 20 43 6f 6e 73 74 72 75 63 74  rivate Construct
6e30: 6f 72 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ors..           
6e40: 20 70 72 69 76 61 74 65 20 4d 6f 63 6b 52 65 67   private MockReg
6e50: 69 73 74 72 79 4b 65 79 28 29 0d 0a 20 20 20 20  istryKey()..    
6e60: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
6e70: 20 20 20 20 20 20 20 20 20 20 20 77 68 61 74 49             whatI
6e80: 66 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20  f = true;..     
6e90: 20 20 20 20 20 20 20 20 20 20 20 72 65 61 64 4f             readO
6ea0: 6e 6c 79 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20  nly = true;..   
6eb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 61 66               saf
6ec0: 65 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20  e = true;..     
6ed0: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
6ee0: 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
6ef0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
6f00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6f10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6f20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6f30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6f40: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
6f50: 20 20 20 23 72 65 67 69 6f 6e 20 50 75 62 6c 69     #region Publi
6f60: 63 20 43 6f 6e 73 74 72 75 63 74 6f 72 73 0d 0a  c Constructors..
6f70: 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
6f80: 69 63 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b  ic MockRegistryK
6f90: 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ey(..           
6fa0: 20 20 20 20 20 52 65 67 69 73 74 72 79 4b 65 79       RegistryKey
6fb0: 20 6b 65 79 0d 0a 20 20 20 20 20 20 20 20 20 20   key..          
6fc0: 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
6fd0: 20 20 20 20 20 20 20 20 20 3a 20 74 68 69 73 28           : this(
6fe0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
6ff0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
7000: 20 20 74 68 69 73 2e 6b 65 79 20 3d 20 6b 65 79    this.key = key
7010: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
7020: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
7030: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7040: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7050: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7060: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7070: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
7080: 20 20 20 70 75 62 6c 69 63 20 4d 6f 63 6b 52 65     public MockRe
7090: 67 69 73 74 72 79 4b 65 79 28 0d 0a 20 20 20 20  gistryKey(..    
70a0: 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69              Regi
70b0: 73 74 72 79 4b 65 79 20 6b 65 79 2c 0d 0a 20 20  stryKey key,..  
70c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
70d0: 72 69 6e 67 20 73 75 62 4b 65 79 4e 61 6d 65 0d  ring subKeyName.
70e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
70f0: 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   )..            
7100: 20 20 20 20 3a 20 74 68 69 73 28 6b 65 79 29 0d      : this(key).
7110: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
7120: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7130: 74 68 69 73 2e 73 75 62 4b 65 79 4e 61 6d 65 20  this.subKeyName 
7140: 3d 20 73 75 62 4b 65 79 4e 61 6d 65 3b 0d 0a 20  = subKeyName;.. 
7150: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
7160: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
7170: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7180: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7190: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
71a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
71b0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
71c0: 75 62 6c 69 63 20 4d 6f 63 6b 52 65 67 69 73 74  ublic MockRegist
71d0: 72 79 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20  ryKey(..        
71e0: 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79          Registry
71f0: 4b 65 79 20 6b 65 79 2c 0d 0a 20 20 20 20 20 20  Key key,..      
7200: 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
7210: 20 73 75 62 4b 65 79 4e 61 6d 65 2c 0d 0a 20 20   subKeyName,..  
7220: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f                bo
7230: 6f 6c 20 77 68 61 74 49 66 0d 0a 20 20 20 20 20  ol whatIf..     
7240: 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
7250: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3a 20                : 
7260: 74 68 69 73 28 6b 65 79 2c 20 73 75 62 4b 65 79  this(key, subKey
7270: 4e 61 6d 65 29 0d 0a 20 20 20 20 20 20 20 20 20  Name)..         
7280: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
7290: 20 20 20 20 20 20 74 68 69 73 2e 77 68 61 74 49        this.whatI
72a0: 66 20 3d 20 77 68 61 74 49 66 3b 0d 0a 20 20 20  f = whatIf;..   
72b0: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
72c0: 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
72d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
72e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
72f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7300: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
7310: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
7320: 6c 69 63 20 4d 6f 63 6b 52 65 67 69 73 74 72 79  lic MockRegistry
7330: 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20  Key(..          
7340: 20 20 20 20 20 20 52 65 67 69 73 74 72 79 4b 65        RegistryKe
7350: 79 20 6b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20  y key,..        
7360: 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 73          string s
7370: 75 62 4b 65 79 4e 61 6d 65 2c 0d 0a 20 20 20 20  ubKeyName,..    
7380: 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
7390: 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20   whatIf,..      
73a0: 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 72            bool r
73b0: 65 61 64 4f 6e 6c 79 0d 0a 20 20 20 20 20 20 20  eadOnly..       
73c0: 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
73d0: 20 20 20 20 20 20 20 20 20 20 20 20 3a 20 74 68              : th
73e0: 69 73 28 6b 65 79 2c 20 73 75 62 4b 65 79 4e 61  is(key, subKeyNa
73f0: 6d 65 2c 20 77 68 61 74 49 66 29 0d 0a 20 20 20  me, whatIf)..   
7400: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
7410: 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73              this
7420: 2e 72 65 61 64 4f 6e 6c 79 20 3d 20 72 65 61 64  .readOnly = read
7430: 4f 6e 6c 79 3b 0d 0a 20 20 20 20 20 20 20 20 20  Only;..         
7440: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
7450: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
7460: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7470: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7480: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7490: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
74a0: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 4d 6f         public Mo
74b0: 63 6b 52 65 67 69 73 74 72 79 4b 65 79 28 0d 0a  ckRegistryKey(..
74c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
74d0: 52 65 67 69 73 74 72 79 4b 65 79 20 6b 65 79 2c  RegistryKey key,
74e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
74f0: 20 20 73 74 72 69 6e 67 20 73 75 62 4b 65 79 4e    string subKeyN
7500: 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ame,..          
7510: 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49        bool whatI
7520: 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  f,..            
7530: 20 20 20 20 62 6f 6f 6c 20 72 65 61 64 4f 6e 6c      bool readOnl
7540: 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y,..            
7550: 20 20 20 20 62 6f 6f 6c 20 73 61 66 65 0d 0a 20      bool safe.. 
7560: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29                 )
7570: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
7580: 20 20 3a 20 74 68 69 73 28 6b 65 79 2c 20 73 75    : this(key, su
7590: 62 4b 65 79 4e 61 6d 65 2c 20 77 68 61 74 49 66  bKeyName, whatIf
75a0: 2c 20 72 65 61 64 4f 6e 6c 79 29 0d 0a 20 20 20  , readOnly)..   
75b0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
75c0: 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73              this
75d0: 2e 73 61 66 65 20 3d 20 73 61 66 65 3b 0d 0a 20  .safe = safe;.. 
75e0: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
75f0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
7600: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7610: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7620: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7630: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
7640: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
7650: 75 62 6c 69 63 20 4d 6f 63 6b 52 65 67 69 73 74  ublic MockRegist
7660: 72 79 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20  ryKey(..        
7670: 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79          Registry
7680: 4b 65 79 20 6b 65 79 2c 0d 0a 20 20 20 20 20 20  Key key,..      
7690: 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77            bool w
76a0: 68 61 74 49 66 0d 0a 20 20 20 20 20 20 20 20 20  hatIf..         
76b0: 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
76c0: 20 20 20 20 20 20 20 20 20 20 3a 20 74 68 69 73            : this
76d0: 28 6b 65 79 2c 20 6e 75 6c 6c 2c 20 77 68 61 74  (key, null, what
76e0: 49 66 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  If)..           
76f0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
7700: 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e      // do nothin
7710: 67 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  g...            
7720: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
7730: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
7740: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7750: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7760: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7770: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
7780: 20 20 20 20 70 75 62 6c 69 63 20 4d 6f 63 6b 52      public MockR
7790: 65 67 69 73 74 72 79 4b 65 79 28 0d 0a 20 20 20  egistryKey(..   
77a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67               Reg
77b0: 69 73 74 72 79 4b 65 79 20 6b 65 79 2c 0d 0a 20  istryKey key,.. 
77c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62                 b
77d0: 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20  ool whatIf,..   
77e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f               boo
77f0: 6c 20 72 65 61 64 4f 6e 6c 79 0d 0a 20 20 20 20  l readOnly..    
7800: 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
7810: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3a                 :
7820: 20 74 68 69 73 28 6b 65 79 2c 20 6e 75 6c 6c 2c   this(key, null,
7830: 20 77 68 61 74 49 66 2c 20 72 65 61 64 4f 6e 6c   whatIf, readOnl
7840: 79 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y)..            
7850: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
7860: 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67     // do nothing
7870: 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ...            }
7880: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
7890: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
78a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
78b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
78c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
78d0: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
78e0: 20 20 20 70 75 62 6c 69 63 20 4d 6f 63 6b 52 65     public MockRe
78f0: 67 69 73 74 72 79 4b 65 79 28 0d 0a 20 20 20 20  gistryKey(..    
7900: 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69              Regi
7910: 73 74 72 79 4b 65 79 20 6b 65 79 2c 0d 0a 20 20  stryKey key,..  
7920: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f                bo
7930: 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20  ol whatIf,..    
7940: 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
7950: 20 72 65 61 64 4f 6e 6c 79 2c 0d 0a 20 20 20 20   readOnly,..    
7960: 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
7970: 20 73 61 66 65 0d 0a 20 20 20 20 20 20 20 20 20   safe..         
7980: 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
7990: 20 20 20 20 20 20 20 20 20 20 3a 20 74 68 69 73            : this
79a0: 28 6b 65 79 2c 20 6e 75 6c 6c 2c 20 77 68 61 74  (key, null, what
79b0: 49 66 2c 20 72 65 61 64 4f 6e 6c 79 2c 20 73 61  If, readOnly, sa
79c0: 66 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  fe)..           
79d0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
79e0: 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e      // do nothin
79f0: 67 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  g...            
7a00: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  }..            #
7a10: 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20  endregion....   
7a20: 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
7a30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7a40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7a50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7a60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
7a70: 20 20 20 20 20 20 20 20 20 20 20 20 23 72 65 67              #reg
7a80: 69 6f 6e 20 50 75 62 6c 69 63 20 4d 65 74 68 6f  ion Public Metho
7a90: 64 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ds..            
7aa0: 70 75 62 6c 69 63 20 76 6f 69 64 20 43 6c 6f 73  public void Clos
7ab0: 65 28 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e()..           
7ac0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
7ad0: 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
7ae0: 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a          // NOTE:
7af0: 20 4e 6f 20 64 69 73 70 6f 73 65 64 20 63 68 65   No disposed che
7b00: 63 6b 20 68 65 72 65 20 62 65 63 61 75 73 65 20  ck here because 
7b10: 63 61 6c 6c 69 6e 67 20 74 68 69 73 20 6d 65 74  calling this met
7b20: 68 6f 64 0d 0a 20 20 20 20 20 20 20 20 20 20 20  hod..           
7b30: 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 73 68       //       sh
7b40: 6f 75 6c 64 20 62 65 20 6a 75 73 74 20 6c 69 6b  ould be just lik
7b50: 65 20 63 61 6c 6c 69 6e 67 20 44 69 73 70 6f 73  e calling Dispos
7b60: 65 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e...            
7b70: 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
7b80: 20 20 20 20 20 20 20 20 44 69 73 70 6f 73 65 28          Dispose(
7b90: 74 72 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  true);..        
7ba0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
7bb0: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
7bc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7bd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7be0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7bf0: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
7c00: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 4d          public M
7c10: 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 43  ockRegistryKey C
7c20: 72 65 61 74 65 53 75 62 4b 65 79 28 0d 0a 20 20  reateSubKey(..  
7c30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
7c40: 72 69 6e 67 20 73 75 62 4b 65 79 4e 61 6d 65 0d  ring subKeyName.
7c50: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
7c60: 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   )..            
7c70: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
7c80: 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64     CheckDisposed
7c90: 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ();..           
7ca0: 20 20 20 20 20 43 68 65 63 6b 52 65 61 64 4f 6e       CheckReadOn
7cb0: 6c 79 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ly();....       
7cc0: 20 20 20 20 20 20 20 20 20 69 66 20 28 6b 65 79           if (key
7cd0: 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
7ce0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
7cf0: 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20  eturn null;.... 
7d00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
7d10: 66 20 28 77 68 61 74 49 66 29 0d 0a 20 20 20 20  f (whatIf)..    
7d20: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
7d30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7d40: 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
7d50: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 48 41             // HA
7d60: 43 4b 3a 20 41 74 74 65 6d 70 74 20 74 6f 20 6f  CK: Attempt to o
7d70: 70 65 6e 20 74 68 65 20 73 70 65 63 69 66 69 65  pen the specifie
7d80: 64 20 73 75 62 2d 6b 65 79 2e 20 20 49 66 20 74  d sub-key.  If t
7d90: 68 69 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20  his..           
7da0: 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
7db0: 20 20 66 61 69 6c 73 2c 20 77 65 20 77 69 6c 6c    fails, we will
7dc0: 20 73 69 6d 70 6c 79 20 72 65 74 75 72 6e 20 74   simply return t
7dd0: 68 65 20 77 72 61 70 70 65 64 20 72 6f 6f 74 20  he wrapped root 
7de0: 6b 65 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20  key..           
7df0: 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
7e00: 20 20 69 74 73 65 6c 66 20 73 69 6e 63 65 20 6e    itself since n
7e10: 6f 20 77 72 69 74 65 73 20 61 72 65 20 61 6c 6c  o writes are all
7e20: 6f 77 65 64 20 69 6e 20 27 77 68 61 74 2d 69 66  owed in 'what-if
7e30: 27 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  '..             
7e40: 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
7e50: 6d 6f 64 65 20 61 6e 79 68 6f 77 2e 0d 0a 20 20  mode anyhow...  
7e60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7e70: 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
7e80: 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74            Regist
7e90: 72 79 4b 65 79 20 73 75 62 4b 65 79 20 3d 20 6b  ryKey subKey = k
7ea0: 65 79 2e 4f 70 65 6e 53 75 62 4b 65 79 28 73 75  ey.OpenSubKey(su
7eb0: 62 4b 65 79 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20  bKeyName);....  
7ec0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7ed0: 20 20 72 65 74 75 72 6e 20 28 73 75 62 4b 65 79    return (subKey
7ee0: 20 21 3d 20 6e 75 6c 6c 29 20 3f 0d 0a 20 20 20   != null) ?..   
7ef0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7f00: 20 20 20 20 20 6e 65 77 20 4d 6f 63 6b 52 65 67       new MockReg
7f10: 69 73 74 72 79 4b 65 79 28 0d 0a 20 20 20 20 20  istryKey(..     
7f20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7f30: 20 20 20 20 20 20 20 20 20 20 20 73 75 62 4b 65             subKe
7f40: 79 2c 20 77 68 61 74 49 66 2c 20 72 65 61 64 4f  y, whatIf, readO
7f50: 6e 6c 79 2c 20 73 61 66 65 29 20 3a 0d 0a 20 20  nly, safe) :..  
7f60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7f70: 20 20 20 20 20 20 6e 65 77 20 4d 6f 63 6b 52 65        new MockRe
7f80: 67 69 73 74 72 79 4b 65 79 28 0d 0a 20 20 20 20  gistryKey(..    
7f90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7fa0: 20 20 20 20 20 20 20 20 20 20 20 20 6b 65 79 2c              key,
7fb0: 20 73 75 62 4b 65 79 4e 61 6d 65 2c 20 77 68 61   subKeyName, wha
7fc0: 74 49 66 2c 20 72 65 61 64 4f 6e 6c 79 2c 20 73  tIf, readOnly, s
7fd0: 61 66 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  afe);..         
7fe0: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
7ff0: 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a            else..
8000: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8010: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
8020: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 65         return ne
8030: 77 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65  w MockRegistryKe
8040: 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y(..            
8050: 20 20 20 20 20 20 20 20 20 20 20 20 6b 65 79 2e              key.
8060: 43 72 65 61 74 65 53 75 62 4b 65 79 28 73 75 62  CreateSubKey(sub
8070: 4b 65 79 4e 61 6d 65 29 2c 20 77 68 61 74 49 66  KeyName), whatIf
8080: 2c 20 72 65 61 64 4f 6e 6c 79 2c 20 73 61 66 65  , readOnly, safe
8090: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
80a0: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
80b0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
80c0: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
80d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
80e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
80f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8100: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
8110: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 76 6f         public vo
8120: 69 64 20 44 65 6c 65 74 65 53 75 62 4b 65 79 28  id DeleteSubKey(
8130: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
8140: 20 20 73 74 72 69 6e 67 20 73 75 62 4b 65 79 4e    string subKeyN
8150: 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ame,..          
8160: 20 20 20 20 20 20 62 6f 6f 6c 20 74 68 72 6f 77        bool throw
8170: 4f 6e 4d 69 73 73 69 6e 67 0d 0a 20 20 20 20 20  OnMissing..     
8180: 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
8190: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
81a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 43 68 65               Che
81b0: 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 20  ckDisposed();.. 
81c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43                 C
81d0: 68 65 63 6b 52 65 61 64 4f 6e 6c 79 28 29 3b 0d  heckReadOnly();.
81e0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
81f0: 20 20 20 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75     if (key == nu
8200: 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
8210: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 3b           return;
8220: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
8230: 20 20 20 20 69 66 20 28 21 77 68 61 74 49 66 29      if (!whatIf)
8240: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
8250: 20 20 20 20 20 20 6b 65 79 2e 44 65 6c 65 74 65        key.Delete
8260: 53 75 62 4b 65 79 28 73 75 62 4b 65 79 4e 61 6d  SubKey(subKeyNam
8270: 65 2c 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e  e, throwOnMissin
8280: 67 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  g);..           
8290: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
82a0: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
82b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
82c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
82d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
82e0: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
82f0: 20 20 20 20 20 70 75 62 6c 69 63 20 76 6f 69 64       public void
8300: 20 44 65 6c 65 74 65 53 75 62 4b 65 79 54 72 65   DeleteSubKeyTre
8310: 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
8320: 20 20 20 20 73 74 72 69 6e 67 20 73 75 62 4b 65      string subKe
8330: 79 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 20  yName..         
8340: 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
8350: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
8360: 20 20 20 20 20 20 20 20 20 43 68 65 63 6b 44 69           CheckDi
8370: 73 70 6f 73 65 64 28 29 3b 0d 0a 20 20 20 20 20  sposed();..     
8380: 20 20 20 20 20 20 20 20 20 20 20 43 68 65 63 6b             Check
8390: 52 65 61 64 4f 6e 6c 79 28 29 3b 0d 0a 0d 0a 20  ReadOnly();.... 
83a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
83b0: 66 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d  f (key == null).
83c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
83d0: 20 20 20 20 20 72 65 74 75 72 6e 3b 0d 0a 0d 0a       return;....
83e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
83f0: 69 66 20 28 21 77 68 61 74 49 66 29 0d 0a 20 20  if (!whatIf)..  
8400: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8410: 20 20 6b 65 79 2e 44 65 6c 65 74 65 53 75 62 4b    key.DeleteSubK
8420: 65 79 54 72 65 65 28 73 75 62 4b 65 79 4e 61 6d  eyTree(subKeyNam
8430: 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e);..           
8440: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
8450: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
8460: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8470: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8480: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8490: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
84a0: 20 20 20 20 20 70 75 62 6c 69 63 20 76 6f 69 64       public void
84b0: 20 44 65 6c 65 74 65 56 61 6c 75 65 28 0d 0a 20   DeleteValue(.. 
84c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
84d0: 74 72 69 6e 67 20 6e 61 6d 65 2c 0d 0a 20 20 20  tring name,..   
84e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f               boo
84f0: 6c 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67  l throwOnMissing
8500: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
8510: 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20    )..           
8520: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
8530: 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65      CheckDispose
8540: 64 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  d();..          
8550: 20 20 20 20 20 20 43 68 65 63 6b 52 65 61 64 4f        CheckReadO
8560: 6e 6c 79 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  nly();....      
8570: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6b 65            if (ke
8580: 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  y == null)..    
8590: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
85a0: 72 65 74 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20  return;....     
85b0: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21             if (!
85c0: 77 68 61 74 49 66 29 0d 0a 20 20 20 20 20 20 20  whatIf)..       
85d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 6b 65 79               key
85e0: 2e 44 65 6c 65 74 65 56 61 6c 75 65 28 6e 61 6d  .DeleteValue(nam
85f0: 65 2c 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e  e, throwOnMissin
8600: 67 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  g);..           
8610: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
8620: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
8630: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8640: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8650: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8660: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
8670: 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 72 69       public stri
8680: 6e 67 5b 5d 20 47 65 74 53 75 62 4b 65 79 4e 61  ng[] GetSubKeyNa
8690: 6d 65 73 28 29 0d 0a 20 20 20 20 20 20 20 20 20  mes()..         
86a0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
86b0: 20 20 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f        CheckDispo
86c0: 73 65 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  sed();....      
86d0: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6b 65            if (ke
86e0: 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  y == null)..    
86f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8700: 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a  return null;....
8710: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8720: 72 65 74 75 72 6e 20 6b 65 79 2e 47 65 74 53 75  return key.GetSu
8730: 62 4b 65 79 4e 61 6d 65 73 28 29 3b 0d 0a 20 20  bKeyNames();..  
8740: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
8750: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
8760: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8770: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8780: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8790: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
87a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
87b0: 62 6c 69 63 20 6f 62 6a 65 63 74 20 47 65 74 56  blic object GetV
87c0: 61 6c 75 65 28 0d 0a 20 20 20 20 20 20 20 20 20  alue(..         
87d0: 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6e 61         string na
87e0: 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me,..           
87f0: 20 20 20 20 20 6f 62 6a 65 63 74 20 64 65 66 61       object defa
8800: 75 6c 74 56 61 6c 75 65 0d 0a 20 20 20 20 20 20  ultValue..      
8810: 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
8820: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
8830: 20 20 20 20 20 20 20 20 20 20 20 20 43 68 65 63              Chec
8840: 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a  kDisposed();....
8850: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8860: 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29  if (key == null)
8870: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
8880: 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c        return nul
8890: 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  l;....          
88a0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 6b 65 79        return key
88b0: 2e 47 65 74 56 61 6c 75 65 28 6e 61 6d 65 2c 20  .GetValue(name, 
88c0: 64 65 66 61 75 6c 74 56 61 6c 75 65 29 3b 0d 0a  defaultValue);..
88d0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
88e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
88f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8900: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8910: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8920: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8930: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
8940: 70 75 62 6c 69 63 20 4d 6f 63 6b 52 65 67 69 73  public MockRegis
8950: 74 72 79 4b 65 79 20 4f 70 65 6e 53 75 62 4b 65  tryKey OpenSubKe
8960: 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y(..            
8970: 20 20 20 20 73 74 72 69 6e 67 20 73 75 62 4b 65      string subKe
8980: 79 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 20  yName..         
8990: 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
89a0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
89b0: 20 20 20 20 20 20 20 20 20 43 68 65 63 6b 44 69           CheckDi
89c0: 73 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20 20 20  sposed();....   
89d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
89e0: 75 72 6e 20 4f 70 65 6e 53 75 62 4b 65 79 28 73  urn OpenSubKey(s
89f0: 75 62 4b 65 79 4e 61 6d 65 2c 20 66 61 6c 73 65  ubKeyName, false
8a00: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
8a10: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
8a20: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
8a30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8a40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8a50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8a60: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
8a70: 20 20 20 20 70 75 62 6c 69 63 20 4d 6f 63 6b 52      public MockR
8a80: 65 67 69 73 74 72 79 4b 65 79 20 4f 70 65 6e 53  egistryKey OpenS
8a90: 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20  ubKey(..        
8aa0: 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 73          string s
8ab0: 75 62 4b 65 79 4e 61 6d 65 2c 0d 0a 20 20 20 20  ubKeyName,..    
8ac0: 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
8ad0: 20 77 72 69 74 61 62 6c 65 0d 0a 20 20 20 20 20   writable..     
8ae0: 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
8af0: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
8b00: 20 20 20 20 20 20 20 20 20 20 20 20 20 43 68 65               Che
8b10: 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 0d  ckDisposed();...
8b20: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
8b30: 20 69 66 20 28 77 72 69 74 61 62 6c 65 29 0d 0a   if (writable)..
8b40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8b50: 20 20 20 20 43 68 65 63 6b 52 65 61 64 4f 6e 6c      CheckReadOnl
8b60: 79 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  y();....        
8b70: 20 20 20 20 20 20 20 20 69 66 20 28 6b 65 79 20          if (key 
8b80: 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
8b90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
8ba0: 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20  turn null;....  
8bb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65                Re
8bc0: 67 69 73 74 72 79 4b 65 79 20 73 75 62 4b 65 79  gistryKey subKey
8bd0: 20 3d 20 6b 65 79 2e 4f 70 65 6e 53 75 62 4b 65   = key.OpenSubKe
8be0: 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y(..            
8bf0: 20 20 20 20 20 20 20 20 73 75 62 4b 65 79 4e 61          subKeyNa
8c00: 6d 65 2c 20 77 68 61 74 49 66 20 3f 20 66 61 6c  me, whatIf ? fal
8c10: 73 65 20 3a 20 77 72 69 74 61 62 6c 65 29 3b 0d  se : writable);.
8c20: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
8c30: 20 20 20 72 65 74 75 72 6e 20 28 73 75 62 4b 65     return (subKe
8c40: 79 20 21 3d 20 6e 75 6c 6c 29 20 3f 0d 0a 20 20  y != null) ?..  
8c50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8c60: 20 20 6e 65 77 20 4d 6f 63 6b 52 65 67 69 73 74    new MockRegist
8c70: 72 79 4b 65 79 28 73 75 62 4b 65 79 2c 20 77 68  ryKey(subKey, wh
8c80: 61 74 49 66 2c 20 72 65 61 64 4f 6e 6c 79 2c 20  atIf, readOnly, 
8c90: 73 61 66 65 29 20 3a 20 6e 75 6c 6c 3b 0d 0a 20  safe) : null;.. 
8ca0: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
8cb0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
8cc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8cd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8ce0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8cf0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
8d00: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
8d10: 75 62 6c 69 63 20 76 6f 69 64 20 53 65 74 56 61  ublic void SetVa
8d20: 6c 75 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  lue(..          
8d30: 20 20 20 20 20 20 73 74 72 69 6e 67 20 6e 61 6d        string nam
8d40: 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
8d50: 20 20 20 20 6f 62 6a 65 63 74 20 76 61 6c 75 65      object value
8d60: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
8d70: 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20    )..           
8d80: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
8d90: 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65      CheckDispose
8da0: 64 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  d();..          
8db0: 20 20 20 20 20 20 43 68 65 63 6b 52 65 61 64 4f        CheckReadO
8dc0: 6e 6c 79 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  nly();....      
8dd0: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6b 65            if (ke
8de0: 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  y == null)..    
8df0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8e00: 72 65 74 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20  return;....     
8e10: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21             if (!
8e20: 77 68 61 74 49 66 29 0d 0a 20 20 20 20 20 20 20  whatIf)..       
8e30: 20 20 20 20 20 20 20 20 20 20 20 20 20 6b 65 79               key
8e40: 2e 53 65 74 56 61 6c 75 65 28 6e 61 6d 65 2c 20  .SetValue(name, 
8e50: 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20 20  value);..       
8e60: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
8e70: 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
8e80: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
8e90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8ea0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8eb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8ec0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8ed0: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
8ee0: 20 23 72 65 67 69 6f 6e 20 50 75 62 6c 69 63 20   #region Public 
8ef0: 50 72 6f 70 65 72 74 69 65 73 0d 0a 20 20 20 20  Properties..    
8f00: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73          public s
8f10: 74 72 69 6e 67 20 4e 61 6d 65 0d 0a 20 20 20 20  tring Name..    
8f20: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
8f30: 20 20 20 20 20 20 20 20 20 20 20 67 65 74 0d 0a             get..
8f40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8f50: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
8f60: 20 20 20 20 20 20 20 43 68 65 63 6b 44 69 73 70         CheckDisp
8f70: 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20  osed();....     
8f80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
8f90: 66 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d  f (key == null).
8fa0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
8fb0: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
8fc0: 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  null;....       
8fd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
8fe0: 75 72 6e 20 21 53 74 72 69 6e 67 2e 49 73 4e 75  urn !String.IsNu
8ff0: 6c 6c 4f 72 45 6d 70 74 79 28 73 75 62 4b 65 79  llOrEmpty(subKey
9000: 4e 61 6d 65 29 20 3f 0d 0a 20 20 20 20 20 20 20  Name) ?..       
9010: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9020: 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 22   String.Format("
9030: 7b 30 7d 5c 5c 7b 31 7d 22 2c 20 6b 65 79 2e 4e  {0}\\{1}", key.N
9040: 61 6d 65 2c 20 73 75 62 4b 65 79 4e 61 6d 65 29  ame, subKeyName)
9050: 20 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   :..            
9060: 20 20 20 20 20 20 20 20 20 20 20 20 6b 65 79 2e              key.
9070: 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  Name;..         
9080: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
9090: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
90a0: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
90b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
90c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
90d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
90e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
90f0: 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
9100: 65 20 52 65 67 69 73 74 72 79 4b 65 79 20 6b 65  e RegistryKey ke
9110: 79 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y;..            
9120: 70 75 62 6c 69 63 20 52 65 67 69 73 74 72 79 4b  public RegistryK
9130: 65 79 20 4b 65 79 0d 0a 20 20 20 20 20 20 20 20  ey Key..        
9140: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
9150: 20 20 20 20 20 20 20 67 65 74 20 7b 20 43 68 65         get { Che
9160: 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 20 43 68  ckDisposed(); Ch
9170: 65 63 6b 53 61 66 65 28 29 3b 20 72 65 74 75 72  eckSafe(); retur
9180: 6e 20 6b 65 79 3b 20 7d 0d 0a 20 20 20 20 20 20  n key; }..      
9190: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
91a0: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
91b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
91c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
91d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
91e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
91f0: 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
9200: 65 20 73 74 72 69 6e 67 20 73 75 62 4b 65 79 4e  e string subKeyN
9210: 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ame;..          
9220: 20 20 70 75 62 6c 69 63 20 73 74 72 69 6e 67 20    public string 
9230: 53 75 62 4b 65 79 4e 61 6d 65 0d 0a 20 20 20 20  SubKeyName..    
9240: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
9250: 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b             get {
9260: 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29   CheckDisposed()
9270: 3b 20 72 65 74 75 72 6e 20 73 75 62 4b 65 79 4e  ; return subKeyN
9280: 61 6d 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  ame; }..        
9290: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
92a0: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
92b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
92c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
92d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
92e0: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
92f0: 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
9300: 62 6f 6f 6c 20 77 68 61 74 49 66 3b 0d 0a 20 20  bool whatIf;..  
9310: 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
9320: 20 62 6f 6f 6c 20 57 68 61 74 49 66 0d 0a 20 20   bool WhatIf..  
9330: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
9340: 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74               get
9350: 20 7b 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64   { CheckDisposed
9360: 28 29 3b 20 72 65 74 75 72 6e 20 77 68 61 74 49  (); return whatI
9370: 66 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  f; }..          
9380: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
9390: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
93a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
93b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
93c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
93d0: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
93e0: 20 20 20 20 20 20 70 72 69 76 61 74 65 20 62 6f        private bo
93f0: 6f 6c 20 72 65 61 64 4f 6e 6c 79 3b 0d 0a 20 20  ol readOnly;..  
9400: 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
9410: 20 62 6f 6f 6c 20 52 65 61 64 4f 6e 6c 79 0d 0a   bool ReadOnly..
9420: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
9430: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67                 g
9440: 65 74 20 7b 20 43 68 65 63 6b 44 69 73 70 6f 73  et { CheckDispos
9450: 65 64 28 29 3b 20 72 65 74 75 72 6e 20 72 65 61  ed(); return rea
9460: 64 4f 6e 6c 79 3b 20 7d 0d 0a 20 20 20 20 20 20  dOnly; }..      
9470: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
9480: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
9490: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
94a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
94b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
94c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
94d0: 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
94e0: 20 62 6f 6f 6c 20 73 61 66 65 3b 0d 0a 20 20 20   bool safe;..   
94f0: 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
9500: 62 6f 6f 6c 20 53 61 66 65 0d 0a 20 20 20 20 20  bool Safe..     
9510: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
9520: 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20            get { 
9530: 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b  CheckDisposed();
9540: 20 72 65 74 75 72 6e 20 73 61 66 65 3b 20 7d 0d   return safe; }.
9550: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
9560: 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64              #end
9570: 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20  region....      
9580: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
9590: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
95a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
95b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
95c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
95d0: 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e           #region
95e0: 20 50 72 69 76 61 74 65 20 4d 65 74 68 6f 64 73   Private Methods
95f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
9600: 69 76 61 74 65 20 76 6f 69 64 20 43 68 65 63 6b  ivate void Check
9610: 52 65 61 64 4f 6e 6c 79 28 29 0d 0a 20 20 20 20  ReadOnly()..    
9620: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
9630: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
9640: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
9650: 2f 20 4e 4f 54 45 3a 20 49 6e 20 22 72 65 61 64  / NOTE: In "read
9660: 2d 6f 6e 6c 79 22 20 6d 6f 64 65 2c 20 77 65 20  -only" mode, we 
9670: 64 69 73 61 6c 6c 6f 77 20 61 6c 6c 20 77 72 69  disallow all wri
9680: 74 65 20 61 63 63 65 73 73 2e 0d 0a 20 20 20 20  te access...    
9690: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
96a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
96b0: 69 66 20 28 21 72 65 61 64 4f 6e 6c 79 29 0d 0a  if (!readOnly)..
96c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
96d0: 20 20 20 20 72 65 74 75 72 6e 3b 0d 0a 0d 0a 20      return;.... 
96e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
96f0: 68 72 6f 77 20 6e 65 77 20 49 6e 76 61 6c 69 64  hrow new Invalid
9700: 4f 70 65 72 61 74 69 6f 6e 45 78 63 65 70 74 69  OperationExcepti
9710: 6f 6e 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  on();..         
9720: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
9730: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
9740: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9750: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9760: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9770: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
9780: 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 76         private v
9790: 6f 69 64 20 43 68 65 63 6b 53 61 66 65 28 29 0d  oid CheckSafe().
97a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
97b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
97c0: 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
97d0: 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 49 6e 20      // NOTE: In 
97e0: 22 73 61 66 65 22 20 6d 6f 64 65 2c 20 77 65 20  "safe" mode, we 
97f0: 64 69 73 61 6c 6c 6f 77 20 61 6c 6c 20 64 69 72  disallow all dir
9800: 65 63 74 20 61 63 63 65 73 73 20 74 6f 20 74 68  ect access to th
9810: 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..             
9820: 20 20 20 2f 2f 20 20 20 20 20 20 20 63 6f 6e 74     //       cont
9830: 61 69 6e 65 64 20 72 65 67 69 73 74 72 79 20 6b  ained registry k
9840: 65 79 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ey...           
9850: 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
9860: 20 20 20 20 20 20 20 20 20 69 66 20 28 21 73 61           if (!sa
9870: 66 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  fe)..           
9880: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 3b           return;
9890: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
98a0: 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 49 6e      throw new In
98b0: 76 61 6c 69 64 4f 70 65 72 61 74 69 6f 6e 45 78  validOperationEx
98c0: 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 20 20 20 20  ception();..    
98d0: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
98e0: 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f         #endregio
98f0: 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n....           
9900: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
9910: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9920: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9930: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9940: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
9950: 20 20 20 20 23 72 65 67 69 6f 6e 20 53 79 73 74      #region Syst
9960: 65 6d 2e 4f 62 6a 65 63 74 20 4f 76 65 72 72 69  em.Object Overri
9970: 64 65 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20  des..           
9980: 20 70 75 62 6c 69 63 20 6f 76 65 72 72 69 64 65   public override
9990: 20 73 74 72 69 6e 67 20 54 6f 53 74 72 69 6e 67   string ToString
99a0: 28 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ()..            
99b0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
99c0: 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64     CheckDisposed
99d0: 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ();....         
99e0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 68         return th
99f0: 69 73 2e 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20  is.Name;..      
9a00: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
9a10: 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d       #endregion.
9a20: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
9a30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9a40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9a50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9a60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9a70: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
9a80: 20 20 23 72 65 67 69 6f 6e 20 49 6d 70 6c 69 63    #region Implic
9a90: 69 74 20 43 6f 6e 76 65 72 73 69 6f 6e 20 4f 70  it Conversion Op
9aa0: 65 72 61 74 6f 72 73 0d 0a 20 20 20 20 20 20 20  erators..       
9ab0: 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
9ac0: 20 20 20 20 20 2f 2f 20 42 55 47 42 55 47 3a 20       // BUGBUG: 
9ad0: 52 65 6d 6f 76 65 20 6d 65 3f 20 20 54 68 69 73  Remove me?  This
9ae0: 20 73 68 6f 75 6c 64 20 62 65 20 73 61 66 65 20   should be safe 
9af0: 62 65 63 61 75 73 65 20 69 6e 20 27 77 68 61 74  because in 'what
9b00: 2d 69 66 27 0d 0a 20 20 20 20 20 20 20 20 20 20  -if'..          
9b10: 20 20 2f 2f 20 20 20 20 20 20 20 20 20 6d 6f 64    //         mod
9b20: 65 20 61 6c 6c 20 6b 65 79 73 20 61 72 65 20 6f  e all keys are o
9b30: 70 65 6e 65 64 20 72 65 61 64 2d 6f 6e 6c 79 2e  pened read-only.
9b40: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
9b50: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
9b60: 62 6c 69 63 20 73 74 61 74 69 63 20 69 6d 70 6c  blic static impl
9b70: 69 63 69 74 20 6f 70 65 72 61 74 6f 72 20 52 65  icit operator Re
9b80: 67 69 73 74 72 79 4b 65 79 28 0d 0a 20 20 20 20  gistryKey(..    
9b90: 20 20 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b              Mock
9ba0: 52 65 67 69 73 74 72 79 4b 65 79 20 6b 65 79 0d  RegistryKey key.
9bb0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
9bc0: 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   )..            
9bd0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
9be0: 20 20 20 72 65 74 75 72 6e 20 28 6b 65 79 20 21     return (key !
9bf0: 3d 20 6e 75 6c 6c 29 20 3f 20 6b 65 79 2e 4b 65  = null) ? key.Ke
9c00: 79 20 3a 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20  y : null;..     
9c10: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
9c20: 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
9c30: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
9c40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9c50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9c60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9c70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9c80: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
9c90: 20 20 20 23 72 65 67 69 6f 6e 20 49 44 69 73 70     #region IDisp
9ca0: 6f 73 61 62 6c 65 20 22 50 61 74 74 65 72 6e 22  osable "Pattern"
9cb0: 20 4d 65 6d 62 65 72 73 0d 0a 20 20 20 20 20 20   Members..      
9cc0: 20 20 20 20 20 20 70 72 69 76 61 74 65 20 62 6f        private bo
9cd0: 6f 6c 20 64 69 73 70 6f 73 65 64 3b 0d 0a 20 20  ol disposed;..  
9ce0: 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
9cf0: 65 20 76 6f 69 64 20 43 68 65 63 6b 44 69 73 70  e void CheckDisp
9d00: 6f 73 65 64 28 29 20 2f 2a 20 74 68 72 6f 77 20  osed() /* throw 
9d10: 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  */..            
9d20: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
9d30: 20 20 20 69 66 20 28 21 64 69 73 70 6f 73 65 64     if (!disposed
9d40: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
9d50: 20 20 20 20 20 20 20 72 65 74 75 72 6e 3b 0d 0a         return;..
9d60: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
9d70: 20 20 74 68 72 6f 77 20 6e 65 77 20 4f 62 6a 65    throw new Obje
9d80: 63 74 44 69 73 70 6f 73 65 64 45 78 63 65 70 74  ctDisposedExcept
9d90: 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ion(..          
9da0: 20 20 20 20 20 20 20 20 20 20 74 79 70 65 6f 66            typeof
9db0: 28 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79  (MockRegistryKey
9dc0: 29 2e 4e 61 6d 65 29 3b 0d 0a 20 20 20 20 20 20  ).Name);..      
9dd0: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
9de0: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
9df0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9e00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9e10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9e20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
9e30: 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
9e40: 65 20 2f 2a 20 70 72 6f 74 65 63 74 65 64 20 76  e /* protected v
9e50: 69 72 74 75 61 6c 20 2a 2f 20 76 6f 69 64 20 44  irtual */ void D
9e60: 69 73 70 6f 73 65 28 0d 0a 20 20 20 20 20 20 20  ispose(..       
9e70: 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 64 69           bool di
9e80: 73 70 6f 73 69 6e 67 0d 0a 20 20 20 20 20 20 20  sposing..       
9e90: 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
9ea0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
9eb0: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21             if (!
9ec0: 64 69 73 70 6f 73 65 64 29 0d 0a 20 20 20 20 20  disposed)..     
9ed0: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
9ee0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9ef0: 20 20 69 66 20 28 64 69 73 70 6f 73 69 6e 67 29    if (disposing)
9f00: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
9f10: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
9f20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9f30: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
9f40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9f50: 2f 2f 2f 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20  /////..         
9f60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
9f70: 2f 20 64 69 73 70 6f 73 65 20 6d 61 6e 61 67 65  / dispose manage
9f80: 64 20 72 65 73 6f 75 72 63 65 73 20 68 65 72 65  d resources here
9f90: 2e 2e 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  .....           
9fa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f               ///
9fb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9fc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9fd0: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
9fe0: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
9ff0: 28 6b 65 79 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20  (key != null).. 
a000: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a010: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
a020: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a030: 20 20 20 20 20 20 6b 65 79 2e 43 6c 6f 73 65 28        key.Close(
a040: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
a050: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a060: 6b 65 79 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20  key = null;..   
a070: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a080: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
a090: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
a0a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
a0b0: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
a0c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a0d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 20 20 20  ///////////..   
a0e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a0f0: 20 2f 2f 20 72 65 6c 65 61 73 65 20 75 6e 6d 61   // release unma
a100: 6e 61 67 65 64 20 72 65 73 6f 75 72 63 65 73 20  naged resources 
a110: 68 65 72 65 2e 2e 2e 0d 0a 20 20 20 20 20 20 20  here.....       
a120: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f               ///
a130: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a140: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a150: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
a160: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
a170: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a180: 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 54 68 69 73     // NOTE: This
a190: 20 6f 62 6a 65 63 74 20 69 73 20 6e 6f 77 20 64   object is now d
a1a0: 69 73 70 6f 73 65 64 2e 0d 0a 20 20 20 20 20 20  isposed...      
a1b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
a1c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
a1d0: 20 20 20 20 20 20 64 69 73 70 6f 73 65 64 20 3d        disposed =
a1e0: 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20   true;..        
a1f0: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
a200: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
a210: 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
a220: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
a230: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a240: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a250: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a260: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a270: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
a280: 20 20 20 23 72 65 67 69 6f 6e 20 49 44 69 73 70     #region IDisp
a290: 6f 73 61 62 6c 65 20 4d 65 6d 62 65 72 73 0d 0a  osable Members..
a2a0: 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
a2b0: 69 63 20 76 6f 69 64 20 44 69 73 70 6f 73 65 28  ic void Dispose(
a2c0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
a2d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
a2e0: 20 20 44 69 73 70 6f 73 65 28 74 72 75 65 29 3b    Dispose(true);
a2f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
a300: 20 20 47 43 2e 53 75 70 70 72 65 73 73 46 69 6e    GC.SuppressFin
a310: 61 6c 69 7a 65 28 74 68 69 73 29 3b 0d 0a 20 20  alize(this);..  
a320: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
a330: 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67           #endreg
a340: 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ion....         
a350: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
a360: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a370: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a380: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a390: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
a3a0: 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 44 65        #region De
a3b0: 73 74 72 75 63 74 6f 72 0d 0a 20 20 20 20 20 20  structor..      
a3c0: 20 20 20 20 20 20 7e 4d 6f 63 6b 52 65 67 69 73        ~MockRegis
a3d0: 74 72 79 4b 65 79 28 29 0d 0a 20 20 20 20 20 20  tryKey()..      
a3e0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
a3f0: 20 20 20 20 20 20 20 20 20 44 69 73 70 6f 73 65           Dispose
a400: 28 66 61 6c 73 65 29 3b 0d 0a 20 20 20 20 20 20  (false);..      
a410: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
a420: 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d       #endregion.
a430: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
a440: 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
a450: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
a460: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a470: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a480: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a490: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a4a0: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65  /....        #re
a4b0: 67 69 6f 6e 20 52 65 67 69 73 74 72 79 48 65 6c  gion RegistryHel
a4c0: 70 65 72 20 43 6c 61 73 73 0d 0a 20 20 20 20 20  per Class..     
a4d0: 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69     private stati
a4e0: 63 20 63 6c 61 73 73 20 52 65 67 69 73 74 72 79  c class Registry
a4f0: 48 65 6c 70 65 72 0d 0a 20 20 20 20 20 20 20 20  Helper..        
a500: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  {..            #
a510: 72 65 67 69 6f 6e 20 50 75 62 6c 69 63 20 53 74  region Public St
a520: 61 74 69 63 20 50 72 6f 70 65 72 74 69 65 73 0d  atic Properties.
a530: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69  .            pri
a540: 76 61 74 65 20 73 74 61 74 69 63 20 69 6e 74 20  vate static int 
a550: 73 75 62 4b 65 79 73 43 72 65 61 74 65 64 3b 0d  subKeysCreated;.
a560: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
a570: 6c 69 63 20 73 74 61 74 69 63 20 69 6e 74 20 53  lic static int S
a580: 75 62 4b 65 79 73 43 72 65 61 74 65 64 0d 0a 20  ubKeysCreated.. 
a590: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
a5a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65                ge
a5b0: 74 20 7b 20 72 65 74 75 72 6e 20 73 75 62 4b 65  t { return subKe
a5c0: 79 73 43 72 65 61 74 65 64 3b 20 7d 0d 0a 20 20  ysCreated; }..  
a5d0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
a5e0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
a5f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a600: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a610: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a620: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
a630: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
a640: 69 76 61 74 65 20 73 74 61 74 69 63 20 69 6e 74  ivate static int
a650: 20 73 75 62 4b 65 79 73 44 65 6c 65 74 65 64 3b   subKeysDeleted;
a660: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
a670: 62 6c 69 63 20 73 74 61 74 69 63 20 69 6e 74 20  blic static int 
a680: 53 75 62 4b 65 79 73 44 65 6c 65 74 65 64 0d 0a  SubKeysDeleted..
a690: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
a6a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67                 g
a6b0: 65 74 20 7b 20 72 65 74 75 72 6e 20 73 75 62 4b  et { return subK
a6c0: 65 79 73 44 65 6c 65 74 65 64 3b 20 7d 0d 0a 20  eysDeleted; }.. 
a6d0: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
a6e0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
a6f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a700: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a710: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a720: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
a730: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
a740: 72 69 76 61 74 65 20 73 74 61 74 69 63 20 69 6e  rivate static in
a750: 74 20 6b 65 79 56 61 6c 75 65 73 53 65 74 3b 0d  t keyValuesSet;.
a760: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
a770: 6c 69 63 20 73 74 61 74 69 63 20 69 6e 74 20 4b  lic static int K
a780: 65 79 56 61 6c 75 65 73 53 65 74 0d 0a 20 20 20  eyValuesSet..   
a790: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
a7a0: 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20              get 
a7b0: 7b 20 72 65 74 75 72 6e 20 6b 65 79 56 61 6c 75  { return keyValu
a7c0: 65 73 53 65 74 3b 20 7d 0d 0a 20 20 20 20 20 20  esSet; }..      
a7d0: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
a7e0: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
a7f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a800: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a810: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a820: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
a830: 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
a840: 65 20 73 74 61 74 69 63 20 69 6e 74 20 6b 65 79  e static int key
a850: 56 61 6c 75 65 73 44 65 6c 65 74 65 64 3b 0d 0a  ValuesDeleted;..
a860: 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
a870: 69 63 20 73 74 61 74 69 63 20 69 6e 74 20 4b 65  ic static int Ke
a880: 79 56 61 6c 75 65 73 44 65 6c 65 74 65 64 0d 0a  yValuesDeleted..
a890: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
a8a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67                 g
a8b0: 65 74 20 7b 20 72 65 74 75 72 6e 20 6b 65 79 56  et { return keyV
a8c0: 61 6c 75 65 73 44 65 6c 65 74 65 64 3b 20 7d 0d  aluesDeleted; }.
a8d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
a8e0: 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64              #end
a8f0: 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20  region....      
a900: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
a910: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a920: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a930: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a940: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
a950: 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e           #region
a960: 20 50 75 62 6c 69 63 20 53 74 61 74 69 63 20 4d   Public Static M
a970: 65 74 68 6f 64 73 0d 0a 20 20 20 20 20 20 20 20  ethods..        
a980: 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69      public stati
a990: 63 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65  c MockRegistryKe
a9a0: 79 20 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20  y OpenSubKey(.. 
a9b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4d                 M
a9c0: 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 72  ockRegistryKey r
a9d0: 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20  ootKey,..       
a9e0: 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
a9f0: 73 75 62 4b 65 79 4e 61 6d 65 2c 0d 0a 20 20 20  subKeyName,..   
aa00: 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f               boo
aa10: 6c 20 77 72 69 74 61 62 6c 65 2c 0d 0a 20 20 20  l writable,..   
aa20: 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f               boo
aa30: 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20  l whatIf,..     
aa40: 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
aa50: 76 65 72 62 6f 73 65 0d 0a 20 20 20 20 20 20 20  verbose..       
aa60: 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
aa70: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
aa80: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 72             if (r
aa90: 6f 6f 74 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d  ootKey == null).
aaa0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
aab0: 20 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c       return null
aac0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
aad0: 20 20 20 20 20 69 66 20 28 76 65 72 62 6f 73 65       if (verbose
aae0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
aaf0: 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e         TraceOps.
ab00: 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 77 72  DebugAndTrace(wr
ab10: 69 74 61 62 6c 65 20 3f 0d 0a 20 20 20 20 20 20  itable ?..      
ab20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ab30: 20 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e    TracePriority.
ab40: 48 69 67 68 65 73 74 20 3a 20 54 72 61 63 65 50  Highest : TraceP
ab50: 72 69 6f 72 69 74 79 2e 48 69 67 68 65 72 2c 0d  riority.Higher,.
ab60: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
ab70: 20 20 20 20 20 20 20 20 20 64 65 62 75 67 43 61           debugCa
ab80: 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c  llback, traceCal
ab90: 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f  lback, String.Fo
aba0: 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
abb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
abc0: 72 6f 6f 74 4b 65 79 20 3d 20 7b 30 7d 2c 20 73  rootKey = {0}, s
abd0: 75 62 4b 65 79 4e 61 6d 65 20 3d 20 7b 31 7d 2c  ubKeyName = {1},
abe0: 20 77 72 69 74 61 62 6c 65 20 3d 20 7b 32 7d 22   writable = {2}"
abf0: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
ac00: 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69             ForDi
ac10: 73 70 6c 61 79 28 72 6f 6f 74 4b 65 79 29 2c 20  splay(rootKey), 
ac20: 46 6f 72 44 69 73 70 6c 61 79 28 73 75 62 4b 65  ForDisplay(subKe
ac30: 79 4e 61 6d 65 29 2c 0d 0a 20 20 20 20 20 20 20  yName),..       
ac40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ac50: 20 46 6f 72 44 69 73 70 6c 61 79 28 77 72 69 74   ForDisplay(writ
ac60: 61 62 6c 65 29 29 2c 20 74 72 61 63 65 43 61 74  able)), traceCat
ac70: 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  egory);....     
ac80: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
ac90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
aca0: 2f 20 48 41 43 4b 3a 20 41 6c 77 61 79 73 20 66  / HACK: Always f
acb0: 6f 72 62 69 64 20 77 72 69 74 61 62 6c 65 20 61  orbid writable a
acc0: 63 63 65 73 73 20 77 68 65 6e 20 6f 70 65 72 61  ccess when opera
acd0: 74 69 6e 67 20 69 6e 0d 0a 20 20 20 20 20 20 20  ting in..       
ace0: 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
acf0: 20 20 27 77 68 61 74 2d 69 66 27 20 6d 6f 64 65    'what-if' mode
ad00: 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
ad10: 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
ad20: 20 20 20 20 20 20 20 4d 6f 63 6b 52 65 67 69 73         MockRegis
ad30: 74 72 79 4b 65 79 20 6b 65 79 20 3d 20 72 6f 6f  tryKey key = roo
ad40: 74 4b 65 79 2e 4f 70 65 6e 53 75 62 4b 65 79 28  tKey.OpenSubKey(
ad50: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
ad60: 20 20 20 20 20 20 73 75 62 4b 65 79 4e 61 6d 65        subKeyName
ad70: 2c 20 77 68 61 74 49 66 20 3f 20 66 61 6c 73 65  , whatIf ? false
ad80: 20 3a 20 77 72 69 74 61 62 6c 65 29 3b 0d 0a 0d   : writable);...
ad90: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
ada0: 20 72 65 74 75 72 6e 20 28 6b 65 79 20 21 3d 20   return (key != 
adb0: 6e 75 6c 6c 29 20 3f 0d 0a 20 20 20 20 20 20 20  null) ?..       
adc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 65 77               new
add0: 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79   MockRegistryKey
ade0: 28 6b 65 79 2c 20 77 68 61 74 49 66 2c 20 66 61  (key, whatIf, fa
adf0: 6c 73 65 2c 20 66 61 6c 73 65 29 20 3a 20 6e 75  lse, false) : nu
ae00: 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll;..           
ae10: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
ae20: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
ae30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ae40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ae50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ae60: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
ae70: 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74       public stat
ae80: 69 63 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b  ic MockRegistryK
ae90: 65 79 20 43 72 65 61 74 65 53 75 62 4b 65 79 28  ey CreateSubKey(
aea0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
aeb0: 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65    MockRegistryKe
aec0: 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20 20  y rootKey,..    
aed0: 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
aee0: 6e 67 20 73 75 62 4b 65 79 4e 61 6d 65 2c 0d 0a  ng subKeyName,..
aef0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
af00: 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20  bool whatIf,..  
af10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f                bo
af20: 6f 6c 20 76 65 72 62 6f 73 65 0d 0a 20 20 20 20  ol verbose..    
af30: 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
af40: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
af50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
af60: 20 28 72 6f 6f 74 4b 65 79 20 3d 3d 20 6e 75 6c   (rootKey == nul
af70: 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
af80: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e          return n
af90: 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ull;....        
afa0: 20 20 20 20 20 20 20 20 69 66 20 28 76 65 72 62          if (verb
afb0: 6f 73 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ose)..          
afc0: 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f            TraceO
afd0: 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65  ps.DebugAndTrace
afe0: 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 48  (TracePriority.H
aff0: 69 67 68 65 73 74 2c 0d 0a 20 20 20 20 20 20 20  ighest,..       
b000: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b010: 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20   debugCallback, 
b020: 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53  traceCallback, S
b030: 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
b040: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b050: 20 20 20 20 20 20 20 22 72 6f 6f 74 4b 65 79 20         "rootKey 
b060: 3d 20 7b 30 7d 2c 20 73 75 62 4b 65 79 4e 61 6d  = {0}, subKeyNam
b070: 65 20 3d 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20  e = {1}",..     
b080: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b090: 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 72 6f     ForDisplay(ro
b0a0: 6f 74 4b 65 79 29 2c 20 46 6f 72 44 69 73 70 6c  otKey), ForDispl
b0b0: 61 79 28 73 75 62 4b 65 79 4e 61 6d 65 29 29 2c  ay(subKeyName)),
b0c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
b0d0: 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
b0e0: 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20  ategory);....   
b0f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79               try
b100: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
b110: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
b120: 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
b130: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b140: 20 2f 2f 20 48 41 43 4b 3a 20 41 6c 77 61 79 73   // HACK: Always
b150: 20 6f 70 65 6e 20 61 20 6b 65 79 2c 20 72 61 74   open a key, rat
b160: 68 65 72 20 74 68 61 6e 20 63 72 65 61 74 69 6e  her than creatin
b170: 67 20 6f 6e 65 20 77 68 65 6e 0d 0a 20 20 20 20  g one when..    
b180: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b190: 2f 2f 20 20 20 20 20 20 20 6f 70 65 72 61 74 69  //       operati
b1a0: 6e 67 20 69 6e 20 27 77 68 61 74 2d 69 66 27 20  ng in 'what-if' 
b1b0: 6d 6f 64 65 2e 0d 0a 20 20 20 20 20 20 20 20 20  mode...         
b1c0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
b1d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b1e0: 20 20 20 69 66 20 28 77 68 61 74 49 66 29 0d 0a     if (whatIf)..
b1f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b200: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
b210: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
b220: 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
b230: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 48 41             // HA
b240: 43 4b 3a 20 41 74 74 65 6d 70 74 20 74 6f 20 6f  CK: Attempt to o
b250: 70 65 6e 20 74 68 65 20 73 70 65 63 69 66 69 65  pen the specifie
b260: 64 20 73 75 62 2d 6b 65 79 2e 20 20 49 66 0d 0a  d sub-key.  If..
b270: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b280: 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
b290: 20 74 68 69 73 20 66 61 69 6c 73 2c 20 77 65 20   this fails, we 
b2a0: 77 69 6c 6c 20 73 69 6d 70 6c 79 20 72 65 74 75  will simply retu
b2b0: 72 6e 20 74 68 65 20 72 6f 6f 74 0d 0a 20 20 20  rn the root..   
b2c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b2d0: 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 6b 65       //       ke
b2e0: 79 20 69 74 73 65 6c 66 20 73 69 6e 63 65 20 6e  y itself since n
b2f0: 6f 20 77 72 69 74 65 73 20 61 72 65 20 61 6c 6c  o writes are all
b300: 6f 77 65 64 20 69 6e 0d 0a 20 20 20 20 20 20 20  owed in..       
b310: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b320: 20 2f 2f 20 20 20 20 20 20 20 27 77 68 61 74 2d   //       'what-
b330: 69 66 27 20 6d 6f 64 65 20 61 6e 79 68 6f 77 2e  if' mode anyhow.
b340: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
b350: 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
b360: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b370: 20 20 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 74        MockRegist
b380: 72 79 4b 65 79 20 6b 65 79 20 3d 20 72 6f 6f 74  ryKey key = root
b390: 4b 65 79 2e 4f 70 65 6e 53 75 62 4b 65 79 28 73  Key.OpenSubKey(s
b3a0: 75 62 4b 65 79 4e 61 6d 65 29 3b 0d 0a 0d 0a 20  ubKeyName);.... 
b3b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b3c0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 28 6b         return (k
b3d0: 65 79 20 21 3d 20 6e 75 6c 6c 29 20 3f 0d 0a 20  ey != null) ?.. 
b3e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b3f0: 20 20 20 20 20 20 20 20 20 20 20 6b 65 79 20 3a             key :
b400: 20 6e 65 77 20 4d 6f 63 6b 52 65 67 69 73 74 72   new MockRegistr
b410: 79 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20  yKey(..         
b420: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b430: 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20         rootKey, 
b440: 73 75 62 4b 65 79 4e 61 6d 65 2c 20 77 68 61 74  subKeyName, what
b450: 49 66 2c 20 66 61 6c 73 65 2c 20 66 61 6c 73 65  If, false, false
b460: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
b470: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
b480: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
b490: 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  lse..           
b4a0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
b4b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b4c0: 20 20 20 20 72 65 74 75 72 6e 20 6e 65 77 20 4d      return new M
b4d0: 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 28 0d  ockRegistryKey(.
b4e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
b4f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f               roo
b500: 74 4b 65 79 2e 43 72 65 61 74 65 53 75 62 4b 65  tKey.CreateSubKe
b510: 79 28 73 75 62 4b 65 79 4e 61 6d 65 29 2c 20 77  y(subKeyName), w
b520: 68 61 74 49 66 2c 20 66 61 6c 73 65 2c 0d 0a 20  hatIf, false,.. 
b530: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b540: 20 20 20 20 20 20 20 20 20 20 20 66 61 6c 73 65             false
b550: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
b560: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
b570: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
b580: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 69                fi
b590: 6e 61 6c 6c 79 0d 0a 20 20 20 20 20 20 20 20 20  nally..         
b5a0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
b5b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 75                su
b5c0: 62 4b 65 79 73 43 72 65 61 74 65 64 2b 2b 3b 0d  bKeysCreated++;.
b5d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
b5e0: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
b5f0: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
b600: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
b610: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b620: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b630: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b640: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
b650: 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69      public stati
b660: 63 20 76 6f 69 64 20 44 65 6c 65 74 65 53 75 62  c void DeleteSub
b670: 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20  Key(..          
b680: 20 20 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 74        MockRegist
b690: 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a  ryKey rootKey,..
b6a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b6b0: 73 74 72 69 6e 67 20 73 75 62 4b 65 79 4e 61 6d  string subKeyNam
b6c0: 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
b6d0: 20 20 20 20 62 6f 6f 6c 20 74 68 72 6f 77 4f 6e      bool throwOn
b6e0: 4d 69 73 73 69 6e 67 2c 0d 0a 20 20 20 20 20 20  Missing,..      
b6f0: 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77            bool w
b700: 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20  hatIf,..        
b710: 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65 72          bool ver
b720: 62 6f 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20  bose..          
b730: 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
b740: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
b750: 20 20 20 20 20 20 20 20 69 66 20 28 72 6f 6f 74          if (root
b760: 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  Key == null)..  
b770: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b780: 20 20 72 65 74 75 72 6e 3b 0d 0a 0d 0a 20 20 20    return;....   
b790: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
b7a0: 28 76 65 72 62 6f 73 65 29 0d 0a 20 20 20 20 20  (verbose)..     
b7b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
b7c0: 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64  raceOps.DebugAnd
b7d0: 54 72 61 63 65 28 54 72 61 63 65 50 72 69 6f 72  Trace(TracePrior
b7e0: 69 74 79 2e 48 69 67 68 65 73 74 2c 0d 0a 20 20  ity.Highest,..  
b7f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b800: 20 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62        debugCallb
b810: 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61  ack, traceCallba
b820: 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ck, String.Forma
b830: 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
b840: 20 20 20 20 20 20 20 20 20 20 20 20 22 72 6f 6f              "roo
b850: 74 4b 65 79 20 3d 20 7b 30 7d 2c 20 73 75 62 4b  tKey = {0}, subK
b860: 65 79 4e 61 6d 65 20 3d 20 7b 31 7d 22 2c 0d 0a  eyName = {1}",..
b870: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b880: 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c          ForDispl
b890: 61 79 28 72 6f 6f 74 4b 65 79 29 2c 20 46 6f 72  ay(rootKey), For
b8a0: 44 69 73 70 6c 61 79 28 73 75 62 4b 65 79 4e 61  Display(subKeyNa
b8b0: 6d 65 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  me)),..         
b8c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
b8d0: 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
b8e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
b8f0: 20 20 69 66 20 28 21 77 68 61 74 49 66 29 0d 0a    if (!whatIf)..
b900: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b910: 20 20 20 20 72 6f 6f 74 4b 65 79 2e 44 65 6c 65      rootKey.Dele
b920: 74 65 53 75 62 4b 65 79 28 73 75 62 4b 65 79 4e  teSubKey(subKeyN
b930: 61 6d 65 2c 20 74 68 72 6f 77 4f 6e 4d 69 73 73  ame, throwOnMiss
b940: 69 6e 67 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ing);....       
b950: 20 20 20 20 20 20 20 20 20 73 75 62 4b 65 79 73           subKeys
b960: 44 65 6c 65 74 65 64 2b 2b 3b 0d 0a 20 20 20 20  Deleted++;..    
b970: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
b980: 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
b990: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b9a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b9b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b9c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
b9d0: 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
b9e0: 69 63 20 73 74 61 74 69 63 20 76 6f 69 64 20 44  ic static void D
b9f0: 65 6c 65 74 65 53 75 62 4b 65 79 54 72 65 65 28  eleteSubKeyTree(
ba00: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
ba10: 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65    MockRegistryKe
ba20: 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20 20  y rootKey,..    
ba30: 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
ba40: 6e 67 20 73 75 62 4b 65 79 4e 61 6d 65 2c 0d 0a  ng subKeyName,..
ba50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ba60: 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20  bool whatIf,..  
ba70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f                bo
ba80: 6f 6c 20 76 65 72 62 6f 73 65 0d 0a 20 20 20 20  ol verbose..    
ba90: 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
baa0: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
bab0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
bac0: 20 28 72 6f 6f 74 4b 65 79 20 3d 3d 20 6e 75 6c   (rootKey == nul
bad0: 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
bae0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 3b 0d          return;.
baf0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
bb00: 20 20 20 69 66 20 28 76 65 72 62 6f 73 65 29 0d     if (verbose).
bb10: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
bb20: 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65       TraceOps.De
bb30: 62 75 67 41 6e 64 54 72 61 63 65 28 54 72 61 63  bugAndTrace(Trac
bb40: 65 50 72 69 6f 72 69 74 79 2e 48 69 67 68 65 73  ePriority.Highes
bb50: 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t,..            
bb60: 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62 75              debu
bb70: 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65  gCallback, trace
bb80: 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67  Callback, String
bb90: 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  .Format(..      
bba0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bbb0: 20 20 22 72 6f 6f 74 4b 65 79 20 3d 20 7b 30 7d    "rootKey = {0}
bbc0: 2c 20 73 75 62 4b 65 79 4e 61 6d 65 20 3d 20 7b  , subKeyName = {
bbd0: 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  1}",..          
bbe0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f                Fo
bbf0: 72 44 69 73 70 6c 61 79 28 72 6f 6f 74 4b 65 79  rDisplay(rootKey
bc00: 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 73 75  ), ForDisplay(su
bc10: 62 4b 65 79 4e 61 6d 65 29 29 2c 0d 0a 20 20 20  bKeyName)),..   
bc20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bc30: 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f       traceCatego
bc40: 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
bc50: 20 20 20 20 20 20 20 20 69 66 20 28 21 77 68 61          if (!wha
bc60: 74 49 66 29 0d 0a 20 20 20 20 20 20 20 20 20 20  tIf)..          
bc70: 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65            rootKe
bc80: 79 2e 44 65 6c 65 74 65 53 75 62 4b 65 79 54 72  y.DeleteSubKeyTr
bc90: 65 65 28 73 75 62 4b 65 79 4e 61 6d 65 29 3b 0d  ee(subKeyName);.
bca0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
bcb0: 20 20 20 73 75 62 4b 65 79 73 44 65 6c 65 74 65     subKeysDelete
bcc0: 64 2b 2b 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  d++;..          
bcd0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
bce0: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
bcf0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bd00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bd10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bd20: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
bd30: 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61        public sta
bd40: 74 69 63 20 73 74 72 69 6e 67 5b 5d 20 47 65 74  tic string[] Get
bd50: 53 75 62 4b 65 79 4e 61 6d 65 73 28 0d 0a 20 20  SubKeyNames(..  
bd60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4d 6f                Mo
bd70: 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 6b 65  ckRegistryKey ke
bd80: 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y,..            
bd90: 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c      bool whatIf,
bda0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
bdb0: 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 0d 0a    bool verbose..
bdc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bdd0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
bde0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
bdf0: 20 20 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75 6c    if (key == nul
be00: 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
be10: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e          return n
be20: 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ull;....        
be30: 20 20 20 20 20 20 20 20 69 66 20 28 76 65 72 62          if (verb
be40: 6f 73 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ose)..          
be50: 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f            TraceO
be60: 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65  ps.DebugAndTrace
be70: 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 48  (TracePriority.H
be80: 69 67 68 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  igh,..          
be90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65                de
bea0: 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61  bugCallback, tra
beb0: 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69  ceCallback, Stri
bec0: 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ng.Format(..    
bed0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bee0: 20 20 20 20 22 6b 65 79 20 3d 20 7b 30 7d 22 2c      "key = {0}",
bef0: 20 46 6f 72 44 69 73 70 6c 61 79 28 6b 65 79 29   ForDisplay(key)
bf00: 29 2c 20 74 72 61 63 65 43 61 74 65 67 6f 72 79  ), traceCategory
bf10: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
bf20: 20 20 20 20 20 20 72 65 74 75 72 6e 20 6b 65 79        return key
bf30: 2e 47 65 74 53 75 62 4b 65 79 4e 61 6d 65 73 28  .GetSubKeyNames(
bf40: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
bf50: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
bf60: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
bf70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bf80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bf90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bfa0: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
bfb0: 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69      public stati
bfc0: 63 20 6f 62 6a 65 63 74 20 47 65 74 56 61 6c 75  c object GetValu
bfd0: 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
bfe0: 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79      MockRegistry
bff0: 4b 65 79 20 6b 65 79 2c 0d 0a 20 20 20 20 20 20  Key key,..      
c000: 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
c010: 20 6e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20   name,..        
c020: 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 64          object d
c030: 65 66 61 75 6c 74 56 61 6c 75 65 2c 0d 0a 20 20  efaultValue,..  
c040: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f                bo
c050: 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20  ol whatIf,..    
c060: 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
c070: 20 76 65 72 62 6f 73 65 0d 0a 20 20 20 20 20 20   verbose..      
c080: 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
c090: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
c0a0: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
c0b0: 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  key == null)..  
c0c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c0d0: 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a    return null;..
c0e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
c0f0: 20 20 69 66 20 28 76 65 72 62 6f 73 65 29 0d 0a    if (verbose)..
c100: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c110: 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62      TraceOps.Deb
c120: 75 67 41 6e 64 54 72 61 63 65 28 54 72 61 63 65  ugAndTrace(Trace
c130: 50 72 69 6f 72 69 74 79 2e 48 69 67 68 2c 0d 0a  Priority.High,..
c140: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c150: 20 20 20 20 20 20 20 20 64 65 62 75 67 43 61 6c          debugCal
c160: 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c  lback, traceCall
c170: 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72  back, String.For
c180: 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
c190: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 6b                "k
c1a0: 65 79 20 3d 20 7b 30 7d 2c 20 6e 61 6d 65 20 3d  ey = {0}, name =
c1b0: 20 7b 31 7d 2c 20 64 65 66 61 75 6c 74 56 61 6c   {1}, defaultVal
c1c0: 75 65 20 3d 20 7b 32 7d 22 2c 0d 0a 20 20 20 20  ue = {2}",..    
c1d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c1e0: 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 6b      ForDisplay(k
c1f0: 65 79 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28  ey), ForDisplay(
c200: 6e 61 6d 65 29 2c 0d 0a 20 20 20 20 20 20 20 20  name),..        
c210: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c220: 46 6f 72 44 69 73 70 6c 61 79 28 64 65 66 61 75  ForDisplay(defau
c230: 6c 74 56 61 6c 75 65 29 29 2c 20 74 72 61 63 65  ltValue)), trace
c240: 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
c250: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
c260: 74 75 72 6e 20 6b 65 79 2e 47 65 74 56 61 6c 75  turn key.GetValu
c270: 65 28 6e 61 6d 65 2c 20 64 65 66 61 75 6c 74 56  e(name, defaultV
c280: 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  alue);..        
c290: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
c2a0: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
c2b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c2c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c2d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c2e0: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
c2f0: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73          public s
c300: 74 61 74 69 63 20 76 6f 69 64 20 53 65 74 56 61  tatic void SetVa
c310: 6c 75 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  lue(..          
c320: 20 20 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 74        MockRegist
c330: 72 79 4b 65 79 20 6b 65 79 2c 0d 0a 20 20 20 20  ryKey key,..    
c340: 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
c350: 6e 67 20 6e 61 6d 65 2c 0d 0a 20 20 20 20 20 20  ng name,..      
c360: 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74            object
c370: 20 76 61 6c 75 65 2c 0d 0a 20 20 20 20 20 20 20   value,..       
c380: 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68           bool wh
c390: 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20  atIf,..         
c3a0: 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62         bool verb
c3b0: 6f 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ose..           
c3c0: 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
c3d0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
c3e0: 20 20 20 20 20 20 20 69 66 20 28 6b 65 79 20 3d         if (key =
c3f0: 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
c400: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
c410: 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  urn;....        
c420: 20 20 20 20 20 20 20 20 69 66 20 28 76 65 72 62          if (verb
c430: 6f 73 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ose)..          
c440: 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f            TraceO
c450: 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65  ps.DebugAndTrace
c460: 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 48  (TracePriority.H
c470: 69 67 68 65 73 74 2c 0d 0a 20 20 20 20 20 20 20  ighest,..       
c480: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c490: 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20   debugCallback, 
c4a0: 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53  traceCallback, S
c4b0: 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
c4c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c4d0: 20 20 20 20 20 20 20 22 6b 65 79 20 3d 20 7b 30         "key = {0
c4e0: 7d 2c 20 6e 61 6d 65 20 3d 20 7b 31 7d 2c 20 76  }, name = {1}, v
c4f0: 61 6c 75 65 20 3d 20 7b 32 7d 22 2c 0d 0a 20 20  alue = {2}",..  
c500: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c510: 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79        ForDisplay
c520: 28 6b 65 79 29 2c 20 46 6f 72 44 69 73 70 6c 61  (key), ForDispla
c530: 79 28 6e 61 6d 65 29 2c 20 46 6f 72 44 69 73 70  y(name), ForDisp
c540: 6c 61 79 28 76 61 6c 75 65 29 29 2c 0d 0a 20 20  lay(value)),..  
c550: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c560: 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67        traceCateg
c570: 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
c580: 20 20 20 20 20 20 20 20 20 69 66 20 28 21 77 68           if (!wh
c590: 61 74 49 66 29 0d 0a 20 20 20 20 20 20 20 20 20  atIf)..         
c5a0: 20 20 20 20 20 20 20 20 20 20 20 6b 65 79 2e 53             key.S
c5b0: 65 74 56 61 6c 75 65 28 6e 61 6d 65 2c 20 76 61  etValue(name, va
c5c0: 6c 75 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  lue);....       
c5d0: 20 20 20 20 20 20 20 20 20 6b 65 79 56 61 6c 75           keyValu
c5e0: 65 73 53 65 74 2b 2b 3b 0d 0a 20 20 20 20 20 20  esSet++;..      
c5f0: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
c600: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
c610: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c620: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c630: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c640: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
c650: 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
c660: 20 73 74 61 74 69 63 20 76 6f 69 64 20 44 65 6c   static void Del
c670: 65 74 65 56 61 6c 75 65 28 0d 0a 20 20 20 20 20  eteValue(..     
c680: 20 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52             MockR
c690: 65 67 69 73 74 72 79 4b 65 79 20 6b 65 79 2c 0d  egistryKey key,.
c6a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
c6b0: 20 73 74 72 69 6e 67 20 6e 61 6d 65 2c 0d 0a 20   string name,.. 
c6c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62                 b
c6d0: 6f 6f 6c 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69  ool throwOnMissi
c6e0: 6e 67 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ng,..           
c6f0: 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66       bool whatIf
c700: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
c710: 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 0d     bool verbose.
c720: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
c730: 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   )..            
c740: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
c750: 20 20 20 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75     if (key == nu
c760: 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
c770: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 3b           return;
c780: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
c790: 20 20 20 20 69 66 20 28 76 65 72 62 6f 73 65 29      if (verbose)
c7a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
c7b0: 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44        TraceOps.D
c7c0: 65 62 75 67 41 6e 64 54 72 61 63 65 28 54 72 61  ebugAndTrace(Tra
c7d0: 63 65 50 72 69 6f 72 69 74 79 2e 48 69 67 68 65  cePriority.Highe
c7e0: 73 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  st,..           
c7f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62               deb
c800: 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63  ugCallback, trac
c810: 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e  eCallback, Strin
c820: 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
c830: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c840: 20 20 20 22 6b 65 79 20 3d 20 7b 30 7d 2c 20 6e     "key = {0}, n
c850: 61 6d 65 20 3d 20 7b 31 7d 22 2c 20 46 6f 72 44  ame = {1}", ForD
c860: 69 73 70 6c 61 79 28 6b 65 79 29 2c 0d 0a 20 20  isplay(key),..  
c870: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c880: 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79        ForDisplay
c890: 28 6e 61 6d 65 29 29 2c 20 74 72 61 63 65 43 61  (name)), traceCa
c8a0: 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
c8b0: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
c8c0: 21 77 68 61 74 49 66 29 0d 0a 20 20 20 20 20 20  !whatIf)..      
c8d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6b 65                ke
c8e0: 79 2e 44 65 6c 65 74 65 56 61 6c 75 65 28 6e 61  y.DeleteValue(na
c8f0: 6d 65 2c 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69  me, throwOnMissi
c900: 6e 67 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ng);....        
c910: 20 20 20 20 20 20 20 20 6b 65 79 56 61 6c 75 65          keyValue
c920: 73 44 65 6c 65 74 65 64 2b 2b 3b 0d 0a 20 20 20  sDeleted++;..   
c930: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
c940: 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
c950: 6f 6e 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20  on..        }.. 
c960: 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f         #endregio
c970: 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  n....        ///
c980: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c990: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c9a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c9b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c9c0: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
c9d0: 23 72 65 67 69 6f 6e 20 53 74 72 69 6e 67 4c 69  #region StringLi
c9e0: 73 74 20 43 6c 61 73 73 0d 0a 20 20 20 20 20 20  st Class..      
c9f0: 20 20 70 72 69 76 61 74 65 20 73 65 61 6c 65 64    private sealed
ca00: 20 63 6c 61 73 73 20 53 74 72 69 6e 67 4c 69 73   class StringLis
ca10: 74 20 3a 20 4c 69 73 74 3c 73 74 72 69 6e 67 3e  t : List<string>
ca20: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
ca30: 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
ca40: 53 74 72 69 6e 67 4c 69 73 74 28 29 0d 0a 20 20  StringList()..  
ca50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3a 20                : 
ca60: 62 61 73 65 28 29 0d 0a 20 20 20 20 20 20 20 20  base()..        
ca70: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
ca80: 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74         // do not
ca90: 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 20  hing...         
caa0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
cab0: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
cac0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cad0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cae0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
caf0: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
cb00: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 53 74         public St
cb10: 72 69 6e 67 4c 69 73 74 28 49 45 6e 75 6d 65 72  ringList(IEnumer
cb20: 61 62 6c 65 3c 73 74 72 69 6e 67 3e 20 63 6f 6c  able<string> col
cb30: 6c 65 63 74 69 6f 6e 29 0d 0a 20 20 20 20 20 20  lection)..      
cb40: 20 20 20 20 20 20 20 20 20 20 3a 20 62 61 73 65            : base
cb50: 28 63 6f 6c 6c 65 63 74 69 6f 6e 29 0d 0a 20 20  (collection)..  
cb60: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
cb70: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
cb80: 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20  do nothing...   
cb90: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
cba0: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23      }..        #
cbb0: 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20  endregion....   
cbc0: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
cbd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cbe0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cbf0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cc00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
cc10: 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20          #region 
cc20: 53 74 72 69 6e 67 44 69 63 74 69 6f 6e 61 72 79  StringDictionary
cc30: 20 43 6c 61 73 73 0d 0a 20 20 20 20 20 20 20 20   Class..        
cc40: 70 72 69 76 61 74 65 20 73 65 61 6c 65 64 20 63  private sealed c
cc50: 6c 61 73 73 20 53 74 72 69 6e 67 44 69 63 74 69  lass StringDicti
cc60: 6f 6e 61 72 79 20 3a 20 44 69 63 74 69 6f 6e 61  onary : Dictiona
cc70: 72 79 3c 73 74 72 69 6e 67 2c 20 73 74 72 69 6e  ry<string, strin
cc80: 67 3e 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  g>..        {.. 
cc90: 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
cca0: 63 20 53 74 72 69 6e 67 44 69 63 74 69 6f 6e 61  c StringDictiona
ccb0: 72 79 28 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ry()..          
ccc0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
ccd0: 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69       // do nothi
cce0: 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ng...           
ccf0: 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20   }..        }.. 
cd00: 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f         #endregio
cd10: 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  n....        ///
cd20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cd30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cd40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cd50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cd60: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
cd70: 23 72 65 67 69 6f 6e 20 56 65 72 73 69 6f 6e 4c  #region VersionL
cd80: 69 73 74 20 43 6c 61 73 73 0d 0a 20 20 20 20 20  ist Class..     
cd90: 20 20 20 70 72 69 76 61 74 65 20 73 65 61 6c 65     private seale
cda0: 64 20 63 6c 61 73 73 20 56 65 72 73 69 6f 6e 4c  d class VersionL
cdb0: 69 73 74 20 3a 20 4c 69 73 74 3c 56 65 72 73 69  ist : List<Versi
cdc0: 6f 6e 3e 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  on>..        {..
cdd0: 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
cde0: 69 63 20 56 65 72 73 69 6f 6e 4c 69 73 74 28 29  ic VersionList()
cdf0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
ce00: 20 20 3a 20 62 61 73 65 28 29 0d 0a 20 20 20 20    : base()..    
ce10: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
ce20: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f             // do
ce30: 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20   nothing...     
ce40: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
ce50: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
ce60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ce70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ce80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ce90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
cea0: 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
ceb0: 63 20 56 65 72 73 69 6f 6e 4c 69 73 74 28 49 45  c VersionList(IE
cec0: 6e 75 6d 65 72 61 62 6c 65 3c 56 65 72 73 69 6f  numerable<Versio
ced0: 6e 3e 20 63 6f 6c 6c 65 63 74 69 6f 6e 29 0d 0a  n> collection)..
cee0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cef0: 3a 20 62 61 73 65 28 63 6f 6c 6c 65 63 74 69 6f  : base(collectio
cf00: 6e 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n)..            
cf10: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
cf20: 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67     // do nothing
cf30: 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ...            }
cf40: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..   
cf50: 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d       #endregion.
cf60: 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
cf70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cf80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cf90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cfa0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cfb0: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72  //....        #r
cfc0: 65 67 69 6f 6e 20 56 65 72 73 69 6f 6e 4d 61 70  egion VersionMap
cfd0: 20 43 6c 61 73 73 0d 0a 20 20 20 20 20 20 20 20   Class..        
cfe0: 70 72 69 76 61 74 65 20 73 65 61 6c 65 64 20 63  private sealed c
cff0: 6c 61 73 73 20 56 65 72 73 69 6f 6e 4d 61 70 20  lass VersionMap 
d000: 3a 20 44 69 63 74 69 6f 6e 61 72 79 3c 73 74 72  : Dictionary<str
d010: 69 6e 67 2c 20 56 65 72 73 69 6f 6e 4c 69 73 74  ing, VersionList
d020: 3e 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  >..        {..  
d030: 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
d040: 20 56 65 72 73 69 6f 6e 4d 61 70 28 29 0d 0a 20   VersionMap().. 
d050: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
d060: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
d070: 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20   do nothing...  
d080: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
d090: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
d0a0: 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20  #endregion....  
d0b0: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
d0c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d0d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d0e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d0f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
d100: 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e  .        #region
d110: 20 50 61 63 6b 61 67 65 20 43 6c 61 73 73 0d 0a   Package Class..
d120: 20 20 20 20 20 20 20 20 69 6e 74 65 72 6e 61 6c          internal
d130: 20 73 65 61 6c 65 64 20 63 6c 61 73 73 20 50 61   sealed class Pa
d140: 63 6b 61 67 65 0d 0a 20 20 20 20 20 20 20 20 7b  ckage..        {
d150: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 72  ..            #r
d160: 65 67 69 6f 6e 20 50 75 62 6c 69 63 20 43 6f 6e  egion Public Con
d170: 73 74 72 75 63 74 6f 72 73 0d 0a 20 20 20 20 20  structors..     
d180: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 50 61         public Pa
d190: 63 6b 61 67 65 28 29 0d 0a 20 20 20 20 20 20 20  ckage()..       
d1a0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
d1b0: 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f          // do no
d1c0: 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20  thing...        
d1d0: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
d1e0: 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
d1f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
d200: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d210: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d220: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d230: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d240: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
d250: 23 72 65 67 69 6f 6e 20 50 75 62 6c 69 63 20 50  #region Public P
d260: 72 6f 70 65 72 74 69 65 73 0d 0a 20 20 20 20 20  roperties..     
d270: 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 47         private G
d280: 75 69 64 20 70 61 63 6b 61 67 65 49 64 3b 0d 0a  uid packageId;..
d290: 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
d2a0: 69 63 20 47 75 69 64 20 50 61 63 6b 61 67 65 49  ic Guid PackageI
d2b0: 64 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  d..            {
d2c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
d2d0: 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 70    get { return p
d2e0: 61 63 6b 61 67 65 49 64 3b 20 7d 0d 0a 20 20 20  ackageId; }..   
d2f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74               set
d300: 20 7b 20 70 61 63 6b 61 67 65 49 64 20 3d 20 76   { packageId = v
d310: 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20  alue; }..       
d320: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
d330: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
d340: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d350: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d360: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d370: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
d380: 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65           private
d390: 20 47 75 69 64 20 73 65 72 76 69 63 65 49 64 3b   Guid serviceId;
d3a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
d3b0: 62 6c 69 63 20 47 75 69 64 20 53 65 72 76 69 63  blic Guid Servic
d3c0: 65 49 64 0d 0a 20 20 20 20 20 20 20 20 20 20 20  eId..           
d3d0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
d3e0: 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e      get { return
d3f0: 20 73 65 72 76 69 63 65 49 64 3b 20 7d 0d 0a 20   serviceId; }.. 
d400: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
d410: 65 74 20 7b 20 73 65 72 76 69 63 65 49 64 20 3d  et { serviceId =
d420: 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20   value; }..     
d430: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
d440: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
d450: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d460: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d470: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d480: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
d490: 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
d4a0: 74 65 20 47 75 69 64 20 64 61 74 61 53 6f 75 72  te Guid dataSour
d4b0: 63 65 49 64 3b 0d 0a 20 20 20 20 20 20 20 20 20  ceId;..         
d4c0: 20 20 20 70 75 62 6c 69 63 20 47 75 69 64 20 44     public Guid D
d4d0: 61 74 61 53 6f 75 72 63 65 49 64 0d 0a 20 20 20  ataSourceId..   
d4e0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
d4f0: 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20              get 
d500: 7b 20 72 65 74 75 72 6e 20 64 61 74 61 53 6f 75  { return dataSou
d510: 72 63 65 49 64 3b 20 7d 0d 0a 20 20 20 20 20 20  rceId; }..      
d520: 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20            set { 
d530: 64 61 74 61 53 6f 75 72 63 65 49 64 20 3d 20 76  dataSourceId = v
d540: 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20  alue; }..       
d550: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
d560: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
d570: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d580: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d590: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d5a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
d5b0: 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65           private
d5c0: 20 47 75 69 64 20 64 61 74 61 50 72 6f 76 69 64   Guid dataProvid
d5d0: 65 72 49 64 3b 0d 0a 20 20 20 20 20 20 20 20 20  erId;..         
d5e0: 20 20 20 70 75 62 6c 69 63 20 47 75 69 64 20 44     public Guid D
d5f0: 61 74 61 50 72 6f 76 69 64 65 72 49 64 0d 0a 20  ataProviderId.. 
d600: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
d610: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65                ge
d620: 74 20 7b 20 72 65 74 75 72 6e 20 64 61 74 61 50  t { return dataP
d630: 72 6f 76 69 64 65 72 49 64 3b 20 7d 0d 0a 20 20  roviderId; }..  
d640: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65                se
d650: 74 20 7b 20 64 61 74 61 50 72 6f 76 69 64 65 72  t { dataProvider
d660: 49 64 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20  Id = value; }.. 
d670: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
d680: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
d690: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d6a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d6b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d6c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
d6d0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
d6e0: 72 69 76 61 74 65 20 47 75 69 64 20 61 64 6f 4e  rivate Guid adoN
d6f0: 65 74 54 65 63 68 6e 6f 6c 6f 67 79 49 64 3b 0d  etTechnologyId;.
d700: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
d710: 6c 69 63 20 47 75 69 64 20 41 64 6f 4e 65 74 54  lic Guid AdoNetT
d720: 65 63 68 6e 6f 6c 6f 67 79 49 64 0d 0a 20 20 20  echnologyId..   
d730: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
d740: 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20              get 
d750: 7b 20 72 65 74 75 72 6e 20 61 64 6f 4e 65 74 54  { return adoNetT
d760: 65 63 68 6e 6f 6c 6f 67 79 49 64 3b 20 7d 0d 0a  echnologyId; }..
d770: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d780: 73 65 74 20 7b 20 61 64 6f 4e 65 74 54 65 63 68  set { adoNetTech
d790: 6e 6f 6c 6f 67 79 49 64 20 3d 20 76 61 6c 75 65  nologyId = value
d7a0: 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
d7b0: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
d7c0: 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 20 20 20 20  #endregion..    
d7d0: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23      }..        #
d7e0: 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20  endregion....   
d7f0: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
d800: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d810: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d820: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d830: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
d840: 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20          #region 
d850: 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 43 6c  Configuration Cl
d860: 61 73 73 0d 0a 20 20 20 20 20 20 20 20 70 72 69  ass..        pri
d870: 76 61 74 65 20 73 65 61 6c 65 64 20 63 6c 61 73  vate sealed clas
d880: 73 20 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 0d  s Configuration.
d890: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
d8a0: 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20          #region 
d8b0: 50 72 69 76 61 74 65 20 43 6f 6e 73 74 61 6e 74  Private Constant
d8c0: 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  s..            p
d8d0: 72 69 76 61 74 65 20 63 6f 6e 73 74 20 63 68 61  rivate const cha
d8e0: 72 20 53 77 69 74 63 68 20 3d 20 27 2d 27 3b 0d  r Switch = '-';.
d8f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69  .            pri
d900: 76 61 74 65 20 63 6f 6e 73 74 20 63 68 61 72 20  vate const char 
d910: 41 6c 74 53 77 69 74 63 68 20 3d 20 27 2f 27 3b  AltSwitch = '/';
d920: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
d930: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d940: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d950: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d960: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d970: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
d980: 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69     private stati
d990: 63 20 72 65 61 64 6f 6e 6c 79 20 63 68 61 72 5b  c readonly char[
d9a0: 5d 20 53 77 69 74 63 68 43 68 61 72 73 20 3d 20  ] SwitchChars = 
d9b0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
d9c0: 20 20 20 53 77 69 74 63 68 2c 20 41 6c 74 53 77     Switch, AltSw
d9d0: 69 74 63 68 0d 0a 20 20 20 20 20 20 20 20 20 20  itch..          
d9e0: 20 20 7d 3b 0d 0a 20 20 20 20 20 20 20 20 20 20    };..          
d9f0: 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a    #endregion....
da00: 20 20 20 20 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
da40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
da50: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  ...            #
da60: 72 65 67 69 6f 6e 20 50 72 69 76 61 74 65 20 43  region Private C
da70: 6f 6e 73 74 72 75 63 74 6f 72 73 0d 0a 20 20 20  onstructors..   
da80: 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65           private
da90: 20 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 28 0d   Configuration(.
daa0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
dab0: 20 41 73 73 65 6d 62 6c 79 20 61 73 73 65 6d 62   Assembly assemb
dac0: 6c 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ly,..           
dad0: 20 20 20 20 20 73 74 72 69 6e 67 20 6c 6f 67 46       string logF
dae0: 69 6c 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20  ileName,..      
daf0: 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
db00: 20 64 69 72 65 63 74 6f 72 79 2c 0d 0a 20 20 20   directory,..   
db10: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72               str
db20: 69 6e 67 20 63 6f 72 65 46 69 6c 65 4e 61 6d 65  ing coreFileName
db30: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
db40: 20 20 20 73 74 72 69 6e 67 20 6c 69 6e 71 46 69     string linqFi
db50: 6c 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20  leName,..       
db60: 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
db70: 64 65 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65  designerFileName
db80: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
db90: 20 20 20 73 74 72 69 6e 67 20 64 65 62 75 67 46     string debugF
dba0: 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20  ormat,..        
dbb0: 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 74          string t
dbc0: 72 61 63 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20  raceFormat,..   
dbd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 73               Ins
dbe0: 74 61 6c 6c 46 6c 61 67 73 20 69 6e 73 74 61 6c  tallFlags instal
dbf0: 6c 46 6c 61 67 73 2c 0d 0a 20 20 20 20 20 20 20  lFlags,..       
dc00: 20 20 20 20 20 20 20 20 20 54 72 61 63 65 50 72           TracePr
dc10: 69 6f 72 69 74 79 20 64 65 62 75 67 50 72 69 6f  iority debugPrio
dc20: 72 69 74 79 2c 0d 0a 20 20 20 20 20 20 20 20 20  rity,..         
dc30: 20 20 20 20 20 20 20 54 72 61 63 65 50 72 69 6f         TracePrio
dc40: 72 69 74 79 20 74 72 61 63 65 50 72 69 6f 72 69  rity tracePriori
dc50: 74 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ty,..           
dc60: 20 20 20 20 20 62 6f 6f 6c 20 69 6e 73 74 61 6c       bool instal
dc70: 6c 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l,..            
dc80: 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34 2c 0d      bool wow64,.
dc90: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
dca0: 20 62 6f 6f 6c 20 6e 6f 52 75 6e 74 69 6d 65 56   bool noRuntimeV
dcb0: 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20  ersion,..       
dcc0: 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 6e 6f           bool no
dcd0: 44 65 73 6b 74 6f 70 2c 0d 0a 20 20 20 20 20 20  Desktop,..      
dce0: 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 6e            bool n
dcf0: 6f 43 6f 6d 70 61 63 74 2c 0d 0a 20 20 20 20 20  oCompact,..     
dd00: 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
dd10: 6e 6f 4e 65 74 46 78 32 30 2c 0d 0a 20 20 20 20  noNetFx20,..    
dd20: 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
dd30: 20 6e 6f 4e 65 74 46 78 34 30 2c 0d 0a 20 20 20   noNetFx40,..   
dd40: 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f               boo
dd50: 6c 20 6e 6f 56 73 32 30 30 38 2c 0d 0a 20 20 20  l noVs2008,..   
dd60: 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f               boo
dd70: 6c 20 6e 6f 56 73 32 30 31 30 2c 0d 0a 20 20 20  l noVs2010,..   
dd80: 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f               boo
dd90: 6c 20 6e 6f 54 72 61 63 65 2c 0d 0a 20 20 20 20  l noTrace,..    
dda0: 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
ddb0: 20 6e 6f 43 6f 6e 73 6f 6c 65 2c 0d 0a 20 20 20   noConsole,..   
ddc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f               boo
ddd0: 6c 20 6e 6f 4c 6f 67 2c 0d 0a 20 20 20 20 20 20  l noLog,..      
dde0: 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 74            bool t
ddf0: 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 2c 0d 0a  hrowOnMissing,..
de00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
de10: 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20  bool whatIf,..  
de20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f                bo
de30: 6f 6c 20 64 65 62 75 67 2c 0d 0a 20 20 20 20 20  ol debug,..     
de40: 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
de50: 76 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20  verbose,..      
de60: 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 63            bool c
de70: 6f 6e 66 69 72 6d 0d 0a 20 20 20 20 20 20 20 20  onfirm..        
de80: 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
de90: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
dea0: 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 61            this.a
deb0: 73 73 65 6d 62 6c 79 20 3d 20 61 73 73 65 6d 62  ssembly = assemb
dec0: 6c 79 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ly;..           
ded0: 20 20 20 20 20 74 68 69 73 2e 6c 6f 67 46 69 6c       this.logFil
dee0: 65 4e 61 6d 65 20 3d 20 6c 6f 67 46 69 6c 65 4e  eName = logFileN
def0: 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ame;..          
df00: 20 20 20 20 20 20 74 68 69 73 2e 64 69 72 65 63        this.direc
df10: 74 6f 72 79 20 3d 20 64 69 72 65 63 74 6f 72 79  tory = directory
df20: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
df30: 20 20 20 74 68 69 73 2e 63 6f 72 65 46 69 6c 65     this.coreFile
df40: 4e 61 6d 65 20 3d 20 63 6f 72 65 46 69 6c 65 4e  Name = coreFileN
df50: 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ame;..          
df60: 20 20 20 20 20 20 74 68 69 73 2e 6c 69 6e 71 46        this.linqF
df70: 69 6c 65 4e 61 6d 65 20 3d 20 6c 69 6e 71 46 69  ileName = linqFi
df80: 6c 65 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20  leName;..       
df90: 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 64 65           this.de
dfa0: 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 20 3d  signerFileName =
dfb0: 20 64 65 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d   designerFileNam
dfc0: 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
dfd0: 20 20 20 20 74 68 69 73 2e 64 65 62 75 67 46 6f      this.debugFo
dfe0: 72 6d 61 74 20 3d 20 64 65 62 75 67 46 6f 72 6d  rmat = debugForm
dff0: 61 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at;..           
e000: 20 20 20 20 20 74 68 69 73 2e 74 72 61 63 65 46       this.traceF
e010: 6f 72 6d 61 74 20 3d 20 74 72 61 63 65 46 6f 72  ormat = traceFor
e020: 6d 61 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  mat;..          
e030: 20 20 20 20 20 20 74 68 69 73 2e 69 6e 73 74 61        this.insta
e040: 6c 6c 46 6c 61 67 73 20 3d 20 69 6e 73 74 61 6c  llFlags = instal
e050: 6c 46 6c 61 67 73 3b 0d 0a 20 20 20 20 20 20 20  lFlags;..       
e060: 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 64 65           this.de
e070: 62 75 67 50 72 69 6f 72 69 74 79 20 3d 20 64 65  bugPriority = de
e080: 62 75 67 50 72 69 6f 72 69 74 79 3b 0d 0a 20 20  bugPriority;..  
e090: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
e0a0: 69 73 2e 74 72 61 63 65 50 72 69 6f 72 69 74 79  is.tracePriority
e0b0: 20 3d 20 74 72 61 63 65 50 72 69 6f 72 69 74 79   = tracePriority
e0c0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
e0d0: 20 20 20 74 68 69 73 2e 69 6e 73 74 61 6c 6c 20     this.install 
e0e0: 3d 20 69 6e 73 74 61 6c 6c 3b 0d 0a 20 20 20 20  = install;..    
e0f0: 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73              this
e100: 2e 77 6f 77 36 34 20 3d 20 77 6f 77 36 34 3b 0d  .wow64 = wow64;.
e110: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
e120: 20 74 68 69 73 2e 6e 6f 52 75 6e 74 69 6d 65 56   this.noRuntimeV
e130: 65 72 73 69 6f 6e 20 3d 20 6e 6f 52 75 6e 74 69  ersion = noRunti
e140: 6d 65 56 65 72 73 69 6f 6e 3b 0d 0a 20 20 20 20  meVersion;..    
e150: 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73              this
e160: 2e 6e 6f 44 65 73 6b 74 6f 70 20 3d 20 6e 6f 44  .noDesktop = noD
e170: 65 73 6b 74 6f 70 3b 0d 0a 20 20 20 20 20 20 20  esktop;..       
e180: 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 6e 6f           this.no
e190: 43 6f 6d 70 61 63 74 20 3d 20 6e 6f 43 6f 6d 70  Compact = noComp
e1a0: 61 63 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  act;..          
e1b0: 20 20 20 20 20 20 74 68 69 73 2e 6e 6f 4e 65 74        this.noNet
e1c0: 46 78 32 30 20 3d 20 6e 6f 4e 65 74 46 78 32 30  Fx20 = noNetFx20
e1d0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
e1e0: 20 20 20 74 68 69 73 2e 6e 6f 4e 65 74 46 78 34     this.noNetFx4
e1f0: 30 20 3d 20 6e 6f 4e 65 74 46 78 34 30 3b 0d 0a  0 = noNetFx40;..
e200: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e210: 74 68 69 73 2e 6e 6f 56 73 32 30 30 38 20 3d 20  this.noVs2008 = 
e220: 6e 6f 56 73 32 30 30 38 3b 0d 0a 20 20 20 20 20  noVs2008;..     
e230: 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e             this.
e240: 6e 6f 56 73 32 30 31 30 20 3d 20 6e 6f 56 73 32  noVs2010 = noVs2
e250: 30 31 30 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  010;..          
e260: 20 20 20 20 20 20 74 68 69 73 2e 6e 6f 54 72 61        this.noTra
e270: 63 65 20 3d 20 6e 6f 54 72 61 63 65 3b 0d 0a 20  ce = noTrace;.. 
e280: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
e290: 68 69 73 2e 6e 6f 43 6f 6e 73 6f 6c 65 20 3d 20  his.noConsole = 
e2a0: 6e 6f 43 6f 6e 73 6f 6c 65 3b 0d 0a 20 20 20 20  noConsole;..    
e2b0: 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73              this
e2c0: 2e 6e 6f 4c 6f 67 20 3d 20 6e 6f 4c 6f 67 3b 0d  .noLog = noLog;.
e2d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
e2e0: 20 74 68 69 73 2e 74 68 72 6f 77 4f 6e 4d 69 73   this.throwOnMis
e2f0: 73 69 6e 67 20 3d 20 74 68 72 6f 77 4f 6e 4d 69  sing = throwOnMi
e300: 73 73 69 6e 67 3b 0d 0a 20 20 20 20 20 20 20 20  ssing;..        
e310: 20 20 20 20 20 20 20 20 74 68 69 73 2e 77 68 61          this.wha
e320: 74 49 66 20 3d 20 77 68 61 74 49 66 3b 0d 0a 20  tIf = whatIf;.. 
e330: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
e340: 68 69 73 2e 64 65 62 75 67 20 3d 20 64 65 62 75  his.debug = debu
e350: 67 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  g;..            
e360: 20 20 20 20 74 68 69 73 2e 76 65 72 62 6f 73 65      this.verbose
e370: 20 3d 20 76 65 72 62 6f 73 65 3b 0d 0a 20 20 20   = verbose;..   
e380: 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69               thi
e390: 73 2e 63 6f 6e 66 69 72 6d 20 3d 20 63 6f 6e 66  s.confirm = conf
e3a0: 69 72 6d 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  irm;..          
e3b0: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
e3c0: 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20   #endregion.... 
e3d0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
e3e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e3f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e400: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e410: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
e420: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 72  ..            #r
e430: 65 67 69 6f 6e 20 50 72 69 76 61 74 65 20 53 74  egion Private St
e440: 61 74 69 63 20 4d 65 74 68 6f 64 73 0d 0a 20 20  atic Methods..  
e450: 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
e460: 65 20 73 74 61 74 69 63 20 76 6f 69 64 20 47 65  e static void Ge
e470: 74 44 65 66 61 75 6c 74 46 69 6c 65 4e 61 6d 65  tDefaultFileName
e480: 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  s(..            
e490: 20 20 20 20 72 65 66 20 73 74 72 69 6e 67 20 64      ref string d
e4a0: 69 72 65 63 74 6f 72 79 2c 0d 0a 20 20 20 20 20  irectory,..     
e4b0: 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20 73             ref s
e4c0: 74 72 69 6e 67 20 63 6f 72 65 46 69 6c 65 4e 61  tring coreFileNa
e4d0: 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me,..           
e4e0: 20 20 20 20 20 72 65 66 20 73 74 72 69 6e 67 20       ref string 
e4f0: 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 2c 0d 0a 20  linqFileName,.. 
e500: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
e510: 65 66 20 73 74 72 69 6e 67 20 64 65 73 69 67 6e  ef string design
e520: 65 72 46 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 20  erFileName..    
e530: 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
e540: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
e550: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
e560: 20 28 74 68 69 73 41 73 73 65 6d 62 6c 79 20 3d   (thisAssembly =
e570: 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
e580: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
e590: 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  urn;....        
e5a0: 20 20 20 20 20 20 20 20 64 69 72 65 63 74 6f 72          director
e5b0: 79 20 3d 20 50 61 74 68 2e 47 65 74 44 69 72 65  y = Path.GetDire
e5c0: 63 74 6f 72 79 4e 61 6d 65 28 74 68 69 73 41 73  ctoryName(thisAs
e5d0: 73 65 6d 62 6c 79 2e 4c 6f 63 61 74 69 6f 6e 29  sembly.Location)
e5e0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
e5f0: 20 20 20 20 20 69 66 20 28 53 74 72 69 6e 67 2e       if (String.
e600: 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 64 69  IsNullOrEmpty(di
e610: 72 65 63 74 6f 72 79 29 29 0d 0a 20 20 20 20 20  rectory))..     
e620: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
e630: 65 74 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20  eturn;....      
e640: 20 20 20 20 20 20 20 20 20 20 63 6f 72 65 46 69            coreFi
e650: 6c 65 4e 61 6d 65 20 3d 20 50 61 74 68 2e 43 6f  leName = Path.Co
e660: 6d 62 69 6e 65 28 64 69 72 65 63 74 6f 72 79 2c  mbine(directory,
e670: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
e680: 20 20 20 20 20 20 49 6e 73 74 61 6c 6c 65 72 2e        Installer.
e690: 43 6f 72 65 46 69 6c 65 4e 61 6d 65 29 3b 0d 0a  CoreFileName);..
e6a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
e6b0: 20 20 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 20 3d    linqFileName =
e6c0: 20 50 61 74 68 2e 43 6f 6d 62 69 6e 65 28 64 69   Path.Combine(di
e6d0: 72 65 63 74 6f 72 79 2c 0d 0a 20 20 20 20 20 20  rectory,..      
e6e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 49 6e                In
e6f0: 73 74 61 6c 6c 65 72 2e 4c 69 6e 71 46 69 6c 65  staller.LinqFile
e700: 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  Name);....      
e710: 20 20 20 20 20 20 20 20 20 20 64 65 73 69 67 6e            design
e720: 65 72 46 69 6c 65 4e 61 6d 65 20 3d 20 50 61 74  erFileName = Pat
e730: 68 2e 43 6f 6d 62 69 6e 65 28 64 69 72 65 63 74  h.Combine(direct
e740: 6f 72 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ory,..          
e750: 20 20 20 20 20 20 20 20 20 20 49 6e 73 74 61 6c            Instal
e760: 6c 65 72 2e 44 65 73 69 67 6e 65 72 46 69 6c 65  ler.DesignerFile
e770: 4e 61 6d 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  Name);..        
e780: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
e790: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
e7a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e7b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e7c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e7d0: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
e7e0: 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
e7f0: 73 74 61 74 69 63 20 62 6f 6f 6c 20 43 68 65 63  static bool Chec
e800: 6b 4f 70 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20  kOption(..      
e810: 20 20 20 20 20 20 20 20 20 20 72 65 66 20 73 74            ref st
e820: 72 69 6e 67 20 61 72 67 0d 0a 20 20 20 20 20 20  ring arg..      
e830: 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
e840: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
e850: 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
e860: 6e 67 20 72 65 73 75 6c 74 20 3d 20 61 72 67 3b  ng result = arg;
e870: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
e880: 20 20 20 20 69 66 20 28 21 53 74 72 69 6e 67 2e      if (!String.
e890: 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 72 65  IsNullOrEmpty(re
e8a0: 73 75 6c 74 29 29 0d 0a 20 20 20 20 20 20 20 20  sult))..        
e8b0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
e8c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
e8d0: 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
e8e0: 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20         // NOTE: 
e8f0: 52 65 6d 6f 76 65 20 61 6c 6c 20 6c 65 61 64 69  Remove all leadi
e900: 6e 67 20 73 77 69 74 63 68 20 63 68 61 72 73 2e  ng switch chars.
e910: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
e920: 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
e930: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
e940: 73 75 6c 74 20 3d 20 72 65 73 75 6c 74 2e 54 72  sult = result.Tr
e950: 69 6d 53 74 61 72 74 28 53 77 69 74 63 68 43 68  imStart(SwitchCh
e960: 61 72 73 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ars);....       
e970: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
e980: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
e990: 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 48 6f       // NOTE: Ho
e9a0: 77 20 6d 61 6e 79 20 63 68 61 72 73 20 77 65 72  w many chars wer
e9b0: 65 20 72 65 6d 6f 76 65 64 3f 0d 0a 20 20 20 20  e removed?..    
e9c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e9d0: 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
e9e0: 20 20 20 20 20 20 20 20 69 6e 74 20 63 6f 75 6e          int coun
e9f0: 74 20 3d 20 61 72 67 2e 4c 65 6e 67 74 68 20 2d  t = arg.Length -
ea00: 20 72 65 73 75 6c 74 2e 4c 65 6e 67 74 68 3b 0d   result.Length;.
ea10: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
ea20: 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
ea30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
ea40: 2f 20 4e 4f 54 45 3a 20 57 61 73 20 74 68 65 72  / NOTE: Was ther
ea50: 65 20 61 74 20 6c 65 61 73 74 20 6f 6e 65 3f 0d  e at least one?.
ea60: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
ea70: 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
ea80: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
ea90: 28 63 6f 75 6e 74 20 3e 20 30 29 0d 0a 20 20 20  (count > 0)..   
eaa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
eab0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
eac0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
ead0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
eae0: 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a          // NOTE:
eaf0: 20 4f 6b 2c 20 72 65 70 6c 61 63 65 20 74 68 65   Ok, replace the
eb00: 69 72 20 6f 72 69 67 69 6e 61 6c 0d 0a 20 20 20  ir original..   
eb10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
eb20: 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 61 72       //       ar
eb30: 67 75 6d 65 6e 74 2e 0d 0a 20 20 20 20 20 20 20  gument...       
eb40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
eb50: 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
eb60: 20 20 20 20 20 20 20 20 20 20 20 20 20 61 72 67               arg
eb70: 20 3d 20 72 65 73 75 6c 74 3b 0d 0a 0d 0a 20 20   = result;....  
eb80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
eb90: 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
eba0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ebb0: 20 20 2f 2f 20 4e 4f 54 45 3a 20 59 65 73 2c 20    // NOTE: Yes, 
ebc0: 74 68 69 73 20 69 73 20 61 20 73 77 69 74 63 68  this is a switch
ebd0: 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
ebe0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
ebf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ec00: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72         return tr
ec10: 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
ec20: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
ec30: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
ec40: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
ec50: 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
ec60: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
ec70: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
ec80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ec90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
eca0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ecb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ecc0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
ecd0: 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 62  private static b
ece0: 6f 6f 6c 20 4d 61 74 63 68 4f 70 74 69 6f 6e 28  ool MatchOption(
ecf0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
ed00: 20 20 73 74 72 69 6e 67 20 61 72 67 2c 0d 0a 20    string arg,.. 
ed10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
ed20: 74 72 69 6e 67 20 6f 70 74 69 6f 6e 0d 0a 20 20  tring option..  
ed30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d                ).
ed40: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
ed50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ed60: 69 66 20 28 28 61 72 67 20 3d 3d 20 6e 75 6c 6c  if ((arg == null
ed70: 29 20 7c 7c 20 28 6f 70 74 69 6f 6e 20 3d 3d 20  ) || (option == 
ed80: 6e 75 6c 6c 29 29 0d 0a 20 20 20 20 20 20 20 20  null))..        
ed90: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
eda0: 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20  rn false;....   
edb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
edc0: 75 72 6e 20 53 74 72 69 6e 67 2e 43 6f 6d 70 61  urn String.Compa
edd0: 72 65 28 61 72 67 2c 20 30 2c 20 6f 70 74 69 6f  re(arg, 0, optio
ede0: 6e 2c 20 30 2c 0d 0a 20 20 20 20 20 20 20 20 20  n, 0,..         
edf0: 20 20 20 20 20 20 20 20 20 20 20 61 72 67 2e 4c             arg.L
ee00: 65 6e 67 74 68 2c 20 53 74 72 69 6e 67 43 6f 6d  ength, StringCom
ee10: 70 61 72 69 73 6f 6e 2e 4f 72 64 69 6e 61 6c 49  parison.OrdinalI
ee20: 67 6e 6f 72 65 43 61 73 65 29 20 3d 3d 20 30 3b  gnoreCase) == 0;
ee30: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
ee40: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
ee50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ee60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ee70: 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
eea0: 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63    private static
eeb0: 20 62 6f 6f 6c 3f 20 50 61 72 73 65 42 6f 6f 6c   bool? ParseBool
eec0: 65 61 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ean(..          
eed0: 20 20 20 20 20 20 73 74 72 69 6e 67 20 74 65 78        string tex
eee0: 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  t..             
eef0: 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20     )..          
ef00: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
ef10: 20 20 20 20 20 69 66 20 28 21 53 74 72 69 6e 67       if (!String
ef20: 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 74  .IsNullOrEmpty(t
ef30: 65 78 74 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ext))..         
ef40: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
ef50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f                bo
ef60: 6f 6c 20 76 61 6c 75 65 3b 0d 0a 0d 0a 20 20 20  ol value;....   
ef70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ef80: 20 69 66 20 28 62 6f 6f 6c 2e 54 72 79 50 61 72   if (bool.TryPar
ef90: 73 65 28 74 65 78 74 2c 20 6f 75 74 20 76 61 6c  se(text, out val
efa0: 75 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ue))..          
efb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
efc0: 74 75 72 6e 20 76 61 6c 75 65 3b 0d 0a 20 20 20  turn value;..   
efd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
efe0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
eff0: 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a    return null;..
f000: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
f010: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
f020: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f030: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f040: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f050: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f060: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
f070: 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 6f  private static o
f080: 62 6a 65 63 74 20 50 61 72 73 65 45 6e 75 6d 28  bject ParseEnum(
f090: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
f0a0: 20 20 54 79 70 65 20 65 6e 75 6d 54 79 70 65 2c    Type enumType,
f0b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
f0c0: 20 20 73 74 72 69 6e 67 20 74 65 78 74 2c 0d 0a    string text,..
f0d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f0e0: 62 6f 6f 6c 20 6e 6f 43 61 73 65 0d 0a 20 20 20  bool noCase..   
f0f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a               )..
f100: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
f110: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
f120: 66 20 28 28 65 6e 75 6d 54 79 70 65 20 3d 3d 20  f ((enumType == 
f130: 6e 75 6c 6c 29 20 7c 7c 20 21 65 6e 75 6d 54 79  null) || !enumTy
f140: 70 65 2e 49 73 45 6e 75 6d 29 0d 0a 20 20 20 20  pe.IsEnum)..    
f150: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f160: 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a  return null;....
f170: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f180: 69 66 20 28 21 53 74 72 69 6e 67 2e 49 73 4e 75  if (!String.IsNu
f190: 6c 6c 4f 72 45 6d 70 74 79 28 74 65 78 74 29 29  llOrEmpty(text))
f1a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
f1b0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
f1c0: 20 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20           try..  
f1d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f1e0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
f1f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
f200: 75 72 6e 20 45 6e 75 6d 2e 50 61 72 73 65 28 65  urn Enum.Parse(e
f210: 6e 75 6d 54 79 70 65 2c 20 74 65 78 74 2c 20 6e  numType, text, n
f220: 6f 43 61 73 65 29 3b 0d 0a 20 20 20 20 20 20 20  oCase);..       
f230: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
f240: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f250: 20 20 20 20 63 61 74 63 68 0d 0a 20 20 20 20 20      catch..     
f260: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
f270: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
f280: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20            // do 
f290: 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20  nothing...      
f2a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
f2b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
f2c0: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
f2d0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c        return nul
f2e0: 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l;..            
f2f0: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  }..            #
f300: 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20  endregion....   
f310: 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
f320: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f330: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f340: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f350: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
f360: 20 20 20 20 20 20 20 20 20 20 20 20 23 72 65 67              #reg
f370: 69 6f 6e 20 50 75 62 6c 69 63 20 53 74 61 74 69  ion Public Stati
f380: 63 20 4d 65 74 68 6f 64 73 0d 0a 20 20 20 20 20  c Methods..     
f390: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74         public st
f3a0: 61 74 69 63 20 43 6f 6e 66 69 67 75 72 61 74 69  atic Configurati
f3b0: 6f 6e 20 43 72 65 61 74 65 44 65 66 61 75 6c 74  on CreateDefault
f3c0: 28 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ()..            
f3d0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
f3e0: 20 20 20 73 74 72 69 6e 67 20 64 69 72 65 63 74     string direct
f3f0: 6f 72 79 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20  ory = null;..   
f400: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72               str
f410: 69 6e 67 20 63 6f 72 65 46 69 6c 65 4e 61 6d 65  ing coreFileName
f420: 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20   = null;..      
f430: 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
f440: 20 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 20 3d 20   linqFileName = 
f450: 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20  null;..         
f460: 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 64 65         string de
f470: 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 20 3d  signerFileName =
f480: 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20   null;....      
f490: 20 20 20 20 20 20 20 20 20 20 47 65 74 44 65 66            GetDef
f4a0: 61 75 6c 74 46 69 6c 65 4e 61 6d 65 73 28 0d 0a  aultFileNames(..
f4b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f4c0: 20 20 20 20 72 65 66 20 64 69 72 65 63 74 6f 72      ref director
f4d0: 79 2c 20 72 65 66 20 63 6f 72 65 46 69 6c 65 4e  y, ref coreFileN
f4e0: 61 6d 65 2c 20 72 65 66 20 6c 69 6e 71 46 69 6c  ame, ref linqFil
f4f0: 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20  eName,..        
f500: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20              ref 
f510: 64 65 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65  designerFileName
f520: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
f530: 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 65 77        return new
f540: 20 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 28 74   Configuration(t
f550: 68 69 73 41 73 73 65 6d 62 6c 79 2c 20 6e 75 6c  hisAssembly, nul
f560: 6c 2c 20 64 69 72 65 63 74 6f 72 79 2c 0d 0a 20  l, directory,.. 
f570: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f580: 20 20 20 63 6f 72 65 46 69 6c 65 4e 61 6d 65 2c     coreFileName,
f590: 20 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 2c 20 64   linqFileName, d
f5a0: 65 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 2c  esignerFileName,
f5b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
f5c0: 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44        TraceOps.D
f5d0: 65 62 75 67 46 6f 72 6d 61 74 2c 20 54 72 61 63  ebugFormat, Trac
f5e0: 65 4f 70 73 2e 54 72 61 63 65 46 6f 72 6d 61 74  eOps.TraceFormat
f5f0: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
f600: 20 20 20 20 20 20 20 49 6e 73 74 61 6c 6c 46 6c         InstallFl
f610: 61 67 73 2e 44 65 66 61 75 6c 74 2c 20 54 72 61  ags.Default, Tra
f620: 63 65 50 72 69 6f 72 69 74 79 2e 44 65 66 61 75  cePriority.Defau
f630: 6c 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  lt,..           
f640: 20 20 20 20 20 20 20 20 20 54 72 61 63 65 50 72           TracePr
f650: 69 6f 72 69 74 79 2e 44 65 66 61 75 6c 74 2c 20  iority.Default, 
f660: 74 72 75 65 2c 20 66 61 6c 73 65 2c 20 66 61 6c  true, false, fal
f670: 73 65 2c 20 66 61 6c 73 65 2c 20 66 61 6c 73 65  se, false, false
f680: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
f690: 20 20 20 20 20 20 20 66 61 6c 73 65 2c 20 66 61         false, fa
f6a0: 6c 73 65 2c 20 66 61 6c 73 65 2c 20 66 61 6c 73  lse, false, fals
f6b0: 65 2c 20 66 61 6c 73 65 2c 20 66 61 6c 73 65 2c  e, false, false,
f6c0: 20 66 61 6c 73 65 2c 20 74 72 75 65 2c 0d 0a 20   false, true,.. 
f6d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f6e0: 20 20 20 74 72 75 65 2c 20 66 61 6c 73 65 2c 20     true, false, 
f6f0: 66 61 6c 73 65 2c 20 66 61 6c 73 65 29 3b 0d 0a  false, false);..
f700: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
f710: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
f720: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f730: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f740: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f750: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f760: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
f770: 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 62 6f  public static bo
f780: 6f 6c 20 46 72 6f 6d 41 72 67 73 28 0d 0a 20 20  ol FromArgs(..  
f790: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
f7a0: 72 69 6e 67 5b 5d 20 61 72 67 73 2c 0d 0a 20 20  ring[] args,..  
f7b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f                bo
f7c0: 6f 6c 20 73 74 72 69 63 74 2c 0d 0a 20 20 20 20  ol strict,..    
f7d0: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20              ref 
f7e0: 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 63 6f  Configuration co
f7f0: 6e 66 69 67 75 72 61 74 69 6f 6e 2c 0d 0a 20 20  nfiguration,..  
f800: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
f810: 66 20 73 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a  f string error..
f820: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f830: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
f840: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
f850: 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20    try..         
f860: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
f870: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
f880: 20 28 61 72 67 73 20 3d 3d 20 6e 75 6c 6c 29 0d   (args == null).
f890: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
f8a0: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
f8b0: 74 72 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  true;....       
f8c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
f8d0: 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 3d  (configuration =
f8e0: 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
f8f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f900: 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 3d   configuration =
f910: 20 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 43   Configuration.C
f920: 72 65 61 74 65 44 65 66 61 75 6c 74 28 29 3b 0d  reateDefault();.
f930: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
f940: 20 20 20 20 20 20 20 69 6e 74 20 6c 65 6e 67 74         int lengt
f950: 68 20 3d 20 61 72 67 73 2e 4c 65 6e 67 74 68 3b  h = args.Length;
f960: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
f970: 20 20 20 20 20 20 20 20 66 6f 72 20 28 69 6e 74          for (int
f980: 20 69 6e 64 65 78 20 3d 20 30 3b 20 69 6e 64 65   index = 0; inde
f990: 78 20 3c 20 6c 65 6e 67 74 68 3b 20 69 6e 64 65  x < length; inde
f9a0: 78 2b 2b 29 0d 0a 20 20 20 20 20 20 20 20 20 20  x++)..          
f9b0: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
f9c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f9d0: 20 20 20 20 20 73 74 72 69 6e 67 20 61 72 67 20       string arg 
f9e0: 3d 20 61 72 67 73 5b 69 6e 64 65 78 5d 3b 0d 0a  = args[index];..
f9f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
fa00: 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
fa10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fa20: 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 53        // NOTE: S
fa30: 6b 69 70 20 61 6e 79 20 61 72 67 75 6d 65 6e 74  kip any argument
fa40: 20 74 68 61 74 20 69 73 20 6e 75 6c 6c 20 28 3f   that is null (?
fa50: 29 20 6f 72 20 61 6e 20 65 6d 70 74 79 0d 0a 20  ) or an empty.. 
fa60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fa70: 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
fa80: 73 74 72 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20  string...       
fa90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
faa0: 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
fab0: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
fac0: 28 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72  (String.IsNullOr
fad0: 45 6d 70 74 79 28 61 72 67 29 29 0d 0a 20 20 20  Empty(arg))..   
fae0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
faf0: 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75           continu
fb00: 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
fb10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
fb20: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
fb30: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54            // NOT
fb40: 45 3a 20 57 65 20 61 72 65 20 67 6f 69 6e 67 20  E: We are going 
fb50: 74 6f 20 6d 6f 64 69 66 79 20 74 68 65 20 6f 72  to modify the or
fb60: 69 67 69 6e 61 6c 20 61 72 67 75 6d 65 6e 74 0d  iginal argument.
fb70: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
fb80: 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
fb90: 20 20 62 79 20 72 65 6d 6f 76 69 6e 67 20 61 6e    by removing an
fba0: 79 20 6c 65 61 64 69 6e 67 20 6f 70 74 69 6f 6e  y leading option
fbb0: 20 63 68 61 72 61 63 74 65 72 73 3b 0d 0a 20 20   characters;..  
fbc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fbd0: 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 74        //       t
fbe0: 68 65 72 65 66 6f 72 65 2c 20 77 65 20 75 73 65  herefore, we use
fbf0: 20 61 20 6e 65 77 20 73 74 72 69 6e 67 20 74 6f   a new string to
fc00: 20 68 6f 6c 64 20 74 68 65 0d 0a 20 20 20 20 20   hold the..     
fc10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fc20: 20 20 20 2f 2f 20 20 20 20 20 20 20 6d 6f 64 69     //       modi
fc30: 66 69 65 64 20 61 72 67 75 6d 65 6e 74 2e 0d 0a  fied argument...
fc40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fc50: 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
fc60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fc70: 20 20 20 20 73 74 72 69 6e 67 20 6e 65 77 41 72      string newAr
fc80: 67 20 3d 20 61 72 67 3b 0d 0a 0d 0a 20 20 20 20  g = arg;....    
fc90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fca0: 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
fcb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fcc0: 2f 2f 20 4e 4f 54 45 3a 20 41 6c 6c 20 74 68 65  // NOTE: All the
fcd0: 20 73 75 70 70 6f 72 74 65 64 20 63 6f 6d 6d 61   supported comma
fce0: 6e 64 20 6c 69 6e 65 20 6f 70 74 69 6f 6e 73 20  nd line options 
fcf0: 6d 75 73 74 0d 0a 20 20 20 20 20 20 20 20 20 20  must..          
fd00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
fd10: 20 20 20 20 20 20 20 62 65 67 69 6e 20 77 69 74         begin wit
fd20: 68 20 61 6e 20 6f 70 74 69 6f 6e 20 63 68 61 72  h an option char
fd30: 61 63 74 65 72 20 28 65 2e 67 2e 20 61 20 6d 69  acter (e.g. a mi
fd40: 6e 75 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20  nus..           
fd50: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
fd60: 20 20 20 20 20 20 6f 72 20 66 6f 72 77 61 72 64        or forward
fd70: 20 73 6c 61 73 68 29 3b 20 61 74 74 65 6d 70 74   slash); attempt
fd80: 20 74 6f 20 76 61 6c 69 64 61 74 65 20 74 68 61   to validate tha
fd90: 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  t..             
fda0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
fdb0: 20 20 20 20 6e 6f 77 2e 20 20 49 66 20 77 65 20      now.  If we 
fdc0: 66 61 69 6c 20 69 6e 20 73 74 72 69 63 74 20 6d  fail in strict m
fdd0: 6f 64 65 2c 20 77 65 20 61 72 65 20 64 6f 6e 65  ode, we are done
fde0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
fdf0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
fe00: 20 20 20 20 6f 74 68 65 72 77 69 73 65 2c 20 6a      otherwise, j
fe10: 75 73 74 20 73 6b 69 70 20 74 68 69 73 20 61 72  ust skip this ar
fe20: 67 75 6d 65 6e 74 20 61 6e 64 20 61 64 76 61 6e  gument and advan
fe30: 63 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ce..            
fe40: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
fe50: 20 20 20 20 20 74 6f 20 74 68 65 20 6e 65 78 74       to the next
fe60: 20 6f 6e 65 2e 0d 0a 20 20 20 20 20 20 20 20 20   one...         
fe70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
fe80: 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
fe90: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21             if (!
fea0: 43 68 65 63 6b 4f 70 74 69 6f 6e 28 72 65 66 20  CheckOption(ref 
feb0: 6e 65 77 41 72 67 29 29 0d 0a 20 20 20 20 20 20  newArg))..      
fec0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fed0: 20 20 7b 0d 0a 20 20 20 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: 20 65 72 72 6f 72 20 3d 20 54 72 61 63 65 4f 70   error = TraceOp
ff00: 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28  s.DebugAndTrace(
ff10: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
ff20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ff30: 20 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e    TracePriority.
ff40: 4c 6f 77 65 73 74 2c 20 64 65 62 75 67 43 61 6c  Lowest, debugCal
ff50: 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20  lback,..        
ff60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ff70: 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c          traceCal
ff80: 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f  lback, String.Fo
ff90: 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
ffa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ffb0: 20 20 20 20 20 20 20 22 55 6e 73 75 70 70 6f 72         "Unsuppor
ffc0: 74 65 64 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65  ted command line
ffd0: 20 61 72 67 75 6d 65 6e 74 3a 20 7b 30 7d 22 2c   argument: {0}",
ffe0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
fff0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10000 20 20 46 6f 72 44 69 73 70 6c 61 79 28 61 72 67    ForDisplay(arg
10010 29 29 2c 20 74 72 61 63 65 43 61 74 65 67 6f 72  )), traceCategor
10020 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
10030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10040 20 20 20 69 66 20 28 73 74 72 69 63 74 29 0d 0a     if (strict)..
10050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10070 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d  return false;...
10080 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
10090 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
100a0 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20  tinue;..        
100b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
100c0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
100d0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
100e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
100f0 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45           // NOTE
10100 3a 20 41 6c 6c 20 74 68 65 20 73 75 70 70 6f 72  : All the suppor
10110 74 65 64 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65  ted command line
10120 20 6f 70 74 69 6f 6e 73 20 6d 75 73 74 0d 0a 20   options must.. 
10130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10140 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
10150 68 61 76 65 20 61 20 76 61 6c 75 65 3b 20 74 68  have a value; th
10160 65 72 65 66 6f 72 65 2c 20 61 74 74 65 6d 70 74  erefore, attempt
10170 20 74 6f 20 61 64 76 61 6e 63 65 0d 0a 20 20 20   to advance..   
10180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10190 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 74 6f       //       to
101a0 20 69 74 20 6e 6f 77 2e 20 20 49 66 20 77 65 20   it now.  If we 
101b0 66 61 69 6c 2c 20 77 65 20 61 72 65 20 64 6f 6e  fail, we are don
101c0 65 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e...            
101d0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
101e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
101f0 20 20 20 20 20 20 20 20 69 6e 64 65 78 2b 2b 3b          index++;
10200 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
10210 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
10220 69 6e 64 65 78 20 3e 3d 20 6c 65 6e 67 74 68 29  index >= length)
10230 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
10240 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
10250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10260 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
10270 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41   TraceOps.DebugA
10280 6e 64 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20  ndTrace(..      
10290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
102a0 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 50            TraceP
102b0 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20  riority.Lowest, 
102c0 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a  debugCallback,..
102d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
102e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
102f0 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53  traceCallback, S
10300 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
10310 20 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 20 20 20 20 20 20 22                 "
10330 4d 69 73 73 69 6e 67 20 76 61 6c 75 65 20 66 6f  Missing value fo
10340 72 20 6f 70 74 69 6f 6e 3a 20 7b 30 7d 22 2c 0d  r option: {0}",.
10350 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
10360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10370 20 46 6f 72 44 69 73 70 6c 61 79 28 61 72 67 29   ForDisplay(arg)
10380 29 2c 20 74 72 61 63 65 43 61 74 65 67 6f 72 79  ), traceCategory
10390 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
103a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
103b0 20 20 69 66 20 28 73 74 72 69 63 74 29 0d 0a 20    if (strict).. 
103c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
103d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
103e0 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a  eturn false;....
103f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10400 20 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61              brea
10410 6b 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  k;..            
10420 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
10430 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
10440 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
10450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10460 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 47 72       // NOTE: Gr
10470 61 62 20 74 68 65 20 74 65 78 74 75 61 6c 20 76  ab the textual v
10480 61 6c 75 65 20 6f 66 20 74 68 69 73 20 63 6f 6d  alue of this com
10490 6d 61 6e 64 20 6c 69 6e 65 0d 0a 20 20 20 20 20  mand line..     
104a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
104b0 20 20 20 2f 2f 20 20 20 20 20 20 20 6f 70 74 69     //       opti
104c0 6f 6e 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  on...           
104d0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
104e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
104f0 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
10500 74 65 78 74 20 3d 20 61 72 67 73 5b 69 6e 64 65  text = args[inde
10510 78 5d 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  x];....         
10520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
10530 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
10540 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f             // NO
10550 54 45 3a 20 46 69 67 75 72 65 20 6f 75 74 20 77  TE: Figure out w
10560 68 69 63 68 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e  hich command lin
10570 65 20 6f 70 74 69 6f 6e 20 74 68 69 73 20 69 73  e option this is
10580 0d 0a 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 2f 2f 20 20 20 20            //    
105a0 20 20 20 28 62 61 73 65 64 20 6f 6e 20 61 20 70     (based on a p
105b0 61 72 74 69 61 6c 20 6e 61 6d 65 20 6d 61 74 63  artial name matc
105c0 68 29 20 61 6e 64 20 74 68 65 6e 20 74 72 79 0d  h) and then try.
105d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
105e0 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
105f0 20 20 74 6f 20 69 6e 74 65 72 70 72 65 74 20 74    to interpret t
10600 68 65 20 74 65 78 74 75 61 6c 20 76 61 6c 75 65  he textual value
10610 20 61 73 20 74 68 65 20 63 6f 72 72 65 63 74 0d   as the correct.
10620 0a 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 2f 2f 20 20 20 20 20           //     
10640 20 20 74 79 70 65 2e 0d 0a 20 20 20 20 20 20 20    type...       
10650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10660 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
10670 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
10680 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77  (MatchOption(new
10690 41 72 67 2c 20 22 63 6f 6e 66 69 72 6d 22 29 29  Arg, "confirm"))
106a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
106b0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
106c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
106d0 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 3f 20 76           bool? v
106e0 61 6c 75 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c  alue = ParseBool
106f0 65 61 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20  ean(text);....  
10700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10710 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76 61            if (va
10720 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  lue == null)..  
10730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10740 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
10750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10760 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
10770 6f 72 20 3d 20 54 72 61 63 65 4f 70 73 2e 44 65  or = TraceOps.De
10780 62 75 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 20  bugAndTrace(..  
10790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
107a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
107b0 20 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e    TracePriority.
107c0 4c 6f 77 65 73 74 2c 20 64 65 62 75 67 43 61 6c  Lowest, debugCal
107d0 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20  lback,..        
107e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
107f0 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
10800 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e  eCallback, Strin
10810 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
10820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
10840 49 6e 76 61 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c  Invalid {0} bool
10850 65 61 6e 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c  ean value: {1}",
10860 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
10870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10880 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79        ForDisplay
10890 28 61 72 67 29 2c 20 46 6f 72 44 69 73 70 6c 61  (arg), ForDispla
108a0 79 28 74 65 78 74 29 29 2c 0d 0a 20 20 20 20 20  y(text)),..     
108b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
108c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
108d0 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
108e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
108f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10900 20 20 69 66 20 28 73 74 72 69 63 74 29 0d 0a 20    if (strict).. 
10910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10930 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
10940 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
10950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10960 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20      continue;.. 
10970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10980 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
10990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
109a0 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66              conf
109b0 69 67 75 72 61 74 69 6f 6e 2e 63 6f 6e 66 69 72  iguration.confir
109c0 6d 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 65 3b  m = (bool)value;
109d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
109e0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
109f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10a00 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61       else if (Ma
10a10 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67  tchOption(newArg
10a20 2c 20 22 63 6f 72 65 46 69 6c 65 4e 61 6d 65 22  , "coreFileName"
10a30 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
10a40 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
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 63 6f 6e 66 69             confi
10a70 67 75 72 61 74 69 6f 6e 2e 63 6f 72 65 46 69 6c  guration.coreFil
10a80 65 4e 61 6d 65 20 3d 20 74 65 78 74 3b 0d 0a 20  eName = text;.. 
10a90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10aa0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
10ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10ac0 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68    else if (Match
10ad0 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22  Option(newArg, "
10ae0 64 65 62 75 67 22 29 29 0d 0a 20 20 20 20 20 20  debug"))..      
10af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10b00 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
10b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10b20 20 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d 20 50   bool? value = P
10b30 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65 78 74  arseBoolean(text
10b40 29 3b 0d 0a 0d 0a 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 69 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e    if (value == n
10b70 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
10b80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10b90 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
10ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10bb0 20 20 20 20 20 65 72 72 6f 72 20 3d 20 54 72 61       error = Tra
10bc0 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72  ceOps.DebugAndTr
10bd0 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ace(..          
10be0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10bf0 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 50            TraceP
10c00 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20  riority.Lowest, 
10c10 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a  debugCallback,..
10c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10c30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10c40 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63      traceCallbac
10c50 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  k, String.Format
10c60 28 0d 0a 20 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 20 20 20 20                  
10c80 20 20 20 20 20 20 20 22 49 6e 76 61 6c 69 64 20         "Invalid 
10c90 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75  {0} boolean valu
10ca0 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20  e: {1}",..      
10cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f                Fo
10cd0 72 44 69 73 70 6c 61 79 28 61 72 67 29 2c 20 46  rDisplay(arg), F
10ce0 6f 72 44 69 73 70 6c 61 79 28 74 65 78 74 29 29  orDisplay(text))
10cf0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
10d00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10d10 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65         traceCate
10d20 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
10d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10d40 20 20 20 20 20 20 20 20 20 20 69 66 20 28 73 74            if (st
10d50 72 69 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20  rict)..         
10d60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10d70 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
10d80 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20  n false;....    
10d90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10da0 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74              cont
10db0 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  inue;..         
10dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10dd0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
10de0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10df0 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f      configuratio
10e00 6e 2e 64 65 62 75 67 20 3d 20 28 62 6f 6f 6c 29  n.debug = (bool)
10e10 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20  value;..        
10e20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10e30 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
10e40 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20             else 
10e50 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28  if (MatchOption(
10e60 6e 65 77 41 72 67 2c 20 22 64 65 62 75 67 46 6f  newArg, "debugFo
10e70 72 6d 61 74 22 29 29 0d 0a 20 20 20 20 20 20 20  rmat"))..       
10e80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10e90 20 7b 0d 0a 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 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 64 65  configuration.de
10ec0 62 75 67 46 6f 72 6d 61 74 20 3d 20 74 65 78 74  bugFormat = text
10ed0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
10ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
10ef0 72 61 63 65 4f 70 73 2e 44 65 62 75 67 46 6f 72  raceOps.DebugFor
10f00 6d 61 74 20 3d 20 63 6f 6e 66 69 67 75 72 61 74  mat = configurat
10f10 69 6f 6e 2e 64 65 62 75 67 46 6f 72 6d 61 74 3b  ion.debugFormat;
10f20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
10f30 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
10f40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10f50 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61       else if (Ma
10f60 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67  tchOption(newArg
10f70 2c 20 22 64 65 62 75 67 50 72 69 6f 72 69 74 79  , "debugPriority
10f80 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  "))..           
10f90 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
10fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10fb0 20 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65              obje
10fc0 63 74 20 76 61 6c 75 65 20 3d 20 50 61 72 73 65  ct value = Parse
10fd0 45 6e 75 6d 28 0d 0a 20 20 20 20 20 20 20 20 20  Enum(..         
10fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10ff0 20 20 20 20 20 20 20 74 79 70 65 6f 66 28 54 72         typeof(Tr
11000 61 63 65 50 72 69 6f 72 69 74 79 29 2c 20 74 65  acePriority), te
11010 78 74 2c 20 74 72 75 65 29 3b 0d 0a 0d 0a 20 20  xt, true);....  
11020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11030 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76 61            if (va
11040 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  lue == null)..  
11050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11060 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
11070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11080 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
11090 6f 72 20 3d 20 54 72 61 63 65 4f 70 73 2e 44 65  or = TraceOps.De
110a0 62 75 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 20  bugAndTrace(..  
110b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
110c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
110d0 20 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e    TracePriority.
110e0 4c 6f 77 65 73 74 2c 20 64 65 62 75 67 43 61 6c  Lowest, debugCal
110f0 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20  lback,..        
11100 20 20 20 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 74 72 61 63              trac
11120 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e  eCallback, Strin
11130 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
11140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
11160 49 6e 76 61 6c 69 64 20 7b 30 7d 20 76 61 6c 75  Invalid {0} valu
11170 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20  e: {1}",..      
11180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f                Fo
111a0 72 44 69 73 70 6c 61 79 28 61 72 67 29 2c 20 46  rDisplay(arg), F
111b0 6f 72 44 69 73 70 6c 61 79 28 74 65 78 74 29 29  orDisplay(text))
111c0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
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 74 72 61 63 65 43 61 74 65         traceCate
111f0 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
11200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11210 20 20 20 20 20 20 20 20 20 20 69 66 20 28 73 74            if (st
11220 72 69 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20  rict)..         
11230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11240 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
11250 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20  n false;....    
11260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11270 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74              cont
11280 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  inue;..         
11290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
112a0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
112b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
112c0 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f      configuratio
112d0 6e 2e 64 65 62 75 67 50 72 69 6f 72 69 74 79 20  n.debugPriority 
112e0 3d 20 28 54 72 61 63 65 50 72 69 6f 72 69 74 79  = (TracePriority
112f0 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20  )value;..       
11300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11310 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65       TraceOps.De
11320 62 75 67 50 72 69 6f 72 69 74 79 20 3d 20 63 6f  bugPriority = co
11330 6e 66 69 67 75 72 61 74 69 6f 6e 2e 64 65 62 75  nfiguration.debu
11340 67 50 72 69 6f 72 69 74 79 3b 0d 0a 20 20 20 20  gPriority;..    
11350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11360 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
11370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
11380 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74  lse if (MatchOpt
11390 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 64 65 73  ion(newArg, "des
113a0 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 22 29 29  ignerFileName"))
113b0 0d 0a 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 7b 0d 0a 20 20 20            {..   
113d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
113e0 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75           configu
113f0 72 61 74 69 6f 6e 2e 64 65 73 69 67 6e 65 72 46  ration.designerF
11400 69 6c 65 4e 61 6d 65 20 3d 20 74 65 78 74 3b 0d  ileName = text;.
11410 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
11420 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
11430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11440 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74      else if (Mat
11450 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c  chOption(newArg,
11460 20 22 64 69 72 65 63 74 6f 72 79 22 29 29 0d 0a   "directory"))..
11470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11480 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
11490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
114a0 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61         configura
114b0 74 69 6f 6e 2e 64 69 72 65 63 74 6f 72 79 20 3d  tion.directory =
114c0 20 74 65 78 74 3b 0d 0a 0d 0a 20 20 20 20 20 20   text;....      
114d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
114e0 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
114f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11500 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 2a        // NOTE: *
11510 53 50 45 43 49 41 4c 2a 20 4d 75 73 74 20 72 65  SPECIAL* Must re
11520 66 72 65 73 68 20 74 68 65 20 66 69 6c 65 20 6e  fresh the file n
11530 61 6d 65 73 0d 0a 20 20 20 20 20 20 20 20 20 20  ames..          
11540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11550 20 20 2f 2f 20 20 20 20 20 20 20 68 65 72 65 20    //       here 
11560 62 65 63 61 75 73 65 20 74 68 65 20 75 6e 64 65  because the unde
11570 72 6c 79 69 6e 67 20 64 69 72 65 63 74 6f 72 79  rlying directory
11580 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
11590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
115a0 20 20 20 20 20 20 20 68 61 73 20 63 68 61 6e 67         has chang
115b0 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ed...           
115c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
115d0 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
115e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
115f0 20 73 74 72 69 6e 67 20 63 6f 72 65 46 69 6c 65   string coreFile
11600 4e 61 6d 65 20 3d 20 63 6f 6e 66 69 67 75 72 61  Name = configura
11610 74 69 6f 6e 2e 63 6f 72 65 46 69 6c 65 4e 61 6d  tion.coreFileNam
11620 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
11630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11640 20 20 69 66 20 28 21 53 74 72 69 6e 67 2e 49 73    if (!String.Is
11650 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 63 6f 72 65  NullOrEmpty(core
11660 46 69 6c 65 4e 61 6d 65 29 29 0d 0a 20 20 20 20  FileName))..    
11670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11680 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 72 65              core
11690 46 69 6c 65 4e 61 6d 65 20 3d 20 50 61 74 68 2e  FileName = Path.
116a0 47 65 74 46 69 6c 65 4e 61 6d 65 28 63 6f 72 65  GetFileName(core
116b0 46 69 6c 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20  FileName);....  
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 20 20 20 69 66 20 28 53 74            if (St
116e0 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70  ring.IsNullOrEmp
116f0 74 79 28 63 6f 72 65 46 69 6c 65 4e 61 6d 65 29  ty(coreFileName)
11700 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
11710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11720 20 20 20 63 6f 72 65 46 69 6c 65 4e 61 6d 65 20     coreFileName 
11730 3d 20 49 6e 73 74 61 6c 6c 65 72 2e 43 6f 72 65  = Installer.Core
11740 46 69 6c 65 4e 61 6d 65 3b 0d 0a 0d 0a 20 20 20  FileName;....   
11750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11760 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75           configu
11770 72 61 74 69 6f 6e 2e 63 6f 72 65 46 69 6c 65 4e  ration.coreFileN
11780 61 6d 65 20 3d 20 50 61 74 68 2e 43 6f 6d 62 69  ame = Path.Combi
11790 6e 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ne(..           
117a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
117b0 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69       configurati
117c0 6f 6e 2e 64 69 72 65 63 74 6f 72 79 2c 20 63 6f  on.directory, co
117d0 72 65 46 69 6c 65 4e 61 6d 65 29 3b 0d 0a 0d 0a  reFileName);....
117e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
117f0 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
11800 6e 67 20 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 20  ng linqFileName 
11810 3d 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e  = configuration.
11820 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 3b 0d 0a 0d  linqFileName;...
11830 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
11840 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
11850 28 21 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f  (!String.IsNullO
11860 72 45 6d 70 74 79 28 6c 69 6e 71 46 69 6c 65 4e  rEmpty(linqFileN
11870 61 6d 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ame))..         
11880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11890 20 20 20 20 20 20 20 6c 69 6e 71 46 69 6c 65 4e         linqFileN
118a0 61 6d 65 20 3d 20 50 61 74 68 2e 47 65 74 46 69  ame = Path.GetFi
118b0 6c 65 4e 61 6d 65 28 6c 69 6e 71 46 69 6c 65 4e  leName(linqFileN
118c0 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ame);....       
118d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
118e0 20 20 20 20 20 69 66 20 28 53 74 72 69 6e 67 2e       if (String.
118f0 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 6c 69  IsNullOrEmpty(li
11900 6e 71 46 69 6c 65 4e 61 6d 65 29 29 0d 0a 20 20  nqFileName))..  
11910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6c 69                li
11930 6e 71 46 69 6c 65 4e 61 6d 65 20 3d 20 49 6e 73  nqFileName = Ins
11940 74 61 6c 6c 65 72 2e 4c 69 6e 71 46 69 6c 65 4e  taller.LinqFileN
11950 61 6d 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ame;....        
11960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11970 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f      configuratio
11980 6e 2e 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 20 3d  n.linqFileName =
11990 20 50 61 74 68 2e 43 6f 6d 62 69 6e 65 28 0d 0a   Path.Combine(..
119a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
119b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
119c0 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 64 69  configuration.di
119d0 72 65 63 74 6f 72 79 2c 20 6c 69 6e 71 46 69 6c  rectory, linqFil
119e0 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20  eName);....     
119f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11a00 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 64 65         string de
11a10 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 20 3d  signerFileName =
11a20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 64   configuration.d
11a30 65 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 3b  esignerFileName;
11a40 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
11a50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11a60 69 66 20 28 21 53 74 72 69 6e 67 2e 49 73 4e 75  if (!String.IsNu
11a70 6c 6c 4f 72 45 6d 70 74 79 28 64 65 73 69 67 6e  llOrEmpty(design
11a80 65 72 46 69 6c 65 4e 61 6d 65 29 29 0d 0a 20 20  erFileName))..  
11a90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65                de
11ab0 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 20 3d  signerFileName =
11ac0 20 50 61 74 68 2e 47 65 74 46 69 6c 65 4e 61 6d   Path.GetFileNam
11ad0 65 28 64 65 73 69 67 6e 65 72 46 69 6c 65 4e 61  e(designerFileNa
11ae0 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  me);....        
11af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11b00 20 20 20 20 69 66 20 28 53 74 72 69 6e 67 2e 49      if (String.I
11b10 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 64 65 73  sNullOrEmpty(des
11b20 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 29 29 0d  ignerFileName)).
11b30 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
11b40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11b50 20 64 65 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d   designerFileNam
11b60 65 20 3d 20 49 6e 73 74 61 6c 6c 65 72 2e 44 65  e = Installer.De
11b70 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 3b 0d  signerFileName;.
11b80 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
11b90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
11ba0 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 64 65 73  onfiguration.des
11bb0 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 20 3d 20  ignerFileName = 
11bc0 50 61 74 68 2e 43 6f 6d 62 69 6e 65 28 0d 0a 20  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 63                 c
11bf0 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 64 69 72  onfiguration.dir
11c00 65 63 74 6f 72 79 2c 20 64 65 73 69 67 6e 65 72  ectory, designer
11c10 46 69 6c 65 4e 61 6d 65 29 3b 0d 0a 20 20 20 20  FileName);..    
11c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11c30 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
11c40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
11c50 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74  lse if (MatchOpt
11c60 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 69 6e 73  ion(newArg, "ins
11c70 74 61 6c 6c 22 29 29 0d 0a 20 20 20 20 20 20 20  tall"))..       
11c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11c90 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
11ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11cb0 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d 20 50 61  bool? value = Pa
11cc0 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65 78 74 29  rseBoolean(text)
11cd0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
11ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11cf0 20 69 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75   if (value == nu
11d00 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
11d10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11d20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
11d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11d40 20 20 20 20 65 72 72 6f 72 20 3d 20 54 72 61 63      error = Trac
11d50 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61  eOps.DebugAndTra
11d60 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ce(..           
11d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11d80 20 20 20 20 20 20 20 20 20 54 72 61 63 65 50 72           TracePr
11d90 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64  iority.Lowest, d
11da0 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20  ebugCallback,.. 
11db0 20 20 20 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 20                  
11dd0 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b     traceCallback
11de0 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  , String.Format(
11df0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
11e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11e10 20 20 20 20 20 20 22 49 6e 76 61 6c 69 64 20 7b        "Invalid {
11e20 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65  0} boolean value
11e30 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20  : {1}",..       
11e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11e50 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72               For
11e60 44 69 73 70 6c 61 79 28 61 72 67 29 2c 20 46 6f  Display(arg), Fo
11e70 72 44 69 73 70 6c 61 79 28 74 65 78 74 29 29 2c  rDisplay(text)),
11e80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
11e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11ea0 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67        traceCateg
11eb0 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
11ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11ed0 20 20 20 20 20 20 20 20 20 69 66 20 28 73 74 72           if (str
11ee0 69 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ict)..          
11ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11f00 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
11f10 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20   false;....     
11f20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11f30 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69             conti
11f40 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  nue;..          
11f50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11f60 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
11f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11f80 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e     configuration
11f90 2e 69 6e 73 74 61 6c 6c 20 3d 20 28 62 6f 6f 6c  .install = (bool
11fa0 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20  )value;..       
11fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11fc0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
11fd0 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65              else
11fe0 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e   if (MatchOption
11ff0 28 6e 65 77 41 72 67 2c 20 22 69 6e 73 74 61 6c  (newArg, "instal
12000 6c 46 6c 61 67 73 22 29 29 0d 0a 20 20 20 20 20  lFlags"))..     
12010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12020 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
12030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12040 20 20 6f 62 6a 65 63 74 20 76 61 6c 75 65 20 3d    object value =
12050 20 50 61 72 73 65 45 6e 75 6d 28 0d 0a 20 20 20   ParseEnum(..   
12060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12070 20 20 20 20 20 20 20 20 20 20 20 20 20 74 79 70               typ
12080 65 6f 66 28 49 6e 73 74 61 6c 6c 46 6c 61 67 73  eof(InstallFlags
12090 29 2c 20 74 65 78 74 2c 20 74 72 75 65 29 3b 0d  ), text, true);.
120a0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
120b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
120c0 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c  f (value == null
120d0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
120e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
120f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
12100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12110 20 20 65 72 72 6f 72 20 3d 20 54 72 61 63 65 4f    error = TraceO
12120 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65  ps.DebugAndTrace
12130 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
12140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12150 20 20 20 20 20 20 20 54 72 61 63 65 50 72 69 6f         TracePrio
12160 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62  rity.Lowest, deb
12170 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20  ugCallback,..   
12180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
121a0 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20   traceCallback, 
121b0 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
121c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
121d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
121e0 20 20 20 20 22 49 6e 76 61 6c 69 64 20 69 6e 73      "Invalid ins
121f0 74 61 6c 6c 20 66 6c 61 67 73 20 76 61 6c 75 65  tall flags value
12200 3a 20 7b 30 7d 22 2c 0d 0a 20 20 20 20 20 20 20  : {0}",..       
12210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12220 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72               For
12230 44 69 73 70 6c 61 79 28 74 65 78 74 29 29 2c 20  Display(text)), 
12240 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
12250 0a 0d 0a 20 20 20 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 20 69 66 20 28 73 74 72 69 63 74 29 0d 0a     if (strict)..
12280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
122a0 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
122b0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
122c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
122d0 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a       continue;..
122e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
122f0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
12300 0a 20 20 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 63 6f 6e               con
12320 66 69 67 75 72 61 74 69 6f 6e 2e 69 6e 73 74 61  figuration.insta
12330 6c 6c 46 6c 61 67 73 20 3d 20 28 49 6e 73 74 61  llFlags = (Insta
12340 6c 6c 46 6c 61 67 73 29 76 61 6c 75 65 3b 0d 0a  llFlags)value;..
12350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12360 20 20 20 20 20 20 20 20 7d 0d 0a 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 65 6c 73 65 20 69 66 20 28 4d 61 74 63     else if (Matc
12390 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20  hOption(newArg, 
123a0 22 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 22 29 29  "linqFileName"))
123b0 0d 0a 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 7b 0d 0a 20 20 20            {..   
123d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
123e0 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75           configu
123f0 72 61 74 69 6f 6e 2e 6c 69 6e 71 46 69 6c 65 4e  ration.linqFileN
12400 61 6d 65 20 3d 20 74 65 78 74 3b 0d 0a 20 20 20  ame = text;..   
12410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12420 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
12430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12440 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70  else if (MatchOp
12450 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 6c 6f  tion(newArg, "lo
12460 67 46 69 6c 65 4e 61 6d 65 22 29 29 0d 0a 20 20  gFileName"))..  
12470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12480 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
12490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
124a0 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69       configurati
124b0 6f 6e 2e 6c 6f 67 46 69 6c 65 4e 61 6d 65 20 3d  on.logFileName =
124c0 20 74 65 78 74 3b 0d 0a 20 20 20 20 20 20 20 20   text;..        
124d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
124e0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
124f0 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20             else 
12500 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28  if (MatchOption(
12510 6e 65 77 41 72 67 2c 20 22 6e 6f 43 6f 6d 70 61  newArg, "noCompa
12520 63 74 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ct"))..         
12530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
12540 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
12550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f                bo
12560 6f 6c 3f 20 76 61 6c 75 65 20 3d 20 50 61 72 73  ol? value = Pars
12570 65 42 6f 6f 6c 65 61 6e 28 74 65 78 74 29 3b 0d  eBoolean(text);.
12580 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
12590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
125a0 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c  f (value == null
125b0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
125c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
125d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
125e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
125f0 20 20 65 72 72 6f 72 20 3d 20 54 72 61 63 65 4f    error = TraceO
12600 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65  ps.DebugAndTrace
12610 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
12620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12630 20 20 20 20 20 20 20 54 72 61 63 65 50 72 69 6f         TracePrio
12640 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62  rity.Lowest, deb
12650 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20  ugCallback,..   
12660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12680 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20   traceCallback, 
12690 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
126a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
126b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
126c0 20 20 20 20 22 49 6e 76 61 6c 69 64 20 7b 30 7d      "Invalid {0}
126d0 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 3a 20   boolean value: 
126e0 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  {1}",..         
126f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12700 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69             ForDi
12710 73 70 6c 61 79 28 61 72 67 29 2c 20 46 6f 72 44  splay(arg), ForD
12720 69 73 70 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a  isplay(text)),..
12730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12750 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72      traceCategor
12760 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
12770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12780 20 20 20 20 20 20 20 69 66 20 28 73 74 72 69 63         if (stric
12790 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t)..            
127a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
127b0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
127c0 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  alse;....       
127d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
127e0 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75           continu
127f0 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
12800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12810 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
12820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12830 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e   configuration.n
12840 6f 43 6f 6d 70 61 63 74 20 3d 20 28 62 6f 6f 6c  oCompact = (bool
12850 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20  )value;..       
12860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12870 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
12880 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65              else
12890 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e   if (MatchOption
128a0 28 6e 65 77 41 72 67 2c 20 22 6e 6f 43 6f 6e 73  (newArg, "noCons
128b0 6f 6c 65 22 29 29 0d 0a 20 20 20 20 20 20 20 20  ole"))..        
128c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
128d0 7b 0d 0a 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 62                 b
128f0 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d 20 50 61 72  ool? value = Par
12900 73 65 42 6f 6f 6c 65 61 6e 28 74 65 78 74 29 3b  seBoolean(text);
12910 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
12920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12930 69 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c  if (value == nul
12940 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
12950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12960 7b 0d 0a 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 65 72 72 6f 72 20 3d 20 54 72 61 63 65     error = Trace
12990 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63  Ops.DebugAndTrac
129a0 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
129b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
129c0 20 20 20 20 20 20 20 20 54 72 61 63 65 50 72 69          TracePri
129d0 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65  ority.Lowest, de
129e0 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20  bugCallback,..  
129f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12a10 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c    traceCallback,
12a20 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d   String.Format(.
12a30 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
12a40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12a50 20 20 20 20 20 22 49 6e 76 61 6c 69 64 20 7b 30       "Invalid {0
12a60 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 3a  } boolean value:
12a70 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20   {1}",..        
12a80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12a90 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44              ForD
12aa0 69 73 70 6c 61 79 28 61 72 67 29 2c 20 46 6f 72  isplay(arg), For
12ab0 44 69 73 70 6c 61 79 28 74 65 78 74 29 29 2c 0d  Display(text)),.
12ac0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
12ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12ae0 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f       traceCatego
12af0 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
12b00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12b10 20 20 20 20 20 20 20 20 69 66 20 28 73 74 72 69          if (stri
12b20 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ct)..           
12b30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12b40 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
12b50 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  false;....      
12b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12b70 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e            contin
12b80 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
12b90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12ba0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
12bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12bc0 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e    configuration.
12bd0 6e 6f 43 6f 6e 73 6f 6c 65 20 3d 20 28 62 6f 6f  noConsole = (boo
12be0 6c 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20  l)value;..      
12bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12c00 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
12c10 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73               els
12c20 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f  e if (MatchOptio
12c30 6e 28 6e 65 77 41 72 67 2c 20 22 6e 6f 44 65 73  n(newArg, "noDes
12c40 6b 74 6f 70 22 29 29 0d 0a 20 20 20 20 20 20 20  ktop"))..       
12c50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12c60 20 7b 0d 0a 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 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d 20 50 61  bool? value = Pa
12c90 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65 78 74 29  rseBoolean(text)
12ca0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
12cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12cc0 20 69 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75   if (value == nu
12cd0 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
12ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12cf0 20 7b 0d 0a 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 65 72 72 6f 72 20 3d 20 54 72 61 63      error = Trac
12d20 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61  eOps.DebugAndTra
12d30 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ce(..           
12d40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12d50 20 20 20 20 20 20 20 20 20 54 72 61 63 65 50 72           TracePr
12d60 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64  iority.Lowest, d
12d70 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20  ebugCallback,.. 
12d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12d90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12da0 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b     traceCallback
12db0 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  , String.Format(
12dc0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
12dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12de0 20 20 20 20 20 20 22 49 6e 76 61 6c 69 64 20 7b        "Invalid {
12df0 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65  0} boolean value
12e00 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20  : {1}",..       
12e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12e20 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72               For
12e30 44 69 73 70 6c 61 79 28 61 72 67 29 2c 20 46 6f  Display(arg), Fo
12e40 72 44 69 73 70 6c 61 79 28 74 65 78 74 29 29 2c  rDisplay(text)),
12e50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
12e60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12e70 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67        traceCateg
12e80 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
12e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12ea0 20 20 20 20 20 20 20 20 20 69 66 20 28 73 74 72           if (str
12eb0 69 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ict)..          
12ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12ed0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
12ee0 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20   false;....     
12ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12f00 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69             conti
12f10 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  nue;..          
12f20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12f30 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
12f40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12f50 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e     configuration
12f60 2e 6e 6f 44 65 73 6b 74 6f 70 20 3d 20 28 62 6f  .noDesktop = (bo
12f70 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20  ol)value;..     
12f80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12f90 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
12fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c                el
12fb0 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69  se if (MatchOpti
12fc0 6f 6e 28 6e 65 77 41 72 67 2c 20 22 6e 6f 4c 6f  on(newArg, "noLo
12fd0 67 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  g"))..          
12fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
12ff0 0a 20 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 62 6f 6f               boo
13010 6c 3f 20 76 61 6c 75 65 20 3d 20 50 61 72 73 65  l? value = Parse
13020 42 6f 6f 6c 65 61 6e 28 74 65 78 74 29 3b 0d 0a  Boolean(text);..
13030 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
13040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
13050 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29   (value == null)
13060 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
13070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
13080 0a 20 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 65 72 72 6f 72 20 3d 20 54 72 61 63 65 4f 70   error = TraceOp
130b0 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28  s.DebugAndTrace(
130c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
130d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
130e0 20 20 20 20 20 20 54 72 61 63 65 50 72 69 6f 72        TracePrior
130f0 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75  ity.Lowest, debu
13100 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20  gCallback,..    
13110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13130 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53  traceCallback, S
13140 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
13150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13170 20 20 20 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20     "Invalid {0} 
13180 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 3a 20 7b  boolean value: {
13190 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  1}",..          
131a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
131b0 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73            ForDis
131c0 70 6c 61 79 28 61 72 67 29 2c 20 46 6f 72 44 69  play(arg), ForDi
131d0 73 70 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a 20  splay(text)),.. 
131e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
131f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13200 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
13210 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
13220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13230 20 20 20 20 20 20 69 66 20 28 73 74 72 69 63 74        if (strict
13240 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
13250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13260 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
13270 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  lse;....        
13280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13290 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65          continue
132a0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
132b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
132c0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
132d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
132e0 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f  configuration.no
132f0 4c 6f 67 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75  Log = (bool)valu
13300 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
13310 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
13320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13330 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28         else if (
13340 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41  MatchOption(newA
13350 72 67 2c 20 22 6e 6f 4e 65 74 46 78 32 30 22 29  rg, "noNetFx20")
13360 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
13370 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
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 62 6f 6f 6c 3f 20            bool? 
133a0 76 61 6c 75 65 20 3d 20 50 61 72 73 65 42 6f 6f  value = ParseBoo
133b0 6c 65 61 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a 20  lean(text);.... 
133c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
133d0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76             if (v
133e0 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  alue == null).. 
133f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13400 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
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 65 72                er
13430 72 6f 72 20 3d 20 54 72 61 63 65 4f 70 73 2e 44  ror = TraceOps.D
13440 65 62 75 67 41 6e 64 54 72 61 63 65 28 0d 0a 20  ebugAndTrace(.. 
13450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13470 20 20 20 54 72 61 63 65 50 72 69 6f 72 69 74 79     TracePriority
13480 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75 67 43 61  .Lowest, debugCa
13490 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20  llback,..       
134a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
134b0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
134c0 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69  ceCallback, Stri
134d0 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ng.Format(..    
134e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
134f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13500 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20 62 6f 6f  "Invalid {0} boo
13510 6c 65 61 6e 20 76 61 6c 75 65 3a 20 7b 31 7d 22  lean value: {1}"
13520 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
13530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13540 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61         ForDispla
13550 79 28 61 72 67 29 2c 20 46 6f 72 44 69 73 70 6c  y(arg), ForDispl
13560 61 79 28 74 65 78 74 29 29 2c 0d 0a 20 20 20 20  ay(text)),..    
13570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13590 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
135a0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
135b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
135c0 20 20 20 69 66 20 28 73 74 72 69 63 74 29 0d 0a     if (strict)..
135d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
135e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
135f0 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
13600 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
13610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13620 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a       continue;..
13630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13640 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
13650 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
13660 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
13670 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 4e 65 74  figuration.noNet
13680 46 78 32 30 20 3d 20 28 62 6f 6f 6c 29 76 61 6c  Fx20 = (bool)val
13690 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
136a0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
136b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
136c0 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20          else if 
136d0 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77  (MatchOption(new
136e0 41 72 67 2c 20 22 6e 6f 4e 65 74 46 78 34 30 22  Arg, "noNetFx40"
136f0 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
13700 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
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 62 6f 6f 6c 3f             bool?
13730 20 76 61 6c 75 65 20 3d 20 50 61 72 73 65 42 6f   value = ParseBo
13740 6f 6c 65 61 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a  olean(text);....
13750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13760 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
13770 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  value == null)..
13780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13790 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
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 65                 e
137c0 72 72 6f 72 20 3d 20 54 72 61 63 65 4f 70 73 2e  rror = TraceOps.
137d0 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 0d 0a  DebugAndTrace(..
137e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
137f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13800 20 20 20 20 54 72 61 63 65 50 72 69 6f 72 69 74      TracePriorit
13810 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75 67 43  y.Lowest, debugC
13820 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20  allback,..      
13830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
13850 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72  aceCallback, Str
13860 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
13870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13890 20 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20 62 6f   "Invalid {0} bo
138a0 6f 6c 65 61 6e 20 76 61 6c 75 65 3a 20 7b 31 7d  olean value: {1}
138b0 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
138c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
138d0 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c          ForDispl
138e0 61 79 28 61 72 67 29 2c 20 46 6f 72 44 69 73 70  ay(arg), ForDisp
138f0 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a 20 20 20  lay(text)),..   
13900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13920 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
13930 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
13940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13950 20 20 20 20 69 66 20 28 73 74 72 69 63 74 29 0d      if (strict).
13960 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
13970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13980 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
13990 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
139a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
139b0 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d        continue;.
139c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
139d0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
139e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
139f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
13a00 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 4e 65  nfiguration.noNe
13a10 74 46 78 34 30 20 3d 20 28 62 6f 6f 6c 29 76 61  tFx40 = (bool)va
13a20 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lue;..          
13a30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
13a40 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
13a50 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66           else if
13a60 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65   (MatchOption(ne
13a70 77 41 72 67 2c 20 22 6e 6f 52 75 6e 74 69 6d 65  wArg, "noRuntime
13a80 56 65 72 73 69 6f 6e 22 29 29 0d 0a 20 20 20 20  Version"))..    
13a90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13aa0 20 20 20 20 7b 0d 0a 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 20 20 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d     bool? value =
13ad0 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65   ParseBoolean(te
13ae0 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  xt);....        
13af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13b00 20 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d 3d      if (value ==
13b10 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
13b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13b30 20 20 20 20 7b 0d 0a 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 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 54         error = T
13b60 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64  raceOps.DebugAnd
13b70 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20  Trace(..        
13b80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13b90 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
13ba0 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74  ePriority.Lowest
13bb0 2c 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c  , debugCallback,
13bc0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
13bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13be0 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62        traceCallb
13bf0 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d  ack, String.Form
13c00 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
13c10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13c20 20 20 20 20 20 20 20 20 20 22 49 6e 76 61 6c 69           "Invali
13c30 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61  d {0} boolean va
13c40 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20  lue: {1}",..    
13c50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13c60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13c70 46 6f 72 44 69 73 70 6c 61 79 28 61 72 67 29 2c  ForDisplay(arg),
13c80 20 46 6f 72 44 69 73 70 6c 61 79 28 74 65 78 74   ForDisplay(text
13c90 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  )),..           
13ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13cb0 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
13cc0 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
13cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13ce0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
13cf0 73 74 72 69 63 74 29 0d 0a 20 20 20 20 20 20 20  strict)..       
13d00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13d10 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
13d20 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20  urn false;....  
13d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13d40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
13d50 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20  ntinue;..       
13d60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13d70 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
13d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13d90 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74        configurat
13da0 69 6f 6e 2e 6e 6f 52 75 6e 74 69 6d 65 56 65 72  ion.noRuntimeVer
13db0 73 69 6f 6e 20 3d 20 28 62 6f 6f 6c 29 76 61 6c  sion = (bool)val
13dc0 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
13dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
13de0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13df0 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20          else if 
13e00 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77  (MatchOption(new
13e10 41 72 67 2c 20 22 6e 6f 54 72 61 63 65 22 29 29  Arg, "noTrace"))
13e20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
13e30 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
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 62 6f 6f 6c 3f 20 76           bool? v
13e60 61 6c 75 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c  alue = ParseBool
13e70 65 61 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20  ean(text);....  
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 69 66 20 28 76 61            if (va
13ea0 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  lue == null)..  
13eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13ec0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 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 20 20 20 20 65 72 72               err
13ef0 6f 72 20 3d 20 54 72 61 63 65 4f 70 73 2e 44 65  or = TraceOps.De
13f00 62 75 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 20  bugAndTrace(..  
13f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13f20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13f30 20 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e    TracePriority.
13f40 4c 6f 77 65 73 74 2c 20 64 65 62 75 67 43 61 6c  Lowest, debugCal
13f50 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20  lback,..        
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 74 72 61 63              trac
13f80 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e  eCallback, Strin
13f90 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
13fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
13fc0 49 6e 76 61 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c  Invalid {0} bool
13fd0 65 61 6e 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c  ean value: {1}",
13fe0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
13ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14000 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79        ForDisplay
14010 28 61 72 67 29 2c 20 46 6f 72 44 69 73 70 6c 61  (arg), ForDispla
14020 79 28 74 65 78 74 29 29 2c 0d 0a 20 20 20 20 20  y(text)),..     
14030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
14050 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
14060 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
14070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14080 20 20 69 66 20 28 73 74 72 69 63 74 29 0d 0a 20    if (strict).. 
14090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
140a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
140b0 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
140c0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
140d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
140e0 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20      continue;.. 
140f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14100 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
14110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14120 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66              conf
14130 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 54 72 61 63  iguration.noTrac
14140 65 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 65 3b  e = (bool)value;
14150 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
14160 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
14170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14180 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61       else if (Ma
14190 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67  tchOption(newArg
141a0 2c 20 22 6e 6f 56 73 32 30 30 38 22 29 29 0d 0a  , "noVs2008"))..
141b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
141c0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
141d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
141e0 20 20 20 20 20 20 20 62 6f 6f 6c 3f 20 76 61 6c         bool? val
141f0 75 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c 65 61  ue = ParseBoolea
14200 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20  n(text);....    
14210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14220 20 20 20 20 20 20 20 20 69 66 20 28 76 61 6c 75          if (valu
14230 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  e == null)..    
14240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14250 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
14260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14270 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72             error
14280 20 3d 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75   = TraceOps.Debu
14290 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 20 20 20  gAndTrace(..    
142a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
142b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
142c0 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f  TracePriority.Lo
142d0 77 65 73 74 2c 20 64 65 62 75 67 43 61 6c 6c 62  west, debugCallb
142e0 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ack,..          
142f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14300 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
14310 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e  allback, String.
14320 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
14330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14340 20 20 20 20 20 20 20 20 20 20 20 20 20 22 49 6e               "In
14350 76 61 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c 65 61  valid {0} boolea
14360 6e 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a  n value: {1}",..
14370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14390 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 61      ForDisplay(a
143a0 72 67 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28  rg), ForDisplay(
143b0 74 65 78 74 29 29 2c 0d 0a 20 20 20 20 20 20 20  text)),..       
143c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
143d0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
143e0 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
143f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14410 69 66 20 28 73 74 72 69 63 74 29 0d 0a 20 20 20  if (strict)..   
14420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14440 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
14450 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
14460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14470 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20    continue;..   
14480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14490 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
144a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
144b0 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67            config
144c0 75 72 61 74 69 6f 6e 2e 6e 6f 56 73 32 30 30 38  uration.noVs2008
144d0 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d   = (bool)value;.
144e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
144f0 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
14500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14510 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74      else if (Mat
14520 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c  chOption(newArg,
14530 20 22 6e 6f 56 73 32 30 31 30 22 29 29 0d 0a 20   "noVs2010")).. 
14540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14550 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
14560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14570 20 20 20 20 20 20 62 6f 6f 6c 3f 20 76 61 6c 75        bool? valu
14580 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e  e = ParseBoolean
14590 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20  (text);....     
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 69 66 20 28 76 61 6c 75 65         if (value
145c0 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
145d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
145e0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
145f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14600 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20            error 
14610 3d 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67  = TraceOps.Debug
14620 41 6e 64 54 72 61 63 65 28 0d 0a 20 20 20 20 20  AndTrace(..     
14630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
14650 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77  racePriority.Low
14660 65 73 74 2c 20 64 65 62 75 67 43 61 6c 6c 62 61  est, debugCallba
14670 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ck,..           
14680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14690 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
146a0 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46  llback, String.F
146b0 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
146c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
146d0 20 20 20 20 20 20 20 20 20 20 20 20 22 49 6e 76              "Inv
146e0 61 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e  alid {0} boolean
146f0 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20   value: {1}",.. 
14700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14720 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 61 72     ForDisplay(ar
14730 67 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 74  g), ForDisplay(t
14740 65 78 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20  ext)),..        
14750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14760 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
14770 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
14780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
147a0 66 20 28 73 74 72 69 63 74 29 0d 0a 20 20 20 20  f (strict)..    
147b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
147c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
147d0 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d  return false;...
147e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
147f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14800 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20   continue;..    
14810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14820 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
14830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14840 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75           configu
14850 72 61 74 69 6f 6e 2e 6e 6f 56 73 32 30 31 30 20  ration.noVs2010 
14860 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a  = (bool)value;..
14870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14880 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
14890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
148a0 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63     else if (Matc
148b0 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20  hOption(newArg, 
148c0 22 73 74 72 69 63 74 22 29 29 0d 0a 20 20 20 20  "strict"))..    
148d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
148e0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
148f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14900 20 20 20 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d     bool? value =
14910 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65   ParseBoolean(te
14920 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  xt);....        
14930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14940 20 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d 3d      if (value ==
14950 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
14960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14970 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
14980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14990 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 54         error = T
149a0 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64  raceOps.DebugAnd
149b0 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20  Trace(..        
149c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
149d0 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
149e0 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74  ePriority.Lowest
149f0 2c 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c  , debugCallback,
14a00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
14a10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14a20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62        traceCallb
14a30 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d  ack, String.Form
14a40 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
14a50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14a60 20 20 20 20 20 20 20 20 20 22 49 6e 76 61 6c 69           "Invali
14a70 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61  d {0} boolean va
14a80 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20  lue: {1}",..    
14a90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14ab0 46 6f 72 44 69 73 70 6c 61 79 28 61 72 67 29 2c  ForDisplay(arg),
14ac0 20 46 6f 72 44 69 73 70 6c 61 79 28 74 65 78 74   ForDisplay(text
14ad0 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  )),..           
14ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14af0 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
14b00 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
14b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14b20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
14b30 73 74 72 69 63 74 29 0d 0a 20 20 20 20 20 20 20  strict)..       
14b40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14b50 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
14b60 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20  urn false;....  
14b70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14b80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
14b90 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20  ntinue;..       
14ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14bb0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
14bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14bd0 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
14be0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14bf0 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 41        // NOTE: A
14c00 6c 6c 6f 77 20 74 68 65 20 63 6f 6d 6d 61 6e 64  llow the command
14c10 20 6c 69 6e 65 20 61 72 67 75 6d 65 6e 74 73 20   line arguments 
14c20 74 6f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  to..            
14c30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14c40 2f 2f 20 20 20 20 20 20 20 6f 76 65 72 72 69 64  //       overrid
14c50 65 20 74 68 65 20 22 73 74 72 69 63 74 6e 65 73  e the "strictnes
14c60 73 22 20 73 65 74 74 69 6e 67 0d 0a 20 20 20 20  s" setting..    
14c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14c80 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
14c90 20 70 72 6f 76 69 64 65 64 20 62 79 20 6f 75 72   provided by our
14ca0 20 63 61 6c 6c 65 72 2e 0d 0a 20 20 20 20 20 20   caller...      
14cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14cc0 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
14cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14ce0 20 20 20 20 20 20 73 74 72 69 63 74 20 3d 20 28        strict = (
14cf0 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20 20 20  bool)value;..   
14d00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14d10 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
14d20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14d30 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70  else if (MatchOp
14d40 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 74 68  tion(newArg, "th
14d50 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 22 29 29 0d  rowOnMissing")).
14d60 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
14d70 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
14d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14d90 20 20 20 20 20 20 20 20 62 6f 6f 6c 3f 20 76 61          bool? va
14da0 6c 75 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c 65  lue = ParseBoole
14db0 61 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20 20  an(text);....   
14dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14dd0 20 20 20 20 20 20 20 20 20 69 66 20 28 76 61 6c           if (val
14de0 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ue == null)..   
14df0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14e00 20 20 20 20 20 20 20 20 20 7b 0d 0a 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 20 20 20 20 20 20 65 72 72 6f              erro
14e30 72 20 3d 20 54 72 61 63 65 4f 70 73 2e 44 65 62  r = TraceOps.Deb
14e40 75 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 20 20  ugAndTrace(..   
14e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14e60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14e70 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c   TracePriority.L
14e80 6f 77 65 73 74 2c 20 64 65 62 75 67 43 61 6c 6c  owest, debugCall
14e90 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20  back,..         
14ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14eb0 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
14ec0 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67  Callback, String
14ed0 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  .Format(..      
14ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 49                "I
14f00 6e 76 61 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c 65  nvalid {0} boole
14f10 61 6e 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d  an value: {1}",.
14f20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
14f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14f40 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28       ForDisplay(
14f50 61 72 67 29 2c 20 46 6f 72 44 69 73 70 6c 61 79  arg), ForDisplay
14f60 28 74 65 78 74 29 29 2c 0d 0a 20 20 20 20 20 20  (text)),..      
14f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14f80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
14f90 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  aceCategory);...
14fa0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
14fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14fc0 20 69 66 20 28 73 74 72 69 63 74 29 0d 0a 20 20   if (strict)..  
14fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14ff0 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
15000 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
15010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15020 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20     continue;..  
15030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15040 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
15050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15060 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69             confi
15070 67 75 72 61 74 69 6f 6e 2e 74 68 72 6f 77 4f 6e  guration.throwOn
15080 4d 69 73 73 69 6e 67 20 3d 20 28 62 6f 6f 6c 29  Missing = (bool)
15090 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20  value;..        
150a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
150b0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
150c0 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20             else 
150d0 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28  if (MatchOption(
150e0 6e 65 77 41 72 67 2c 20 22 74 72 61 63 65 46 6f  newArg, "traceFo
150f0 72 6d 61 74 22 29 29 0d 0a 20 20 20 20 20 20 20  rmat"))..       
15100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15110 20 7b 0d 0a 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 20 20                  
15130 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 74 72  configuration.tr
15140 61 63 65 46 6f 72 6d 61 74 20 3d 20 74 65 78 74  aceFormat = text
15150 3b 0d 0a 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 54                 T
15170 72 61 63 65 4f 70 73 2e 54 72 61 63 65 46 6f 72  raceOps.TraceFor
15180 6d 61 74 20 3d 20 63 6f 6e 66 69 67 75 72 61 74  mat = configurat
15190 69 6f 6e 2e 74 72 61 63 65 46 6f 72 6d 61 74 3b  ion.traceFormat;
151a0 0d 0a 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 7d 0d 0a 20 20 20            }..   
151c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
151d0 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61       else if (Ma
151e0 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67  tchOption(newArg
151f0 2c 20 22 74 72 61 63 65 50 72 69 6f 72 69 74 79  , "tracePriority
15200 22 29 29 0d 0a 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 7b 0d 0a               {..
15220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15230 20 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65              obje
15240 63 74 20 76 61 6c 75 65 20 3d 20 50 61 72 73 65  ct value = Parse
15250 45 6e 75 6d 28 0d 0a 20 20 20 20 20 20 20 20 20  Enum(..         
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 74 79 70 65 6f 66 28 54 72         typeof(Tr
15280 61 63 65 50 72 69 6f 72 69 74 79 29 2c 20 74 65  acePriority), te
15290 78 74 2c 20 74 72 75 65 29 3b 0d 0a 0d 0a 20 20  xt, true);....  
152a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
152b0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76 61            if (va
152c0 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  lue == null)..  
152d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
152e0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
152f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15300 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
15310 6f 72 20 3d 20 54 72 61 63 65 4f 70 73 2e 44 65  or = TraceOps.De
15320 62 75 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 20  bugAndTrace(..  
15330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15350 20 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e    TracePriority.
15360 4c 6f 77 65 73 74 2c 20 64 65 62 75 67 43 61 6c  Lowest, debugCal
15370 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20  lback,..        
15380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15390 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
153a0 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e  eCallback, Strin
153b0 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
153c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
153d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
153e0 49 6e 76 61 6c 69 64 20 7b 30 7d 20 76 61 6c 75  Invalid {0} valu
153f0 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20  e: {1}",..      
15400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f                Fo
15420 72 44 69 73 70 6c 61 79 28 61 72 67 29 2c 20 46  rDisplay(arg), F
15430 6f 72 44 69 73 70 6c 61 79 28 74 65 78 74 29 29  orDisplay(text))
15440 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
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 74 72 61 63 65 43 61 74 65         traceCate
15470 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
15480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15490 20 20 20 20 20 20 20 20 20 20 69 66 20 28 73 74            if (st
154a0 72 69 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20  rict)..         
154b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
154c0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
154d0 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20  n false;....    
154e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
154f0 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74              cont
15500 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  inue;..         
15510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15520 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
15530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15540 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f      configuratio
15550 6e 2e 74 72 61 63 65 50 72 69 6f 72 69 74 79 20  n.tracePriority 
15560 3d 20 28 54 72 61 63 65 50 72 69 6f 72 69 74 79  = (TracePriority
15570 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20  )value;..       
15580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15590 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 54 72       TraceOps.Tr
155a0 61 63 65 50 72 69 6f 72 69 74 79 20 3d 20 63 6f  acePriority = co
155b0 6e 66 69 67 75 72 61 74 69 6f 6e 2e 74 72 61 63  nfiguration.trac
155c0 65 50 72 69 6f 72 69 74 79 3b 0d 0a 20 20 20 20  ePriority;..    
155d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
155e0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
155f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
15600 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74  lse if (MatchOpt
15610 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 76 65 72  ion(newArg, "ver
15620 62 6f 73 65 22 29 29 0d 0a 20 20 20 20 20 20 20  bose"))..       
15630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15640 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
15650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15660 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d 20 50 61  bool? value = Pa
15670 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65 78 74 29  rseBoolean(text)
15680 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
15690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
156a0 20 69 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75   if (value == nu
156b0 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
156c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
156d0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
156e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
156f0 20 20 20 20 65 72 72 6f 72 20 3d 20 54 72 61 63      error = Trac
15700 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61  eOps.DebugAndTra
15710 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ce(..           
15720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15730 20 20 20 20 20 20 20 20 20 54 72 61 63 65 50 72           TracePr
15740 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64  iority.Lowest, d
15750 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20  ebugCallback,.. 
15760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15780 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b     traceCallback
15790 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  , String.Format(
157a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
157b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
157c0 20 20 20 20 20 20 22 49 6e 76 61 6c 69 64 20 7b        "Invalid {
157d0 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65  0} boolean value
157e0 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20  : {1}",..       
157f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15800 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72               For
15810 44 69 73 70 6c 61 79 28 61 72 67 29 2c 20 46 6f  Display(arg), Fo
15820 72 44 69 73 70 6c 61 79 28 74 65 78 74 29 29 2c  rDisplay(text)),
15830 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
15840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15850 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67        traceCateg
15860 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
15870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15880 20 20 20 20 20 20 20 20 20 69 66 20 28 73 74 72           if (str
15890 69 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ict)..          
158a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
158b0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
158c0 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20   false;....     
158d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
158e0 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69             conti
158f0 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  nue;..          
15900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15910 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
15920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15930 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e     configuration
15940 2e 76 65 72 62 6f 73 65 20 3d 20 28 62 6f 6f 6c  .verbose = (bool
15950 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20  )value;..       
15960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15970 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
15980 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65              else
15990 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e   if (MatchOption
159a0 28 6e 65 77 41 72 67 2c 20 22 77 68 61 74 49 66  (newArg, "whatIf
159b0 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  "))..           
159c0 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
159d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
159e0 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
159f0 3f 20 76 61 6c 75 65 20 3d 20 50 61 72 73 65 42  ? value = ParseB
15a00 6f 6f 6c 65 61 6e 28 74 65 78 74 29 3b 0d 0a 0d  oolean(text);...
15a10 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
15a20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
15a30 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d  (value == null).
15a40 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
15a50 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
15a60 20 20 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 65 72 72 6f 72 20 3d 20 54 72 61 63 65 4f 70 73  error = TraceOps
15a90 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 0d  .DebugAndTrace(.
15aa0 0a 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 20 20 20 20 20 20 20                  
15ac0 20 20 20 20 20 54 72 61 63 65 50 72 69 6f 72 69       TracePriori
15ad0 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75 67  ty.Lowest, debug
15ae0 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20  Callback,..     
15af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15b00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
15b10 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74  raceCallback, St
15b20 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
15b30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15b40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15b50 20 20 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20 62    "Invalid {0} b
15b60 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 3a 20 7b 31  oolean value: {1
15b70 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }",..           
15b80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15b90 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70           ForDisp
15ba0 6c 61 79 28 61 72 67 29 2c 20 46 6f 72 44 69 73  lay(arg), ForDis
15bb0 70 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a 20 20  play(text)),..  
15bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15be0 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29    traceCategory)
15bf0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
15c00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15c10 20 20 20 20 20 69 66 20 28 73 74 72 69 63 74 29       if (strict)
15c20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
15c30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15c40 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
15c50 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  se;....         
15c60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15c70 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b         continue;
15c80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
15c90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
15ca0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
15cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
15cc0 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 77 68 61  onfiguration.wha
15cd0 74 49 66 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75  tIf = (bool)valu
15ce0 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
15cf0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
15d00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15d10 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28         else if (
15d20 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41  MatchOption(newA
15d30 72 67 2c 20 22 77 6f 77 36 34 22 29 29 0d 0a 20  rg, "wow64")).. 
15d40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15d50 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
15d60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15d70 20 20 20 20 20 20 62 6f 6f 6c 3f 20 76 61 6c 75        bool? valu
15d80 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e  e = ParseBoolean
15d90 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20  (text);....     
15da0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15db0 20 20 20 20 20 20 20 69 66 20 28 76 61 6c 75 65         if (value
15dc0 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
15dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15de0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
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 65 72 72 6f 72 20            error 
15e10 3d 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67  = TraceOps.Debug
15e20 41 6e 64 54 72 61 63 65 28 0d 0a 20 20 20 20 20  AndTrace(..     
15e30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
15e50 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77  racePriority.Low
15e60 65 73 74 2c 20 64 65 62 75 67 43 61 6c 6c 62 61  est, debugCallba
15e70 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ck,..           
15e80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15e90 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
15ea0 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46  llback, String.F
15eb0 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
15ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15ed0 20 20 20 20 20 20 20 20 20 20 20 20 22 49 6e 76              "Inv
15ee0 61 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e  alid {0} boolean
15ef0 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20   value: {1}",.. 
15f00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15f20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 61 72     ForDisplay(ar
15f30 67 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 74  g), ForDisplay(t
15f40 65 78 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20  ext)),..        
15f50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15f60 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
15f70 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
15f80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15f90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
15fa0 66 20 28 73 74 72 69 63 74 29 0d 0a 20 20 20 20  f (strict)..    
15fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15fd0 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d  return false;...
15fe0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
15ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16000 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20   continue;..    
16010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16020 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
16030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16040 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75           configu
16050 72 61 74 69 6f 6e 2e 77 6f 77 36 34 20 3d 20 28  ration.wow64 = (
16060 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20 20 20  bool)value;..   
16070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16080 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
16090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
160a0 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20  else..          
160b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
160c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
160d0 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
160e0 6f 72 20 3d 20 54 72 61 63 65 4f 70 73 2e 44 65  or = TraceOps.De
160f0 62 75 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 20  bugAndTrace(..  
16100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
16120 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65  acePriority.Lowe
16130 73 74 2c 20 64 65 62 75 67 43 61 6c 6c 62 61 63  st, debugCallbac
16140 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  k,..            
16150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16160 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63      traceCallbac
16170 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  k, String.Format
16180 28 0d 0a 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 20 20 20 20                  
161a0 20 20 20 22 55 6e 73 75 70 70 6f 72 74 65 64 20     "Unsupported 
161b0 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 20 6f 70 74  command line opt
161c0 69 6f 6e 3a 20 7b 30 7d 22 2c 0d 0a 20 20 20 20  ion: {0}",..    
161d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
161e0 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44              ForD
161f0 69 73 70 6c 61 79 28 61 72 67 29 29 2c 20 74 72  isplay(arg)), tr
16200 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  aceCategory);...
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 69 66 20               if 
16230 28 73 74 72 69 63 74 29 0d 0a 20 20 20 20 20 20  (strict)..      
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 20 20 72 65 74 75 72 6e            return
16260 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20   false;..       
16270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16280 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
16290 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
162a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
162b0 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20   return true;.. 
162c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
162d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
162e0 20 20 63 61 74 63 68 20 28 45 78 63 65 70 74 69    catch (Excepti
162f0 6f 6e 20 65 29 0d 0a 20 20 20 20 20 20 20 20 20  on e)..         
16300 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
16310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
16320 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54  aceOps.DebugAndT
16330 72 61 63 65 28 54 72 61 63 65 50 72 69 6f 72 69  race(TracePriori
16340 74 79 2e 48 69 67 68 65 73 74 2c 0d 0a 20 20 20  ty.Highest,..   
16350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16360 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61       debugCallba
16370 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63  ck, traceCallbac
16380 6b 2c 20 65 2c 20 74 72 61 63 65 43 61 74 65 67  k, e, traceCateg
16390 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
163a0 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
163b0 6f 72 20 3d 20 22 46 61 69 6c 65 64 20 74 6f 20  or = "Failed to 
163c0 6d 6f 64 69 66 79 20 63 6f 6e 66 69 67 75 72 61  modify configura
163d0 74 69 6f 6e 2e 22 3b 0d 0a 20 20 20 20 20 20 20  tion.";..       
163e0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
163f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
16400 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20  turn false;..   
16410 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
16420 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
16430 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16440 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16450 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16460 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
16470 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
16480 6c 69 63 20 73 74 61 74 69 63 20 62 6f 6f 6c 20  lic static bool 
16490 50 72 6f 63 65 73 73 28 0d 0a 20 20 20 20 20 20  Process(..      
164a0 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
164b0 5b 5d 20 61 72 67 73 2c 0d 0a 20 20 20 20 20 20  [] args,..      
164c0 20 20 20 20 20 20 20 20 20 20 43 6f 6e 66 69 67            Config
164d0 75 72 61 74 69 6f 6e 20 63 6f 6e 66 69 67 75 72  uration configur
164e0 61 74 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20  ation,..        
164f0 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 73 74 72          bool str
16500 69 63 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ict,..          
16510 20 20 20 20 20 20 72 65 66 20 73 74 72 69 6e 67        ref string
16520 20 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20   error..        
16530 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
16540 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
16550 20 20 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20            try.. 
16560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
16570 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
16580 20 20 20 20 20 20 69 66 20 28 63 6f 6e 66 69 67        if (config
16590 75 72 61 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29  uration == null)
165a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
165b0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
165c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
165d0 20 65 72 72 6f 72 20 3d 20 22 49 6e 76 61 6c 69   error = "Invali
165e0 64 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e  d configuration.
165f0 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ";..            
16600 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
16610 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20  rn false;..     
16620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
16630 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
16640 20 20 20 20 20 20 20 20 41 73 73 65 6d 62 6c 79          Assembly
16650 20 61 73 73 65 6d 62 6c 79 20 3d 20 63 6f 6e 66   assembly = conf
16660 69 67 75 72 61 74 69 6f 6e 2e 61 73 73 65 6d 62  iguration.assemb
16670 6c 79 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ly;....         
16680 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 61             if (a
16690 73 73 65 6d 62 6c 79 20 3d 3d 20 6e 75 6c 6c 29  ssembly == null)
166a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
166b0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
166c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
166d0 20 65 72 72 6f 72 20 3d 20 22 49 6e 76 61 6c 69   error = "Invali
166e0 64 20 61 73 73 65 6d 62 6c 79 2e 22 3b 0d 0a 20  d assembly.";.. 
166f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16700 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
16710 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lse;..          
16720 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
16730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16740 20 20 20 69 66 20 28 21 63 6f 6e 66 69 67 75 72     if (!configur
16750 61 74 69 6f 6e 2e 6e 6f 54 72 61 63 65 29 0d 0a  ation.noTrace)..
16760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16770 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
16780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
16790 66 20 28 21 63 6f 6e 66 69 67 75 72 61 74 69 6f  f (!configuratio
167a0 6e 2e 6e 6f 4c 6f 67 20 26 26 0d 0a 20 20 20 20  n.noLog &&..    
167b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
167c0 20 20 20 20 20 20 20 20 53 74 72 69 6e 67 2e 49          String.I
167d0 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 63 6f 6e  sNullOrEmpty(con
167e0 66 69 67 75 72 61 74 69 6f 6e 2e 6c 6f 67 46 69  figuration.logFi
167f0 6c 65 4e 61 6d 65 29 29 0d 0a 20 20 20 20 20 20  leName))..      
16800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16810 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
16820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16830 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
16840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16850 20 2f 2f 20 4e 4f 54 45 3a 20 55 73 65 20 74 68   // NOTE: Use th
16860 65 20 64 65 66 61 75 6c 74 20 6c 6f 67 20 66 69  e default log fi
16870 6c 65 20 6e 61 6d 65 2e 0d 0a 20 20 20 20 20 20  le name...      
16880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16890 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
168a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
168b0 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74        configurat
168c0 69 6f 6e 2e 6c 6f 67 46 69 6c 65 4e 61 6d 65 20  ion.logFileName 
168d0 3d 20 47 65 74 4c 6f 67 46 69 6c 65 4e 61 6d 65  = GetLogFileName
168e0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
168f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16900 20 20 20 22 74 72 61 63 65 22 29 3b 0d 0a 20 20     "trace");..  
16910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16920 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
16930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16940 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
16950 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16960 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16970 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
16980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16990 20 20 20 20 20 20 69 66 20 28 21 63 6f 6e 66 69        if (!confi
169a0 67 75 72 61 74 69 6f 6e 2e 6e 6f 43 6f 6e 73 6f  guration.noConso
169b0 6c 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  le)..           
169c0 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
169d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
169e0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
169f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16a00 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e              // N
16a10 4f 54 45 3a 20 49 6e 20 76 65 72 62 6f 73 65 20  OTE: In verbose 
16a20 6d 6f 64 65 2c 20 64 65 62 75 67 20 6f 75 74 70  mode, debug outp
16a30 75 74 20 28 74 68 61 74 20 6d 65 65 74 73 0d 0a  ut (that meets..
16a40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16a50 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
16a60 20 20 20 20 20 74 68 65 20 63 6f 6e 66 69 67 75       the configu
16a70 72 65 64 20 70 72 69 6f 72 69 74 79 20 63 72 69  red priority cri
16a80 74 65 72 69 61 29 20 77 69 6c 6c 20 62 65 0d 0a  teria) will be..
16a90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16aa0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
16ab0 20 20 20 20 20 64 69 73 70 6c 61 79 65 64 20 74       displayed t
16ac0 6f 20 74 68 65 20 63 6f 6e 73 6f 6c 65 3b 20 6f  o the console; o
16ad0 74 68 65 72 77 69 73 65 2c 20 74 72 61 63 65 0d  therwise, trace.
16ae0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
16af0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
16b00 20 20 20 20 20 20 6f 75 74 70 75 74 20 28 74 68        output (th
16b10 61 74 20 6d 65 65 74 73 20 74 68 65 20 63 6f 6e  at meets the con
16b20 66 69 67 75 72 65 64 20 70 72 69 6f 72 69 74 79  figured priority
16b30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
16b40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
16b50 20 20 20 20 20 20 20 63 72 69 74 65 72 69 61 29         criteria)
16b60 20 77 69 6c 6c 20 62 65 20 64 69 73 70 6c 61 79   will be display
16b70 65 64 20 74 6f 20 74 68 65 20 63 6f 6e 73 6f 6c  ed to the consol
16b80 65 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e...            
16b90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16ba0 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
16bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16bc0 69 66 20 28 63 6f 6e 66 69 67 75 72 61 74 69 6f  if (configuratio
16bd0 6e 2e 64 65 62 75 67 29 0d 0a 20 20 20 20 20 20  n.debug)..      
16be0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16bf0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
16c00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16c10 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
16c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16c30 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
16c40 4e 4f 54 45 3a 20 41 64 64 20 74 68 65 20 63 6f  NOTE: Add the co
16c50 6e 73 6f 6c 65 20 74 72 61 63 65 20 6c 69 73 74  nsole trace list
16c60 65 6e 65 72 20 74 6f 20 74 68 65 0d 0a 20 20 20  ener to the..   
16c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16c80 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
16c90 20 20 20 20 20 20 6c 69 73 74 20 6f 66 20 74 72        list of tr
16ca0 61 63 65 20 6c 69 73 74 65 6e 65 72 73 20 6d 61  ace listeners ma
16cb0 69 6e 74 61 69 6e 65 64 20 62 79 0d 0a 20 20 20  intained by..   
16cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
16ce0 20 20 20 20 20 20 74 68 65 20 54 72 61 63 65 4f        the TraceO
16cf0 70 73 20 63 6c 61 73 73 20 28 69 2e 65 2e 20 6f  ps class (i.e. o
16d00 6e 6c 79 20 6d 65 73 73 61 67 65 73 0d 0a 20 20  nly messages..  
16d10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16d20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
16d30 20 20 20 20 20 20 20 74 68 61 74 20 6d 65 65 74         that meet
16d40 20 74 68 65 20 64 65 62 75 67 20 70 72 69 6f 72   the debug prior
16d50 69 74 79 20 77 69 6c 6c 20 62 65 0d 0a 20 20 20  ity will be..   
16d60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16d70 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
16d80 20 20 20 20 20 20 73 65 65 6e 20 6f 6e 20 74 68        seen on th
16d90 65 20 63 6f 6e 73 6f 6c 65 29 2e 0d 0a 20 20 20  e console)...   
16da0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16db0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
16dc0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
16dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16de0 20 54 72 61 63 65 4f 70 73 2e 53 65 74 75 70 44   TraceOps.SetupD
16df0 65 62 75 67 4c 69 73 74 65 6e 65 72 73 28 29 3b  ebugListeners();
16e00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
16e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
16e20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
16e30 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73               els
16e40 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..             
16e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
16e60 0d 0a 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 20 2f 2f 0d 0a 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 20 2f 2f 20 4e 4f 54 45 3a 20 41        // NOTE: A
16eb0 64 64 20 74 68 65 20 63 6f 6e 73 6f 6c 65 20 74  dd the console t
16ec0 72 61 63 65 20 6c 69 73 74 65 6e 65 72 20 74 6f  race listener to
16ed0 20 74 68 65 0d 0a 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 20 2f 2f 20 20 20 20 20 20 20 6c        //       l
16f00 69 73 74 20 6f 66 20 62 75 69 6c 74 2d 69 6e 20  ist of built-in 
16f10 74 72 61 63 65 20 6c 69 73 74 65 6e 65 72 73 20  trace listeners 
16f20 28 69 2e 65 2e 0d 0a 20 20 20 20 20 20 20 20 20  (i.e...         
16f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16f40 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
16f50 6f 6e 6c 79 20 6d 65 73 73 61 67 65 73 20 74 68  only messages th
16f60 61 74 20 6d 65 65 74 20 74 68 65 20 74 72 61 63  at meet the trac
16f70 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..             
16f80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16f90 20 20 20 2f 2f 20 20 20 20 20 20 20 70 72 69 6f     //       prio
16fa0 72 69 74 79 20 77 69 6c 6c 20 62 65 20 73 65 65  rity will be see
16fb0 6e 20 6f 6e 20 74 68 65 20 63 6f 6e 73 6f 6c 65  n on the console
16fc0 29 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  )...            
16fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16fe0 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
16ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17000 20 20 20 20 20 20 20 20 54 72 61 63 65 2e 4c 69          Trace.Li
17010 73 74 65 6e 65 72 73 2e 41 64 64 28 6e 65 77 20  steners.Add(new 
17020 43 6f 6e 73 6f 6c 65 54 72 61 63 65 4c 69 73 74  ConsoleTraceList
17030 65 6e 65 72 28 29 29 3b 0d 0a 20 20 20 20 20 20  ener());..      
17040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17050 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
17060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17070 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
17080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
17090 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
170a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
170b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
170c0 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 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 69 66 20 28 21 63 6f 6e 66 69 67 75 72 61 74   if (!configurat
170f0 69 6f 6e 2e 6e 6f 4c 6f 67 20 26 26 0d 0a 20 20  ion.noLog &&..  
17100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17110 20 20 20 20 20 20 20 20 20 20 21 53 74 72 69 6e            !Strin
17120 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28  g.IsNullOrEmpty(
17130 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6c 6f  configuration.lo
17140 67 46 69 6c 65 4e 61 6d 65 29 29 0d 0a 20 20 20  gFileName))..   
17150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17160 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
17170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17180 20 20 20 20 54 72 61 63 65 2e 4c 69 73 74 65 6e      Trace.Listen
17190 65 72 73 2e 41 64 64 28 6e 65 77 20 54 65 78 74  ers.Add(new Text
171a0 57 72 69 74 65 72 54 72 61 63 65 4c 69 73 74 65  WriterTraceListe
171b0 6e 65 72 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ner(..          
171c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
171d0 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74        configurat
171e0 69 6f 6e 2e 6c 6f 67 46 69 6c 65 4e 61 6d 65 29  ion.logFileName)
171f0 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
17200 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
17210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17220 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
17230 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
17240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17250 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 44 75 6d      // NOTE: Dum
17260 70 20 74 68 65 20 63 6f 6e 66 69 67 75 72 61 74  p the configurat
17270 69 6f 6e 20 6e 6f 77 20 69 6e 20 63 61 73 65 20  ion now in case 
17280 77 65 20 6e 65 65 64 20 74 6f 0d 0a 20 20 20 20  we need to..    
17290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
172a0 2f 2f 20 20 20 20 20 20 20 74 72 6f 75 62 6c 65  //       trouble
172b0 73 68 6f 6f 74 20 61 6e 79 20 69 73 73 75 65 73  shoot any issues
172c0 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
172d0 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
172e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
172f0 66 20 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  f (configuration
17300 2e 64 65 62 75 67 50 72 69 6f 72 69 74 79 20 3c  .debugPriority <
17310 3d 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e  = TracePriority.
17320 4d 65 64 69 75 6d 29 0d 0a 20 20 20 20 20 20 20  Medium)..       
17330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17340 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 44   configuration.D
17350 75 6d 70 28 64 65 62 75 67 43 61 6c 6c 62 61 63  ump(debugCallbac
17360 6b 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  k);....         
17370 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 63             if (c
17380 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 74 72 61  onfiguration.tra
17390 63 65 50 72 69 6f 72 69 74 79 20 3c 3d 20 54 72  cePriority <= Tr
173a0 61 63 65 50 72 69 6f 72 69 74 79 2e 4d 65 64 69  acePriority.Medi
173b0 75 6d 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  um)..           
173c0 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
173d0 66 69 67 75 72 61 74 69 6f 6e 2e 44 75 6d 70 28  figuration.Dump(
173e0 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 29 3b 0d  traceCallback);.
173f0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
17400 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
17410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
17420 2f 20 4e 4f 54 45 3a 20 53 68 6f 77 20 77 68 65  / NOTE: Show whe
17430 72 65 20 77 65 20 61 72 65 20 72 75 6e 6e 69 6e  re we are runnin
17440 67 20 66 72 6f 6d 20 61 6e 64 20 68 6f 77 20 77  g from and how w
17450 65 20 77 65 72 65 0d 0a 20 20 20 20 20 20 20 20  e were..        
17460 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
17470 20 20 20 20 20 69 6e 76 6f 6b 65 64 2e 0d 0a 20       invoked... 
17480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17490 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
174a0 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
174b0 67 20 6c 6f 63 61 74 69 6f 6e 20 3d 20 61 73 73  g location = ass
174c0 65 6d 62 6c 79 2e 4c 6f 63 61 74 69 6f 6e 3b 0d  embly.Location;.
174d0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
174e0 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e         TraceOps.
174f0 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 54 72  DebugAndTrace(Tr
17500 61 63 65 50 72 69 6f 72 69 74 79 2e 4d 65 64 69  acePriority.Medi
17510 75 6d 4c 6f 77 2c 0d 0a 20 20 20 20 20 20 20 20  umLow,..        
17520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17530 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74  debugCallback, t
17540 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74  raceCallback, St
17550 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
17560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17570 20 20 20 20 20 20 22 52 75 6e 6e 69 6e 67 20 65        "Running e
17580 78 65 63 75 74 61 62 6c 65 20 69 73 3a 20 7b 30  xecutable is: {0
17590 7d 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 6c  }", ForDisplay(l
175a0 6f 63 61 74 69 6f 6e 29 29 2c 0d 0a 20 20 20 20  ocation)),..    
175b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
175c0 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72      traceCategor
175d0 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
175e0 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
175f0 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63  Ops.DebugAndTrac
17600 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e  e(TracePriority.
17610 4d 65 64 69 75 6d 4c 6f 77 2c 0d 0a 20 20 20 20  MediumLow,..    
17620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17630 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63      debugCallbac
17640 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b  k, traceCallback
17650 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  , String.Format(
17660 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
17670 20 20 20 20 20 20 20 20 20 20 22 4f 72 69 67 69            "Origi
17680 6e 61 6c 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65  nal command line
17690 20 69 73 3a 20 7b 30 7d 22 2c 0d 0a 20 20 20 20   is: {0}",..    
176a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
176b0 20 20 20 20 45 6e 76 69 72 6f 6e 6d 65 6e 74 2e      Environment.
176c0 43 6f 6d 6d 61 6e 64 4c 69 6e 65 29 2c 20 74 72  CommandLine), tr
176d0 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  aceCategory);...
176e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
176f0 20 20 20 20 20 69 66 20 28 21 63 6f 6e 66 69 67       if (!config
17700 75 72 61 74 69 6f 6e 2e 77 68 61 74 49 66 29 0d  uration.whatIf).
17710 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
17720 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
17730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17740 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
17750 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e              // N
17760 4f 54 45 3a 20 49 66 20 74 68 65 20 64 65 62 75  OTE: If the debu
17770 67 67 65 72 20 69 73 20 61 74 74 61 63 68 65 64  gger is attached
17780 20 61 6e 64 20 57 68 61 74 2d 49 66 20 6d 6f 64   and What-If mod
17790 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..             
177a0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
177b0 20 20 20 20 69 73 20 5b 6e 6f 77 5d 20 64 69 73      is [now] dis
177c0 61 62 6c 65 64 2c 20 69 73 73 75 65 20 61 20 77  abled, issue a w
177d0 61 72 6e 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20  arning...       
177e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
177f0 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
17800 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
17810 28 44 65 62 75 67 67 65 72 2e 49 73 41 74 74 61  (Debugger.IsAtta
17820 63 68 65 64 29 0d 0a 20 20 20 20 20 20 20 20 20  ched)..         
17830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17840 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75     TraceOps.Debu
17850 67 41 6e 64 54 72 61 63 65 28 54 72 61 63 65 50  gAndTrace(TraceP
17860 72 69 6f 72 69 74 79 2e 4d 65 64 69 75 6d 48 69  riority.MediumHi
17870 67 68 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  gh,..           
17880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17890 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61       debugCallba
178a0 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63  ck, traceCallbac
178b0 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  k,..            
178c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
178d0 20 20 20 20 22 46 6f 72 63 65 64 20 74 6f 20 64      "Forced to d
178e0 69 73 61 62 6c 65 20 5c 22 77 68 61 74 2d 69 66  isable \"what-if
178f0 5c 22 20 6d 6f 64 65 20 77 69 74 68 20 22 20 2b  \" mode with " +
17900 0d 0a 20 20 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 20 20 20 20                  
17920 20 20 22 64 65 62 75 67 67 65 72 20 61 74 74 61    "debugger atta
17930 63 68 65 64 2e 22 2c 20 74 72 61 63 65 43 61 74  ched.", traceCat
17940 65 67 6f 72 79 29 3b 0d 0a 20 20 20 20 20 20 20  egory);..       
17950 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
17960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17970 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20      else..      
17980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
17990 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
179a0 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70           TraceOp
179b0 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28  s.DebugAndTrace(
179c0 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4d 65  TracePriority.Me
179d0 64 69 75 6d 48 69 67 68 2c 0d 0a 20 20 20 20 20  diumHigh,..     
179e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
179f0 20 20 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c         debugCall
17a00 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62  back, traceCallb
17a10 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ack,..          
17a20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17a30 20 20 22 4e 6f 20 61 63 74 75 61 6c 20 63 68 61    "No actual cha
17a40 6e 67 65 73 20 77 69 6c 6c 20 62 65 20 6d 61 64  nges will be mad
17a50 65 20 74 6f 20 74 68 69 73 20 22 20 2b 0d 0a 20  e to this " +.. 
17a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17a70 20 20 20 20 20 20 20 20 20 20 20 22 73 79 73 74             "syst
17a80 65 6d 20 62 65 63 61 75 73 65 20 5c 22 77 68 61  em because \"wha
17a90 74 2d 69 66 5c 22 20 6d 6f 64 65 20 69 73 20 65  t-if\" mode is e
17aa0 6e 61 62 6c 65 64 2e 22 2c 0d 0a 20 20 20 20 20  nabled.",..     
17ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17ac0 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65         traceCate
17ad0 67 6f 72 79 29 3b 0d 0a 20 20 20 20 20 20 20 20  gory);..        
17ae0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
17af0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
17b00 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
17b10 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
17b20 4e 4f 54 45 3a 20 49 66 20 74 68 65 20 63 6f 6d  NOTE: If the com
17b30 6d 61 6e 64 20 6c 69 6e 65 20 68 61 73 20 6e 6f  mand line has no
17b40 74 20 62 65 65 6e 20 6d 61 6e 75 61 6c 6c 79 0d  t been manually.
17b50 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
17b60 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 63 6f       //       co
17b70 6e 66 69 72 6d 65 64 20 28 69 2e 65 2e 20 76 69  nfirmed (i.e. vi
17b80 61 20 74 68 65 20 65 78 70 6c 69 63 69 74 20 63  a the explicit c
17b90 6f 6d 6d 61 6e 64 20 6c 69 6e 65 0d 0a 20 20 20  ommand line..   
17ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17bb0 20 2f 2f 20 20 20 20 20 20 20 6f 70 74 69 6f 6e   //       option
17bc0 29 2c 20 74 68 65 6e 20 73 74 6f 70 20 70 72 6f  ), then stop pro
17bd0 63 65 73 73 69 6e 67 20 6e 6f 77 2e 20 20 57 65  cessing now.  We
17be0 20 65 6e 66 6f 72 63 65 0d 0a 20 20 20 20 20 20   enforce..      
17bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
17c00 20 20 20 20 20 20 20 74 68 69 73 20 72 75 6c 65         this rule
17c10 20 73 6f 20 74 68 61 74 20 73 69 6d 70 6c 79 20   so that simply 
17c20 64 6f 75 62 6c 65 2d 63 6c 69 63 6b 69 6e 67 20  double-clicking 
17c30 74 68 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  the..           
17c40 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
17c50 20 20 65 78 65 63 75 74 61 62 6c 65 20 77 69 6c    executable wil
17c60 6c 20 6e 6f 74 20 72 65 73 75 6c 74 20 69 6e 20  l not result in 
17c70 61 6e 79 20 63 68 61 6e 67 65 73 20 62 65 69 6e  any changes bein
17c80 67 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  g..             
17c90 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
17ca0 6d 61 64 65 20 74 6f 20 74 68 65 20 73 79 73 74  made to the syst
17cb0 65 6d 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  em...           
17cc0 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
17cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17ce0 20 69 66 20 28 21 63 6f 6e 66 69 67 75 72 61 74   if (!configurat
17cf0 69 6f 6e 2e 63 6f 6e 66 69 72 6d 29 0d 0a 20 20  ion.confirm)..  
17d00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17d10 20 20 7b 0d 0a 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 65 72 72               err
17d30 6f 72 20 3d 20 22 43 61 6e 6e 6f 74 20 63 6f 6e  or = "Cannot con
17d40 74 69 6e 75 65 2c 20 74 68 65 20 5c 22 63 6f 6e  tinue, the \"con
17d50 66 69 72 6d 5c 22 20 6f 70 74 69 6f 6e 20 69 73  firm\" option is
17d60 20 22 20 2b 0d 0a 20 20 20 20 20 20 20 20 20 20   " +..          
17d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17d80 20 20 22 6e 6f 74 20 65 6e 61 62 6c 65 64 2e 22    "not enabled."
17d90 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
17da0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
17db0 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20  urn false;..    
17dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17dd0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
17de0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
17df0 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  true;..         
17e00 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
17e10 20 20 20 20 20 20 20 20 20 20 63 61 74 63 68 20            catch 
17e20 28 45 78 63 65 70 74 69 6f 6e 20 65 29 0d 0a 20  (Exception e).. 
17e30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
17e40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
17e50 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44        TraceOps.D
17e60 65 62 75 67 41 6e 64 54 72 61 63 65 28 54 72 61  ebugAndTrace(Tra
17e70 63 65 50 72 69 6f 72 69 74 79 2e 48 69 67 68 65  cePriority.Highe
17e80 73 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  st,..           
17e90 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62               deb
17ea0 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63  ugCallback, trac
17eb0 65 43 61 6c 6c 62 61 63 6b 2c 20 65 2c 20 74 72  eCallback, e, tr
17ec0 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  aceCategory);...
17ed0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
17ee0 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 46 61       error = "Fa
17ef0 69 6c 65 64 20 74 6f 20 70 72 6f 63 65 73 73 20  iled to process 
17f00 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 22 3b  configuration.";
17f10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
17f20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
17f30 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
17f40 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lse;..          
17f50 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
17f60 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
17f70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17f80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17f90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17fa0 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
17fb0 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61        public sta
17fc0 74 69 63 20 62 6f 6f 6c 20 43 68 65 63 6b 52 75  tic bool CheckRu
17fd0 6e 74 69 6d 65 56 65 72 73 69 6f 6e 28 0d 0a 20  ntimeVersion(.. 
17fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43                 C
17ff0 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 63 6f 6e  onfiguration con
18000 66 69 67 75 72 61 74 69 6f 6e 2c 0d 0a 20 20 20  figuration,..   
18010 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f               boo
18020 6c 20 73 74 72 69 63 74 2c 0d 0a 20 20 20 20 20  l strict,..     
18030 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20 73             ref s
18040 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20  tring error..   
18050 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a               )..
18060 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
18070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
18080 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ry..            
18090 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
180a0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 63             if (c
180b0 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 3d 3d 20  onfiguration == 
180c0 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
180d0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
180e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
180f0 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 49        error = "I
18100 6e 76 61 6c 69 64 20 63 6f 6e 66 69 67 75 72 61  nvalid configura
18110 74 69 6f 6e 2e 22 3b 0d 0a 20 20 20 20 20 20 20  tion.";..       
18120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18130 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
18140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18150 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
18160 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
18170 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
18180 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 57 68       // NOTE: Wh
18190 61 74 20 76 65 72 73 69 6f 6e 20 6f 66 20 74 68  at version of th
181a0 65 20 72 75 6e 74 69 6d 65 20 77 61 73 20 74 68  e runtime was th
181b0 65 20 63 6f 72 65 20 28 70 72 69 6d 61 72 79 29  e core (primary)
181c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
181d0 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 61        //       a
181e0 73 73 65 6d 62 6c 79 20 63 6f 6d 70 69 6c 65 64  ssembly compiled
181f0 20 61 67 61 69 6e 73 74 20 28 65 2e 67 2e 20 22   against (e.g. "
18200 76 32 2e 30 2e 35 30 37 32 37 22 20 6f 72 0d 0a  v2.0.50727" or..
18210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18220 20 20 20 20 2f 2f 20 20 20 20 20 20 20 22 76 34      //       "v4
18230 2e 30 2e 33 30 33 31 39 22 29 2e 0d 0a 20 20 20  .0.30319")...   
18240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18250 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
18260 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
18270 63 6f 72 65 49 6d 61 67 65 52 75 6e 74 69 6d 65  coreImageRuntime
18280 56 65 72 73 69 6f 6e 20 3d 20 47 65 74 49 6d 61  Version = GetIma
18290 67 65 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e  geRuntimeVersion
182a0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
182b0 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69             confi
182c0 67 75 72 61 74 69 6f 6e 2e 63 6f 72 65 46 69 6c  guration.coreFil
182d0 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20  eName);....     
182e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
182f0 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
18300 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20         // NOTE: 
18310 57 65 20 61 6c 6c 6f 77 20 74 68 65 20 61 63 74  We allow the act
18320 75 61 6c 20 69 6d 61 67 65 20 72 75 6e 74 69 6d  ual image runtim
18330 65 20 63 68 65 63 6b 69 6e 67 20 74 6f 20 62 65  e checking to be
18340 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
18350 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 62        //       b
18360 79 70 61 73 73 65 64 20 76 69 61 20 74 68 65 20  ypassed via the 
18370 22 2d 6e 6f 52 75 6e 74 69 6d 65 56 65 72 73 69  "-noRuntimeVersi
18380 6f 6e 22 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65  on" command line
18390 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
183a0 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 6f        //       o
183b0 70 74 69 6f 6e 2e 20 20 54 68 65 20 63 6f 6d 6d  ption.  The comm
183c0 61 6e 64 20 6c 69 6e 65 20 6f 70 74 69 6f 6e 20  and line option 
183d0 69 73 20 69 6e 74 65 6e 64 65 64 20 66 6f 72 0d  is intended for.
183e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
183f0 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 65 78       //       ex
18400 70 65 72 74 20 75 73 65 20 6f 6e 6c 79 2e 0d 0a  pert use only...
18410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18420 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
18430 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
18440 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f  configuration.no
18450 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 29 0d  RuntimeVersion).
18460 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
18470 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
18480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18490 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e  TraceOps.DebugAn
184a0 64 54 72 61 63 65 28 54 72 61 63 65 50 72 69 6f  dTrace(TracePrio
184b0 72 69 74 79 2e 4d 65 64 69 75 6d 2c 0d 0a 20 20  rity.Medium,..  
184c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
184d0 20 20 20 20 20 20 20 20 20 20 64 65 62 75 67 43            debugC
184e0 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61  allback, traceCa
184f0 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46  llback, String.F
18500 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
18510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18520 20 20 20 20 22 41 73 73 65 6d 62 6c 79 20 69 73      "Assembly is
18530 20 63 6f 6d 70 69 6c 65 64 20 66 6f 72 20 74 68   compiled for th
18540 65 20 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b  e .NET Framework
18550 20 7b 30 7d 3b 20 22 20 2b 0d 0a 20 20 20 20 20   {0}; " +..     
18560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18570 20 20 20 20 20 20 20 22 68 6f 77 65 76 65 72 2c         "however,
18580 20 69 6e 73 74 61 6c 6c 61 74 69 6f 6e 20 72 65   installation re
18590 73 74 72 69 63 74 69 6f 6e 73 20 62 61 73 65 64  strictions based
185a0 20 6f 6e 20 74 68 69 73 20 22 20 2b 0d 0a 20 20   on this " +..  
185b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
185c0 20 20 20 20 20 20 20 20 20 20 22 66 61 63 74 20            "fact 
185d0 68 61 76 65 20 62 65 65 6e 20 64 69 73 61 62 6c  have been disabl
185e0 65 64 20 76 69 61 20 74 68 65 20 63 6f 6d 6d 61  ed via the comma
185f0 6e 64 20 6c 69 6e 65 2e 22 2c 0d 0a 20 20 20 20  nd line.",..    
18600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18610 20 20 20 20 20 20 20 20 63 6f 72 65 49 6d 61 67          coreImag
18620 65 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 29  eRuntimeVersion)
18630 2c 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29  , traceCategory)
18640 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
18650 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
18660 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20 20  urn true;..     
18670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
18680 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
18690 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
186a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
186b0 2f 2f 20 54 4f 44 4f 3a 20 52 65 73 74 72 69 63  // TODO: Restric
186c0 74 20 74 68 65 20 63 6f 6e 66 69 67 75 72 61 74  t the configurat
186d0 69 6f 6e 20 62 61 73 65 64 20 6f 6e 20 77 68 69  ion based on whi
186e0 63 68 20 69 6d 61 67 65 0d 0a 20 20 20 20 20 20  ch image..      
186f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
18700 20 20 20 20 20 20 20 72 75 6e 74 69 6d 65 20 76         runtime v
18710 65 72 73 69 6f 6e 73 20 28 77 68 69 63 68 20 6d  ersions (which m
18720 6f 72 65 2d 6f 72 2d 6c 65 73 73 20 63 6f 72 72  ore-or-less corr
18730 65 73 70 6f 6e 64 0d 0a 20 20 20 20 20 20 20 20  espond..        
18740 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
18750 20 20 20 20 20 74 6f 20 2e 4e 45 54 20 46 72 61       to .NET Fra
18760 6d 65 77 6f 72 6b 20 76 65 72 73 69 6f 6e 73 29  mework versions)
18770 20 61 72 65 20 73 75 70 70 6f 72 74 65 64 20 62   are supported b
18780 79 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 20  y the..         
18790 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
187a0 20 20 20 20 76 65 72 73 69 6f 6e 73 20 6f 66 20      versions of 
187b0 56 69 73 75 61 6c 20 53 74 75 64 69 6f 20 74 68  Visual Studio th
187c0 61 74 20 61 72 65 20 69 6e 73 74 61 6c 6c 65 64  at are installed
187d0 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
187e0 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
187f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
18800 66 20 28 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c  f (String.IsNull
18810 4f 72 45 6d 70 74 79 28 63 6f 72 65 49 6d 61 67  OrEmpty(coreImag
18820 65 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 29  eRuntimeVersion)
18830 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
18840 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
18850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18860 20 20 65 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c    error = "inval
18870 69 64 20 63 6f 72 65 20 66 69 6c 65 20 69 6d 61  id core file ima
18880 67 65 20 72 75 6e 74 69 6d 65 20 76 65 72 73 69  ge runtime versi
18890 6f 6e 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  on";..          
188a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
188b0 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20  turn false;..   
188c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
188d0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
188e0 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20          else if 
188f0 28 53 74 72 69 6e 67 2e 45 71 75 61 6c 73 28 0d  (String.Equals(.
18900 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
18910 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 72               cor
18920 65 49 6d 61 67 65 52 75 6e 74 69 6d 65 56 65 72  eImageRuntimeVer
18930 73 69 6f 6e 2c 20 43 4c 52 76 32 49 6d 61 67 65  sion, CLRv2Image
18940 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 2c 0d  RuntimeVersion,.
18950 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
18960 20 20 20 20 20 20 20 20 20 20 20 20 20 53 74 72               Str
18970 69 6e 67 43 6f 6d 70 61 72 69 73 6f 6e 2e 49 6e  ingComparison.In
18980 76 61 72 69 61 6e 74 43 75 6c 74 75 72 65 29 29  variantCulture))
18990 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
189a0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
189b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
189c0 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
189d0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
189e0 4e 4f 54 45 3a 20 46 6f 72 20 74 68 65 20 43 4c  NOTE: For the CL
189f0 52 20 76 32 2e 30 20 72 75 6e 74 69 6d 65 2c 20  R v2.0 runtime, 
18a00 6d 61 6b 65 20 73 75 72 65 20 77 65 20 64 69 73  make sure we dis
18a10 61 62 6c 65 0d 0a 20 20 20 20 20 20 20 20 20 20  able..          
18a20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
18a30 20 20 20 20 20 20 20 61 6e 79 20 61 74 74 65 6d         any attem
18a40 70 74 20 74 6f 20 75 73 65 20 69 74 20 66 6f 72  pt to use it for
18a50 20 74 68 69 6e 67 73 20 74 68 61 74 20 72 65 71   things that req
18a60 75 69 72 65 0d 0a 20 20 20 20 20 20 20 20 20 20  uire..          
18a70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
18a80 20 20 20 20 20 20 20 61 6e 20 61 73 73 65 6d 62         an assemb
18a90 6c 79 20 63 6f 6d 70 69 6c 65 64 20 66 6f 72 20  ly compiled for 
18aa0 74 68 65 20 43 4c 52 20 76 34 2e 30 2e 20 20 49  the CLR v4.0.  I
18ab0 74 20 69 73 0d 0a 20 20 20 20 20 20 20 20 20 20  t is..          
18ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
18ad0 20 20 20 20 20 20 20 75 6e 63 65 72 74 61 69 6e         uncertain
18ae0 20 69 66 20 74 68 69 73 20 69 73 20 61 63 74 75   if this is actu
18af0 61 6c 6c 79 20 61 20 70 72 6f 62 6c 65 6d 20 69  ally a problem i
18b00 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  n..             
18b10 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
18b20 20 20 20 20 70 72 61 63 74 69 63 65 20 61 73 20      practice as 
18b30 74 68 65 20 43 4c 52 20 76 34 2e 30 20 63 61 6e  the CLR v4.0 can
18b40 20 6c 6f 61 64 20 61 6e 64 20 75 73 65 20 61 6e   load and use an
18b50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
18b60 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
18b70 20 20 20 61 73 73 65 6d 62 6c 79 20 63 6f 6d 70     assembly comp
18b80 69 6c 65 64 20 77 69 74 68 20 74 68 65 20 43 4c  iled with the CL
18b90 52 20 76 32 2e 30 3b 20 68 6f 77 65 76 65 72 2c  R v2.0; however,
18ba0 0d 0a 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 2f 2f 20 20 20 20            //    
18bc0 20 20 20 73 69 6e 63 65 20 74 68 69 73 20 70 72     since this pr
18bd0 6f 6a 65 63 74 20 6f 66 66 65 72 73 20 62 6f 74  oject offers bot
18be0 68 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 73  h configurations
18bf0 2c 0d 0a 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 2f 2f 20 20 20             //   
18c10 20 20 20 20 77 65 20 63 75 72 72 65 6e 74 6c 79      we currently
18c20 20 64 69 73 61 6c 6c 6f 77 20 74 68 69 73 20 6d   disallow this m
18c30 69 73 6d 61 74 63 68 2e 0d 0a 20 20 20 20 20 20  ismatch...      
18c40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18c50 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
18c60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
18c70 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 4e 65  nfiguration.noNe
18c80 74 46 78 34 30 20 3d 20 74 72 75 65 3b 0d 0a 20  tFx40 = true;.. 
18c90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18ca0 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61         configura
18cb0 74 69 6f 6e 2e 6e 6f 56 73 32 30 31 30 20 3d 20  tion.noVs2010 = 
18cc0 74 72 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  true;....       
18cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18ce0 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41   TraceOps.DebugA
18cf0 6e 64 54 72 61 63 65 28 54 72 61 63 65 50 72 69  ndTrace(TracePri
18d00 6f 72 69 74 79 2e 4d 65 64 69 75 6d 2c 0d 0a 20  ority.Medium,.. 
18d10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18d20 20 20 20 20 20 20 20 20 20 20 20 64 65 62 75 67             debug
18d30 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43  Callback, traceC
18d40 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e  allback, String.
18d50 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
18d60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18d70 20 20 20 20 20 22 41 73 73 65 6d 62 6c 79 20 69       "Assembly i
18d80 73 20 63 6f 6d 70 69 6c 65 64 20 66 6f 72 20 74  s compiled for t
18d90 68 65 20 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72  he .NET Framewor
18da0 6b 20 7b 30 7d 2c 20 22 20 2b 0d 0a 20 20 20 20  k {0}, " +..    
18db0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18dc0 20 20 20 20 20 20 20 20 22 73 75 70 70 6f 72 74          "support
18dd0 20 66 6f 72 20 2e 4e 45 54 20 46 72 61 6d 65 77   for .NET Framew
18de0 6f 72 6b 20 7b 31 7d 20 69 73 20 6e 6f 77 20 64  ork {1} is now d
18df0 69 73 61 62 6c 65 64 2e 22 2c 0d 0a 20 20 20 20  isabled.",..    
18e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18e10 20 20 20 20 20 20 20 20 43 4c 52 76 32 49 6d 61          CLRv2Ima
18e20 67 65 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e  geRuntimeVersion
18e30 2c 20 43 4c 52 76 34 49 6d 61 67 65 52 75 6e 74  , CLRv4ImageRunt
18e40 69 6d 65 56 65 72 73 69 6f 6e 29 2c 0d 0a 20 20  imeVersion),..  
18e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18e60 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
18e70 61 74 65 67 6f 72 79 29 3b 0d 0a 20 20 20 20 20  ategory);..     
18e80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
18e90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
18ea0 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 53        else if (S
18eb0 74 72 69 6e 67 2e 45 71 75 61 6c 73 28 0d 0a 20  tring.Equals(.. 
18ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18ed0 20 20 20 20 20 20 20 20 20 20 20 63 6f 72 65 49             coreI
18ee0 6d 61 67 65 52 75 6e 74 69 6d 65 56 65 72 73 69  mageRuntimeVersi
18ef0 6f 6e 2c 20 43 4c 52 76 34 49 6d 61 67 65 52 75  on, CLRv4ImageRu
18f00 6e 74 69 6d 65 56 65 72 73 69 6f 6e 2c 0d 0a 20  ntimeVersion,.. 
18f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18f20 20 20 20 20 20 20 20 20 20 20 20 53 74 72 69 6e             Strin
18f30 67 43 6f 6d 70 61 72 69 73 6f 6e 2e 49 6e 76 61  gComparison.Inva
18f40 72 69 61 6e 74 43 75 6c 74 75 72 65 29 29 0d 0a  riantCulture))..
18f50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18f60 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
18f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
18f80 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
18f90 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f             // NO
18fa0 54 45 3a 20 46 6f 72 20 74 68 65 20 43 4c 52 20  TE: For the CLR 
18fb0 76 34 2e 30 20 72 75 6e 74 69 6d 65 2c 20 6d 61  v4.0 runtime, ma
18fc0 6b 65 20 73 75 72 65 20 77 65 20 64 69 73 61 62  ke sure we disab
18fd0 6c 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  le..            
18fe0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
18ff0 20 20 20 20 20 61 6e 79 20 61 74 74 65 6d 70 74       any attempt
19000 20 74 6f 20 75 73 65 20 69 74 20 66 6f 72 20 74   to use it for t
19010 68 69 6e 67 73 20 74 68 61 74 20 72 65 71 75 69  hings that requi
19020 72 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  re..            
19030 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
19040 20 20 20 20 20 61 6e 20 61 73 73 65 6d 62 6c 79       an assembly
19050 20 63 6f 6d 70 69 6c 65 64 20 66 6f 72 20 74 68   compiled for th
19060 65 20 43 4c 52 20 76 32 2e 30 2e 0d 0a 20 20 20  e CLR v2.0...   
19070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19080 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
19090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
190a0 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e   configuration.n
190b0 6f 4e 65 74 46 78 32 30 20 3d 20 74 72 75 65 3b  oNetFx20 = true;
190c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
190d0 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67            config
190e0 75 72 61 74 69 6f 6e 2e 6e 6f 56 73 32 30 30 38  uration.noVs2008
190f0 20 3d 20 74 72 75 65 3b 0d 0a 0d 0a 20 20 20 20   = true;....    
19100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19110 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62      TraceOps.Deb
19120 75 67 41 6e 64 54 72 61 63 65 28 54 72 61 63 65  ugAndTrace(Trace
19130 50 72 69 6f 72 69 74 79 2e 4d 65 64 69 75 6d 2c  Priority.Medium,
19140 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
19150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65                de
19160 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61  bugCallback, tra
19170 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69  ceCallback, Stri
19180 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ng.Format(..    
19190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
191a0 20 20 20 20 20 20 20 20 22 41 73 73 65 6d 62 6c          "Assembl
191b0 79 20 69 73 20 63 6f 6d 70 69 6c 65 64 20 66 6f  y is compiled fo
191c0 72 20 74 68 65 20 2e 4e 45 54 20 46 72 61 6d 65  r the .NET Frame
191d0 77 6f 72 6b 20 7b 30 7d 2c 20 22 20 2b 0d 0a 20  work {0}, " +.. 
191e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
191f0 20 20 20 20 20 20 20 20 20 20 20 22 73 75 70 70             "supp
19200 6f 72 74 20 66 6f 72 20 2e 4e 45 54 20 46 72 61  ort for .NET Fra
19210 6d 65 77 6f 72 6b 20 7b 31 7d 20 69 73 20 6e 6f  mework {1} is no
19220 77 20 64 69 73 61 62 6c 65 64 2e 22 2c 0d 0a 20  w disabled.",.. 
19230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19240 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69             ForDi
19250 73 70 6c 61 79 28 43 4c 52 76 34 49 6d 61 67 65  splay(CLRv4Image
19260 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 29 2c  RuntimeVersion),
19270 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
19280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f                Fo
19290 72 44 69 73 70 6c 61 79 28 43 4c 52 76 32 49 6d  rDisplay(CLRv2Im
192a0 61 67 65 52 75 6e 74 69 6d 65 56 65 72 73 69 6f  ageRuntimeVersio
192b0 6e 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  n)),..          
192c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
192d0 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29    traceCategory)
192e0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
192f0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
19300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c                el
19310 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  se..            
19320 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
19330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19340 20 20 20 65 72 72 6f 72 20 3d 20 53 74 72 69 6e     error = Strin
19350 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
19360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19370 20 20 20 20 20 20 20 22 75 6e 73 75 70 70 6f 72         "unsuppor
19380 74 65 64 20 63 6f 72 65 20 66 69 6c 65 20 69 6d  ted core file im
19390 61 67 65 20 72 75 6e 74 69 6d 65 20 76 65 72 73  age runtime vers
193a0 69 6f 6e 20 22 20 2b 0d 0a 20 20 20 20 20 20 20  ion " +..       
193b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
193c0 20 20 20 20 20 22 7b 30 7d 2c 20 6d 75 73 74 20       "{0}, must 
193d0 62 65 20 7b 31 7d 20 6f 72 20 7b 32 7d 22 2c 0d  be {1} or {2}",.
193e0 0a 20 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 46 6f 72               For
19400 44 69 73 70 6c 61 79 28 63 6f 72 65 49 6d 61 67  Display(coreImag
19410 65 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 29  eRuntimeVersion)
19420 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
19430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46                 F
19440 6f 72 44 69 73 70 6c 61 79 28 43 4c 52 76 32 49  orDisplay(CLRv2I
19450 6d 61 67 65 52 75 6e 74 69 6d 65 56 65 72 73 69  mageRuntimeVersi
19460 6f 6e 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  on),..          
19470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19480 20 20 46 6f 72 44 69 73 70 6c 61 79 28 43 4c 52    ForDisplay(CLR
19490 76 34 49 6d 61 67 65 52 75 6e 74 69 6d 65 56 65  v4ImageRuntimeVe
194a0 72 73 69 6f 6e 29 29 3b 0d 0a 0d 0a 20 20 20 20  rsion));....    
194b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
194c0 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
194d0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
194e0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
194f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19500 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20  return true;..  
19510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
19520 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
19530 20 63 61 74 63 68 20 28 45 78 63 65 70 74 69 6f   catch (Exceptio
19540 6e 20 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20  n e)..          
19550 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
19560 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61               Tra
19570 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72  ceOps.DebugAndTr
19580 61 63 65 28 54 72 61 63 65 50 72 69 6f 72 69 74  ace(TracePriorit
19590 79 2e 48 69 67 68 65 73 74 2c 0d 0a 20 20 20 20  y.Highest,..    
195a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
195b0 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63      debugCallbac
195c0 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b  k, traceCallback
195d0 2c 20 65 2c 20 74 72 61 63 65 43 61 74 65 67 6f  , e, traceCatego
195e0 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
195f0 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
19600 72 20 3d 20 22 46 61 69 6c 65 64 20 74 6f 20 63  r = "Failed to c
19610 68 65 63 6b 20 69 6d 61 67 65 20 72 75 6e 74 69  heck image runti
19620 6d 65 20 76 65 72 73 69 6f 6e 2e 22 3b 0d 0a 20  me version.";.. 
19630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
19640 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
19650 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
19660 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
19670 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 65  ..            #e
19680 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20  ndregion....    
19690 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
196a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
196b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
196c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
196d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
196e0 20 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69             #regi
196f0 6f 6e 20 50 75 62 6c 69 63 20 4d 65 74 68 6f 64  on Public Method
19700 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  s..            p
19710 75 62 6c 69 63 20 62 6f 6f 6c 20 48 61 73 46 6c  ublic bool HasFl
19720 61 67 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ags(..          
19730 20 20 20 20 20 20 49 6e 73 74 61 6c 6c 46 6c 61        InstallFla
19740 67 73 20 68 61 73 46 6c 61 67 73 2c 0d 0a 20 20  gs hasFlags,..  
19750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f                bo
19760 6f 6c 20 61 6c 6c 0d 0a 20 20 20 20 20 20 20 20  ol all..        
19770 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
19780 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
19790 20 20 20 20 20 20 20 20 20 20 69 66 20 28 61 6c            if (al
197a0 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
197b0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 28          return (
197c0 28 69 6e 73 74 61 6c 6c 46 6c 61 67 73 20 26 20  (installFlags & 
197d0 68 61 73 46 6c 61 67 73 29 20 3d 3d 20 68 61 73  hasFlags) == has
197e0 46 6c 61 67 73 29 3b 0d 0a 20 20 20 20 20 20 20  Flags);..       
197f0 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20           else.. 
19800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19810 20 20 20 72 65 74 75 72 6e 20 28 28 69 6e 73 74     return ((inst
19820 61 6c 6c 46 6c 61 67 73 20 26 20 68 61 73 46 6c  allFlags & hasFl
19830 61 67 73 29 20 21 3d 20 49 6e 73 74 61 6c 6c 46  ags) != InstallF
19840 6c 61 67 73 2e 4e 6f 6e 65 29 3b 0d 0a 20 20 20  lags.None);..   
19850 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
19860 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
19870 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19880 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19890 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
198a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
198b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
198c0 6c 69 63 20 76 6f 69 64 20 44 75 6d 70 28 0d 0a  lic void Dump(..
198d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
198e0 54 72 61 63 65 43 61 6c 6c 62 61 63 6b 20 74 72  TraceCallback tr
198f0 61 63 65 43 61 6c 6c 62 61 63 6b 0d 0a 20 20 20  aceCallback..   
19900 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a               )..
19910 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
19920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
19930 66 20 28 74 72 61 63 65 43 61 6c 6c 62 61 63 6b  f (traceCallback
19940 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   != null)..     
19950 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
19960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19970 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28    traceCallback(
19980 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61  String.Format(Na
19990 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74  meAndValueFormat
199a0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
199b0 20 20 20 20 20 20 20 20 20 20 20 22 41 73 73 65             "Asse
199c0 6d 62 6c 79 22 2c 20 46 6f 72 44 69 73 70 6c 61  mbly", ForDispla
199d0 79 28 61 73 73 65 6d 62 6c 79 29 29 2c 0d 0a 20  y(assembly)),.. 
199e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
199f0 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65         traceCate
19a00 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
19a10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
19a20 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69  aceCallback(Stri
19a30 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e  ng.Format(NameAn
19a40 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20  dValueFormat,.. 
19a50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19a60 20 20 20 20 20 20 20 22 4c 6f 67 46 69 6c 65 4e         "LogFileN
19a70 61 6d 65 22 2c 20 46 6f 72 44 69 73 70 6c 61 79  ame", ForDisplay
19a80 28 6c 6f 67 46 69 6c 65 4e 61 6d 65 29 29 2c 0d  (logFileName)),.
19a90 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
19aa0 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
19ab0 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
19ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19ad0 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74  traceCallback(St
19ae0 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65  ring.Format(Name
19af0 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d  AndValueFormat,.
19b00 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
19b10 20 20 20 20 20 20 20 20 20 22 44 69 72 65 63 74           "Direct
19b20 6f 72 79 22 2c 20 46 6f 72 44 69 73 70 6c 61 79  ory", ForDisplay
19b30 28 64 69 72 65 63 74 6f 72 79 29 29 2c 0d 0a 20  (directory)),.. 
19b40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19b50 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65         traceCate
19b60 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
19b70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
19b80 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69  aceCallback(Stri
19b90 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e  ng.Format(NameAn
19ba0 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20  dValueFormat,.. 
19bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19bc0 20 20 20 20 20 20 20 22 43 6f 72 65 46 69 6c 65         "CoreFile
19bd0 4e 61 6d 65 22 2c 20 46 6f 72 44 69 73 70 6c 61  Name", ForDispla
19be0 79 28 63 6f 72 65 46 69 6c 65 4e 61 6d 65 29 29  y(coreFileName))
19bf0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
19c00 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
19c10 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
19c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19c30 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28    traceCallback(
19c40 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61  String.Format(Na
19c50 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74  meAndValueFormat
19c60 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
19c70 20 20 20 20 20 20 20 20 20 20 20 22 4c 69 6e 71             "Linq
19c80 46 69 6c 65 4e 61 6d 65 22 2c 20 46 6f 72 44 69  FileName", ForDi
19c90 73 70 6c 61 79 28 6c 69 6e 71 46 69 6c 65 4e 61  splay(linqFileNa
19ca0 6d 65 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  me)),..         
19cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
19cc0 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
19cd0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
19ce0 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62        traceCallb
19cf0 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ack(String.Forma
19d00 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f  t(NameAndValueFo
19d10 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20  rmat,..         
19d20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
19d30 44 65 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65  DesignerFileName
19d40 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 64 65  ", ForDisplay(de
19d50 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 29 29  signerFileName))
19d60 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
19d70 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
19d80 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
19d90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19da0 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28    traceCallback(
19db0 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61  String.Format(Na
19dc0 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74  meAndValueFormat
19dd0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
19de0 20 20 20 20 20 20 20 20 20 20 20 22 44 65 62 75             "Debu
19df0 67 46 6f 72 6d 61 74 22 2c 20 46 6f 72 44 69 73  gFormat", ForDis
19e00 70 6c 61 79 28 64 65 62 75 67 46 6f 72 6d 61 74  play(debugFormat
19e10 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  )),..           
19e20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
19e30 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
19e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19e50 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63      traceCallbac
19e60 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  k(String.Format(
19e70 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d  NameAndValueForm
19e80 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at,..           
19e90 20 20 20 20 20 20 20 20 20 20 20 20 20 22 54 72               "Tr
19ea0 61 63 65 46 6f 72 6d 61 74 22 2c 20 46 6f 72 44  aceFormat", ForD
19eb0 69 73 70 6c 61 79 28 74 72 61 63 65 46 6f 72 6d  isplay(traceForm
19ec0 61 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  at)),..         
19ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
19ee0 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
19ef0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
19f00 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62        traceCallb
19f10 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ack(String.Forma
19f20 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f  t(NameAndValueFo
19f30 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20  rmat,..         
19f40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
19f50 49 6e 73 74 61 6c 6c 46 6c 61 67 73 22 2c 20 46  InstallFlags", F
19f60 6f 72 44 69 73 70 6c 61 79 28 69 6e 73 74 61 6c  orDisplay(instal
19f70 6c 46 6c 61 67 73 29 29 2c 0d 0a 20 20 20 20 20  lFlags)),..     
19f80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19f90 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
19fa0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
19fb0 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
19fc0 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46  allback(String.F
19fd0 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c  ormat(NameAndVal
19fe0 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20  ueFormat,..     
19ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a000 20 20 20 22 44 65 62 75 67 50 72 69 6f 72 69 74     "DebugPriorit
1a010 79 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 64  y", ForDisplay(d
1a020 65 62 75 67 50 72 69 6f 72 69 74 79 29 29 2c 0d  ebugPriority)),.
1a030 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1a040 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
1a050 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
1a060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a070 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74  traceCallback(St
1a080 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65  ring.Format(Name
1a090 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d  AndValueFormat,.
1a0a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1a0b0 20 20 20 20 20 20 20 20 20 22 54 72 61 63 65 50           "TraceP
1a0c0 72 69 6f 72 69 74 79 22 2c 20 46 6f 72 44 69 73  riority", ForDis
1a0d0 70 6c 61 79 28 74 72 61 63 65 50 72 69 6f 72 69  play(tracePriori
1a0e0 74 79 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  ty)),..         
1a0f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
1a100 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
1a110 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1a120 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62        traceCallb
1a130 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ack(String.Forma
1a140 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f  t(NameAndValueFo
1a150 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20  rmat,..         
1a160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
1a170 49 6e 73 74 61 6c 6c 22 2c 20 46 6f 72 44 69 73  Install", ForDis
1a180 70 6c 61 79 28 69 6e 73 74 61 6c 6c 29 29 2c 0d  play(install)),.
1a190 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1a1a0 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
1a1b0 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
1a1c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a1d0 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74  traceCallback(St
1a1e0 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65  ring.Format(Name
1a1f0 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d  AndValueFormat,.
1a200 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1a210 20 20 20 20 20 20 20 20 20 22 57 6f 77 36 34 22           "Wow64"
1a220 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 77 6f 77  , ForDisplay(wow
1a230 36 34 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  64)),..         
1a240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
1a250 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
1a260 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1a270 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62        traceCallb
1a280 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ack(String.Forma
1a290 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f  t(NameAndValueFo
1a2a0 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20  rmat,..         
1a2b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
1a2c0 4e 6f 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e  NoRuntimeVersion
1a2d0 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 6e 6f  ", ForDisplay(no
1a2e0 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 29 29  RuntimeVersion))
1a2f0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
1a300 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
1a310 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
1a320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a330 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28    traceCallback(
1a340 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61  String.Format(Na
1a350 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74  meAndValueFormat
1a360 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
1a370 20 20 20 20 20 20 20 20 20 20 20 22 4e 6f 44 65             "NoDe
1a380 73 6b 74 6f 70 22 2c 20 46 6f 72 44 69 73 70 6c  sktop", ForDispl
1a390 61 79 28 6e 6f 44 65 73 6b 74 6f 70 29 29 2c 0d  ay(noDesktop)),.
1a3a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1a3b0 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
1a3c0 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
1a3d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a3e0 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74  traceCallback(St
1a3f0 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65  ring.Format(Name
1a400 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d  AndValueFormat,.
1a410 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1a420 20 20 20 20 20 20 20 20 20 22 4e 6f 43 6f 6d 70           "NoComp
1a430 61 63 74 22 2c 20 46 6f 72 44 69 73 70 6c 61 79  act", ForDisplay
1a440 28 6e 6f 43 6f 6d 70 61 63 74 29 29 2c 0d 0a 20  (noCompact)),.. 
1a450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a460 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65         traceCate
1a470 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
1a480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
1a490 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69  aceCallback(Stri
1a4a0 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e  ng.Format(NameAn
1a4b0 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20  dValueFormat,.. 
1a4c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a4d0 20 20 20 20 20 20 20 22 4e 6f 4e 65 74 46 78 32         "NoNetFx2
1a4e0 30 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 6e  0", ForDisplay(n
1a4f0 6f 4e 65 74 46 78 32 30 29 29 2c 0d 0a 20 20 20  oNetFx20)),..   
1a500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a510 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f       traceCatego
1a520 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
1a530 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
1a540 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67  eCallback(String
1a550 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56  .Format(NameAndV
1a560 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20  alueFormat,..   
1a570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a580 20 20 20 20 20 22 4e 6f 4e 65 74 46 78 34 30 22       "NoNetFx40"
1a590 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 6e 6f 4e  , ForDisplay(noN
1a5a0 65 74 46 78 34 30 29 29 2c 0d 0a 20 20 20 20 20  etFx40)),..     
1a5b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a5c0 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
1a5d0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
1a5e0 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
1a5f0 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46  allback(String.F
1a600 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c  ormat(NameAndVal
1a610 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20  ueFormat,..     
1a620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a630 20 20 20 22 4e 6f 56 73 32 30 30 38 22 2c 20 46     "NoVs2008", F
1a640 6f 72 44 69 73 70 6c 61 79 28 6e 6f 56 73 32 30  orDisplay(noVs20
1a650 30 38 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  08)),..         
1a660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
1a670 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
1a680 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1a690 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62        traceCallb
1a6a0 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ack(String.Forma
1a6b0 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f  t(NameAndValueFo
1a6c0 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20  rmat,..         
1a6d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
1a6e0 4e 6f 56 73 32 30 31 30 22 2c 20 46 6f 72 44 69  NoVs2010", ForDi
1a6f0 73 70 6c 61 79 28 6e 6f 56 73 32 30 31 30 29 29  splay(noVs2010))
1a700 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
1a710 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
1a720 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
1a730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a740 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28    traceCallback(
1a750 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61  String.Format(Na
1a760 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74  meAndValueFormat
1a770 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
1a780 20 20 20 20 20 20 20 20 20 20 20 22 4e 6f 54 72             "NoTr
1a790 61 63 65 22 2c 20 46 6f 72 44 69 73 70 6c 61 79  ace", ForDisplay
1a7a0 28 6e 6f 54 72 61 63 65 29 29 2c 0d 0a 20 20 20  (noTrace)),..   
1a7b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a7c0 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f       traceCatego
1a7d0 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
1a7e0 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
1a7f0 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67  eCallback(String
1a800 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56  .Format(NameAndV
1a810 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20  alueFormat,..   
1a820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a830 20 20 20 20 20 22 4e 6f 43 6f 6e 73 6f 6c 65 22       "NoConsole"
1a840 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 6e 6f 43  , ForDisplay(noC
1a850 6f 6e 73 6f 6c 65 29 29 2c 0d 0a 20 20 20 20 20  onsole)),..     
1a860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a870 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
1a880 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
1a890 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
1a8a0 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46  allback(String.F
1a8b0 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c  ormat(NameAndVal
1a8c0 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20  ueFormat,..     
1a8d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a8e0 20 20 20 22 4e 6f 4c 6f 67 22 2c 20 46 6f 72 44     "NoLog", ForD
1a8f0 69 73 70 6c 61 79 28 6e 6f 4c 6f 67 29 29 2c 0d  isplay(noLog)),.
1a900 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1a910 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
1a920 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
1a930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a940 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74  traceCallback(St
1a950 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65  ring.Format(Name
1a960 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d  AndValueFormat,.
1a970 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1a980 20 20 20 20 20 20 20 20 20 22 54 68 72 6f 77 4f           "ThrowO
1a990 6e 4d 69 73 73 69 6e 67 22 2c 20 46 6f 72 44 69  nMissing", ForDi
1a9a0 73 70 6c 61 79 28 74 68 72 6f 77 4f 6e 4d 69 73  splay(throwOnMis
1a9b0 73 69 6e 67 29 29 2c 0d 0a 20 20 20 20 20 20 20  sing)),..       
1a9c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a9d0 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
1a9e0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1a9f0 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c          traceCal
1aa00 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72  lback(String.For
1aa10 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65  mat(NameAndValue
1aa20 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20  Format,..       
1aa30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1aa40 20 22 57 68 61 74 49 66 22 2c 20 46 6f 72 44 69   "WhatIf", ForDi
1aa50 73 70 6c 61 79 28 77 68 61 74 49 66 29 29 2c 0d  splay(whatIf)),.
1aa60 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1aa70 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
1aa80 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
1aa90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1aaa0 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74  traceCallback(St
1aab0 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65  ring.Format(Name
1aac0 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d  AndValueFormat,.
1aad0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1aae0 20 20 20 20 20 20 20 20 20 22 44 65 62 75 67 22           "Debug"
1aaf0 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 64 65 62  , ForDisplay(deb
1ab00 75 67 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  ug)),..         
1ab10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
1ab20 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
1ab30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1ab40 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62        traceCallb
1ab50 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ack(String.Forma
1ab60 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f  t(NameAndValueFo
1ab70 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20  rmat,..         
1ab80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
1ab90 56 65 72 62 6f 73 65 22 2c 20 46 6f 72 44 69 73  Verbose", ForDis
1aba0 70 6c 61 79 28 76 65 72 62 6f 73 65 29 29 2c 0d  play(verbose)),.
1abb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1abc0 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
1abd0 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
1abe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1abf0 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74  traceCallback(St
1ac00 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65  ring.Format(Name
1ac10 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d  AndValueFormat,.
1ac20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1ac30 20 20 20 20 20 20 20 20 20 22 43 6f 6e 66 69 72           "Confir
1ac40 6d 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 63  m", ForDisplay(c
1ac50 6f 6e 66 69 72 6d 29 29 2c 0d 0a 20 20 20 20 20  onfirm)),..     
1ac60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ac70 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
1ac80 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
1ac90 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
1aca0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1acb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1acc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1acd0 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
1ace0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
1acf0 28 61 73 73 65 6d 62 6c 79 20 21 3d 20 6e 75 6c  (assembly != nul
1ad00 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
1ad10 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
1ad20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ad30 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b     traceCallback
1ad40 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e  (String.Format(N
1ad50 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61  ameAndValueForma
1ad60 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t,..            
1ad70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ad80 22 41 73 73 65 6d 62 6c 79 54 69 74 6c 65 22 2c  "AssemblyTitle",
1ad90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1ada0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f                Fo
1adb0 72 44 69 73 70 6c 61 79 28 47 65 74 41 73 73 65  rDisplay(GetAsse
1adc0 6d 62 6c 79 54 69 74 6c 65 28 61 73 73 65 6d 62  mblyTitle(assemb
1add0 6c 79 29 29 29 2c 0d 0a 20 20 20 20 20 20 20 20  ly))),..        
1ade0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1adf0 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72      traceCategor
1ae00 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
1ae10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
1ae20 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72  raceCallback(Str
1ae30 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41  ing.Format(NameA
1ae40 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a  ndValueFormat,..
1ae50 20 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 20 20 20 22 41 73 73              "Ass
1ae70 65 6d 62 6c 79 43 6f 6e 66 69 67 75 72 61 74 69  emblyConfigurati
1ae80 6f 6e 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  on",..          
1ae90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1aea0 20 20 46 6f 72 44 69 73 70 6c 61 79 28 47 65 74    ForDisplay(Get
1aeb0 41 73 73 65 6d 62 6c 79 43 6f 6e 66 69 67 75 72  AssemblyConfigur
1aec0 61 74 69 6f 6e 28 61 73 73 65 6d 62 6c 79 29 29  ation(assembly))
1aed0 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
1aee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1aef0 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
1af00 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1af10 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
1af20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
1af30 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
1af40 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
1af50 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1af60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1af70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1af80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1af90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1afa0 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
1afb0 20 20 20 23 72 65 67 69 6f 6e 20 50 75 62 6c 69     #region Publi
1afc0 63 20 50 72 6f 70 65 72 74 69 65 73 0d 0a 20 20  c Properties..  
1afd0 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
1afe0 65 20 41 73 73 65 6d 62 6c 79 20 61 73 73 65 6d  e Assembly assem
1aff0 62 6c 79 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  bly;..          
1b000 20 20 70 75 62 6c 69 63 20 41 73 73 65 6d 62 6c    public Assembl
1b010 79 20 41 73 73 65 6d 62 6c 79 0d 0a 20 20 20 20  y Assembly..    
1b020 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
1b030 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b             get {
1b040 20 72 65 74 75 72 6e 20 61 73 73 65 6d 62 6c 79   return assembly
1b050 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
1b060 20 20 20 20 20 73 65 74 20 7b 20 61 73 73 65 6d       set { assem
1b070 62 6c 79 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a  bly = value; }..
1b080 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
1b090 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
1b0a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b0b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b0c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b0d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b0e0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1b0f0 70 72 69 76 61 74 65 20 73 74 72 69 6e 67 20 6c  private string l
1b100 6f 67 46 69 6c 65 4e 61 6d 65 3b 0d 0a 20 20 20  ogFileName;..   
1b110 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
1b120 73 74 72 69 6e 67 20 4c 6f 67 46 69 6c 65 4e 61  string LogFileNa
1b130 6d 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  me..            
1b140 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
1b150 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20     get { return 
1b160 6c 6f 67 46 69 6c 65 4e 61 6d 65 3b 20 7d 0d 0a  logFileName; }..
1b170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b180 73 65 74 20 7b 20 6c 6f 67 46 69 6c 65 4e 61 6d  set { logFileNam
1b190 65 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20  e = value; }..  
1b1a0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
1b1b0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
1b1c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b1d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b1e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b1f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
1b200 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
1b210 69 76 61 74 65 20 73 74 72 69 6e 67 20 64 69 72  ivate string dir
1b220 65 63 74 6f 72 79 3b 0d 0a 20 20 20 20 20 20 20  ectory;..       
1b230 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 72 69       public stri
1b240 6e 67 20 44 69 72 65 63 74 6f 72 79 0d 0a 20 20  ng Directory..  
1b250 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
1b260 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74               get
1b270 20 7b 20 72 65 74 75 72 6e 20 64 69 72 65 63 74   { return direct
1b280 6f 72 79 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  ory; }..        
1b290 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 64 69          set { di
1b2a0 72 65 63 74 6f 72 79 20 3d 20 76 61 6c 75 65 3b  rectory = value;
1b2b0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
1b2c0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
1b2d0 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
1b2e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b2f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b300 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b310 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
1b320 20 20 20 20 70 72 69 76 61 74 65 20 73 74 72 69      private stri
1b330 6e 67 20 63 6f 72 65 46 69 6c 65 4e 61 6d 65 3b  ng coreFileName;
1b340 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
1b350 62 6c 69 63 20 73 74 72 69 6e 67 20 43 6f 72 65  blic string Core
1b360 46 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 20 20 20  FileName..      
1b370 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
1b380 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72           get { r
1b390 65 74 75 72 6e 20 63 6f 72 65 46 69 6c 65 4e 61  eturn coreFileNa
1b3a0 6d 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  me; }..         
1b3b0 20 20 20 20 20 20 20 73 65 74 20 7b 20 63 6f 72         set { cor
1b3c0 65 46 69 6c 65 4e 61 6d 65 20 3d 20 76 61 6c 75  eFileName = valu
1b3d0 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  e; }..          
1b3e0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
1b3f0 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
1b400 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b410 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b420 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b430 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
1b440 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74        private st
1b450 72 69 6e 67 20 6c 69 6e 71 46 69 6c 65 4e 61 6d  ring linqFileNam
1b460 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
1b470 70 75 62 6c 69 63 20 73 74 72 69 6e 67 20 4c 69  public string Li
1b480 6e 71 46 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 20  nqFileName..    
1b490 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
1b4a0 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b             get {
1b4b0 20 72 65 74 75 72 6e 20 6c 69 6e 71 46 69 6c 65   return linqFile
1b4c0 4e 61 6d 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20  Name; }..       
1b4d0 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 6c           set { l
1b4e0 69 6e 71 46 69 6c 65 4e 61 6d 65 20 3d 20 76 61  inqFileName = va
1b4f0 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  lue; }..        
1b500 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
1b510 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
1b520 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b530 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b540 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b550 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
1b560 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
1b570 73 74 72 69 6e 67 20 64 65 73 69 67 6e 65 72 46  string designerF
1b580 69 6c 65 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20  ileName;..      
1b590 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 72        public str
1b5a0 69 6e 67 20 44 65 73 69 67 6e 65 72 46 69 6c 65  ing DesignerFile
1b5b0 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 20 20  Name..          
1b5c0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
1b5d0 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72       get { retur
1b5e0 6e 20 64 65 73 69 67 6e 65 72 46 69 6c 65 4e 61  n designerFileNa
1b5f0 6d 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  me; }..         
1b600 20 20 20 20 20 20 20 73 65 74 20 7b 20 64 65 73         set { des
1b610 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 20 3d 20  ignerFileName = 
1b620 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20  value; }..      
1b630 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
1b640 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
1b650 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b660 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b670 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b680 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
1b690 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
1b6a0 65 20 73 74 72 69 6e 67 20 64 65 62 75 67 46 6f  e string debugFo
1b6b0 72 6d 61 74 3b 0d 0a 20 20 20 20 20 20 20 20 20  rmat;..         
1b6c0 20 20 20 70 75 62 6c 69 63 20 73 74 72 69 6e 67     public string
1b6d0 20 44 65 62 75 67 46 6f 72 6d 61 74 0d 0a 20 20   DebugFormat..  
1b6e0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
1b6f0 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74               get
1b700 20 7b 20 72 65 74 75 72 6e 20 64 65 62 75 67 46   { return debugF
1b710 6f 72 6d 61 74 3b 20 7d 0d 0a 20 20 20 20 20 20  ormat; }..      
1b720 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20            set { 
1b730 64 65 62 75 67 46 6f 72 6d 61 74 20 3d 20 76 61  debugFormat = va
1b740 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  lue; }..        
1b750 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
1b760 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
1b770 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b780 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b790 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b7a0 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
1b7b0 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
1b7c0 73 74 72 69 6e 67 20 74 72 61 63 65 46 6f 72 6d  string traceForm
1b7d0 61 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at;..           
1b7e0 20 70 75 62 6c 69 63 20 73 74 72 69 6e 67 20 54   public string T
1b7f0 72 61 63 65 46 6f 72 6d 61 74 0d 0a 20 20 20 20  raceFormat..    
1b800 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
1b810 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b             get {
1b820 20 72 65 74 75 72 6e 20 74 72 61 63 65 46 6f 72   return traceFor
1b830 6d 61 74 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  mat; }..        
1b840 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 74 72          set { tr
1b850 61 63 65 46 6f 72 6d 61 74 20 3d 20 76 61 6c 75  aceFormat = valu
1b860 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  e; }..          
1b870 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
1b880 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
1b890 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b8a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b8b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b8c0 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
1b8d0 20 20 20 20 20 20 70 72 69 76 61 74 65 20 49 6e        private In
1b8e0 73 74 61 6c 6c 46 6c 61 67 73 20 69 6e 73 74 61  stallFlags insta
1b8f0 6c 6c 46 6c 61 67 73 3b 0d 0a 20 20 20 20 20 20  llFlags;..      
1b900 20 20 20 20 20 20 70 75 62 6c 69 63 20 49 6e 73        public Ins
1b910 74 61 6c 6c 46 6c 61 67 73 20 49 6e 73 74 61 6c  tallFlags Instal
1b920 6c 46 6c 61 67 73 0d 0a 20 20 20 20 20 20 20 20  lFlags..        
1b930 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
1b940 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74         get { ret
1b950 75 72 6e 20 69 6e 73 74 61 6c 6c 46 6c 61 67 73  urn installFlags
1b960 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
1b970 20 20 20 20 20 73 65 74 20 7b 20 69 6e 73 74 61       set { insta
1b980 6c 6c 46 6c 61 67 73 20 3d 20 76 61 6c 75 65 3b  llFlags = value;
1b990 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
1b9a0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
1b9b0 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
1b9c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b9d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b9e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b9f0 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
1ba00 20 20 20 20 70 72 69 76 61 74 65 20 54 72 61 63      private Trac
1ba10 65 50 72 69 6f 72 69 74 79 20 64 65 62 75 67 50  ePriority debugP
1ba20 72 69 6f 72 69 74 79 3b 0d 0a 20 20 20 20 20 20  riority;..      
1ba30 20 20 20 20 20 20 70 75 62 6c 69 63 20 54 72 61        public Tra
1ba40 63 65 50 72 69 6f 72 69 74 79 20 44 65 62 75 67  cePriority Debug
1ba50 50 72 69 6f 72 69 74 79 0d 0a 20 20 20 20 20 20  Priority..      
1ba60 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
1ba70 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72           get { r
1ba80 65 74 75 72 6e 20 64 65 62 75 67 50 72 69 6f 72  eturn debugPrior
1ba90 69 74 79 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  ity; }..        
1baa0 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 64 65          set { de
1bab0 62 75 67 50 72 69 6f 72 69 74 79 20 3d 20 76 61  bugPriority = va
1bac0 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  lue; }..        
1bad0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
1bae0 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
1baf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1bb00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1bb10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1bb20 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
1bb30 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
1bb40 54 72 61 63 65 50 72 69 6f 72 69 74 79 20 74 72  TracePriority tr
1bb50 61 63 65 50 72 69 6f 72 69 74 79 3b 0d 0a 20 20  acePriority;..  
1bb60 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
1bb70 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 20 54   TracePriority T
1bb80 72 61 63 65 50 72 69 6f 72 69 74 79 0d 0a 20 20  racePriority..  
1bb90 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
1bba0 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74               get
1bbb0 20 7b 20 72 65 74 75 72 6e 20 74 72 61 63 65 50   { return traceP
1bbc0 72 69 6f 72 69 74 79 3b 20 7d 0d 0a 20 20 20 20  riority; }..    
1bbd0 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20              set 
1bbe0 7b 20 74 72 61 63 65 50 72 69 6f 72 69 74 79 20  { tracePriority 
1bbf0 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20  = value; }..    
1bc00 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
1bc10 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
1bc20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1bc30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1bc40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1bc50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
1bc60 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
1bc70 61 74 65 20 62 6f 6f 6c 20 69 6e 73 74 61 6c 6c  ate bool install
1bc80 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ;..            p
1bc90 75 62 6c 69 63 20 62 6f 6f 6c 20 49 6e 73 74 61  ublic bool Insta
1bca0 6c 6c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ll..            
1bcb0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
1bcc0 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20     get { return 
1bcd0 69 6e 73 74 61 6c 6c 3b 20 7d 0d 0a 20 20 20 20  install; }..    
1bce0 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20              set 
1bcf0 7b 20 69 6e 73 74 61 6c 6c 20 3d 20 76 61 6c 75  { install = valu
1bd00 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  e; }..          
1bd10 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
1bd20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
1bd30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1bd40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1bd50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1bd60 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
1bd70 20 20 20 20 20 20 70 72 69 76 61 74 65 20 62 6f        private bo
1bd80 6f 6c 20 77 6f 77 36 34 3b 0d 0a 20 20 20 20 20  ol wow64;..     
1bd90 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f         public bo
1bda0 6f 6c 20 57 6f 77 36 34 0d 0a 20 20 20 20 20 20  ol Wow64..      
1bdb0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
1bdc0 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72           get { r
1bdd0 65 74 75 72 6e 20 77 6f 77 36 34 3b 20 7d 0d 0a  eturn wow64; }..
1bde0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bdf0 73 65 74 20 7b 20 77 6f 77 36 34 20 3d 20 76 61  set { wow64 = va
1be00 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  lue; }..        
1be10 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
1be20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
1be30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1be40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1be50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1be60 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
1be70 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
1be80 62 6f 6f 6c 20 6e 6f 52 75 6e 74 69 6d 65 56 65  bool noRuntimeVe
1be90 72 73 69 6f 6e 3b 0d 0a 20 20 20 20 20 20 20 20  rsion;..        
1bea0 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20      public bool 
1beb0 4e 6f 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e  NoRuntimeVersion
1bec0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
1bed0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1bee0 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 6e 6f   get { return no
1bef0 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 3b 20  RuntimeVersion; 
1bf00 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
1bf10 20 20 20 73 65 74 20 7b 20 6e 6f 52 75 6e 74 69     set { noRunti
1bf20 6d 65 56 65 72 73 69 6f 6e 20 3d 20 76 61 6c 75  meVersion = valu
1bf30 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  e; }..          
1bf40 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
1bf50 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
1bf60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1bf70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1bf80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1bf90 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
1bfa0 20 20 20 20 20 20 70 72 69 76 61 74 65 20 62 6f        private bo
1bfb0 6f 6c 20 6e 6f 44 65 73 6b 74 6f 70 3b 0d 0a 20  ol noDesktop;.. 
1bfc0 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
1bfd0 63 20 62 6f 6f 6c 20 4e 6f 44 65 73 6b 74 6f 70  c bool NoDesktop
1bfe0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
1bff0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1c000 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 6e 6f   get { return no
1c010 44 65 73 6b 74 6f 70 3b 20 7d 0d 0a 20 20 20 20  Desktop; }..    
1c020 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20              set 
1c030 7b 20 6e 6f 44 65 73 6b 74 6f 70 20 3d 20 76 61  { noDesktop = va
1c040 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  lue; }..        
1c050 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
1c060 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
1c070 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c080 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c090 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c0a0 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
1c0b0 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
1c0c0 62 6f 6f 6c 20 6e 6f 43 6f 6d 70 61 63 74 3b 0d  bool noCompact;.
1c0d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
1c0e0 6c 69 63 20 62 6f 6f 6c 20 4e 6f 43 6f 6d 70 61  lic bool NoCompa
1c0f0 63 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ct..            
1c100 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
1c110 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20     get { return 
1c120 6e 6f 43 6f 6d 70 61 63 74 3b 20 7d 0d 0a 20 20  noCompact; }..  
1c130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65                se
1c140 74 20 7b 20 6e 6f 43 6f 6d 70 61 63 74 20 3d 20  t { noCompact = 
1c150 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20  value; }..      
1c160 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
1c170 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
1c180 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c190 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c1a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c1b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
1c1c0 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
1c1d0 65 20 62 6f 6f 6c 20 6e 6f 4e 65 74 46 78 32 30  e bool noNetFx20
1c1e0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ;..            p
1c1f0 75 62 6c 69 63 20 62 6f 6f 6c 20 4e 6f 4e 65 74  ublic bool NoNet
1c200 46 78 32 30 0d 0a 20 20 20 20 20 20 20 20 20 20  Fx20..          
1c210 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
1c220 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72       get { retur
1c230 6e 20 6e 6f 4e 65 74 46 78 32 30 3b 20 7d 0d 0a  n noNetFx20; }..
1c240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c250 73 65 74 20 7b 20 6e 6f 4e 65 74 46 78 32 30 20  set { noNetFx20 
1c260 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20  = value; }..    
1c270 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
1c280 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
1c290 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c2a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c2b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c2c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
1c2d0 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
1c2e0 61 74 65 20 62 6f 6f 6c 20 6e 6f 4e 65 74 46 78  ate bool noNetFx
1c2f0 34 30 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  40;..           
1c300 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 4e 6f 4e   public bool NoN
1c310 65 74 46 78 34 30 0d 0a 20 20 20 20 20 20 20 20  etFx40..        
1c320 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
1c330 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74         get { ret
1c340 75 72 6e 20 6e 6f 4e 65 74 46 78 34 30 3b 20 7d  urn noNetFx40; }
1c350 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1c360 20 20 73 65 74 20 7b 20 6e 6f 4e 65 74 46 78 34    set { noNetFx4
1c370 30 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20  0 = value; }..  
1c380 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
1c390 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
1c3a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c3b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c3c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c3d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
1c3e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
1c3f0 69 76 61 74 65 20 62 6f 6f 6c 20 6e 6f 56 73 32  ivate bool noVs2
1c400 30 30 38 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  008;..          
1c410 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 4e 6f    public bool No
1c420 56 73 32 30 30 38 0d 0a 20 20 20 20 20 20 20 20  Vs2008..        
1c430 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
1c440 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74         get { ret
1c450 75 72 6e 20 6e 6f 56 73 32 30 30 38 3b 20 7d 0d  urn noVs2008; }.
1c460 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1c470 20 73 65 74 20 7b 20 6e 6f 56 73 32 30 30 38 20   set { noVs2008 
1c480 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20  = value; }..    
1c490 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
1c4a0 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
1c4b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c4c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c4d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c4e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
1c4f0 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
1c500 61 74 65 20 62 6f 6f 6c 20 6e 6f 56 73 32 30 31  ate bool noVs201
1c510 30 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  0;..            
1c520 70 75 62 6c 69 63 20 62 6f 6f 6c 20 4e 6f 56 73  public bool NoVs
1c530 32 30 31 30 0d 0a 20 20 20 20 20 20 20 20 20 20  2010..          
1c540 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
1c550 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72       get { retur
1c560 6e 20 6e 6f 56 73 32 30 31 30 3b 20 7d 0d 0a 20  n noVs2010; }.. 
1c570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
1c580 65 74 20 7b 20 6e 6f 56 73 32 30 31 30 20 3d 20  et { noVs2010 = 
1c590 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20  value; }..      
1c5a0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
1c5b0 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
1c5c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c5d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c5e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c5f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
1c600 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
1c610 65 20 62 6f 6f 6c 20 6e 6f 54 72 61 63 65 3b 0d  e bool noTrace;.
1c620 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
1c630 6c 69 63 20 62 6f 6f 6c 20 4e 6f 54 72 61 63 65  lic bool NoTrace
1c640 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
1c650 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1c660 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 6e 6f   get { return no
1c670 54 72 61 63 65 3b 20 7d 0d 0a 20 20 20 20 20 20  Trace; }..      
1c680 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20            set { 
1c690 6e 6f 54 72 61 63 65 20 3d 20 76 61 6c 75 65 3b  noTrace = value;
1c6a0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
1c6b0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
1c6c0 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
1c6d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c6e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c6f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c700 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
1c710 20 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c      private bool
1c720 20 6e 6f 43 6f 6e 73 6f 6c 65 3b 0d 0a 20 20 20   noConsole;..   
1c730 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
1c740 62 6f 6f 6c 20 4e 6f 43 6f 6e 73 6f 6c 65 0d 0a  bool NoConsole..
1c750 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
1c760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67                 g
1c770 65 74 20 7b 20 72 65 74 75 72 6e 20 6e 6f 43 6f  et { return noCo
1c780 6e 73 6f 6c 65 3b 20 7d 0d 0a 20 20 20 20 20 20  nsole; }..      
1c790 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20            set { 
1c7a0 6e 6f 43 6f 6e 73 6f 6c 65 20 3d 20 76 61 6c 75  noConsole = valu
1c7b0 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  e; }..          
1c7c0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
1c7d0 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
1c7e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c7f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c800 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c810 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
1c820 20 20 20 20 20 20 70 72 69 76 61 74 65 20 62 6f        private bo
1c830 6f 6c 20 6e 6f 4c 6f 67 3b 0d 0a 20 20 20 20 20  ol noLog;..     
1c840 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f         public bo
1c850 6f 6c 20 4e 6f 4c 6f 67 0d 0a 20 20 20 20 20 20  ol NoLog..      
1c860 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
1c870 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72           get { r
1c880 65 74 75 72 6e 20 6e 6f 4c 6f 67 3b 20 7d 0d 0a  eturn noLog; }..
1c890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c8a0 73 65 74 20 7b 20 6e 6f 4c 6f 67 20 3d 20 76 61  set { noLog = va
1c8b0 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  lue; }..        
1c8c0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
1c8d0 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
1c8e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c8f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c900 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c910 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
1c920 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
1c930 62 6f 6f 6c 20 74 68 72 6f 77 4f 6e 4d 69 73 73  bool throwOnMiss
1c940 69 6e 67 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ing;..          
1c950 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 54 68    public bool Th
1c960 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 0d 0a 20 20  rowOnMissing..  
1c970 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
1c980 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74               get
1c990 20 7b 20 72 65 74 75 72 6e 20 74 68 72 6f 77 4f   { return throwO
1c9a0 6e 4d 69 73 73 69 6e 67 3b 20 7d 0d 0a 20 20 20  nMissing; }..   
1c9b0 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74               set
1c9c0 20 7b 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e   { throwOnMissin
1c9d0 67 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20  g = value; }..  
1c9e0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
1c9f0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
1ca00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ca10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ca20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ca30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
1ca40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
1ca50 69 76 61 74 65 20 62 6f 6f 6c 20 77 68 61 74 49  ivate bool whatI
1ca60 66 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  f;..            
1ca70 70 75 62 6c 69 63 20 62 6f 6f 6c 20 57 68 61 74  public bool What
1ca80 49 66 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  If..            
1ca90 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
1caa0 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20     get { return 
1cab0 77 68 61 74 49 66 3b 20 7d 0d 0a 20 20 20 20 20  whatIf; }..     
1cac0 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b             set {
1cad0 20 77 68 61 74 49 66 20 3d 20 76 61 6c 75 65 3b   whatIf = value;
1cae0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
1caf0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
1cb00 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
1cb10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1cb20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1cb30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1cb40 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
1cb50 20 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c      private bool
1cb60 20 64 65 62 75 67 3b 0d 0a 20 20 20 20 20 20 20   debug;..       
1cb70 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c       public bool
1cb80 20 44 65 62 75 67 0d 0a 20 20 20 20 20 20 20 20   Debug..        
1cb90 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
1cba0 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74         get { ret
1cbb0 75 72 6e 20 64 65 62 75 67 3b 20 7d 0d 0a 20 20  urn debug; }..  
1cbc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65                se
1cbd0 74 20 7b 20 64 65 62 75 67 20 3d 20 76 61 6c 75  t { debug = valu
1cbe0 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  e; }..          
1cbf0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
1cc00 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
1cc10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1cc20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1cc30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1cc40 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
1cc50 20 20 20 20 20 20 70 72 69 76 61 74 65 20 62 6f        private bo
1cc60 6f 6c 20 76 65 72 62 6f 73 65 3b 0d 0a 20 20 20  ol verbose;..   
1cc70 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
1cc80 62 6f 6f 6c 20 56 65 72 62 6f 73 65 0d 0a 20 20  bool Verbose..  
1cc90 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
1cca0 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74               get
1ccb0 20 7b 20 72 65 74 75 72 6e 20 76 65 72 62 6f 73   { return verbos
1ccc0 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  e; }..          
1ccd0 20 20 20 20 20 20 73 65 74 20 7b 20 76 65 72 62        set { verb
1cce0 6f 73 65 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a  ose = value; }..
1ccf0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
1cd00 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
1cd10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1cd20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1cd30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1cd40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1cd50 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1cd60 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 63 6f 6e  private bool con
1cd70 66 69 72 6d 3b 0d 0a 20 20 20 20 20 20 20 20 20  firm;..         
1cd80 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 43     public bool C
1cd90 6f 6e 66 69 72 6d 0d 0a 20 20 20 20 20 20 20 20  onfirm..        
1cda0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
1cdb0 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74         get { ret
1cdc0 75 72 6e 20 63 6f 6e 66 69 72 6d 3b 20 7d 0d 0a  urn confirm; }..
1cdd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cde0 73 65 74 20 7b 20 63 6f 6e 66 69 72 6d 20 3d 20  set { confirm = 
1cdf0 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20  value; }..      
1ce00 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
1ce10 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d       #endregion.
1ce20 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
1ce30 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
1ce40 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
1ce50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ce60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ce70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ce80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ce90 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65  /....        #re
1cea0 67 69 6f 6e 20 46 72 61 6d 65 77 6f 72 6b 4c 69  gion FrameworkLi
1ceb0 73 74 20 43 6c 61 73 73 0d 0a 20 20 20 20 20 20  st Class..      
1cec0 20 20 70 72 69 76 61 74 65 20 73 65 61 6c 65 64    private sealed
1ced0 20 63 6c 61 73 73 20 46 72 61 6d 65 77 6f 72 6b   class Framework
1cee0 4c 69 73 74 0d 0a 20 20 20 20 20 20 20 20 7b 0d  List..        {.
1cef0 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 72 65  .            #re
1cf00 67 69 6f 6e 20 50 75 62 6c 69 63 20 43 6f 6e 73  gion Public Cons
1cf10 74 72 75 63 74 6f 72 73 0d 0a 20 20 20 20 20 20  tructors..      
1cf20 20 20 20 20 20 20 70 75 62 6c 69 63 20 46 72 61        public Fra
1cf30 6d 65 77 6f 72 6b 4c 69 73 74 28 29 0d 0a 20 20  meworkList()..  
1cf40 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
1cf50 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
1cf60 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20  do nothing...   
1cf70 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
1cf80 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
1cf90 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  on....          
1cfa0 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
1cff0 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 75 62       #region Pub
1d000 6c 69 63 20 4d 65 74 68 6f 64 73 0d 0a 20 20 20  lic Methods..   
1d010 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65           private
1d020 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79   MockRegistryKey
1d030 20 72 6f 6f 74 4b 65 79 3b 0d 0a 20 20 20 20 20   rootKey;..     
1d040 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 4d 6f         public Mo
1d050 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 52 6f  ckRegistryKey Ro
1d060 6f 74 4b 65 79 0d 0a 20 20 20 20 20 20 20 20 20  otKey..         
1d070 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
1d080 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75        get { retu
1d090 72 6e 20 72 6f 6f 74 4b 65 79 3b 20 7d 0d 0a 20  rn rootKey; }.. 
1d0a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
1d0b0 65 74 20 7b 20 72 6f 6f 74 4b 65 79 20 3d 20 76  et { rootKey = v
1d0c0 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20  alue; }..       
1d0d0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
1d0e0 20 20 20 20 20 20 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20  /////////....   
1d130 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65           private
1d140 20 53 74 72 69 6e 67 4c 69 73 74 20 6e 61 6d 65   StringList name
1d150 73 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  s;..            
1d160 70 75 62 6c 69 63 20 53 74 72 69 6e 67 4c 69 73  public StringLis
1d170 74 20 4e 61 6d 65 73 0d 0a 20 20 20 20 20 20 20  t Names..       
1d180 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
1d190 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65          get { re
1d1a0 74 75 72 6e 20 6e 61 6d 65 73 3b 20 7d 0d 0a 20  turn names; }.. 
1d1b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
1d1c0 65 74 20 7b 20 6e 61 6d 65 73 20 3d 20 76 61 6c  et { names = val
1d1d0 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  ue; }..         
1d1e0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
1d1f0 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
1d200 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d210 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d220 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d230 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
1d240 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 56         private V
1d250 65 72 73 69 6f 6e 4d 61 70 20 76 65 72 73 69 6f  ersionMap versio
1d260 6e 73 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ns;..           
1d270 20 70 75 62 6c 69 63 20 56 65 72 73 69 6f 6e 4d   public VersionM
1d280 61 70 20 56 65 72 73 69 6f 6e 73 0d 0a 20 20 20  ap Versions..   
1d290 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
1d2a0 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20              get 
1d2b0 7b 20 72 65 74 75 72 6e 20 76 65 72 73 69 6f 6e  { return version
1d2c0 73 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  s; }..          
1d2d0 20 20 20 20 20 20 73 65 74 20 7b 20 76 65 72 73        set { vers
1d2e0 69 6f 6e 73 20 3d 20 76 61 6c 75 65 3b 20 7d 0d  ions = value; }.
1d2f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
1d300 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
1d310 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d320 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d330 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d340 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d350 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
1d360 20 70 72 69 76 61 74 65 20 53 74 72 69 6e 67 4c   private StringL
1d370 69 73 74 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65  ist platformName
1d380 73 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  s;..            
1d390 70 75 62 6c 69 63 20 53 74 72 69 6e 67 4c 69 73  public StringLis
1d3a0 74 20 50 6c 61 74 66 6f 72 6d 4e 61 6d 65 73 0d  t PlatformNames.
1d3b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
1d3c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d3d0 67 65 74 20 7b 20 72 65 74 75 72 6e 20 70 6c 61  get { return pla
1d3e0 74 66 6f 72 6d 4e 61 6d 65 73 3b 20 7d 0d 0a 20  tformNames; }.. 
1d3f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
1d400 65 74 20 7b 20 70 6c 61 74 66 6f 72 6d 4e 61 6d  et { platformNam
1d410 65 73 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20  es = value; }.. 
1d420 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
1d430 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65            #endre
1d440 67 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20 7d 0d  gion..        }.
1d450 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67  .        #endreg
1d460 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  ion....        /
1d470 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d480 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d490 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
1d4c0 20 20 23 72 65 67 69 6f 6e 20 56 73 4c 69 73 74    #region VsList
1d4d0 20 43 6c 61 73 73 0d 0a 20 20 20 20 20 20 20 20   Class..        
1d4e0 70 72 69 76 61 74 65 20 73 65 61 6c 65 64 20 63  private sealed c
1d4f0 6c 61 73 73 20 56 73 4c 69 73 74 0d 0a 20 20 20  lass VsList..   
1d500 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
1d510 20 20 20 20 23 72 65 67 69 6f 6e 20 50 75 62 6c      #region Publ
1d520 69 63 20 43 6f 6e 73 74 72 75 63 74 6f 72 73 0d  ic Constructors.
1d530 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
1d540 6c 69 63 20 56 73 4c 69 73 74 28 29 0d 0a 20 20  lic VsList()..  
1d550 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
1d560 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
1d570 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20  do nothing...   
1d580 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
1d590 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
1d5a0 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  on....          
1d5b0 20 20 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 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
1d600 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 75 62       #region Pub
1d610 6c 69 63 20 50 72 6f 70 65 72 74 69 65 73 0d 0a  lic Properties..
1d620 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
1d630 61 74 65 20 4d 6f 63 6b 52 65 67 69 73 74 72 79  ate MockRegistry
1d640 4b 65 79 20 72 6f 6f 74 4b 65 79 3b 0d 0a 20 20  Key rootKey;..  
1d650 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
1d660 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79   MockRegistryKey
1d670 20 52 6f 6f 74 4b 65 79 0d 0a 20 20 20 20 20 20   RootKey..      
1d680 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
1d690 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72           get { r
1d6a0 65 74 75 72 6e 20 72 6f 6f 74 4b 65 79 3b 20 7d  eturn rootKey; }
1d6b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1d6c0 20 20 73 65 74 20 7b 20 72 6f 6f 74 4b 65 79 20    set { rootKey 
1d6d0 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20  = value; }..    
1d6e0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
1d6f0 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
1d700 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d710 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d720 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d730 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
1d740 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
1d750 61 74 65 20 56 65 72 73 69 6f 6e 4c 69 73 74 20  ate VersionList 
1d760 76 65 72 73 69 6f 6e 73 3b 0d 0a 20 20 20 20 20  versions;..     
1d770 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 56 65         public Ve
1d780 72 73 69 6f 6e 4c 69 73 74 20 56 65 72 73 69 6f  rsionList Versio
1d790 6e 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ns..            
1d7a0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
1d7b0 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20     get { return 
1d7c0 76 65 72 73 69 6f 6e 73 3b 20 7d 0d 0a 20 20 20  versions; }..   
1d7d0 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74               set
1d7e0 20 7b 20 76 65 72 73 69 6f 6e 73 20 3d 20 76 61   { versions = va
1d7f0 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  lue; }..        
1d800 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
1d810 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 20     #endregion.. 
1d820 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
1d830 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 20 20    #endregion..  
1d840 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
1d850 0d 0a 0d 0a 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d8a0 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23  ///....        #
1d8b0 72 65 67 69 6f 6e 20 50 72 69 76 61 74 65 20 43  region Private C
1d8c0 6f 6e 73 74 61 6e 74 20 44 61 74 61 0d 0a 20 20  onstant Data..  
1d8d0 20 20 20 20 20 20 70 72 69 76 61 74 65 20 63 6f        private co
1d8e0 6e 73 74 20 73 74 72 69 6e 67 20 43 6f 72 65 46  nst string CoreF
1d8f0 69 6c 65 4e 61 6d 65 20 3d 20 22 53 79 73 74 65  ileName = "Syste
1d900 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 64 6c  m.Data.SQLite.dl
1d910 6c 22 3b 0d 0a 20 20 20 20 20 20 20 20 70 72 69  l";..        pri
1d920 76 61 74 65 20 63 6f 6e 73 74 20 73 74 72 69 6e  vate const strin
1d930 67 20 4c 69 6e 71 46 69 6c 65 4e 61 6d 65 20 3d  g LinqFileName =
1d940 20 22 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51   "System.Data.SQ
1d950 4c 69 74 65 2e 4c 69 6e 71 2e 64 6c 6c 22 3b 0d  Lite.Linq.dll";.
1d960 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
1d970 20 63 6f 6e 73 74 20 73 74 72 69 6e 67 20 44 65   const string De
1d980 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 20 3d  signerFileName =
1d990 20 22 53 51 4c 69 74 65 2e 44 65 73 69 67 6e 65   "SQLite.Designe
1d9a0 72 2e 64 6c 6c 22 3b 0d 0a 20 20 20 20 20 20 20  r.dll";..       
1d9b0 20 70 72 69 76 61 74 65 20 63 6f 6e 73 74 20 73   private const s
1d9c0 74 72 69 6e 67 20 50 72 6f 76 69 64 65 72 4e 61  tring ProviderNa
1d9d0 6d 65 20 3d 20 22 53 51 4c 69 74 65 20 44 61 74  me = "SQLite Dat
1d9e0 61 20 50 72 6f 76 69 64 65 72 22 3b 0d 0a 20 20  a Provider";..  
1d9f0 20 20 20 20 20 20 70 72 69 76 61 74 65 20 63 6f        private co
1da00 6e 73 74 20 73 74 72 69 6e 67 20 50 72 6f 6a 65  nst string Proje
1da10 63 74 4e 61 6d 65 20 3d 20 22 53 79 73 74 65 6d  ctName = "System
1da20 2e 44 61 74 61 2e 53 51 4c 69 74 65 22 3b 0d 0a  .Data.SQLite";..
1da30 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
1da40 63 6f 6e 73 74 20 73 74 72 69 6e 67 20 4c 65 67  const string Leg
1da50 61 63 79 50 72 6f 6a 65 63 74 4e 61 6d 65 20 3d  acyProjectName =
1da60 20 22 53 51 4c 69 74 65 22 3b 0d 0a 20 20 20 20   "SQLite";..    
1da70 20 20 20 20 70 72 69 76 61 74 65 20 63 6f 6e 73      private cons
1da80 74 20 73 74 72 69 6e 67 20 49 6e 76 61 72 69 61  t string Invaria
1da90 6e 74 4e 61 6d 65 20 3d 20 22 53 79 73 74 65 6d  ntName = "System
1daa0 2e 44 61 74 61 2e 53 51 4c 69 74 65 22 3b 0d 0a  .Data.SQLite";..
1dab0 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
1dac0 63 6f 6e 73 74 20 73 74 72 69 6e 67 20 46 61 63  const string Fac
1dad0 74 6f 72 79 54 79 70 65 4e 61 6d 65 20 3d 20 22  toryTypeName = "
1dae0 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69  System.Data.SQLi
1daf0 74 65 2e 53 51 4c 69 74 65 46 61 63 74 6f 72 79  te.SQLiteFactory
1db00 22 3b 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  ";..        priv
1db10 61 74 65 20 63 6f 6e 73 74 20 73 74 72 69 6e 67  ate const string
1db20 20 44 65 73 63 72 69 70 74 69 6f 6e 20 3d 20 22   Description = "
1db30 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b 20 44  .NET Framework D
1db40 61 74 61 20 50 72 6f 76 69 64 65 72 20 66 6f 72  ata Provider for
1db50 20 53 51 4c 69 74 65 22 3b 0d 0a 0d 0a 20 20 20   SQLite";....   
1db60 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
1db70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1db80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1db90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1dba0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
1dbb0 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
1dbc0 63 6f 6e 73 74 20 73 74 72 69 6e 67 20 43 4c 52  const string CLR
1dbd0 76 32 49 6d 61 67 65 52 75 6e 74 69 6d 65 56 65  v2ImageRuntimeVe
1dbe0 72 73 69 6f 6e 20 3d 20 22 76 32 2e 30 2e 35 30  rsion = "v2.0.50
1dbf0 37 32 37 22 3b 0d 0a 20 20 20 20 20 20 20 20 70  727";..        p
1dc00 72 69 76 61 74 65 20 63 6f 6e 73 74 20 73 74 72  rivate const str
1dc10 69 6e 67 20 43 4c 52 76 34 49 6d 61 67 65 52 75  ing CLRv4ImageRu
1dc20 6e 74 69 6d 65 56 65 72 73 69 6f 6e 20 3d 20 22  ntimeVersion = "
1dc30 76 34 2e 30 2e 33 30 33 31 39 22 3b 0d 0a 0d 0a  v4.0.30319";....
1dc40 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
1dc50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1dc60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1dc70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1dc80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
1dc90 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  ...        priva
1dca0 74 65 20 63 6f 6e 73 74 20 73 74 72 69 6e 67 20  te const string 
1dcb0 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d  NameAndValueForm
1dcc0 61 74 20 3d 20 22 7b 30 7d 3a 20 7b 31 7d 22 3b  at = "{0}: {1}";
1dcd0 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
1dce0 65 20 63 6f 6e 73 74 20 73 74 72 69 6e 67 20 4c  e const string L
1dcf0 6f 67 46 69 6c 65 53 75 66 66 69 78 20 3d 20 22  ogFileSuffix = "
1dd00 2e 6c 6f 67 22 3b 0d 0a 0d 0a 20 20 20 20 20 20  .log";....      
1dd10 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
1dd20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1dd30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1dd40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1dd50 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
1dd60 20 20 20 20 20 70 72 69 76 61 74 65 20 63 6f 6e       private con
1dd70 73 74 20 73 74 72 69 6e 67 20 52 6f 6f 74 4b 65  st string RootKe
1dd80 79 4e 61 6d 65 20 3d 20 22 53 6f 66 74 77 61 72  yName = "Softwar
1dd90 65 22 3b 0d 0a 20 20 20 20 20 20 20 20 70 72 69  e";..        pri
1dda0 76 61 74 65 20 63 6f 6e 73 74 20 73 74 72 69 6e  vate const strin
1ddb0 67 20 57 6f 77 36 34 53 75 62 4b 65 79 4e 61 6d  g Wow64SubKeyNam
1ddc0 65 20 3d 20 22 57 6f 77 36 34 33 32 4e 6f 64 65  e = "Wow6432Node
1ddd0 22 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ";....        //
1dde0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ddf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1de00 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
1de30 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20   //..        // 
1de40 4e 4f 54 45 3a 20 54 68 65 20 2e 4e 45 54 20 46  NOTE: The .NET F
1de50 72 61 6d 65 77 6f 72 6b 20 68 61 73 20 62 6f 74  ramework has bot
1de60 68 20 33 32 2d 62 69 74 20 61 6e 64 20 36 34 2d  h 32-bit and 64-
1de70 62 69 74 20 65 64 69 74 69 6f 6e 73 2e 0d 0a 20  bit editions... 
1de80 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
1de90 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69     private stati
1dea0 63 20 72 65 61 64 6f 6e 6c 79 20 62 6f 6f 6c 20  c readonly bool 
1deb0 4e 65 74 46 78 49 73 33 32 42 69 74 4f 6e 6c 79  NetFxIs32BitOnly
1dec0 20 3d 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20   = false;....   
1ded0 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
1dee0 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a  ////////////....
1df20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
1df30 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 46 6f 72      // NOTE: For
1df40 20 6e 6f 77 2c 20 56 69 73 75 61 6c 20 53 74 75   now, Visual Stu
1df50 64 69 6f 20 69 73 20 61 6c 77 61 79 73 20 61 20  dio is always a 
1df60 33 32 2d 62 69 74 20 61 70 70 6c 69 63 61 74 69  32-bit applicati
1df70 6f 6e 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 0d  on...        //.
1df80 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
1df90 20 73 74 61 74 69 63 20 72 65 61 64 6f 6e 6c 79   static readonly
1dfa0 20 62 6f 6f 6c 20 56 73 49 73 33 32 42 69 74 4f   bool VsIs32BitO
1dfb0 6e 6c 79 20 3d 20 74 72 75 65 3b 0d 0a 0d 0a 20  nly = true;.... 
1dfc0 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e000 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
1e010 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
1e020 65 20 73 74 61 74 69 63 20 72 65 61 64 6f 6e 6c  e static readonl
1e030 79 20 73 74 72 69 6e 67 20 56 73 49 64 46 6f 72  y string VsIdFor
1e040 6d 61 74 20 3d 20 22 42 22 3b 0d 0a 0d 0a 20 20  mat = "B";....  
1e050 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
1e060 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e070 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e080 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e090 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
1e0a0 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
1e0b0 20 73 74 61 74 69 63 20 72 65 61 64 6f 6e 6c 79   static readonly
1e0c0 20 73 74 72 69 6e 67 20 58 50 61 74 68 46 6f 72   string XPathFor
1e0d0 41 64 64 45 6c 65 6d 65 6e 74 20 3d 0d 0a 20 20  AddElement =..  
1e0e0 20 20 20 20 20 20 20 20 20 20 22 63 6f 6e 66 69            "confi
1e0f0 67 75 72 61 74 69 6f 6e 2f 73 79 73 74 65 6d 2e  guration/system.
1e100 64 61 74 61 2f 44 62 50 72 6f 76 69 64 65 72 46  data/DbProviderF
1e110 61 63 74 6f 72 69 65 73 2f 61 64 64 5b 40 69 6e  actories/add[@in
1e120 76 61 72 69 61 6e 74 3d 5c 22 7b 30 7d 5c 22 5d  variant=\"{0}\"]
1e130 22 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72  ";....        pr
1e140 69 76 61 74 65 20 73 74 61 74 69 63 20 72 65 61  ivate static rea
1e150 64 6f 6e 6c 79 20 73 74 72 69 6e 67 20 58 50 61  donly string XPa
1e160 74 68 46 6f 72 52 65 6d 6f 76 65 45 6c 65 6d 65  thForRemoveEleme
1e170 6e 74 20 3d 0d 0a 20 20 20 20 20 20 20 20 20 20  nt =..          
1e180 20 20 22 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e    "configuration
1e190 2f 73 79 73 74 65 6d 2e 64 61 74 61 2f 44 62 50  /system.data/DbP
1e1a0 72 6f 76 69 64 65 72 46 61 63 74 6f 72 69 65 73  roviderFactories
1e1b0 2f 72 65 6d 6f 76 65 5b 40 69 6e 76 61 72 69 61  /remove[@invaria
1e1c0 6e 74 3d 5c 22 7b 30 7d 5c 22 5d 22 3b 0d 0a 20  nt=\"{0}\"]";.. 
1e1d0 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f         #endregio
1e1e0 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  n....        ///
1e1f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e200 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e210 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e220 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e230 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
1e240 23 72 65 67 69 6f 6e 20 50 72 69 76 61 74 65 20  #region Private 
1e250 53 74 61 74 69 63 20 44 61 74 61 0d 0a 20 20 20  Static Data..   
1e260 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61       private sta
1e270 74 69 63 20 41 73 73 65 6d 62 6c 79 20 74 68 69  tic Assembly thi
1e280 73 41 73 73 65 6d 62 6c 79 20 3d 20 41 73 73 65  sAssembly = Asse
1e290 6d 62 6c 79 2e 47 65 74 45 78 65 63 75 74 69 6e  mbly.GetExecutin
1e2a0 67 41 73 73 65 6d 62 6c 79 28 29 3b 0d 0a 0d 0a  gAssembly();....
1e2b0 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
1e2c0 73 74 61 74 69 63 20 73 74 72 69 6e 67 20 74 72  static string tr
1e2d0 61 63 65 43 61 74 65 67 6f 72 79 20 3d 20 50 61  aceCategory = Pa
1e2e0 74 68 2e 47 65 74 46 69 6c 65 4e 61 6d 65 28 0d  th.GetFileName(.
1e2f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69  .            thi
1e300 73 41 73 73 65 6d 62 6c 79 2e 4c 6f 63 61 74 69  sAssembly.Locati
1e310 6f 6e 29 3b 20 2f 2a 20 4e 4f 54 45 3a 20 53 61  on); /* NOTE: Sa
1e320 6d 65 20 66 6f 72 20 64 65 62 75 67 20 61 6e 64  me for debug and
1e330 20 74 72 61 63 65 2e 20 2a 2f 0d 0a 0d 0a 20 20   trace. */....  
1e340 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74        private st
1e350 61 74 69 63 20 54 72 61 63 65 43 61 6c 6c 62 61  atic TraceCallba
1e360 63 6b 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b  ck debugCallback
1e370 20 3d 20 41 70 70 44 65 62 75 67 3b 0d 0a 20 20   = AppDebug;..  
1e380 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74        private st
1e390 61 74 69 63 20 54 72 61 63 65 43 61 6c 6c 62 61  atic TraceCallba
1e3a0 63 6b 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b  ck traceCallback
1e3b0 20 3d 20 41 70 70 54 72 61 63 65 3b 0d 0a 20 20   = AppTrace;..  
1e3c0 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
1e3d0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
1e3e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e3f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e400 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e410 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e420 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23  ///....        #
1e430 72 65 67 69 6f 6e 20 54 72 61 63 65 20 48 61 6e  region Trace Han
1e440 64 6c 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 70  dling..        p
1e450 72 69 76 61 74 65 20 73 74 61 74 69 63 20 73 74  rivate static st
1e460 72 69 6e 67 20 47 65 74 4c 6f 67 46 69 6c 65 4e  ring GetLogFileN
1e470 61 6d 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ame(..          
1e480 20 20 73 74 72 69 6e 67 20 74 79 70 65 4e 61 6d    string typeNam
1e490 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29  e..            )
1e4a0 20 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a 20 20   /* throw */..  
1e4b0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
1e4c0 20 20 20 20 20 73 74 72 69 6e 67 20 66 69 6c 65       string file
1e4d0 4e 61 6d 65 20 3d 20 50 61 74 68 2e 47 65 74 54  Name = Path.GetT
1e4e0 65 6d 70 46 69 6c 65 4e 61 6d 65 28 29 3b 0d 0a  empFileName();..
1e4f0 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
1e500 6e 67 20 64 69 72 65 63 74 6f 72 79 20 3d 20 50  ng directory = P
1e510 61 74 68 2e 47 65 74 44 69 72 65 63 74 6f 72 79  ath.GetDirectory
1e520 4e 61 6d 65 28 66 69 6c 65 4e 61 6d 65 29 3b 0d  Name(fileName);.
1e530 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72  .            str
1e540 69 6e 67 20 66 69 6c 65 4e 61 6d 65 4f 6e 6c 79  ing fileNameOnly
1e550 20 3d 20 50 61 74 68 2e 47 65 74 46 69 6c 65 4e   = Path.GetFileN
1e560 61 6d 65 57 69 74 68 6f 75 74 45 78 74 65 6e 73  ameWithoutExtens
1e570 69 6f 6e 28 66 69 6c 65 4e 61 6d 65 29 3b 0d 0a  ion(fileName);..
1e580 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74  ..            st
1e590 72 69 6e 67 20 6e 65 77 46 69 6c 65 4e 61 6d 65  ring newFileName
1e5a0 20 3d 20 50 61 74 68 2e 43 6f 6d 62 69 6e 65 28   = Path.Combine(
1e5b0 64 69 72 65 63 74 6f 72 79 2c 20 53 74 72 69 6e  directory, Strin
1e5c0 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
1e5d0 20 20 20 20 20 20 20 20 20 20 20 22 7b 30 7d 7b             "{0}{
1e5e0 31 7d 7b 32 7d 22 2c 20 74 72 61 63 65 43 61 74  1}{2}", traceCat
1e5f0 65 67 6f 72 79 2c 20 21 53 74 72 69 6e 67 2e 49  egory, !String.I
1e600 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 74 79 70  sNullOrEmpty(typ
1e610 65 4e 61 6d 65 29 20 3f 0d 0a 20 20 20 20 20 20  eName) ?..      
1e620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2e                ".
1e630 22 20 2b 20 74 79 70 65 4e 61 6d 65 20 3a 20 53  " + typeName : S
1e640 74 72 69 6e 67 2e 45 6d 70 74 79 2c 20 22 2e 22  tring.Empty, "."
1e650 20 2b 20 66 69 6c 65 4e 61 6d 65 4f 6e 6c 79 20   + fileNameOnly 
1e660 2b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  +..             
1e670 20 20 20 20 20 20 20 4c 6f 67 46 69 6c 65 53 75         LogFileSu
1e680 66 66 69 78 29 29 3b 0d 0a 0d 0a 20 20 20 20 20  ffix));....     
1e690 20 20 20 20 20 20 20 46 69 6c 65 2e 4d 6f 76 65         File.Move
1e6a0 28 66 69 6c 65 4e 61 6d 65 2c 20 6e 65 77 46 69  (fileName, newFi
1e6b0 6c 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20  leName);....    
1e6c0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e          return n
1e6d0 65 77 46 69 6c 65 4e 61 6d 65 3b 0d 0a 20 20 20  ewFileName;..   
1e6e0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
1e6f0 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
1e700 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e710 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e720 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e730 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
1e740 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61       private sta
1e750 74 69 63 20 76 6f 69 64 20 41 70 70 44 65 62 75  tic void AppDebu
1e760 67 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  g(..            
1e770 73 74 72 69 6e 67 20 6d 65 73 73 61 67 65 2c 0d  string message,.
1e780 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72  .            str
1e790 69 6e 67 20 63 61 74 65 67 6f 72 79 0d 0a 20 20  ing category..  
1e7a0 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
1e7b0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
1e7c0 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62      TraceOps.Deb
1e7d0 75 67 43 6f 72 65 28 53 74 72 69 6e 67 2e 46 6f  ugCore(String.Fo
1e7e0 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
1e7f0 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e         TraceOps.
1e800 44 65 62 75 67 46 6f 72 6d 61 74 2c 20 54 72 61  DebugFormat, Tra
1e810 63 65 4f 70 73 2e 4e 65 78 74 44 65 62 75 67 49  ceOps.NextDebugI
1e820 64 28 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  d(),..          
1e830 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 54        TraceOps.T
1e840 69 6d 65 53 74 61 6d 70 28 44 61 74 65 54 69 6d  imeStamp(DateTim
1e850 65 2e 55 74 63 4e 6f 77 29 2c 20 6d 65 73 73 61  e.UtcNow), messa
1e860 67 65 29 2c 20 63 61 74 65 67 6f 72 79 29 3b 0d  ge), category);.
1e870 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....  
1e880 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
1e890 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e8a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e8b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e8c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
1e8d0 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
1e8e0 20 73 74 61 74 69 63 20 76 6f 69 64 20 41 70 70   static void App
1e8f0 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20  Trace(..        
1e900 20 20 20 20 73 74 72 69 6e 67 20 6d 65 73 73 61      string messa
1e910 67 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ge,..           
1e920 20 73 74 72 69 6e 67 20 63 61 74 65 67 6f 72 79   string category
1e930 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d  ..            ).
1e940 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
1e950 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73          TraceOps
1e960 2e 54 72 61 63 65 43 6f 72 65 28 53 74 72 69 6e  .TraceCore(Strin
1e970 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
1e980 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
1e990 4f 70 73 2e 54 72 61 63 65 46 6f 72 6d 61 74 2c  Ops.TraceFormat,
1e9a0 20 54 72 61 63 65 4f 70 73 2e 4e 65 78 74 54 72   TraceOps.NextTr
1e9b0 61 63 65 49 64 28 29 2c 0d 0a 20 20 20 20 20 20  aceId(),..      
1e9c0 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f            TraceO
1e9d0 70 73 2e 54 69 6d 65 53 74 61 6d 70 28 44 61 74  ps.TimeStamp(Dat
1e9e0 65 54 69 6d 65 2e 55 74 63 4e 6f 77 29 2c 20 6d  eTime.UtcNow), m
1e9f0 65 73 73 61 67 65 29 2c 20 63 61 74 65 67 6f 72  essage), categor
1ea00 79 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  y);..        }..
1ea10 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
1ea20 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  on....        //
1ea30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ea40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ea50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ea60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ea70 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
1ea80 20 23 72 65 67 69 6f 6e 20 47 65 6e 65 72 69 63   #region Generic
1ea90 20 50 6c 61 74 66 6f 72 6d 20 48 61 6e 64 6c 69   Platform Handli
1eaa0 6e 67 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  ng..        priv
1eab0 61 74 65 20 73 74 61 74 69 63 20 62 6f 6f 6c 20  ate static bool 
1eac0 49 73 36 34 42 69 74 50 72 6f 63 65 73 73 28 29  Is64BitProcess()
1ead0 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
1eae0 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
1eaf0 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45           // NOTE
1eb00 3a 20 52 65 74 75 72 6e 73 20 74 72 75 65 20 69  : Returns true i
1eb10 66 20 74 68 65 20 63 75 72 72 65 6e 74 20 70 72  f the current pr
1eb20 6f 63 65 73 73 20 69 73 20 36 34 2d 62 69 74 2e  ocess is 64-bit.
1eb30 20 20 49 66 20 74 68 69 73 0d 0a 20 20 20 20 20    If this..     
1eb40 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
1eb50 69 73 20 74 72 75 65 2c 20 77 65 20 2a 6b 6e 6f  is true, we *kno
1eb60 77 2a 20 74 68 61 74 20 77 65 20 6d 75 73 74 20  w* that we must 
1eb70 62 65 20 72 75 6e 6e 69 6e 67 20 6f 6e 20 61 20  be running on a 
1eb80 36 34 2d 62 69 74 0d 0a 20 20 20 20 20 20 20 20  64-bit..        
1eb90 20 20 20 20 2f 2f 20 20 20 20 20 20 20 6f 70 65      //       ope
1eba0 72 61 74 69 6e 67 20 73 79 73 74 65 6d 20 61 73  rating system as
1ebb0 20 77 65 6c 6c 2e 20 20 48 6f 77 65 76 65 72 2c   well.  However,
1ebc0 20 69 66 20 74 68 69 73 20 69 73 20 66 61 6c 73   if this is fals
1ebd0 65 2c 20 77 65 0d 0a 20 20 20 20 20 20 20 20 20  e, we..         
1ebe0 20 20 20 2f 2f 20 20 20 20 20 20 20 64 6f 20 6e     //       do n
1ebf0 6f 74 20 6e 65 63 65 73 73 61 72 69 6c 79 20 6b  ot necessarily k
1ec00 6e 6f 77 20 74 68 61 74 20 77 65 20 61 72 65 20  now that we are 
1ec10 72 75 6e 6e 69 6e 67 20 6f 6e 20 61 20 33 32 2d  running on a 32-
1ec20 62 69 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20  bit..           
1ec30 20 2f 2f 20 20 20 20 20 20 20 6f 70 65 72 61 74   //       operat
1ec40 69 6e 67 20 73 79 73 74 65 6d 2c 20 64 75 65 20  ing system, due 
1ec50 74 6f 20 57 6f 57 36 34 20 28 57 69 6e 33 32 2d  to WoW64 (Win32-
1ec60 6f 6e 2d 57 69 6e 36 34 29 2c 20 65 74 63 2e 0d  on-Win64), etc..
1ec70 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d  .            //.
1ec80 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
1ec90 75 72 6e 20 28 49 6e 74 50 74 72 2e 53 69 7a 65  urn (IntPtr.Size
1eca0 20 3d 3d 20 73 69 7a 65 6f 66 28 6c 6f 6e 67 29   == sizeof(long)
1ecb0 29 3b 20 2f 2f 20 4e 4f 54 45 3a 20 50 6f 69 6e  ); // NOTE: Poin
1ecc0 74 65 72 20 69 73 20 36 34 2d 62 69 74 73 3f 0d  ter is 64-bits?.
1ecd0 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....  
1ece0 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
1ecf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ed00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ed10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ed20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
1ed30 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
1ed40 20 73 74 61 74 69 63 20 73 74 72 69 6e 67 20 47   static string G
1ed50 65 74 52 6f 6f 74 4b 65 79 4e 61 6d 65 28 0d 0a  etRootKeyName(..
1ed60 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
1ed70 20 77 6f 77 36 34 0d 0a 20 20 20 20 20 20 20 20   wow64..        
1ed80 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b      )..        {
1ed90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
1eda0 74 75 72 6e 20 53 74 72 69 6e 67 2e 46 6f 72 6d  turn String.Form
1edb0 61 74 28 22 7b 30 7d 7b 31 7d 22 2c 20 52 6f 6f  at("{0}{1}", Roo
1edc0 74 4b 65 79 4e 61 6d 65 2c 0d 0a 20 20 20 20 20  tKeyName,..     
1edd0 20 20 20 20 20 20 20 20 20 20 20 77 6f 77 36 34             wow64
1ede0 20 26 26 20 49 73 36 34 42 69 74 50 72 6f 63 65   && Is64BitProce
1edf0 73 73 28 29 20 3f 0d 0a 20 20 20 20 20 20 20 20  ss() ?..        
1ee00 20 20 20 20 20 20 20 20 20 20 20 20 22 5c 5c 22              "\\"
1ee10 20 2b 20 57 6f 77 36 34 53 75 62 4b 65 79 4e 61   + Wow64SubKeyNa
1ee20 6d 65 20 3a 20 53 74 72 69 6e 67 2e 45 6d 70 74  me : String.Empt
1ee30 79 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  y);..        }..
1ee40 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
1ee50 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  on....        //
1ee60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ee70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ee80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ee90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1eea0 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
1eeb0 20 23 72 65 67 69 6f 6e 20 47 65 6e 65 72 69 63   #region Generic
1eec0 20 53 74 72 69 6e 67 20 48 61 6e 64 6c 69 6e 67   String Handling
1eed0 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
1eee0 65 20 73 74 61 74 69 63 20 73 74 72 69 6e 67 20  e static string 
1eef0 46 6f 72 44 69 73 70 6c 61 79 28 0d 0a 20 20 20  ForDisplay(..   
1ef00 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20           object 
1ef10 76 61 6c 75 65 0d 0a 20 20 20 20 20 20 20 20 20  value..         
1ef20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d     )..        {.
1ef30 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
1ef40 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d  (value == null).
1ef50 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1ef60 20 72 65 74 75 72 6e 20 22 3c 6e 75 6c 6c 3e 22   return "<null>"
1ef70 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
1ef80 20 73 74 72 69 6e 67 20 72 65 73 75 6c 74 3b 0d   string result;.
1ef90 0a 20 20 20 20 20 20 20 20 20 20 20 20 54 79 70  .            Typ
1efa0 65 20 74 79 70 65 20 3d 20 76 61 6c 75 65 2e 47  e type = value.G
1efb0 65 74 54 79 70 65 28 29 3b 0d 0a 0d 0a 20 20 20  etType();....   
1efc0 20 20 20 20 20 20 20 20 20 69 66 20 28 74 79 70           if (typ
1efd0 65 20 3d 3d 20 74 79 70 65 6f 66 28 58 6d 6c 45  e == typeof(XmlE
1efe0 6c 65 6d 65 6e 74 29 29 0d 0a 20 20 20 20 20 20  lement))..      
1eff0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
1f000 20 20 20 20 20 20 20 20 20 58 6d 6c 45 6c 65 6d           XmlElem
1f010 65 6e 74 20 65 6c 65 6d 65 6e 74 20 3d 20 28 58  ent element = (X
1f020 6d 6c 45 6c 65 6d 65 6e 74 29 76 61 6c 75 65 3b  mlElement)value;
1f030 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1f040 20 20 20 20 72 65 73 75 6c 74 20 3d 20 65 6c 65      result = ele
1f050 6d 65 6e 74 2e 4f 75 74 65 72 58 6d 6c 3b 0d 0a  ment.OuterXml;..
1f060 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
1f070 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20             else 
1f080 69 66 20 28 74 79 70 65 20 3d 3d 20 74 79 70 65  if (type == type
1f090 6f 66 28 56 65 72 73 69 6f 6e 29 29 0d 0a 20 20  of(Version))..  
1f0a0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
1f0b0 20 20 20 20 20 20 20 20 20 20 20 20 20 56 65 72               Ver
1f0c0 73 69 6f 6e 20 76 65 72 73 69 6f 6e 20 3d 20 28  sion version = (
1f0d0 56 65 72 73 69 6f 6e 29 76 61 6c 75 65 3b 0d 0a  Version)value;..
1f0e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1f0f0 20 20 72 65 73 75 6c 74 20 3d 20 53 74 72 69 6e    result = Strin
1f100 67 2e 46 6f 72 6d 61 74 28 22 76 7b 30 7d 22 2c  g.Format("v{0}",
1f110 20 76 65 72 73 69 6f 6e 29 3b 0d 0a 20 20 20 20   version);..    
1f120 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
1f130 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20         else..   
1f140 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
1f150 20 20 20 20 20 20 20 20 20 20 20 20 72 65 73 75              resu
1f160 6c 74 20 3d 20 76 61 6c 75 65 2e 54 6f 53 74 72  lt = value.ToStr
1f170 69 6e 67 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  ing();....      
1f180 20 20 20 20 20 20 20 20 20 20 69 66 20 28 72 65            if (re
1f190 73 75 6c 74 2e 4c 65 6e 67 74 68 20 3d 3d 20 30  sult.Length == 0
1f1a0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
1f1b0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 22 3c         return "<
1f1c0 65 6d 70 74 79 3e 22 3b 0d 0a 0d 0a 20 20 20 20  empty>";....    
1f1d0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 73 75              resu
1f1e0 6c 74 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d  lt = String.Form
1f1f0 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
1f200 20 20 20 20 20 20 20 20 20 74 79 70 65 2e 49 73           type.Is
1f210 53 75 62 63 6c 61 73 73 4f 66 28 74 79 70 65 6f  SubclassOf(typeo
1f220 66 28 56 61 6c 75 65 54 79 70 65 29 29 20 3f 20  f(ValueType)) ? 
1f230 22 7b 30 7d 22 20 3a 20 22 5c 22 7b 30 7d 5c 22  "{0}" : "\"{0}\"
1f240 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
1f250 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 29 3b          result);
1f260 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
1f270 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  ...            r
1f280 65 74 75 72 6e 20 72 65 73 75 6c 74 3b 0d 0a 20  eturn result;.. 
1f290 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
1f2a0 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a    #endregion....
1f2b0 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
1f2c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f2d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f2e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f2f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
1f300 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69  ...        #regi
1f310 6f 6e 20 41 73 73 65 6d 62 6c 79 20 41 74 74 72  on Assembly Attr
1f320 69 62 75 74 65 20 48 61 6e 64 6c 69 6e 67 0d 0a  ibute Handling..
1f330 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73          public s
1f340 74 61 74 69 63 20 73 74 72 69 6e 67 20 47 65 74  tatic string Get
1f350 41 73 73 65 6d 62 6c 79 43 6f 6e 66 69 67 75 72  AssemblyConfigur
1f360 61 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20  ation(..        
1f370 20 20 20 20 41 73 73 65 6d 62 6c 79 20 61 73 73      Assembly ass
1f380 65 6d 62 6c 79 0d 0a 20 20 20 20 20 20 20 20 20  embly..         
1f390 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d     )..        {.
1f3a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
1f3b0 28 61 73 73 65 6d 62 6c 79 20 21 3d 20 6e 75 6c  (assembly != nul
1f3c0 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
1f3d0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
1f3e0 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20     try..        
1f3f0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
1f400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
1f410 66 20 28 61 73 73 65 6d 62 6c 79 2e 49 73 44 65  f (assembly.IsDe
1f420 66 69 6e 65 64 28 0d 0a 20 20 20 20 20 20 20 20  fined(..        
1f430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f440 20 20 20 20 74 79 70 65 6f 66 28 41 73 73 65 6d      typeof(Assem
1f450 62 6c 79 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e  blyConfiguration
1f460 41 74 74 72 69 62 75 74 65 29 2c 20 66 61 6c 73  Attribute), fals
1f470 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e))..           
1f480 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
1f490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f4a0 20 20 20 20 41 73 73 65 6d 62 6c 79 43 6f 6e 66      AssemblyConf
1f4b0 69 67 75 72 61 74 69 6f 6e 41 74 74 72 69 62 75  igurationAttribu
1f4c0 74 65 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  te configuration
1f4d0 20 3d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   =..            
1f4e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f4f0 28 41 73 73 65 6d 62 6c 79 43 6f 6e 66 69 67 75  (AssemblyConfigu
1f500 72 61 74 69 6f 6e 41 74 74 72 69 62 75 74 65 29  rationAttribute)
1f510 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1f520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61 73                as
1f530 73 65 6d 62 6c 79 2e 47 65 74 43 75 73 74 6f 6d  sembly.GetCustom
1f540 41 74 74 72 69 62 75 74 65 73 28 0d 0a 20 20 20  Attributes(..   
1f550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f560 20 20 20 20 20 20 20 20 20 20 20 20 20 74 79 70               typ
1f570 65 6f 66 28 41 73 73 65 6d 62 6c 79 43 6f 6e 66  eof(AssemblyConf
1f580 69 67 75 72 61 74 69 6f 6e 41 74 74 72 69 62 75  igurationAttribu
1f590 74 65 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  te),..          
1f5a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f5b0 20 20 20 20 20 20 66 61 6c 73 65 29 5b 30 5d 3b        false)[0];
1f5c0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1f5d0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
1f5e0 72 6e 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  rn configuration
1f5f0 2e 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 3b 0d  .Configuration;.
1f600 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1f610 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
1f620 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
1f630 20 20 20 20 20 20 20 20 20 20 20 63 61 74 63 68             catch
1f640 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1f650 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
1f660 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e           // do n
1f670 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20  othing...       
1f680 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
1f690 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
1f6a0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
1f6b0 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 7d  null;..        }
1f6c0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
1f6d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f6e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f6f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f700 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f710 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70  ///....        p
1f720 75 62 6c 69 63 20 73 74 61 74 69 63 20 73 74 72  ublic static str
1f730 69 6e 67 20 47 65 74 41 73 73 65 6d 62 6c 79 54  ing GetAssemblyT
1f740 69 74 6c 65 28 0d 0a 20 20 20 20 20 20 20 20 20  itle(..         
1f750 20 20 20 41 73 73 65 6d 62 6c 79 20 61 73 73 65     Assembly asse
1f760 6d 62 6c 79 0d 0a 20 20 20 20 20 20 20 20 20 20  mbly..          
1f770 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a    )..        {..
1f780 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
1f790 61 73 73 65 6d 62 6c 79 20 21 3d 20 6e 75 6c 6c  assembly != null
1f7a0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
1f7b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1f7c0 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20    try..         
1f7d0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
1f7e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
1f7f0 20 28 61 73 73 65 6d 62 6c 79 2e 49 73 44 65 66   (assembly.IsDef
1f800 69 6e 65 64 28 0d 0a 20 20 20 20 20 20 20 20 20  ined(..         
1f810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f820 20 20 20 74 79 70 65 6f 66 28 41 73 73 65 6d 62     typeof(Assemb
1f830 6c 79 54 69 74 6c 65 41 74 74 72 69 62 75 74 65  lyTitleAttribute
1f840 29 2c 20 66 61 6c 73 65 29 29 0d 0a 20 20 20 20  ), false))..    
1f850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f860 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
1f870 20 20 20 20 20 20 20 20 20 20 20 41 73 73 65 6d             Assem
1f880 62 6c 79 54 69 74 6c 65 41 74 74 72 69 62 75 74  blyTitleAttribut
1f890 65 20 74 69 74 6c 65 20 3d 0d 0a 20 20 20 20 20  e title =..     
1f8a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f8b0 20 20 20 20 20 20 20 28 41 73 73 65 6d 62 6c 79         (Assembly
1f8c0 54 69 74 6c 65 41 74 74 72 69 62 75 74 65 29 0d  TitleAttribute).
1f8d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1f8e0 20 20 20 20 20 20 20 20 20 20 20 20 20 61 73 73               ass
1f8f0 65 6d 62 6c 79 2e 47 65 74 43 75 73 74 6f 6d 41  embly.GetCustomA
1f900 74 74 72 69 62 75 74 65 73 28 0d 0a 20 20 20 20  ttributes(..    
1f910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f920 20 20 20 20 20 20 20 20 20 20 20 20 74 79 70 65              type
1f930 6f 66 28 41 73 73 65 6d 62 6c 79 54 69 74 6c 65  of(AssemblyTitle
1f940 41 74 74 72 69 62 75 74 65 29 2c 20 66 61 6c 73  Attribute), fals
1f950 65 29 5b 30 5d 3b 0d 0a 0d 0a 20 20 20 20 20 20  e)[0];....      
1f960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f970 20 20 72 65 74 75 72 6e 20 74 69 74 6c 65 2e 54    return title.T
1f980 69 74 6c 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  itle;..         
1f990 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
1f9a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
1f9b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1f9c0 20 63 61 74 63 68 0d 0a 20 20 20 20 20 20 20 20   catch..        
1f9d0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
1f9e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1f9f0 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20  / do nothing... 
1fa00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
1fa10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
1fa20 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  ...            r
1fa30 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 20 20 20  eturn null;..   
1fa40 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
1fa50 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20  #endregion....  
1fa60 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
1fa70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fa80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fa90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1faa0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
1fab0 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e  .        #region
1fac0 20 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b 20   .NET Framework 
1fad0 48 61 6e 64 6c 69 6e 67 0d 0a 20 20 20 20 20 20  Handling..      
1fae0 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63    private static
1faf0 20 73 74 72 69 6e 67 20 47 65 74 46 72 61 6d 65   string GetFrame
1fb00 77 6f 72 6b 52 6f 6f 74 4b 65 79 4e 61 6d 65 28  workRootKeyName(
1fb10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
1fb20 6f 6c 20 77 6f 77 36 34 0d 0a 20 20 20 20 20 20  ol wow64..      
1fb30 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
1fb40 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
1fb50 72 65 74 75 72 6e 20 53 74 72 69 6e 67 2e 46 6f  return String.Fo
1fb60 72 6d 61 74 28 22 7b 30 7d 5c 5c 4d 69 63 72 6f  rmat("{0}\\Micro
1fb70 73 6f 66 74 5c 5c 2e 4e 45 54 46 72 61 6d 65 77  soft\\.NETFramew
1fb80 6f 72 6b 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  ork",..         
1fb90 20 20 20 20 20 20 20 47 65 74 52 6f 6f 74 4b 65         GetRootKe
1fba0 79 4e 61 6d 65 28 77 6f 77 36 34 29 29 3b 0d 0a  yName(wow64));..
1fbb0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
1fbc0 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
1fbd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fbe0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fbf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fc00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
1fc10 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
1fc20 73 74 61 74 69 63 20 73 74 72 69 6e 67 20 47 65  static string Ge
1fc30 74 46 72 61 6d 65 77 6f 72 6b 4b 65 79 4e 61 6d  tFrameworkKeyNam
1fc40 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
1fc50 73 74 72 69 6e 67 20 66 72 61 6d 65 77 6f 72 6b  string framework
1fc60 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  Name,..         
1fc70 20 20 20 56 65 72 73 69 6f 6e 20 66 72 61 6d 65     Version frame
1fc80 77 6f 72 6b 56 65 72 73 69 6f 6e 2c 0d 0a 20 20  workVersion,..  
1fc90 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
1fca0 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 2c 0d 0a   platformName,..
1fcb0 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
1fcc0 20 77 6f 77 36 34 0d 0a 20 20 20 20 20 20 20 20   wow64..        
1fcd0 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b      )..        {
1fce0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74  ..            st
1fcf0 72 69 6e 67 20 66 6f 72 6d 61 74 20 3d 20 21 53  ring format = !S
1fd00 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d  tring.IsNullOrEm
1fd10 70 74 79 28 70 6c 61 74 66 6f 72 6d 4e 61 6d 65  pty(platformName
1fd20 29 20 3f 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ) ?..           
1fd30 20 20 20 20 20 22 7b 30 7d 5c 5c 4d 69 63 72 6f       "{0}\\Micro
1fd40 73 6f 66 74 5c 5c 7b 31 7d 5c 5c 76 7b 32 7d 5c  soft\\{1}\\v{2}\
1fd50 5c 7b 33 7d 22 20 3a 0d 0a 20 20 20 20 20 20 20  \{3}" :..       
1fd60 20 20 20 20 20 20 20 20 20 22 7b 30 7d 5c 5c 4d           "{0}\\M
1fd70 69 63 72 6f 73 6f 66 74 5c 5c 7b 31 7d 5c 5c 76  icrosoft\\{1}\\v
1fd80 7b 32 7d 22 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  {2}";....       
1fd90 20 20 20 20 20 72 65 74 75 72 6e 20 53 74 72 69       return Stri
1fda0 6e 67 2e 46 6f 72 6d 61 74 28 66 6f 72 6d 61 74  ng.Format(format
1fdb0 2c 20 47 65 74 52 6f 6f 74 4b 65 79 4e 61 6d 65  , GetRootKeyName
1fdc0 28 77 6f 77 36 34 29 2c 0d 0a 20 20 20 20 20 20  (wow64),..      
1fdd0 20 20 20 20 20 20 20 20 20 20 66 72 61 6d 65 77            framew
1fde0 6f 72 6b 4e 61 6d 65 2c 20 66 72 61 6d 65 77 6f  orkName, framewo
1fdf0 72 6b 56 65 72 73 69 6f 6e 2c 20 70 6c 61 74 66  rkVersion, platf
1fe00 6f 72 6d 4e 61 6d 65 29 3b 0d 0a 20 20 20 20 20  ormName);..     
1fe10 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
1fe20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fe30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fe40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fe50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fe60 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
1fe70 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69     private stati
1fe80 63 20 73 74 72 69 6e 67 20 47 65 74 49 6d 61 67  c string GetImag
1fe90 65 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 28  eRuntimeVersion(
1fea0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74  ..            st
1feb0 72 69 6e 67 20 66 69 6c 65 4e 61 6d 65 0d 0a 20  ring fileName.. 
1fec0 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
1fed0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
1fee0 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20       try..      
1fef0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
1ff00 20 20 20 20 20 20 20 20 20 41 73 73 65 6d 62 6c           Assembl
1ff10 79 20 61 73 73 65 6d 62 6c 79 20 3d 0d 0a 20 20  y assembly =..  
1ff20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ff30 20 20 41 73 73 65 6d 62 6c 79 2e 52 65 66 6c 65    Assembly.Refle
1ff40 63 74 69 6f 6e 4f 6e 6c 79 4c 6f 61 64 46 72 6f  ctionOnlyLoadFro
1ff50 6d 28 66 69 6c 65 4e 61 6d 65 29 3b 20 2f 2a 20  m(fileName); /* 
1ff60 74 68 72 6f 77 20 2a 2f 0d 0a 0d 0a 20 20 20 20  throw */....    
1ff70 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
1ff80 61 73 73 65 6d 62 6c 79 20 21 3d 20 6e 75 6c 6c  assembly != null
1ff90 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
1ffa0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 61 73         return as
1ffb0 73 65 6d 62 6c 79 2e 49 6d 61 67 65 52 75 6e 74  sembly.ImageRunt
1ffc0 69 6d 65 56 65 72 73 69 6f 6e 3b 0d 0a 20 20 20  imeVersion;..   
1ffd0 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
1ffe0 20 20 20 20 20 20 20 20 63 61 74 63 68 0d 0a 20          catch.. 
1fff0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
20000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
20010 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20   do nothing...  
20020 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
20030 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
20040 6e 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20  n null;..       
20050 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f   }....        //
20060 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20070 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20080 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20090 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
200a0 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
200b0 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
200c0 73 74 72 69 6e 67 20 47 65 74 46 72 61 6d 65 77  string GetFramew
200d0 6f 72 6b 44 69 72 65 63 74 6f 72 79 28 0d 0a 20  orkDirectory(.. 
200e0 20 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52             MockR
200f0 65 67 69 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b  egistryKey rootK
20100 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ey,..           
20110 20 56 65 72 73 69 6f 6e 20 66 72 61 6d 65 77 6f   Version framewo
20120 72 6b 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20  rkVersion,..    
20130 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 6f 77          bool wow
20140 36 34 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  64,..           
20150 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20   bool whatIf,.. 
20160 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
20170 76 65 72 62 6f 73 65 0d 0a 20 20 20 20 20 20 20  verbose..       
20180 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
20190 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 75  {..            u
201a0 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73 74  sing (MockRegist
201b0 72 79 4b 65 79 20 6b 65 79 20 3d 20 52 65 67 69  ryKey key = Regi
201c0 73 74 72 79 48 65 6c 70 65 72 2e 4f 70 65 6e 53  stryHelper.OpenS
201d0 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20  ubKey(..        
201e0 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74              root
201f0 4b 65 79 2c 20 47 65 74 46 72 61 6d 65 77 6f 72  Key, GetFramewor
20200 6b 52 6f 6f 74 4b 65 79 4e 61 6d 65 28 77 6f 77  kRootKeyName(wow
20210 36 34 29 2c 20 66 61 6c 73 65 2c 0d 0a 20 20 20  64), false,..   
20220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20230 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65   whatIf, verbose
20240 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
20250 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
20260 20 20 20 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75     if (key == nu
20270 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
20280 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
20290 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  null;....       
202a0 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20           object 
202b0 76 61 6c 75 65 20 3d 20 52 65 67 69 73 74 72 79  value = Registry
202c0 48 65 6c 70 65 72 2e 47 65 74 56 61 6c 75 65 28  Helper.GetValue(
202d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
202e0 20 20 20 20 20 20 6b 65 79 2c 20 22 49 6e 73 74        key, "Inst
202f0 61 6c 6c 52 6f 6f 74 22 2c 20 6e 75 6c 6c 2c 20  allRoot", null, 
20300 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29  whatIf, verbose)
20310 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
20320 20 20 20 20 20 69 66 20 28 21 28 76 61 6c 75 65       if (!(value
20330 20 69 73 20 73 74 72 69 6e 67 29 29 0d 0a 20 20   is string))..  
20340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20350 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a    return null;..
20360 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
20370 20 20 72 65 74 75 72 6e 20 50 61 74 68 2e 43 6f    return Path.Co
20380 6d 62 69 6e 65 28 0d 0a 20 20 20 20 20 20 20 20  mbine(..        
20390 20 20 20 20 20 20 20 20 20 20 20 20 28 73 74 72              (str
203a0 69 6e 67 29 76 61 6c 75 65 2c 20 53 74 72 69 6e  ing)value, Strin
203b0 67 2e 46 6f 72 6d 61 74 28 22 76 7b 30 7d 22 2c  g.Format("v{0}",
203c0 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f   frameworkVersio
203d0 6e 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  n));..          
203e0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a    }..        }..
203f0 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
20400 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  on....        //
20410 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20420 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20430 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20440 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20450 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
20460 20 23 72 65 67 69 6f 6e 20 50 65 72 2d 46 72 61   #region Per-Fra
20470 6d 65 77 6f 72 6b 2f 50 6c 61 74 66 6f 72 6d 20  mework/Platform 
20480 48 61 6e 64 6c 69 6e 67 0d 0a 20 20 20 20 20 20  Handling..      
20490 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63    private static
204a0 20 76 6f 69 64 20 49 6e 69 74 69 61 6c 69 7a 65   void Initialize
204b0 46 72 61 6d 65 77 6f 72 6b 4c 69 73 74 28 0d 0a  FrameworkList(..
204c0 20 20 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b              Mock
204d0 52 65 67 69 73 74 72 79 4b 65 79 20 72 6f 6f 74  RegistryKey root
204e0 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  Key,..          
204f0 20 20 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20    Configuration 
20500 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2c 0d 0a  configuration,..
20510 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20              ref 
20520 46 72 61 6d 65 77 6f 72 6b 4c 69 73 74 20 66 72  FrameworkList fr
20530 61 6d 65 77 6f 72 6b 4c 69 73 74 0d 0a 20 20 20  ameworkList..   
20540 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
20550 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
20560 20 20 20 69 66 20 28 66 72 61 6d 65 77 6f 72 6b     if (framework
20570 4c 69 73 74 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  List == null).. 
20580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66                 f
20590 72 61 6d 65 77 6f 72 6b 4c 69 73 74 20 3d 20 6e  rameworkList = n
205a0 65 77 20 46 72 61 6d 65 77 6f 72 6b 4c 69 73 74  ew FrameworkList
205b0 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ();....         
205c0 20 20 20 69 66 20 28 66 72 61 6d 65 77 6f 72 6b     if (framework
205d0 4c 69 73 74 2e 52 6f 6f 74 4b 65 79 20 3d 3d 20  List.RootKey == 
205e0 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
205f0 20 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b         framework
20600 4c 69 73 74 2e 52 6f 6f 74 4b 65 79 20 3d 20 72  List.RootKey = r
20610 6f 6f 74 4b 65 79 3b 0d 0a 0d 0a 20 20 20 20 20  ootKey;....     
20620 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
20630 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20640 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20650 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20660 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
20670 20 20 20 20 20 20 20 20 20 20 69 66 20 28 66 72            if (fr
20680 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 4e 61 6d 65  ameworkList.Name
20690 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  s == null)..    
206a0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
206b0 20 20 20 20 20 20 20 20 20 20 20 66 72 61 6d 65             frame
206c0 77 6f 72 6b 4c 69 73 74 2e 4e 61 6d 65 73 20 3d  workList.Names =
206d0 20 6e 65 77 20 53 74 72 69 6e 67 4c 69 73 74 28   new StringList(
206e0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
206f0 20 20 20 20 20 20 69 66 20 28 28 63 6f 6e 66 69        if ((confi
20700 67 75 72 61 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c  guration == null
20710 29 20 7c 7c 20 21 63 6f 6e 66 69 67 75 72 61 74  ) || !configurat
20720 69 6f 6e 2e 4e 6f 44 65 73 6b 74 6f 70 29 0d 0a  ion.NoDesktop)..
20730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20740 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73      frameworkLis
20750 74 2e 4e 61 6d 65 73 2e 41 64 64 28 22 2e 4e 45  t.Names.Add(".NE
20760 54 46 72 61 6d 65 77 6f 72 6b 22 29 3b 0d 0a 0d  TFramework");...
20770 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
20780 20 69 66 20 28 28 63 6f 6e 66 69 67 75 72 61 74   if ((configurat
20790 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20  ion == null) || 
207a0 21 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 4e  !configuration.N
207b0 6f 43 6f 6d 70 61 63 74 29 0d 0a 20 20 20 20 20  oCompact)..     
207c0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
207d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
207e0 20 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e    frameworkList.
207f0 4e 61 6d 65 73 2e 41 64 64 28 22 2e 4e 45 54 43  Names.Add(".NETC
20800 6f 6d 70 61 63 74 46 72 61 6d 65 77 6f 72 6b 22  ompactFramework"
20810 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
20820 20 20 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72          framewor
20830 6b 4c 69 73 74 2e 4e 61 6d 65 73 2e 41 64 64 28  kList.Names.Add(
20840 22 2e 4e 45 54 43 6f 6d 70 61 63 74 46 72 61 6d  ".NETCompactFram
20850 65 77 6f 72 6b 22 29 3b 0d 0a 20 20 20 20 20 20  ework");..      
20860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 72                fr
20870 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 4e 61 6d 65  ameworkList.Name
20880 73 2e 41 64 64 28 22 2e 4e 45 54 43 6f 6d 70 61  s.Add(".NETCompa
20890 63 74 46 72 61 6d 65 77 6f 72 6b 22 29 3b 0d 0a  ctFramework");..
208a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
208b0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
208c0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
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 2f 2f 2f 2f 2f 2f  ////////////////
20910 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
20920 20 20 20 69 66 20 28 66 72 61 6d 65 77 6f 72 6b     if (framework
20930 4c 69 73 74 2e 56 65 72 73 69 6f 6e 73 20 3d 3d  List.Versions ==
20940 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
20950 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
20960 20 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b         framework
20970 4c 69 73 74 2e 56 65 72 73 69 6f 6e 73 20 3d 20  List.Versions = 
20980 6e 65 77 20 56 65 72 73 69 6f 6e 4d 61 70 28 29  new VersionMap()
20990 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
209a0 20 20 20 20 20 69 66 20 28 28 63 6f 6e 66 69 67       if ((config
209b0 75 72 61 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29  uration == null)
209c0 20 7c 7c 20 21 63 6f 6e 66 69 67 75 72 61 74 69   || !configurati
209d0 6f 6e 2e 4e 6f 44 65 73 6b 74 6f 70 29 0d 0a 20  on.NoDesktop).. 
209e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
209f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
20a00 20 20 20 20 20 20 56 65 72 73 69 6f 6e 4c 69 73        VersionLis
20a10 74 20 64 65 73 6b 74 6f 70 56 65 72 73 69 6f 6e  t desktopVersion
20a20 4c 69 73 74 20 3d 20 6e 65 77 20 56 65 72 73 69  List = new Versi
20a30 6f 6e 4c 69 73 74 28 29 3b 0d 0a 0d 0a 20 20 20  onList();....   
20a40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20a50 20 69 66 20 28 28 63 6f 6e 66 69 67 75 72 61 74   if ((configurat
20a60 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20  ion == null) || 
20a70 21 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 4e  !configuration.N
20a80 6f 4e 65 74 46 78 32 30 29 0d 0a 20 20 20 20 20  oNetFx20)..     
20a90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20aa0 20 20 20 64 65 73 6b 74 6f 70 56 65 72 73 69 6f     desktopVersio
20ab0 6e 4c 69 73 74 2e 41 64 64 28 6e 65 77 20 56 65  nList.Add(new Ve
20ac0 72 73 69 6f 6e 28 32 2c 20 30 2c 20 35 30 37 32  rsion(2, 0, 5072
20ad0 37 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  7));....        
20ae0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
20af0 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 3d  (configuration =
20b00 3d 20 6e 75 6c 6c 29 20 7c 7c 20 21 63 6f 6e 66  = null) || !conf
20b10 69 67 75 72 61 74 69 6f 6e 2e 4e 6f 4e 65 74 46  iguration.NoNetF
20b20 78 34 30 29 0d 0a 20 20 20 20 20 20 20 20 20 20  x40)..          
20b30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65                de
20b40 73 6b 74 6f 70 56 65 72 73 69 6f 6e 4c 69 73 74  sktopVersionList
20b50 2e 41 64 64 28 6e 65 77 20 56 65 72 73 69 6f 6e  .Add(new Version
20b60 28 34 2c 20 30 2c 20 33 30 33 31 39 29 29 3b 0d  (4, 0, 30319));.
20b70 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
20b80 20 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b         framework
20b90 4c 69 73 74 2e 56 65 72 73 69 6f 6e 73 2e 41 64  List.Versions.Ad
20ba0 64 28 22 2e 4e 45 54 46 72 61 6d 65 77 6f 72 6b  d(".NETFramework
20bb0 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
20bc0 20 20 20 20 20 20 20 20 20 20 20 20 64 65 73 6b              desk
20bd0 74 6f 70 56 65 72 73 69 6f 6e 4c 69 73 74 29 3b  topVersionList);
20be0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
20bf0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
20c00 20 20 20 20 20 20 20 69 66 20 28 28 63 6f 6e 66         if ((conf
20c10 69 67 75 72 61 74 69 6f 6e 20 3d 3d 20 6e 75 6c  iguration == nul
20c20 6c 29 20 7c 7c 20 21 63 6f 6e 66 69 67 75 72 61  l) || !configura
20c30 74 69 6f 6e 2e 4e 6f 43 6f 6d 70 61 63 74 29 0d  tion.NoCompact).
20c40 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
20c50 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
20c60 20 20 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72          framewor
20c70 6b 4c 69 73 74 2e 56 65 72 73 69 6f 6e 73 2e 41  kList.Versions.A
20c80 64 64 28 22 2e 4e 45 54 43 6f 6d 70 61 63 74 46  dd(".NETCompactF
20c90 72 61 6d 65 77 6f 72 6b 22 2c 0d 0a 20 20 20 20  ramework",..    
20ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20cb0 20 20 20 20 6e 65 77 20 56 65 72 73 69 6f 6e 4c      new VersionL
20cc0 69 73 74 28 6e 65 77 20 56 65 72 73 69 6f 6e 5b  ist(new Version[
20cd0 5d 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ] {..           
20ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 65 77               new
20cf0 20 56 65 72 73 69 6f 6e 28 32 2c 20 30 2c 20 30   Version(2, 0, 0
20d00 2c 20 30 29 2c 20 6e 65 77 20 56 65 72 73 69 6f  , 0), new Versio
20d10 6e 28 33 2c 20 35 2c 20 30 2c 20 30 29 0d 0a 20  n(3, 5, 0, 0).. 
20d20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20d30 20 20 20 7d 29 29 3b 0d 0a 20 20 20 20 20 20 20     }));..       
20d40 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
20d50 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
20d60 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
20d70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20d80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20d90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20da0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
20db0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
20dc0 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 50 6c  frameworkList.Pl
20dd0 61 74 66 6f 72 6d 4e 61 6d 65 73 20 3d 3d 20 6e  atformNames == n
20de0 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
20df0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
20e00 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 4c 69       frameworkLi
20e10 73 74 2e 50 6c 61 74 66 6f 72 6d 4e 61 6d 65 73  st.PlatformNames
20e20 20 3d 20 6e 65 77 20 53 74 72 69 6e 67 4c 69 73   = new StringLis
20e30 74 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  t();....        
20e40 20 20 20 20 20 20 20 20 69 66 20 28 28 63 6f 6e          if ((con
20e50 66 69 67 75 72 61 74 69 6f 6e 20 3d 3d 20 6e 75  figuration == nu
20e60 6c 6c 29 20 7c 7c 20 21 63 6f 6e 66 69 67 75 72  ll) || !configur
20e70 61 74 69 6f 6e 2e 4e 6f 44 65 73 6b 74 6f 70 29  ation.NoDesktop)
20e80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
20e90 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 4c        frameworkL
20ea0 69 73 74 2e 50 6c 61 74 66 6f 72 6d 4e 61 6d 65  ist.PlatformName
20eb0 73 2e 41 64 64 28 6e 75 6c 6c 29 3b 0d 0a 0d 0a  s.Add(null);....
20ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20ed0 69 66 20 28 28 63 6f 6e 66 69 67 75 72 61 74 69  if ((configurati
20ee0 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20 21  on == null) || !
20ef0 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 4e 6f  configuration.No
20f00 43 6f 6d 70 61 63 74 29 0d 0a 20 20 20 20 20 20  Compact)..      
20f10 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
20f20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20f30 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 50   frameworkList.P
20f40 6c 61 74 66 6f 72 6d 4e 61 6d 65 73 2e 41 64 64  latformNames.Add
20f50 28 22 50 6f 63 6b 65 74 50 43 22 29 3b 0d 0a 20  ("PocketPC");.. 
20f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20f70 20 20 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74     frameworkList
20f80 2e 50 6c 61 74 66 6f 72 6d 4e 61 6d 65 73 2e 41  .PlatformNames.A
20f90 64 64 28 22 53 6d 61 72 74 70 68 6f 6e 65 22 29  dd("Smartphone")
20fa0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
20fb0 20 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b         framework
20fc0 4c 69 73 74 2e 50 6c 61 74 66 6f 72 6d 4e 61 6d  List.PlatformNam
20fd0 65 73 2e 41 64 64 28 22 57 69 6e 64 6f 77 73 43  es.Add("WindowsC
20fe0 45 22 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  E");..          
20ff0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
21000 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
21010 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f  ////////////////
21050 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21060 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
21070 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 62  private static b
21080 6f 6f 6c 20 48 61 76 65 46 72 61 6d 65 77 6f 72  ool HaveFramewor
21090 6b 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  k(..            
210a0 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20  MockRegistryKey 
210b0 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20 20 20 20  rootKey,..      
210c0 20 20 20 20 20 20 73 74 72 69 6e 67 20 66 72 61        string fra
210d0 6d 65 77 6f 72 6b 4e 61 6d 65 2c 0d 0a 20 20 20  meworkName,..   
210e0 20 20 20 20 20 20 20 20 20 56 65 72 73 69 6f 6e           Version
210f0 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f   frameworkVersio
21100 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n,..            
21110 73 74 72 69 6e 67 20 70 6c 61 74 66 6f 72 6d 4e  string platformN
21120 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ame,..          
21130 20 20 62 6f 6f 6c 20 77 6f 77 36 34 2c 0d 0a 20    bool wow64,.. 
21140 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
21150 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20  whatIf,..       
21160 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73       bool verbos
21170 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29  e..            )
21180 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
21190 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
211a0 6b 65 79 4e 61 6d 65 20 3d 20 47 65 74 46 72 61  keyName = GetFra
211b0 6d 65 77 6f 72 6b 4b 65 79 4e 61 6d 65 28 0d 0a  meworkKeyName(..
211c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
211d0 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c 20 66  frameworkName, f
211e0 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 2c  rameworkVersion,
211f0 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 2c 20 77   platformName, w
21200 6f 77 36 34 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  ow64);....      
21210 20 20 20 20 20 20 75 73 69 6e 67 20 28 4d 6f 63        using (Moc
21220 6b 52 65 67 69 73 74 72 79 4b 65 79 20 6b 65 79  kRegistryKey key
21230 20 3d 20 52 65 67 69 73 74 72 79 48 65 6c 70 65   = RegistryHelpe
21240 72 2e 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20  r.OpenSubKey(.. 
21250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21260 20 20 20 72 6f 6f 74 4b 65 79 2c 20 6b 65 79 4e     rootKey, keyN
21270 61 6d 65 2c 20 66 61 6c 73 65 2c 20 77 68 61 74  ame, false, what
21280 49 66 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a 20  If, verbose)).. 
21290 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
212a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
212b0 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a   (key == null)..
212c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
212d0 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
212e0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
212f0 20 20 20 20 20 69 66 20 28 70 6c 61 74 66 6f 72       if (platfor
21300 6d 4e 61 6d 65 20 21 3d 20 6e 75 6c 6c 29 20 2f  mName != null) /
21310 2f 20 4e 4f 54 45 3a 20 53 6b 69 70 20 6e 6f 6e  / NOTE: Skip non
21320 2d 64 65 73 6b 74 6f 70 2e 0d 0a 20 20 20 20 20  -desktop...     
21330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
21340 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 0d 0a 20  eturn true;.... 
21350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
21360 74 72 69 6e 67 20 64 69 72 65 63 74 6f 72 79 20  tring directory 
21370 3d 20 47 65 74 46 72 61 6d 65 77 6f 72 6b 44 69  = GetFrameworkDi
21380 72 65 63 74 6f 72 79 28 0d 0a 20 20 20 20 20 20  rectory(..      
21390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f                ro
213a0 6f 74 4b 65 79 2c 20 66 72 61 6d 65 77 6f 72 6b  otKey, framework
213b0 56 65 72 73 69 6f 6e 2c 20 77 6f 77 36 34 2c 20  Version, wow64, 
213c0 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29  whatIf, verbose)
213d0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
213e0 20 20 20 20 20 69 66 20 28 53 74 72 69 6e 67 2e       if (String.
213f0 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 64 69  IsNullOrEmpty(di
21400 72 65 63 74 6f 72 79 29 29 0d 0a 20 20 20 20 20  rectory))..     
21410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
21420 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a  eturn false;....
21430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21440 69 66 20 28 21 44 69 72 65 63 74 6f 72 79 2e 45  if (!Directory.E
21450 78 69 73 74 73 28 64 69 72 65 63 74 6f 72 79 29  xists(directory)
21460 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
21470 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
21480 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  lse;....        
21490 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74          return t
214a0 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  rue;..          
214b0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a    }..        }..
214c0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
214d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
214e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
214f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21500 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21510 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69  /....        pri
21520 76 61 74 65 20 73 74 61 74 69 63 20 62 6f 6f 6c  vate static bool
21530 20 46 6f 72 45 61 63 68 46 72 61 6d 65 77 6f 72   ForEachFramewor
21540 6b 43 6f 6e 66 69 67 28 0d 0a 20 20 20 20 20 20  kConfig(..      
21550 20 20 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 74        MockRegist
21560 72 79 20 72 65 67 69 73 74 72 79 2c 0d 0a 20 20  ry registry,..  
21570 20 20 20 20 20 20 20 20 20 20 46 72 61 6d 65 77            Framew
21580 6f 72 6b 4c 69 73 74 20 66 72 61 6d 65 77 6f 72  orkList framewor
21590 6b 4c 69 73 74 2c 0d 0a 20 20 20 20 20 20 20 20  kList,..        
215a0 20 20 20 20 46 72 61 6d 65 77 6f 72 6b 43 6f 6e      FrameworkCon
215b0 66 69 67 43 61 6c 6c 62 61 63 6b 20 63 61 6c 6c  figCallback call
215c0 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20  back,..         
215d0 20 20 20 73 74 72 69 6e 67 20 69 6e 76 61 72 69     string invari
215e0 61 6e 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ant,..          
215f0 20 20 73 74 72 69 6e 67 20 6e 61 6d 65 2c 0d 0a    string name,..
21600 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
21610 6e 67 20 64 65 73 63 72 69 70 74 69 6f 6e 2c 0d  ng description,.
21620 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72  .            str
21630 69 6e 67 20 74 79 70 65 4e 61 6d 65 2c 0d 0a 20  ing typeName,.. 
21640 20 20 20 20 20 20 20 20 20 20 20 41 73 73 65 6d             Assem
21650 62 6c 79 4e 61 6d 65 20 61 73 73 65 6d 62 6c 79  blyName assembly
21660 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  Name,..         
21670 20 20 20 6f 62 6a 65 63 74 20 63 6c 69 65 6e 74     object client
21680 44 61 74 61 2c 0d 0a 20 20 20 20 20 20 20 20 20  Data,..         
21690 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34 2c 0d 0a     bool wow64,..
216a0 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
216b0 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 2c   throwOnMissing,
216c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
216d0 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20  ol whatIf,..    
216e0 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65 72          bool ver
216f0 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  bose,..         
21700 20 20 20 72 65 66 20 62 6f 6f 6c 20 73 61 76 65     ref bool save
21710 64 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  d,..            
21720 72 65 66 20 73 74 72 69 6e 67 20 65 72 72 6f 72  ref string error
21730 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d  ..            ).
21740 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
21750 20 20 20 20 20 20 20 20 69 66 20 28 72 65 67 69          if (regi
21760 73 74 72 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  stry == null).. 
21770 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
21780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72                er
21790 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64 20 72  ror = "invalid r
217a0 65 67 69 73 74 72 79 22 3b 0d 0a 20 20 20 20 20  egistry";..     
217b0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
217c0 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  n false;..      
217d0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
217e0 20 20 20 20 20 20 20 69 66 20 28 66 72 61 6d 65         if (frame
217f0 77 6f 72 6b 4c 69 73 74 20 3d 3d 20 6e 75 6c 6c  workList == null
21800 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
21810 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
21820 20 20 65 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c    error = "inval
21830 69 64 20 66 72 61 6d 65 77 6f 72 6b 20 6c 69 73  id framework lis
21840 74 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  t";..           
21850 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
21860 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
21870 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
21880 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79   MockRegistryKey
21890 20 72 6f 6f 74 4b 65 79 20 3d 20 66 72 61 6d 65   rootKey = frame
218a0 77 6f 72 6b 4c 69 73 74 2e 52 6f 6f 74 4b 65 79  workList.RootKey
218b0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
218c0 20 69 66 20 28 72 6f 6f 74 4b 65 79 20 3d 3d 20   if (rootKey == 
218d0 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
218e0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
218f0 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 69        error = "i
21900 6e 76 61 6c 69 64 20 72 6f 6f 74 20 6b 65 79 22  nvalid root key"
21910 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
21920 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
21930 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
21940 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
21950 66 20 28 21 4f 62 6a 65 63 74 2e 52 65 66 65 72  f (!Object.Refer
21960 65 6e 63 65 45 71 75 61 6c 73 28 72 6f 6f 74 4b  enceEquals(rootK
21970 65 79 2c 20 72 65 67 69 73 74 72 79 2e 43 75 72  ey, registry.Cur
21980 72 65 6e 74 55 73 65 72 29 20 26 26 0d 0a 20 20  rentUser) &&..  
21990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 21 4f                !O
219a0 62 6a 65 63 74 2e 52 65 66 65 72 65 6e 63 65 45  bject.ReferenceE
219b0 71 75 61 6c 73 28 72 6f 6f 74 4b 65 79 2c 20 72  quals(rootKey, r
219c0 65 67 69 73 74 72 79 2e 4c 6f 63 61 6c 4d 61 63  egistry.LocalMac
219d0 68 69 6e 65 29 29 0d 0a 20 20 20 20 20 20 20 20  hine))..        
219e0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
219f0 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22         error = "
21a00 72 6f 6f 74 20 6b 65 79 20 6d 75 73 74 20 62 65  root key must be
21a10 20 70 65 72 2d 75 73 65 72 20 6f 72 20 70 65 72   per-user or per
21a20 2d 6d 61 63 68 69 6e 65 22 3b 0d 0a 20 20 20 20  -machine";..    
21a30 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
21a40 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20  rn false;..     
21a50 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
21a60 20 20 20 20 20 20 20 20 69 66 20 28 66 72 61 6d          if (fram
21a70 65 77 6f 72 6b 4c 69 73 74 2e 4e 61 6d 65 73 20  eworkList.Names 
21a80 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
21a90 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
21aa0 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
21ab0 20 22 6e 6f 20 66 72 61 6d 65 77 6f 72 6b 20 6e   "no framework n
21ac0 61 6d 65 73 20 66 6f 75 6e 64 22 3b 0d 0a 20 20  ames found";..  
21ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
21ae0 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20  turn false;..   
21af0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
21b00 20 20 20 20 20 20 20 20 20 20 69 66 20 28 66 72            if (fr
21b10 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 56 65 72 73  ameworkList.Vers
21b20 69 6f 6e 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  ions == null).. 
21b30 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
21b40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72                er
21b50 72 6f 72 20 3d 20 22 6e 6f 20 66 72 61 6d 65 77  ror = "no framew
21b60 6f 72 6b 20 76 65 72 73 69 6f 6e 73 20 66 6f 75  ork versions fou
21b70 6e 64 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  nd";..          
21b80 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
21b90 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se;..           
21ba0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
21bb0 20 20 69 66 20 28 66 72 61 6d 65 77 6f 72 6b 4c    if (frameworkL
21bc0 69 73 74 2e 50 6c 61 74 66 6f 72 6d 4e 61 6d 65  ist.PlatformName
21bd0 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  s == null)..    
21be0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
21bf0 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72             error
21c00 20 3d 20 22 6e 6f 20 70 6c 61 74 66 6f 72 6d 20   = "no platform 
21c10 6e 61 6d 65 73 20 66 6f 75 6e 64 22 3b 0d 0a 20  names found";.. 
21c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
21c30 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20  eturn false;..  
21c40 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
21c50 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 66             if (f
21c60 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 4e 61 6d  rameworkList.Nam
21c70 65 73 2e 43 6f 75 6e 74 20 21 3d 20 66 72 61 6d  es.Count != fram
21c80 65 77 6f 72 6b 4c 69 73 74 2e 50 6c 61 74 66 6f  eworkList.Platfo
21c90 72 6d 4e 61 6d 65 73 2e 43 6f 75 6e 74 29 0d 0a  rmNames.Count)..
21ca0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
21cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
21cc0 72 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f  rror = String.Fo
21cd0 72 6d 61 74 28 22 66 72 61 6d 65 77 6f 72 6b 20  rmat("framework 
21ce0 6e 61 6d 65 20 63 6f 75 6e 74 20 7b 30 7d 20 64  name count {0} d
21cf0 6f 65 73 20 6e 6f 74 20 22 20 2b 0d 0a 20 20 20  oes not " +..   
21d00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21d10 20 22 6d 61 74 63 68 20 70 6c 61 74 66 6f 72 6d   "match platform
21d20 20 6e 61 6d 65 20 63 6f 75 6e 74 20 7b 31 7d 22   name count {1}"
21d30 2c 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e  , frameworkList.
21d40 4e 61 6d 65 73 2e 43 6f 75 6e 74 2c 0d 0a 20 20  Names.Count,..  
21d50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21d60 20 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e    frameworkList.
21d70 50 6c 61 74 66 6f 72 6d 4e 61 6d 65 73 2e 43 6f  PlatformNames.Co
21d80 75 6e 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  unt);....       
21d90 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
21da0 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20  false;..        
21db0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
21dc0 20 20 20 20 20 66 6f 72 20 28 69 6e 74 20 69 6e       for (int in
21dd0 64 65 78 20 3d 20 30 3b 20 69 6e 64 65 78 20 3c  dex = 0; index <
21de0 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 4e   frameworkList.N
21df0 61 6d 65 73 2e 43 6f 75 6e 74 3b 20 69 6e 64 65  ames.Count; inde
21e00 78 2b 2b 29 0d 0a 20 20 20 20 20 20 20 20 20 20  x++)..          
21e10 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
21e20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
21e30 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45           // NOTE
21e40 3a 20 47 72 61 62 20 74 68 65 20 6e 61 6d 65 20  : Grab the name 
21e50 6f 66 20 74 68 65 20 66 72 61 6d 65 77 6f 72 6b  of the framework
21e60 20 28 65 2e 67 2e 20 22 2e 4e 45 54 46 72 61 6d   (e.g. ".NETFram
21e70 65 77 6f 72 6b 22 29 0d 0a 20 20 20 20 20 20 20  ework")..       
21e80 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
21e90 20 20 61 6e 64 20 74 68 65 20 6e 61 6d 65 20 6f    and the name o
21ea0 66 20 74 68 65 20 70 6c 61 74 66 6f 72 6d 20 28  f the platform (
21eb0 65 2e 67 2e 20 22 57 69 6e 64 6f 77 73 43 45 22  e.g. "WindowsCE"
21ec0 29 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  )...            
21ed0 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
21ee0 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 66          string f
21ef0 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 20 3d 20 66  rameworkName = f
21f00 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 4e 61 6d  rameworkList.Nam
21f10 65 73 5b 69 6e 64 65 78 5d 3b 0d 0a 20 20 20 20  es[index];..    
21f20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
21f30 6e 67 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 20  ng platformName 
21f40 3d 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e  = frameworkList.
21f50 50 6c 61 74 66 6f 72 6d 4e 61 6d 65 73 5b 69 6e  PlatformNames[in
21f60 64 65 78 5d 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  dex];....       
21f70 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
21f80 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
21f90 4e 4f 54 45 3a 20 53 6b 69 70 20 61 6c 6c 20 6e  NOTE: Skip all n
21fa0 6f 6e 2d 64 65 73 6b 74 6f 70 20 66 72 61 6d 65  on-desktop frame
21fb0 77 6f 72 6b 73 20 28 69 2e 65 2e 20 69 66 20 74  works (i.e. if t
21fc0 68 65 20 70 6c 61 74 66 6f 72 6d 0d 0a 20 20 20  he platform..   
21fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
21fe0 20 20 20 20 20 20 6e 61 6d 65 20 69 73 20 6e 6f        name is no
21ff0 74 20 6e 75 6c 6c 29 2e 0d 0a 20 20 20 20 20 20  t null)...      
22000 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
22010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
22020 20 28 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 20 21   (platformName !
22030 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
22040 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
22050 74 69 6e 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  tinue;....      
22060 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
22070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
22080 20 4e 4f 54 45 3a 20 47 72 61 62 20 74 68 65 20   NOTE: Grab the 
22090 73 75 70 70 6f 72 74 65 64 20 76 65 72 73 69 6f  supported versio
220a0 6e 73 20 6f 66 20 74 68 69 73 20 70 61 72 74 69  ns of this parti
220b0 63 75 6c 61 72 0d 0a 20 20 20 20 20 20 20 20 20  cular..         
220c0 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
220d0 66 72 61 6d 65 77 6f 72 6b 2e 0d 0a 20 20 20 20  framework...    
220e0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
220f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22100 56 65 72 73 69 6f 6e 4c 69 73 74 20 66 72 61 6d  VersionList fram
22110 65 77 6f 72 6b 56 65 72 73 69 6f 6e 4c 69 73 74  eworkVersionList
22120 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
22130 20 20 20 20 20 69 66 20 28 21 66 72 61 6d 65 77       if (!framew
22140 6f 72 6b 4c 69 73 74 2e 56 65 72 73 69 6f 6e 73  orkList.Versions
22150 2e 54 72 79 47 65 74 56 61 6c 75 65 28 0d 0a 20  .TryGetValue(.. 
22160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22170 20 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b         framework
22180 4e 61 6d 65 2c 20 6f 75 74 20 66 72 61 6d 65 77  Name, out framew
22190 6f 72 6b 56 65 72 73 69 6f 6e 4c 69 73 74 29 20  orkVersionList) 
221a0 7c 7c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ||..            
221b0 20 20 20 20 20 20 20 20 28 66 72 61 6d 65 77 6f          (framewo
221c0 72 6b 56 65 72 73 69 6f 6e 4c 69 73 74 20 3d 3d  rkVersionList ==
221d0 20 6e 75 6c 6c 29 29 0d 0a 20 20 20 20 20 20 20   null))..       
221e0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
221f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22200 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20  continue;..     
22210 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
22220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22230 66 6f 72 65 61 63 68 20 28 56 65 72 73 69 6f 6e  foreach (Version
22240 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f   frameworkVersio
22250 6e 20 69 6e 20 66 72 61 6d 65 77 6f 72 6b 56 65  n in frameworkVe
22260 72 73 69 6f 6e 4c 69 73 74 29 0d 0a 20 20 20 20  rsionList)..    
22270 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
22280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22290 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75     TraceOps.Debu
222a0 67 41 6e 64 54 72 61 63 65 28 54 72 61 63 65 50  gAndTrace(TraceP
222b0 72 69 6f 72 69 74 79 2e 4c 6f 77 65 72 2c 0d 0a  riority.Lower,..
222c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
222d0 20 20 20 20 20 20 20 20 64 65 62 75 67 43 61 6c          debugCal
222e0 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c  lback, traceCall
222f0 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72  back, String.For
22300 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
22310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 66                "f
22320 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 20 3d 20 7b  rameworkName = {
22330 30 7d 2c 20 66 72 61 6d 65 77 6f 72 6b 56 65 72  0}, frameworkVer
22340 73 69 6f 6e 20 3d 20 7b 31 7d 2c 20 22 20 2b 0d  sion = {1}, " +.
22350 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
22360 20 20 20 20 20 20 20 20 20 22 70 6c 61 74 66 6f           "platfo
22370 72 6d 4e 61 6d 65 20 3d 20 7b 32 7d 22 2c 20 46  rmName = {2}", F
22380 6f 72 44 69 73 70 6c 61 79 28 66 72 61 6d 65 77  orDisplay(framew
22390 6f 72 6b 4e 61 6d 65 29 2c 0d 0a 20 20 20 20 20  orkName),..     
223a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
223b0 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 66 72     ForDisplay(fr
223c0 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 29 2c  ameworkVersion),
223d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
223e0 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73            ForDis
223f0 70 6c 61 79 28 70 6c 61 74 66 6f 72 6d 4e 61 6d  play(platformNam
22400 65 29 29 2c 20 74 72 61 63 65 43 61 74 65 67 6f  e)), traceCatego
22410 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
22420 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
22430 21 48 61 76 65 46 72 61 6d 65 77 6f 72 6b 28 0d  !HaveFramework(.
22440 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
22450 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f               roo
22460 74 4b 65 79 2c 20 66 72 61 6d 65 77 6f 72 6b 4e  tKey, frameworkN
22470 61 6d 65 2c 20 66 72 61 6d 65 77 6f 72 6b 56 65  ame, frameworkVe
22480 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20  rsion,..        
22490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
224a0 20 20 20 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65      platformName
224b0 2c 20 77 6f 77 36 34 2c 20 77 68 61 74 49 66 2c  , wow64, whatIf,
224c0 20 76 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 20   verbose))..    
224d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
224e0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
224f0 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
22500 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63  Ops.DebugAndTrac
22510 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e  e(TracePriority.
22520 4c 6f 77 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  Low,..          
22530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22540 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c    debugCallback,
22550 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 0d   traceCallback,.
22560 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
22570 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2e 4e               ".N
22580 45 54 20 46 72 61 6d 65 77 6f 72 6b 20 6e 6f 74  ET Framework not
22590 20 66 6f 75 6e 64 2c 20 73 6b 69 70 70 69 6e 67   found, skipping
225a0 2e 2e 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  ...",..         
225b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
225c0 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
225d0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
225e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
225f0 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20  ntinue;..       
22600 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
22610 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
22620 20 20 20 20 20 20 69 66 20 28 63 61 6c 6c 62 61        if (callba
22630 63 6b 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ck == null)..   
22640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22650 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a       continue;..
22660 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
22670 20 20 20 20 20 20 73 74 72 69 6e 67 20 64 69 72        string dir
22680 65 63 74 6f 72 79 20 3d 20 47 65 74 46 72 61 6d  ectory = GetFram
22690 65 77 6f 72 6b 44 69 72 65 63 74 6f 72 79 28 0d  eworkDirectory(.
226a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
226b0 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79           rootKey
226c0 2c 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69  , frameworkVersi
226d0 6f 6e 2c 20 77 6f 77 36 34 2c 20 77 68 61 74 49  on, wow64, whatI
226e0 66 2c 20 76 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a  f, verbose);....
226f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22700 20 20 20 20 69 66 20 28 53 74 72 69 6e 67 2e 49      if (String.I
22710 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 64 69 72  sNullOrEmpty(dir
22720 65 63 74 6f 72 79 29 29 0d 0a 20 20 20 20 20 20  ectory))..      
22730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
22740 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
22750 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70           TraceOp
22760 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28  s.DebugAndTrace(
22770 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f  TracePriority.Lo
22780 77 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  w,..            
22790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
227a0 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74  debugCallback, t
227b0 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74  raceCallback, St
227c0 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
227d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
227e0 20 20 20 20 20 20 20 20 20 20 22 2e 4e 45 54 20            ".NET 
227f0 46 72 61 6d 65 77 6f 72 6b 20 7b 30 7d 20 64 69  Framework {0} di
22800 72 65 63 74 6f 72 79 20 69 73 20 69 6e 76 61 6c  rectory is inval
22810 69 64 2c 20 22 20 2b 0d 0a 20 20 20 20 20 20 20  id, " +..       
22820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22830 20 20 20 20 20 22 73 6b 69 70 70 69 6e 67 2e 2e       "skipping..
22840 2e 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 66  .", ForDisplay(f
22850 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 29  rameworkVersion)
22860 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
22870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22880 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
22890 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
228a0 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69             conti
228b0 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  nue;..          
228c0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
228d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
228e0 20 20 20 64 69 72 65 63 74 6f 72 79 20 3d 20 50     directory = P
228f0 61 74 68 2e 43 6f 6d 62 69 6e 65 28 64 69 72 65  ath.Combine(dire
22900 63 74 6f 72 79 2c 20 22 43 6f 6e 66 69 67 22 29  ctory, "Config")
22910 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
22920 20 20 20 20 20 20 20 20 20 69 66 20 28 21 44 69           if (!Di
22930 72 65 63 74 6f 72 79 2e 45 78 69 73 74 73 28 64  rectory.Exists(d
22940 69 72 65 63 74 6f 72 79 29 29 0d 0a 20 20 20 20  irectory))..    
22950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22960 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
22970 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
22980 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63  Ops.DebugAndTrac
22990 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e  e(TracePriority.
229a0 4c 6f 77 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  Low,..          
229b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
229c0 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c    debugCallback,
229d0 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20   traceCallback, 
229e0 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
229f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22a00 20 20 20 20 20 20 20 20 20 20 20 20 22 2e 4e 45              ".NE
22a10 54 20 46 72 61 6d 65 77 6f 72 6b 20 7b 30 7d 20  T Framework {0} 
22a20 64 69 72 65 63 74 6f 72 79 20 7b 31 7d 20 64 6f  directory {1} do
22a30 65 73 20 6e 6f 74 20 22 20 2b 0d 0a 20 20 20 20  es not " +..    
22a40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22a50 20 20 20 20 20 20 20 20 22 65 78 69 73 74 2c 20          "exist, 
22a60 73 6b 69 70 70 69 6e 67 2e 2e 2e 22 2c 20 46 6f  skipping...", Fo
22a70 72 44 69 73 70 6c 61 79 28 66 72 61 6d 65 77 6f  rDisplay(framewo
22a80 72 6b 56 65 72 73 69 6f 6e 29 2c 0d 0a 20 20 20  rkVersion),..   
22a90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22aa0 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70           ForDisp
22ab0 6c 61 79 28 64 69 72 65 63 74 6f 72 79 29 29 2c  lay(directory)),
22ac0 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
22ad0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
22ae0 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74              cont
22af0 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  inue;..         
22b00 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
22b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22b20 20 20 20 20 73 74 72 69 6e 67 20 66 69 6c 65 4e      string fileN
22b30 61 6d 65 20 3d 20 50 61 74 68 2e 43 6f 6d 62 69  ame = Path.Combi
22b40 6e 65 28 64 69 72 65 63 74 6f 72 79 2c 20 22 6d  ne(directory, "m
22b50 61 63 68 69 6e 65 2e 63 6f 6e 66 69 67 22 29 3b  achine.config");
22b60 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
22b70 20 20 20 20 20 20 20 20 69 66 20 28 21 46 69 6c          if (!Fil
22b80 65 2e 45 78 69 73 74 73 28 66 69 6c 65 4e 61 6d  e.Exists(fileNam
22b90 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e))..           
22ba0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
22bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22bc0 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62      TraceOps.Deb
22bd0 75 67 41 6e 64 54 72 61 63 65 28 54 72 61 63 65  ugAndTrace(Trace
22be0 50 72 69 6f 72 69 74 79 2e 4c 6f 77 2c 0d 0a 20  Priority.Low,.. 
22bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22c00 20 20 20 20 20 20 20 20 20 20 20 64 65 62 75 67             debug
22c10 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43  Callback, traceC
22c20 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e  allback, String.
22c30 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
22c40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22c50 20 20 20 20 20 22 2e 4e 45 54 20 46 72 61 6d 65       ".NET Frame
22c60 77 6f 72 6b 20 7b 30 7d 20 66 69 6c 65 20 7b 31  work {0} file {1
22c70 7d 20 64 6f 65 73 20 6e 6f 74 20 65 78 69 73 74  } does not exist
22c80 2c 20 22 20 2b 0d 0a 20 20 20 20 20 20 20 20 20  , " +..         
22c90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22ca0 20 20 20 22 73 6b 69 70 70 69 6e 67 2e 2e 2e 22     "skipping..."
22cb0 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 66 72 61  , ForDisplay(fra
22cc0 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 29 2c 0d  meworkVersion),.
22cd0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
22ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72               For
22cf0 44 69 73 70 6c 61 79 28 66 69 6c 65 4e 61 6d 65  Display(fileName
22d00 29 29 2c 20 74 72 61 63 65 43 61 74 65 67 6f 72  )), traceCategor
22d10 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
22d20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
22d30 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20  ontinue;..      
22d40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
22d50 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
22d60 20 20 20 20 20 20 20 62 6f 6f 6c 20 6c 6f 63 61         bool loca
22d70 6c 53 61 76 65 64 20 3d 20 66 61 6c 73 65 3b 0d  lSaved = false;.
22d80 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
22d90 20 20 20 20 20 20 20 69 66 20 28 21 63 61 6c 6c         if (!call
22da0 62 61 63 6b 28 0d 0a 20 20 20 20 20 20 20 20 20  back(..         
22db0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22dc0 20 20 20 66 69 6c 65 4e 61 6d 65 2c 20 69 6e 76     fileName, inv
22dd0 61 72 69 61 6e 74 2c 20 6e 61 6d 65 2c 20 64 65  ariant, name, de
22de0 73 63 72 69 70 74 69 6f 6e 2c 20 74 79 70 65 4e  scription, typeN
22df0 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ame,..          
22e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22e10 20 20 61 73 73 65 6d 62 6c 79 4e 61 6d 65 2c 20    assemblyName, 
22e20 63 6c 69 65 6e 74 44 61 74 61 2c 20 77 6f 77 36  clientData, wow6
22e30 34 2c 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e  4, throwOnMissin
22e40 67 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  g,..            
22e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22e60 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 2c  whatIf, verbose,
22e70 20 72 65 66 20 6c 6f 63 61 6c 53 61 76 65 64 2c   ref localSaved,
22e80 20 72 65 66 20 65 72 72 6f 72 29 29 0d 0a 20 20   ref error))..  
22e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22ea0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
22eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
22ec0 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20  urn false;..    
22ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22ee0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
22ef0 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20         else..   
22f00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22f10 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
22f20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
22f30 6c 6f 63 61 6c 53 61 76 65 64 20 26 26 20 21 73  localSaved && !s
22f40 61 76 65 64 29 0d 0a 20 20 20 20 20 20 20 20 20  aved)..         
22f50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22f60 20 20 20 73 61 76 65 64 20 3d 20 74 72 75 65 3b     saved = true;
22f70 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
22f80 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
22f90 76 65 72 62 6f 73 65 29 0d 0a 20 20 20 20 20 20  verbose)..      
22fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22fb0 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44        TraceOps.D
22fc0 65 62 75 67 41 6e 64 54 72 61 63 65 28 54 72 61  ebugAndTrace(Tra
22fd0 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73  cePriority.Lowes
22fe0 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t,..            
22ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23000 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63      debugCallbac
23010 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b  k, traceCallback
23020 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  , String.Format(
23030 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
23040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23050 20 20 22 6c 6f 63 61 6c 53 61 76 65 64 20 3d 20    "localSaved = 
23060 7b 30 7d 2c 20 73 61 76 65 64 20 3d 20 7b 31 7d  {0}, saved = {1}
23070 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
23080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23090 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 6c      ForDisplay(l
230a0 6f 63 61 6c 53 61 76 65 64 29 2c 20 46 6f 72 44  ocalSaved), ForD
230b0 69 73 70 6c 61 79 28 73 61 76 65 64 29 29 2c 0d  isplay(saved)),.
230c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
230d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
230e0 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
230f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
23100 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
23110 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
23120 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
23130 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
23140 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d  true;..        }
23150 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
23160 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23170 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23180 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23190 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
231a0 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70  ///....        p
231b0 72 69 76 61 74 65 20 73 74 61 74 69 63 20 62 6f  rivate static bo
231c0 6f 6c 20 46 6f 72 45 61 63 68 46 72 61 6d 65 77  ol ForEachFramew
231d0 6f 72 6b 52 65 67 69 73 74 72 79 28 0d 0a 20 20  orkRegistry(..  
231e0 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65            MockRe
231f0 67 69 73 74 72 79 20 72 65 67 69 73 74 72 79 2c  gistry registry,
23200 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 46 72  ..            Fr
23210 61 6d 65 77 6f 72 6b 4c 69 73 74 20 66 72 61 6d  ameworkList fram
23220 65 77 6f 72 6b 4c 69 73 74 2c 0d 0a 20 20 20 20  eworkList,..    
23230 20 20 20 20 20 20 20 20 46 72 61 6d 65 77 6f 72          Framewor
23240 6b 52 65 67 69 73 74 72 79 43 61 6c 6c 62 61 63  kRegistryCallbac
23250 6b 20 63 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20  k callback,..   
23260 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20           object 
23270 63 6c 69 65 6e 74 44 61 74 61 2c 0d 0a 20 20 20  clientData,..   
23280 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 6f           bool wo
23290 77 36 34 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  w64,..          
232a0 20 20 62 6f 6f 6c 20 74 68 72 6f 77 4f 6e 4d 69    bool throwOnMi
232b0 73 73 69 6e 67 2c 0d 0a 20 20 20 20 20 20 20 20  ssing,..        
232c0 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c      bool whatIf,
232d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
232e0 6f 6c 20 76 65 72 62 6f 73 65 2c 0d 0a 20 20 20  ol verbose,..   
232f0 20 20 20 20 20 20 20 20 20 72 65 66 20 73 74 72           ref str
23300 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20 20 20  ing error..     
23310 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
23320 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
23330 20 69 66 20 28 72 65 67 69 73 74 72 79 20 3d 3d   if (registry ==
23340 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
23350 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
23360 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22         error = "
23370 69 6e 76 61 6c 69 64 20 72 65 67 69 73 74 72 79  invalid registry
23380 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ";..            
23390 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
233a0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
233b0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
233c0 69 66 20 28 66 72 61 6d 65 77 6f 72 6b 4c 69 73  if (frameworkLis
233d0 74 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  t == null)..    
233e0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
233f0 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72             error
23400 20 3d 20 22 69 6e 76 61 6c 69 64 20 66 72 61 6d   = "invalid fram
23410 65 77 6f 72 6b 20 6c 69 73 74 22 3b 0d 0a 20 20  ework list";..  
23420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
23430 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20  turn false;..   
23440 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
23450 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65            MockRe
23460 67 69 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65  gistryKey rootKe
23470 79 20 3d 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73  y = frameworkLis
23480 74 2e 52 6f 6f 74 4b 65 79 3b 0d 0a 0d 0a 20 20  t.RootKey;....  
23490 20 20 20 20 20 20 20 20 20 20 69 66 20 28 72 6f            if (ro
234a0 6f 74 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  otKey == null)..
234b0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
234c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
234d0 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64 20  rror = "invalid 
234e0 72 6f 6f 74 20 6b 65 79 22 3b 0d 0a 20 20 20 20  root key";..    
234f0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
23500 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20  rn false;..     
23510 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
23520 20 20 20 20 20 20 20 20 69 66 20 28 21 4f 62 6a          if (!Obj
23530 65 63 74 2e 52 65 66 65 72 65 6e 63 65 45 71 75  ect.ReferenceEqu
23540 61 6c 73 28 72 6f 6f 74 4b 65 79 2c 20 72 65 67  als(rootKey, reg
23550 69 73 74 72 79 2e 43 75 72 72 65 6e 74 55 73 65  istry.CurrentUse
23560 72 29 20 26 26 0d 0a 20 20 20 20 20 20 20 20 20  r) &&..         
23570 20 20 20 20 20 20 20 21 4f 62 6a 65 63 74 2e 52         !Object.R
23580 65 66 65 72 65 6e 63 65 45 71 75 61 6c 73 28 72  eferenceEquals(r
23590 6f 6f 74 4b 65 79 2c 20 72 65 67 69 73 74 72 79  ootKey, registry
235a0 2e 4c 6f 63 61 6c 4d 61 63 68 69 6e 65 29 29 0d  .LocalMachine)).
235b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
235c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
235d0 65 72 72 6f 72 20 3d 20 22 72 6f 6f 74 20 6b 65  error = "root ke
235e0 79 20 6d 75 73 74 20 62 65 20 70 65 72 2d 75 73  y must be per-us
235f0 65 72 20 6f 72 20 70 65 72 2d 6d 61 63 68 69 6e  er or per-machin
23600 65 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e";..           
23610 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
23620 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
23630 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
23640 20 69 66 20 28 66 72 61 6d 65 77 6f 72 6b 4c 69   if (frameworkLi
23650 73 74 2e 4e 61 6d 65 73 20 3d 3d 20 6e 75 6c 6c  st.Names == null
23660 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
23670 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
23680 20 20 65 72 72 6f 72 20 3d 20 22 6e 6f 20 66 72    error = "no fr
23690 61 6d 65 77 6f 72 6b 20 6e 61 6d 65 73 20 66 6f  amework names fo
236a0 75 6e 64 22 3b 0d 0a 20 20 20 20 20 20 20 20 20  und";..         
236b0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
236c0 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lse;..          
236d0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
236e0 20 20 20 69 66 20 28 66 72 61 6d 65 77 6f 72 6b     if (framework
236f0 4c 69 73 74 2e 56 65 72 73 69 6f 6e 73 20 3d 3d  List.Versions ==
23700 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
23710 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
23720 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22         error = "
23730 6e 6f 20 66 72 61 6d 65 77 6f 72 6b 20 76 65 72  no framework ver
23740 73 69 6f 6e 73 20 66 6f 75 6e 64 22 3b 0d 0a 20  sions found";.. 
23750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
23760 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20  eturn false;..  
23770 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
23780 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 66             if (f
23790 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 50 6c 61  rameworkList.Pla
237a0 74 66 6f 72 6d 4e 61 6d 65 73 20 3d 3d 20 6e 75  tformNames == nu
237b0 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
237c0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
237d0 20 20 20 20 65 72 72 6f 72 20 3d 20 22 6e 6f 20      error = "no 
237e0 70 6c 61 74 66 6f 72 6d 20 6e 61 6d 65 73 20 66  platform names f
237f0 6f 75 6e 64 22 3b 0d 0a 20 20 20 20 20 20 20 20  ound";..        
23800 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
23810 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alse;..         
23820 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
23830 20 20 20 20 69 66 20 28 66 72 61 6d 65 77 6f 72      if (framewor
23840 6b 4c 69 73 74 2e 4e 61 6d 65 73 2e 43 6f 75 6e  kList.Names.Coun
23850 74 20 21 3d 20 66 72 61 6d 65 77 6f 72 6b 4c 69  t != frameworkLi
23860 73 74 2e 50 6c 61 74 66 6f 72 6d 4e 61 6d 65 73  st.PlatformNames
23870 2e 43 6f 75 6e 74 29 0d 0a 20 20 20 20 20 20 20  .Count)..       
23880 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
23890 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
238a0 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 22 66  String.Format("f
238b0 72 61 6d 65 77 6f 72 6b 20 6e 61 6d 65 20 63 6f  ramework name co
238c0 75 6e 74 20 7b 30 7d 20 64 6f 65 73 20 6e 6f 74  unt {0} does not
238d0 20 22 20 2b 0d 0a 20 20 20 20 20 20 20 20 20 20   " +..          
238e0 20 20 20 20 20 20 20 20 20 20 22 6d 61 74 63 68            "match
238f0 20 70 6c 61 74 66 6f 72 6d 20 6e 61 6d 65 20 63   platform name c
23900 6f 75 6e 74 20 7b 31 7d 22 2c 20 66 72 61 6d 65  ount {1}", frame
23910 77 6f 72 6b 4c 69 73 74 2e 4e 61 6d 65 73 2e 43  workList.Names.C
23920 6f 75 6e 74 2c 0d 0a 20 20 20 20 20 20 20 20 20  ount,..         
23930 20 20 20 20 20 20 20 20 20 20 20 66 72 61 6d 65             frame
23940 77 6f 72 6b 4c 69 73 74 2e 50 6c 61 74 66 6f 72  workList.Platfor
23950 6d 4e 61 6d 65 73 2e 43 6f 75 6e 74 29 3b 0d 0a  mNames.Count);..
23960 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
23970 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
23980 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
23990 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 66 6f  ..            fo
239a0 72 20 28 69 6e 74 20 69 6e 64 65 78 20 3d 20 30  r (int index = 0
239b0 3b 20 69 6e 64 65 78 20 3c 20 66 72 61 6d 65 77  ; index < framew
239c0 6f 72 6b 4c 69 73 74 2e 4e 61 6d 65 73 2e 43 6f  orkList.Names.Co
239d0 75 6e 74 3b 20 69 6e 64 65 78 2b 2b 29 0d 0a 20  unt; index++).. 
239e0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
239f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
23a00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
23a10 20 20 2f 2f 20 4e 4f 54 45 3a 20 47 72 61 62 20    // NOTE: Grab 
23a20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20  the name of the 
23a30 66 72 61 6d 65 77 6f 72 6b 20 28 65 2e 67 2e 20  framework (e.g. 
23a40 22 2e 4e 45 54 46 72 61 6d 65 77 6f 72 6b 22 29  ".NETFramework")
23a50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
23a60 20 20 2f 2f 20 20 20 20 20 20 20 61 6e 64 20 74    //       and t
23a70 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 70  he name of the p
23a80 6c 61 74 66 6f 72 6d 20 28 65 2e 67 2e 20 22 57  latform (e.g. "W
23a90 69 6e 64 6f 77 73 43 45 22 29 2e 0d 0a 20 20 20  indowsCE")...   
23aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
23ab0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
23ac0 20 73 74 72 69 6e 67 20 66 72 61 6d 65 77 6f 72   string framewor
23ad0 6b 4e 61 6d 65 20 3d 20 66 72 61 6d 65 77 6f 72  kName = framewor
23ae0 6b 4c 69 73 74 2e 4e 61 6d 65 73 5b 69 6e 64 65  kList.Names[inde
23af0 78 5d 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  x];..           
23b00 20 20 20 20 20 73 74 72 69 6e 67 20 70 6c 61 74       string plat
23b10 66 6f 72 6d 4e 61 6d 65 20 3d 20 66 72 61 6d 65  formName = frame
23b20 77 6f 72 6b 4c 69 73 74 2e 50 6c 61 74 66 6f 72  workList.Platfor
23b30 6d 4e 61 6d 65 73 5b 69 6e 64 65 78 5d 3b 0d 0a  mNames[index];..
23b40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
23b50 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
23b60 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 47        // NOTE: G
23b70 72 61 62 20 74 68 65 20 73 75 70 70 6f 72 74 65  rab the supporte
23b80 64 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 74 68  d versions of th
23b90 69 73 20 70 61 72 74 69 63 75 6c 61 72 0d 0a 20  is particular.. 
23ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
23bb0 2f 20 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72  /       framewor
23bc0 6b 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  k...            
23bd0 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
23be0 20 20 20 20 20 20 20 20 56 65 72 73 69 6f 6e 4c          VersionL
23bf0 69 73 74 20 66 72 61 6d 65 77 6f 72 6b 56 65 72  ist frameworkVer
23c00 73 69 6f 6e 4c 69 73 74 3b 0d 0a 0d 0a 20 20 20  sionList;....   
23c10 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
23c20 28 21 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e  (!frameworkList.
23c30 56 65 72 73 69 6f 6e 73 2e 54 72 79 47 65 74 56  Versions.TryGetV
23c40 61 6c 75 65 28 0d 0a 20 20 20 20 20 20 20 20 20  alue(..         
23c50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66                 f
23c60 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c 20 6f 75  rameworkName, ou
23c70 74 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69  t frameworkVersi
23c80 6f 6e 4c 69 73 74 29 20 7c 7c 0d 0a 20 20 20 20  onList) ||..    
23c90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23ca0 28 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f  (frameworkVersio
23cb0 6e 4c 69 73 74 20 3d 3d 20 6e 75 6c 6c 29 29 0d  nList == null)).
23cc0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
23cd0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
23ce0 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65          continue
23cf0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
23d00 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
23d10 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20          foreach 
23d20 28 56 65 72 73 69 6f 6e 20 66 72 61 6d 65 77 6f  (Version framewo
23d30 72 6b 56 65 72 73 69 6f 6e 20 69 6e 20 66 72 61  rkVersion in fra
23d40 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 4c 69 73  meworkVersionLis
23d50 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t)..            
23d60 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
23d70 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
23d80 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63  Ops.DebugAndTrac
23d90 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e  e(TracePriority.
23da0 4c 6f 77 65 72 2c 0d 0a 20 20 20 20 20 20 20 20  Lower,..        
23db0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23dc0 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74  debugCallback, t
23dd0 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74  raceCallback, St
23de0 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
23df0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23e00 20 20 20 20 20 20 22 66 72 61 6d 65 77 6f 72 6b        "framework
23e10 4e 61 6d 65 20 3d 20 7b 30 7d 2c 20 66 72 61 6d  Name = {0}, fram
23e20 65 77 6f 72 6b 56 65 72 73 69 6f 6e 20 3d 20 7b  eworkVersion = {
23e30 31 7d 2c 20 22 20 2b 0d 0a 20 20 20 20 20 20 20  1}, " +..       
23e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23e50 20 22 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 20 3d   "platformName =
23e60 20 7b 32 7d 22 2c 20 46 6f 72 44 69 73 70 6c 61   {2}", ForDispla
23e70 79 28 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 29  y(frameworkName)
23e80 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
23e90 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69             ForDi
23ea0 73 70 6c 61 79 28 66 72 61 6d 65 77 6f 72 6b 56  splay(frameworkV
23eb0 65 72 73 69 6f 6e 29 2c 0d 0a 20 20 20 20 20 20  ersion),..      
23ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23ed0 20 20 46 6f 72 44 69 73 70 6c 61 79 28 70 6c 61    ForDisplay(pla
23ee0 74 66 6f 72 6d 4e 61 6d 65 29 29 2c 20 74 72 61  tformName)), tra
23ef0 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
23f00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23f10 20 20 20 20 69 66 20 28 21 48 61 76 65 46 72 61      if (!HaveFra
23f20 6d 65 77 6f 72 6b 28 0d 0a 20 20 20 20 20 20 20  mework(..       
23f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23f40 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 66 72       rootKey, fr
23f50 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c 20 66 72 61  ameworkName, fra
23f60 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 2c 0d 0a  meworkVersion,..
23f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23f80 20 20 20 20 20 20 20 20 20 20 20 20 70 6c 61 74              plat
23f90 66 6f 72 6d 4e 61 6d 65 2c 20 77 6f 77 36 34 2c  formName, wow64,
23fa0 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65   whatIf, verbose
23fb0 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
23fc0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
23fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23fe0 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75     TraceOps.Debu
23ff0 67 41 6e 64 54 72 61 63 65 28 54 72 61 63 65 50  gAndTrace(TraceP
24000 72 69 6f 72 69 74 79 2e 4c 6f 77 2c 0d 0a 20 20  riority.Low,..  
24010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24020 20 20 20 20 20 20 20 20 20 20 64 65 62 75 67 43            debugC
24030 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61  allback, traceCa
24040 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20  llback,..       
24050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24060 20 20 20 20 20 22 2e 4e 45 54 20 46 72 61 6d 65       ".NET Frame
24070 77 6f 72 6b 20 6e 6f 74 20 66 6f 75 6e 64 2c 20  work not found, 
24080 73 6b 69 70 70 69 6e 67 2e 2e 2e 22 2c 0d 0a 20  skipping...",.. 
24090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
240a0 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
240b0 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
240c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
240d0 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d        continue;.
240e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
240f0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
24100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
24110 20 28 63 61 6c 6c 62 61 63 6b 20 3d 3d 20 6e 75   (callback == nu
24120 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
24130 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
24140 74 69 6e 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  tinue;....      
24150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
24160 20 28 21 63 61 6c 6c 62 61 63 6b 28 0d 0a 20 20   (!callback(..  
24170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24180 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65            rootKe
24190 79 2c 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65  y, frameworkName
241a0 2c 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69  , frameworkVersi
241b0 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  on,..           
241c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
241d0 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 2c 20 63   platformName, c
241e0 6c 69 65 6e 74 44 61 74 61 2c 20 77 6f 77 36 34  lientData, wow64
241f0 2c 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67  , throwOnMissing
24200 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
24210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 77                 w
24220 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 2c 20  hatIf, verbose, 
24230 72 65 66 20 65 72 72 6f 72 29 29 0d 0a 20 20 20  ref error))..   
24240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24250 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
24260 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
24270 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20  rn false;..     
24280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
24290 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
242a0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
242b0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
242c0 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a    return true;..
242d0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
242e0 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
242f0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
24300 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24310 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24320 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24330 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24340 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67  ....        #reg
24350 69 6f 6e 20 50 65 72 2d 56 69 73 75 61 6c 20 53  ion Per-Visual S
24360 74 75 64 69 6f 20 56 65 72 73 69 6f 6e 20 48 61  tudio Version Ha
24370 6e 64 6c 69 6e 67 0d 0a 20 20 20 20 20 20 20 20  ndling..        
24380 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 76  private static v
24390 6f 69 64 20 49 6e 69 74 69 61 6c 69 7a 65 56 73  oid InitializeVs
243a0 4c 69 73 74 28 0d 0a 20 20 20 20 20 20 20 20 20  List(..         
243b0 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b     MockRegistryK
243c0 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20  ey rootKey,..   
243d0 20 20 20 20 20 20 20 20 20 43 6f 6e 66 69 67 75           Configu
243e0 72 61 74 69 6f 6e 20 63 6f 6e 66 69 67 75 72 61  ration configura
243f0 74 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20  tion,..         
24400 20 20 20 72 65 66 20 56 73 4c 69 73 74 20 76 73     ref VsList vs
24410 4c 69 73 74 0d 0a 20 20 20 20 20 20 20 20 20 20  List..          
24420 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a    )..        {..
24430 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
24440 76 73 4c 69 73 74 20 3d 3d 20 6e 75 6c 6c 29 0d  vsList == null).
24450 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
24460 20 76 73 4c 69 73 74 20 3d 20 6e 65 77 20 56 73   vsList = new Vs
24470 4c 69 73 74 28 29 3b 0d 0a 0d 0a 20 20 20 20 20  List();....     
24480 20 20 20 20 20 20 20 69 66 20 28 76 73 4c 69 73         if (vsLis
24490 74 2e 52 6f 6f 74 4b 65 79 20 3d 3d 20 6e 75 6c  t.RootKey == nul
244a0 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
244b0 20 20 20 20 76 73 4c 69 73 74 2e 52 6f 6f 74 4b      vsList.RootK
244c0 65 79 20 3d 20 72 6f 6f 74 4b 65 79 3b 0d 0a 0d  ey = rootKey;...
244d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
244e0 28 76 73 4c 69 73 74 2e 56 65 72 73 69 6f 6e 73  (vsList.Versions
244f0 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
24500 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
24510 20 20 20 20 20 20 20 20 20 20 76 73 4c 69 73 74            vsList
24520 2e 56 65 72 73 69 6f 6e 73 20 3d 20 6e 65 77 20  .Versions = new 
24530 56 65 72 73 69 6f 6e 4c 69 73 74 28 29 3b 0d 0a  VersionList();..
24540 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
24550 20 20 2f 2f 20 76 73 4c 69 73 74 2e 56 65 72 73    // vsList.Vers
24560 69 6f 6e 73 2e 41 64 64 28 6e 65 77 20 56 65 72  ions.Add(new Ver
24570 73 69 6f 6e 28 38 2c 20 30 29 29 3b 20 2f 2f 20  sion(8, 0)); // 
24580 56 69 73 75 61 6c 20 53 74 75 64 69 6f 20 32 30  Visual Studio 20
24590 30 35 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  05....          
245a0 20 20 20 20 20 20 69 66 20 28 28 63 6f 6e 66 69        if ((confi
245b0 67 75 72 61 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c  guration == null
245c0 29 20 7c 7c 20 21 63 6f 6e 66 69 67 75 72 61 74  ) || !configurat
245d0 69 6f 6e 2e 4e 6f 56 73 32 30 30 38 29 0d 0a 20  ion.NoVs2008).. 
245e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
245f0 20 20 20 76 73 4c 69 73 74 2e 56 65 72 73 69 6f     vsList.Versio
24600 6e 73 2e 41 64 64 28 6e 65 77 20 56 65 72 73 69  ns.Add(new Versi
24610 6f 6e 28 39 2c 20 30 29 29 3b 20 2f 2f 20 56 69  on(9, 0)); // Vi
24620 73 75 61 6c 20 53 74 75 64 69 6f 20 32 30 30 38  sual Studio 2008
24630 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
24640 20 20 20 20 69 66 20 28 28 63 6f 6e 66 69 67 75      if ((configu
24650 72 61 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 20  ration == null) 
24660 7c 7c 20 21 63 6f 6e 66 69 67 75 72 61 74 69 6f  || !configuratio
24670 6e 2e 4e 6f 56 73 32 30 31 30 29 0d 0a 20 20 20  n.NoVs2010)..   
24680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24690 20 76 73 4c 69 73 74 2e 56 65 72 73 69 6f 6e 73   vsList.Versions
246a0 2e 41 64 64 28 6e 65 77 20 56 65 72 73 69 6f 6e  .Add(new Version
246b0 28 31 30 2c 20 30 29 29 3b 2f 2f 20 56 69 73 75  (10, 0));// Visu
246c0 61 6c 20 53 74 75 64 69 6f 20 32 30 31 30 0d 0a  al Studio 2010..
246d0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
246e0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
246f0 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
24700 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24710 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24720 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24730 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
24740 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
24750 74 61 74 69 63 20 62 6f 6f 6c 20 48 61 76 65 56  tatic bool HaveV
24760 73 56 65 72 73 69 6f 6e 28 0d 0a 20 20 20 20 20  sVersion(..     
24770 20 20 20 20 20 20 20 4d 6f 63 6b 52 65 67 69 73         MockRegis
24780 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79 2c 0d  tryKey rootKey,.
24790 0a 20 20 20 20 20 20 20 20 20 20 20 20 56 65 72  .            Ver
247a0 73 69 6f 6e 20 76 73 56 65 72 73 69 6f 6e 2c 0d  sion vsVersion,.
247b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f  .            boo
247c0 6c 20 77 6f 77 36 34 2c 0d 0a 20 20 20 20 20 20  l wow64,..      
247d0 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49        bool whatI
247e0 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  f,..            
247f0 62 6f 6f 6c 20 76 65 72 62 6f 73 65 0d 0a 20 20  bool verbose..  
24800 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
24810 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
24820 20 20 20 20 69 66 20 28 76 73 56 65 72 73 69 6f      if (vsVersio
24830 6e 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  n == null)..    
24840 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
24850 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20  rn false;....   
24860 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
24870 6b 65 79 4e 61 6d 65 20 3d 20 47 65 74 56 73 4b  keyName = GetVsK
24880 65 79 4e 61 6d 65 28 76 73 56 65 72 73 69 6f 6e  eyName(vsVersion
24890 2c 20 77 6f 77 36 34 29 3b 0d 0a 0d 0a 20 20 20  , wow64);....   
248a0 20 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28           using (
248b0 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20  MockRegistryKey 
248c0 6b 65 79 20 3d 20 52 65 67 69 73 74 72 79 48 65  key = RegistryHe
248d0 6c 70 65 72 2e 4f 70 65 6e 53 75 62 4b 65 79 28  lper.OpenSubKey(
248e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
248f0 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 6b        rootKey, k
24900 65 79 4e 61 6d 65 2c 20 66 61 6c 73 65 2c 20 77  eyName, false, w
24910 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 29  hatIf, verbose))
24920 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
24930 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
24940 20 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c   if (key == null
24950 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
24960 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
24970 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  lse;....        
24980 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 76          object v
24990 61 6c 75 65 20 3d 20 52 65 67 69 73 74 72 79 48  alue = RegistryH
249a0 65 6c 70 65 72 2e 47 65 74 56 61 6c 75 65 28 0d  elper.GetValue(.
249b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
249c0 20 20 20 20 20 6b 65 79 2c 20 22 49 6e 73 74 61       key, "Insta
249d0 6c 6c 44 69 72 22 2c 20 6e 75 6c 6c 2c 20 77 68  llDir", null, wh
249e0 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 3b 0d  atIf, verbose);.
249f0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
24a00 20 20 20 69 66 20 28 21 28 76 61 6c 75 65 20 69     if (!(value i
24a10 73 20 73 74 72 69 6e 67 29 29 0d 0a 20 20 20 20  s string))..    
24a20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24a30 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d  return false;...
24a40 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
24a50 20 73 74 72 69 6e 67 20 64 69 72 65 63 74 6f 72   string director
24a60 79 20 3d 20 28 73 74 72 69 6e 67 29 76 61 6c 75  y = (string)valu
24a70 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
24a80 20 20 20 20 20 20 69 66 20 28 53 74 72 69 6e 67        if (String
24a90 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 64  .IsNullOrEmpty(d
24aa0 69 72 65 63 74 6f 72 79 29 29 0d 0a 20 20 20 20  irectory))..    
24ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24ac0 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d  return false;...
24ad0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
24ae0 20 69 66 20 28 21 44 69 72 65 63 74 6f 72 79 2e   if (!Directory.
24af0 45 78 69 73 74 73 28 64 69 72 65 63 74 6f 72 79  Exists(directory
24b00 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
24b10 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
24b20 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  alse;....       
24b30 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
24b40 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  true;..         
24b50 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d     }..        }.
24b60 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
24b70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24b80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24b90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24ba0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24bb0 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72  //....        pr
24bc0 69 76 61 74 65 20 73 74 61 74 69 63 20 62 6f 6f  ivate static boo
24bd0 6c 20 46 6f 72 45 61 63 68 56 73 56 65 72 73 69  l ForEachVsVersi
24be0 6f 6e 52 65 67 69 73 74 72 79 28 0d 0a 20 20 20  onRegistry(..   
24bf0 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65 67           MockReg
24c00 69 73 74 72 79 20 72 65 67 69 73 74 72 79 2c 0d  istry registry,.
24c10 0a 20 20 20 20 20 20 20 20 20 20 20 20 56 73 4c  .            VsL
24c20 69 73 74 20 76 73 4c 69 73 74 2c 0d 0a 20 20 20  ist vsList,..   
24c30 20 20 20 20 20 20 20 20 20 56 69 73 75 61 6c 53           VisualS
24c40 74 75 64 69 6f 52 65 67 69 73 74 72 79 43 61 6c  tudioRegistryCal
24c50 6c 62 61 63 6b 20 63 61 6c 6c 62 61 63 6b 2c 0d  lback callback,.
24c60 0a 20 20 20 20 20 20 20 20 20 20 20 20 50 61 63  .            Pac
24c70 6b 61 67 65 20 70 61 63 6b 61 67 65 2c 0d 0a 20  kage package,.. 
24c80 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63             objec
24c90 74 20 63 6c 69 65 6e 74 44 61 74 61 2c 0d 0a 20  t clientData,.. 
24ca0 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
24cb0 77 6f 77 36 34 2c 0d 0a 20 20 20 20 20 20 20 20  wow64,..        
24cc0 20 20 20 20 62 6f 6f 6c 20 74 68 72 6f 77 4f 6e      bool throwOn
24cd0 4d 69 73 73 69 6e 67 2c 0d 0a 20 20 20 20 20 20  Missing,..      
24ce0 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49        bool whatI
24cf0 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  f,..            
24d00 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 0d 0a 20  bool verbose,.. 
24d10 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20 73             ref s
24d20 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20  tring error..   
24d30 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
24d40 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
24d50 20 20 20 69 66 20 28 72 65 67 69 73 74 72 79 20     if (registry 
24d60 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
24d70 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
24d80 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
24d90 20 22 69 6e 76 61 6c 69 64 20 72 65 67 69 73 74   "invalid regist
24da0 72 79 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ry";..          
24db0 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
24dc0 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se;..           
24dd0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
24de0 20 20 69 66 20 28 76 73 4c 69 73 74 20 3d 3d 20    if (vsList == 
24df0 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
24e00 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
24e10 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 69        error = "i
24e20 6e 76 61 6c 69 64 20 56 53 20 6c 69 73 74 22 3b  nvalid VS list";
24e30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
24e40 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
24e50 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
24e60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 4d 6f  ..            Mo
24e70 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 72 6f  ckRegistryKey ro
24e80 6f 74 4b 65 79 20 3d 20 76 73 4c 69 73 74 2e 52  otKey = vsList.R
24e90 6f 6f 74 4b 65 79 3b 0d 0a 0d 0a 20 20 20 20 20  ootKey;....     
24ea0 20 20 20 20 20 20 20 69 66 20 28 72 6f 6f 74 4b         if (rootK
24eb0 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ey == null)..   
24ec0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
24ed0 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
24ee0 72 20 3d 20 22 69 6e 76 61 6c 69 64 20 72 6f 6f  r = "invalid roo
24ef0 74 20 6b 65 79 22 3b 0d 0a 20 20 20 20 20 20 20  t key";..       
24f00 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
24f10 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20  false;..        
24f20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
24f30 20 20 20 20 20 69 66 20 28 21 4f 62 6a 65 63 74       if (!Object
24f40 2e 52 65 66 65 72 65 6e 63 65 45 71 75 61 6c 73  .ReferenceEquals
24f50 28 72 6f 6f 74 4b 65 79 2c 20 72 65 67 69 73 74  (rootKey, regist
24f60 72 79 2e 43 75 72 72 65 6e 74 55 73 65 72 29 20  ry.CurrentUser) 
24f70 26 26 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  &&..            
24f80 20 20 20 20 21 4f 62 6a 65 63 74 2e 52 65 66 65      !Object.Refe
24f90 72 65 6e 63 65 45 71 75 61 6c 73 28 72 6f 6f 74  renceEquals(root
24fa0 4b 65 79 2c 20 72 65 67 69 73 74 72 79 2e 4c 6f  Key, registry.Lo
24fb0 63 61 6c 4d 61 63 68 69 6e 65 29 29 0d 0a 20 20  calMachine))..  
24fc0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
24fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
24fe0 6f 72 20 3d 20 22 72 6f 6f 74 20 6b 65 79 20 6d  or = "root key m
24ff0 75 73 74 20 62 65 20 70 65 72 2d 75 73 65 72 20  ust be per-user 
25000 6f 72 20 70 65 72 2d 6d 61 63 68 69 6e 65 22 3b  or per-machine";
25010 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
25020 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
25030 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
25040 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
25050 20 28 76 73 4c 69 73 74 2e 56 65 72 73 69 6f 6e   (vsList.Version
25060 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  s == null)..    
25070 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
25080 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72             error
25090 20 3d 20 22 6e 6f 20 56 53 20 76 65 72 73 69 6f   = "no VS versio
250a0 6e 73 20 66 6f 75 6e 64 22 3b 0d 0a 20 20 20 20  ns found";..    
250b0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
250c0 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20  rn false;..     
250d0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
250e0 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20          foreach 
250f0 28 56 65 72 73 69 6f 6e 20 76 73 56 65 72 73 69  (Version vsVersi
25100 6f 6e 20 69 6e 20 76 73 4c 69 73 74 2e 56 65 72  on in vsList.Ver
25110 73 69 6f 6e 73 29 0d 0a 20 20 20 20 20 20 20 20  sions)..        
25120 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
25130 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e         TraceOps.
25140 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 54 72  DebugAndTrace(Tr
25150 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65  acePriority.Lowe
25160 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  r,..            
25170 20 20 20 20 20 20 20 20 64 65 62 75 67 43 61 6c          debugCal
25180 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c  lback, traceCall
25190 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72  back, String.For
251a0 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
251b0 20 20 20 20 20 20 20 20 20 20 22 76 73 56 65 72            "vsVer
251c0 73 69 6f 6e 20 3d 20 7b 30 7d 22 2c 20 46 6f 72  sion = {0}", For
251d0 44 69 73 70 6c 61 79 28 76 73 56 65 72 73 69 6f  Display(vsVersio
251e0 6e 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  n)),..          
251f0 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
25200 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20  ategory);....   
25210 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
25220 28 21 48 61 76 65 56 73 56 65 72 73 69 6f 6e 28  (!HaveVsVersion(
25230 72 6f 6f 74 4b 65 79 2c 20 76 73 56 65 72 73 69  rootKey, vsVersi
25240 6f 6e 2c 20 77 6f 77 36 34 2c 20 77 68 61 74 49  on, wow64, whatI
25250 66 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a 20 20  f, verbose))..  
25260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
25270 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
25280 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65       TraceOps.De
25290 62 75 67 41 6e 64 54 72 61 63 65 28 54 72 61 63  bugAndTrace(Trac
252a0 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 2c 0d 0a  ePriority.Low,..
252b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
252c0 20 20 20 20 20 20 20 20 64 65 62 75 67 43 61 6c          debugCal
252d0 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c  lback, traceCall
252e0 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20  back,..         
252f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
25300 56 69 73 75 61 6c 20 53 74 75 64 69 6f 20 76 65  Visual Studio ve
25310 72 73 69 6f 6e 20 6e 6f 74 20 66 6f 75 6e 64 2c  rsion not found,
25320 20 73 6b 69 70 70 69 6e 67 2e 2e 2e 22 2c 0d 0a   skipping...",..
25330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25340 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74          traceCat
25350 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  egory);....     
25360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
25370 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20  ontinue;..      
25380 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
25390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
253a0 66 20 28 63 61 6c 6c 62 61 63 6b 20 3d 3d 20 6e  f (callback == n
253b0 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
253c0 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e            contin
253d0 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ue;....         
253e0 20 20 20 20 20 20 20 69 66 20 28 21 63 61 6c 6c         if (!call
253f0 62 61 63 6b 28 0d 0a 20 20 20 20 20 20 20 20 20  back(..         
25400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
25410 6f 6f 74 4b 65 79 2c 20 76 73 56 65 72 73 69 6f  ootKey, vsVersio
25420 6e 2c 20 70 61 63 6b 61 67 65 2c 20 63 6c 69 65  n, package, clie
25430 6e 74 44 61 74 61 2c 20 77 6f 77 36 34 2c 0d 0a  ntData, wow64,..
25440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25450 20 20 20 20 20 20 20 20 74 68 72 6f 77 4f 6e 4d          throwOnM
25460 69 73 73 69 6e 67 2c 20 77 68 61 74 49 66 2c 20  issing, whatIf, 
25470 76 65 72 62 6f 73 65 2c 20 72 65 66 20 65 72 72  verbose, ref err
25480 6f 72 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  or))..          
25490 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
254a0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
254b0 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20  urn false;..    
254c0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
254d0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
254e0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
254f0 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20  rn true;..      
25500 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e    }..        #en
25510 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
25520 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
25530 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25540 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25550 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25560 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
25570 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 43 6f        #region Co
25580 6e 66 69 67 75 72 61 74 69 6f 6e 20 46 69 6c 65  nfiguration File
25590 20 48 61 6e 64 6c 69 6e 67 0d 0a 20 20 20 20 20   Handling..     
255a0 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69     private stati
255b0 63 20 62 6f 6f 6c 20 41 64 64 44 62 50 72 6f 76  c bool AddDbProv
255c0 69 64 65 72 46 61 63 74 6f 72 79 28 0d 0a 20 20  iderFactory(..  
255d0 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
255e0 20 66 69 6c 65 4e 61 6d 65 2c 0d 0a 20 20 20 20   fileName,..    
255f0 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 69          string i
25600 6e 76 61 72 69 61 6e 74 2c 0d 0a 20 20 20 20 20  nvariant,..     
25610 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6e 61         string na
25620 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me,..           
25630 20 73 74 72 69 6e 67 20 64 65 73 63 72 69 70 74   string descript
25640 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ion,..          
25650 20 20 73 74 72 69 6e 67 20 74 79 70 65 4e 61 6d    string typeNam
25660 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
25670 41 73 73 65 6d 62 6c 79 4e 61 6d 65 20 61 73 73  AssemblyName ass
25680 65 6d 62 6c 79 4e 61 6d 65 2c 0d 0a 20 20 20 20  emblyName,..    
25690 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61          bool wha
256a0 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  tIf,..          
256b0 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 0d    bool verbose,.
256c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66  .            ref
256d0 20 62 6f 6f 6c 20 73 61 76 65 64 2c 0d 0a 20 20   bool saved,..  
256e0 20 20 20 20 20 20 20 20 20 20 72 65 66 20 73 74            ref st
256f0 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20 20  ring error..    
25700 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
25710 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
25720 20 20 62 6f 6f 6c 20 64 69 72 74 79 20 3d 20 66    bool dirty = f
25730 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alse;..         
25740 20 20 20 58 6d 6c 44 6f 63 75 6d 65 6e 74 20 64     XmlDocument d
25750 6f 63 75 6d 65 6e 74 20 3d 20 6e 65 77 20 58 6d  ocument = new Xm
25760 6c 44 6f 63 75 6d 65 6e 74 28 29 3b 0d 0a 0d 0a  lDocument();....
25770 20 20 20 20 20 20 20 20 20 20 20 20 64 6f 63 75              docu
25780 6d 65 6e 74 2e 50 72 65 73 65 72 76 65 57 68 69  ment.PreserveWhi
25790 74 65 73 70 61 63 65 20 3d 20 74 72 75 65 3b 0d  tespace = true;.
257a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 64 6f 63  .            doc
257b0 75 6d 65 6e 74 2e 4c 6f 61 64 28 66 69 6c 65 4e  ument.Load(fileN
257c0 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ame);....       
257d0 20 20 20 20 20 58 6d 6c 45 6c 65 6d 65 6e 74 20       XmlElement 
257e0 65 6c 65 6d 65 6e 74 20 3d 20 64 6f 63 75 6d 65  element = docume
257f0 6e 74 2e 53 65 6c 65 63 74 53 69 6e 67 6c 65 4e  nt.SelectSingleN
25800 6f 64 65 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ode(String.Forma
25810 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
25820 20 20 20 20 58 50 61 74 68 46 6f 72 41 64 64 45      XPathForAddE
25830 6c 65 6d 65 6e 74 2c 20 69 6e 76 61 72 69 61 6e  lement, invarian
25840 74 29 29 20 61 73 20 58 6d 6c 45 6c 65 6d 65 6e  t)) as XmlElemen
25850 74 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  t;....          
25860 20 20 69 66 20 28 65 6c 65 6d 65 6e 74 20 3d 3d    if (element ==
25870 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
25880 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
25890 20 20 20 20 20 20 20 73 74 72 69 6e 67 5b 5d 20         string[] 
258a0 65 6c 65 6d 65 6e 74 4e 61 6d 65 73 20 3d 20 7b  elementNames = {
258b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
258c0 20 20 20 20 20 20 20 20 20 20 22 73 79 73 74 65            "syste
258d0 6d 2e 64 61 74 61 22 2c 20 22 44 62 50 72 6f 76  m.data", "DbProv
258e0 69 64 65 72 46 61 63 74 6f 72 69 65 73 22 0d 0a  iderFactories"..
258f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25900 20 20 20 20 7d 3b 0d 0a 0d 0a 20 20 20 20 20 20      };....      
25910 20 20 20 20 20 20 20 20 20 20 58 6d 6c 45 6c 65            XmlEle
25920 6d 65 6e 74 20 70 72 65 76 69 6f 75 73 45 6c 65  ment previousEle
25930 6d 65 6e 74 20 3d 0d 0a 20 20 20 20 20 20 20 20  ment =..        
25940 20 20 20 20 20 20 20 20 20 20 20 20 64 6f 63 75              docu
25950 6d 65 6e 74 2e 44 6f 63 75 6d 65 6e 74 45 6c 65  ment.DocumentEle
25960 6d 65 6e 74 3b 20 2f 2a 20 63 6f 6e 66 69 67 75  ment; /* configu
25970 72 61 74 69 6f 6e 20 2a 2f 0d 0a 0d 0a 20 20 20  ration */....   
25980 20 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72               for
25990 65 61 63 68 20 28 73 74 72 69 6e 67 20 65 6c 65  each (string ele
259a0 6d 65 6e 74 4e 61 6d 65 20 69 6e 20 65 6c 65 6d  mentName in elem
259b0 65 6e 74 4e 61 6d 65 73 29 0d 0a 20 20 20 20 20  entNames)..     
259c0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
259d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
259e0 20 20 65 6c 65 6d 65 6e 74 20 3d 20 70 72 65 76    element = prev
259f0 69 6f 75 73 45 6c 65 6d 65 6e 74 2e 53 65 6c 65  iousElement.Sele
25a00 63 74 53 69 6e 67 6c 65 4e 6f 64 65 28 0d 0a 20  ctSingleNode(.. 
25a10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25a20 20 20 20 20 20 20 20 65 6c 65 6d 65 6e 74 4e 61         elementNa
25a30 6d 65 29 20 61 73 20 58 6d 6c 45 6c 65 6d 65 6e  me) as XmlElemen
25a40 74 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  t;....          
25a50 20 20 20 20 20 20 20 20 20 20 69 66 20 28 65 6c            if (el
25a60 65 6d 65 6e 74 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  ement == null)..
25a70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25a80 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
25a90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
25aa0 6c 65 6d 65 6e 74 20 3d 20 64 6f 63 75 6d 65 6e  lement = documen
25ab0 74 2e 43 72 65 61 74 65 45 6c 65 6d 65 6e 74 28  t.CreateElement(
25ac0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
25ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c                el
25ae0 65 6d 65 6e 74 4e 61 6d 65 2c 20 53 74 72 69 6e  ementName, Strin
25af0 67 2e 45 6d 70 74 79 29 3b 0d 0a 0d 0a 20 20 20  g.Empty);....   
25b00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25b10 20 20 20 20 20 70 72 65 76 69 6f 75 73 45 6c 65       previousEle
25b20 6d 65 6e 74 2e 41 70 70 65 6e 64 43 68 69 6c 64  ment.AppendChild
25b30 28 65 6c 65 6d 65 6e 74 29 3b 0d 0a 20 20 20 20  (element);..    
25b40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25b50 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
25b60 20 20 20 20 20 20 20 20 20 70 72 65 76 69 6f 75           previou
25b70 73 45 6c 65 6d 65 6e 74 20 3d 20 65 6c 65 6d 65  sElement = eleme
25b80 6e 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  nt;..           
25b90 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
25ba0 20 20 20 20 20 20 20 20 20 20 65 6c 65 6d 65 6e            elemen
25bb0 74 20 3d 20 64 6f 63 75 6d 65 6e 74 2e 43 72 65  t = document.Cre
25bc0 61 74 65 45 6c 65 6d 65 6e 74 28 0d 0a 20 20 20  ateElement(..   
25bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25be0 20 22 61 64 64 22 2c 20 53 74 72 69 6e 67 2e 45   "add", String.E
25bf0 6d 70 74 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  mpty);....      
25c00 20 20 20 20 20 20 20 20 20 20 70 72 65 76 69 6f            previo
25c10 75 73 45 6c 65 6d 65 6e 74 2e 41 70 70 65 6e 64  usElement.Append
25c20 43 68 69 6c 64 28 65 6c 65 6d 65 6e 74 29 3b 0d  Child(element);.
25c30 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
25c40 20 20 20 64 69 72 74 79 20 3d 20 74 72 75 65 3b     dirty = true;
25c50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
25c60 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
25c70 66 20 28 21 53 74 72 69 6e 67 2e 45 71 75 61 6c  f (!String.Equal
25c80 73 28 65 6c 65 6d 65 6e 74 2e 47 65 74 41 74 74  s(element.GetAtt
25c90 72 69 62 75 74 65 28 22 6e 61 6d 65 22 29 2c 0d  ribute("name"),.
25ca0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
25cb0 20 20 20 20 20 6e 61 6d 65 2c 20 53 74 72 69 6e       name, Strin
25cc0 67 43 6f 6d 70 61 72 69 73 6f 6e 2e 49 6e 76 61  gComparison.Inva
25cd0 72 69 61 6e 74 43 75 6c 74 75 72 65 29 29 0d 0a  riantCulture))..
25ce0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
25cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
25d00 6c 65 6d 65 6e 74 2e 53 65 74 41 74 74 72 69 62  lement.SetAttrib
25d10 75 74 65 28 22 6e 61 6d 65 22 2c 20 6e 61 6d 65  ute("name", name
25d20 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
25d30 20 20 20 20 64 69 72 74 79 20 3d 20 74 72 75 65      dirty = true
25d40 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
25d50 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
25d60 69 66 20 28 21 53 74 72 69 6e 67 2e 45 71 75 61  if (!String.Equa
25d70 6c 73 28 65 6c 65 6d 65 6e 74 2e 47 65 74 41 74  ls(element.GetAt
25d80 74 72 69 62 75 74 65 28 22 69 6e 76 61 72 69 61  tribute("invaria
25d90 6e 74 22 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  nt"),..         
25da0 20 20 20 20 20 20 20 20 20 20 20 69 6e 76 61 72             invar
25db0 69 61 6e 74 2c 20 53 74 72 69 6e 67 43 6f 6d 70  iant, StringComp
25dc0 61 72 69 73 6f 6e 2e 49 6e 76 61 72 69 61 6e 74  arison.Invariant
25dd0 43 75 6c 74 75 72 65 29 29 0d 0a 20 20 20 20 20  Culture))..     
25de0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
25df0 20 20 20 20 20 20 20 20 20 20 65 6c 65 6d 65 6e            elemen
25e00 74 2e 53 65 74 41 74 74 72 69 62 75 74 65 28 22  t.SetAttribute("
25e10 69 6e 76 61 72 69 61 6e 74 22 2c 20 69 6e 76 61  invariant", inva
25e20 72 69 61 6e 74 29 3b 0d 0a 20 20 20 20 20 20 20  riant);..       
25e30 20 20 20 20 20 20 20 20 20 64 69 72 74 79 20 3d           dirty =
25e40 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20   true;..        
25e50 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
25e60 20 20 20 20 20 69 66 20 28 21 53 74 72 69 6e 67       if (!String
25e70 2e 45 71 75 61 6c 73 28 65 6c 65 6d 65 6e 74 2e  .Equals(element.
25e80 47 65 74 41 74 74 72 69 62 75 74 65 28 22 64 65  GetAttribute("de
25e90 73 63 72 69 70 74 69 6f 6e 22 29 2c 0d 0a 20 20  scription"),..  
25ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25eb0 20 20 64 65 73 63 72 69 70 74 69 6f 6e 2c 20 53    description, S
25ec0 74 72 69 6e 67 43 6f 6d 70 61 72 69 73 6f 6e 2e  tringComparison.
25ed0 49 6e 76 61 72 69 61 6e 74 43 75 6c 74 75 72 65  InvariantCulture
25ee0 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
25ef0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
25f00 20 20 20 65 6c 65 6d 65 6e 74 2e 53 65 74 41 74     element.SetAt
25f10 74 72 69 62 75 74 65 28 22 64 65 73 63 72 69 70  tribute("descrip
25f20 74 69 6f 6e 22 2c 20 64 65 73 63 72 69 70 74 69  tion", descripti
25f30 6f 6e 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  on);..          
25f40 20 20 20 20 20 20 64 69 72 74 79 20 3d 20 74 72        dirty = tr
25f50 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
25f60 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
25f70 20 20 73 74 72 69 6e 67 20 66 75 6c 6c 54 79 70    string fullTyp
25f80 65 4e 61 6d 65 20 3d 20 53 74 72 69 6e 67 2e 46  eName = String.F
25f90 6f 72 6d 61 74 28 22 7b 30 7d 2c 20 7b 31 7d 22  ormat("{0}, {1}"
25fa0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
25fb0 20 20 20 74 79 70 65 4e 61 6d 65 2c 20 61 73 73     typeName, ass
25fc0 65 6d 62 6c 79 4e 61 6d 65 29 3b 0d 0a 0d 0a 20  emblyName);.... 
25fd0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21             if (!
25fe0 53 74 72 69 6e 67 2e 45 71 75 61 6c 73 28 65 6c  String.Equals(el
25ff0 65 6d 65 6e 74 2e 47 65 74 41 74 74 72 69 62 75  ement.GetAttribu
26000 74 65 28 22 74 79 70 65 22 29 2c 0d 0a 20 20 20  te("type"),..   
26010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26020 20 66 75 6c 6c 54 79 70 65 4e 61 6d 65 2c 20 53   fullTypeName, S
26030 74 72 69 6e 67 43 6f 6d 70 61 72 69 73 6f 6e 2e  tringComparison.
26040 49 6e 76 61 72 69 61 6e 74 43 75 6c 74 75 72 65  InvariantCulture
26050 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
26060 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
26070 20 20 20 65 6c 65 6d 65 6e 74 2e 53 65 74 41 74     element.SetAt
26080 74 72 69 62 75 74 65 28 22 74 79 70 65 22 2c 20  tribute("type", 
26090 66 75 6c 6c 54 79 70 65 4e 61 6d 65 29 3b 0d 0a  fullTypeName);..
260a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
260b0 64 69 72 74 79 20 3d 20 74 72 75 65 3b 0d 0a 20  dirty = true;.. 
260c0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
260d0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
260e0 64 69 72 74 79 20 7c 7c 20 77 68 61 74 49 66 29  dirty || whatIf)
260f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
26100 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
26110 20 69 66 20 28 76 65 72 62 6f 73 65 29 0d 0a 20   if (verbose).. 
26120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26130 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75     TraceOps.Debu
26140 67 41 6e 64 54 72 61 63 65 28 54 72 61 63 65 50  gAndTrace(TraceP
26150 72 69 6f 72 69 74 79 2e 48 69 67 68 65 73 74 2c  riority.Highest,
26160 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
26170 20 20 20 20 20 20 20 20 20 20 64 65 62 75 67 43            debugC
26180 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61  allback, traceCa
26190 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46  llback, String.F
261a0 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
261b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
261c0 22 65 6c 65 6d 65 6e 74 20 3d 20 7b 30 7d 22 2c  "element = {0}",
261d0 20 46 6f 72 44 69 73 70 6c 61 79 28 65 6c 65 6d   ForDisplay(elem
261e0 65 6e 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20  ent)),..        
261f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26200 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
26210 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
26220 20 20 20 69 66 20 28 21 77 68 61 74 49 66 29 0d     if (!whatIf).
26230 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
26240 20 20 20 20 20 64 6f 63 75 6d 65 6e 74 2e 53 61       document.Sa
26250 76 65 28 66 69 6c 65 4e 61 6d 65 29 3b 0d 0a 0d  ve(fileName);...
26260 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
26270 20 73 61 76 65 64 20 3d 20 74 72 75 65 3b 0d 0a   saved = true;..
26280 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
26290 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
262a0 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20 20  urn true;..     
262b0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
262c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
262d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
262e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
262f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26300 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
26310 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69     private stati
26320 63 20 62 6f 6f 6c 20 52 65 6d 6f 76 65 44 62 50  c bool RemoveDbP
26330 72 6f 76 69 64 65 72 46 61 63 74 6f 72 79 28 0d  roviderFactory(.
26340 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72  .            str
26350 69 6e 67 20 66 69 6c 65 4e 61 6d 65 2c 0d 0a 20  ing fileName,.. 
26360 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
26370 67 20 69 6e 76 61 72 69 61 6e 74 2c 0d 0a 20 20  g invariant,..  
26380 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77            bool w
26390 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20  hatIf,..        
263a0 20 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65      bool verbose
263b0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  ,..            r
263c0 65 66 20 62 6f 6f 6c 20 73 61 76 65 64 2c 0d 0a  ef bool saved,..
263d0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20              ref 
263e0 73 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20  string error..  
263f0 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
26400 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
26410 20 20 20 20 62 6f 6f 6c 20 64 69 72 74 79 20 3d      bool dirty =
26420 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20   false;..       
26430 20 20 20 20 20 58 6d 6c 44 6f 63 75 6d 65 6e 74       XmlDocument
26440 20 64 6f 63 75 6d 65 6e 74 20 3d 20 6e 65 77 20   document = new 
26450 58 6d 6c 44 6f 63 75 6d 65 6e 74 28 29 3b 0d 0a  XmlDocument();..
26460 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 64 6f  ..            do
26470 63 75 6d 65 6e 74 2e 50 72 65 73 65 72 76 65 57  cument.PreserveW
26480 68 69 74 65 73 70 61 63 65 20 3d 20 74 72 75 65  hitespace = true
26490 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 64  ;..            d
264a0 6f 63 75 6d 65 6e 74 2e 4c 6f 61 64 28 66 69 6c  ocument.Load(fil
264b0 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20  eName);....     
264c0 20 20 20 20 20 20 20 58 6d 6c 45 6c 65 6d 65 6e         XmlElemen
264d0 74 20 65 6c 65 6d 65 6e 74 20 3d 20 64 6f 63 75  t element = docu
264e0 6d 65 6e 74 2e 53 65 6c 65 63 74 53 69 6e 67 6c  ment.SelectSingl
264f0 65 4e 6f 64 65 28 53 74 72 69 6e 67 2e 46 6f 72  eNode(String.For
26500 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
26510 20 20 20 20 20 20 58 50 61 74 68 46 6f 72 41 64        XPathForAd
26520 64 45 6c 65 6d 65 6e 74 2c 20 69 6e 76 61 72 69  dElement, invari
26530 61 6e 74 29 29 20 61 73 20 58 6d 6c 45 6c 65 6d  ant)) as XmlElem
26540 65 6e 74 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ent;....        
26550 20 20 20 20 69 66 20 28 65 6c 65 6d 65 6e 74 20      if (element 
26560 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  != null)..      
26570 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
26580 20 20 20 20 20 20 20 20 20 65 6c 65 6d 65 6e 74           element
26590 2e 50 61 72 65 6e 74 4e 6f 64 65 2e 52 65 6d 6f  .ParentNode.Remo
265a0 76 65 43 68 69 6c 64 28 65 6c 65 6d 65 6e 74 29  veChild(element)
265b0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
265c0 20 20 20 64 69 72 74 79 20 3d 20 74 72 75 65 3b     dirty = true;
265d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
265e0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 65  ...            e
265f0 6c 65 6d 65 6e 74 20 3d 20 64 6f 63 75 6d 65 6e  lement = documen
26600 74 2e 53 65 6c 65 63 74 53 69 6e 67 6c 65 4e 6f  t.SelectSingleNo
26610 64 65 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  de(String.Format
26620 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
26630 20 20 20 58 50 61 74 68 46 6f 72 52 65 6d 6f 76     XPathForRemov
26640 65 45 6c 65 6d 65 6e 74 2c 20 69 6e 76 61 72 69  eElement, invari
26650 61 6e 74 29 29 20 61 73 20 58 6d 6c 45 6c 65 6d  ant)) as XmlElem
26660 65 6e 74 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ent;....        
26670 20 20 20 20 69 66 20 28 65 6c 65 6d 65 6e 74 20      if (element 
26680 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  != null)..      
26690 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
266a0 20 20 20 20 20 20 20 20 20 65 6c 65 6d 65 6e 74           element
266b0 2e 50 61 72 65 6e 74 4e 6f 64 65 2e 52 65 6d 6f  .ParentNode.Remo
266c0 76 65 43 68 69 6c 64 28 65 6c 65 6d 65 6e 74 29  veChild(element)
266d0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
266e0 20 20 20 64 69 72 74 79 20 3d 20 74 72 75 65 3b     dirty = true;
266f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
26700 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
26710 66 20 28 64 69 72 74 79 20 7c 7c 20 77 68 61 74  f (dirty || what
26720 49 66 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  If)..           
26730 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
26740 20 20 20 20 69 66 20 28 76 65 72 62 6f 73 65 29      if (verbose)
26750 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
26760 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44        TraceOps.D
26770 65 62 75 67 41 6e 64 54 72 61 63 65 28 54 72 61  ebugAndTrace(Tra
26780 63 65 50 72 69 6f 72 69 74 79 2e 48 69 67 68 65  cePriority.Highe
26790 73 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  st,..           
267a0 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62               deb
267b0 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63  ugCallback, trac
267c0 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e  eCallback, Strin
267d0 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
267e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
267f0 20 20 20 22 65 6c 65 6d 65 6e 74 20 3d 20 7b 30     "element = {0
26800 7d 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 65  }", ForDisplay(e
26810 6c 65 6d 65 6e 74 29 29 2c 0d 0a 20 20 20 20 20  lement)),..     
26820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26830 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
26840 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
26850 20 20 20 20 20 20 69 66 20 28 21 77 68 61 74 49        if (!whatI
26860 66 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  f)..            
26870 20 20 20 20 20 20 20 20 64 6f 63 75 6d 65 6e 74          document
26880 2e 53 61 76 65 28 66 69 6c 65 4e 61 6d 65 29 3b  .Save(fileName);
26890 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
268a0 20 20 20 20 73 61 76 65 64 20 3d 20 74 72 75 65      saved = true
268b0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
268c0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
268d0 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20  return true;..  
268e0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
268f0 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
26900 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26910 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26920 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26930 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
26940 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74        private st
26950 61 74 69 63 20 62 6f 6f 6c 20 50 72 6f 63 65 73  atic bool Proces
26960 73 44 62 50 72 6f 76 69 64 65 72 46 61 63 74 6f  sDbProviderFacto
26970 72 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ry(..           
26980 20 73 74 72 69 6e 67 20 66 69 6c 65 4e 61 6d 65   string fileName
26990 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  ,..            s
269a0 74 72 69 6e 67 20 69 6e 76 61 72 69 61 6e 74 2c  tring invariant,
269b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74  ..            st
269c0 72 69 6e 67 20 6e 61 6d 65 2c 0d 0a 20 20 20 20  ring name,..    
269d0 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 64          string d
269e0 65 73 63 72 69 70 74 69 6f 6e 2c 0d 0a 20 20 20  escription,..   
269f0 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
26a00 74 79 70 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20  typeName,..     
26a10 20 20 20 20 20 20 20 41 73 73 65 6d 62 6c 79 4e         AssemblyN
26a20 61 6d 65 20 61 73 73 65 6d 62 6c 79 4e 61 6d 65  ame assemblyName
26a30 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6f  ,..            o
26a40 62 6a 65 63 74 20 63 6c 69 65 6e 74 44 61 74 61  bject clientData
26a50 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  ,..            b
26a60 6f 6f 6c 20 77 6f 77 36 34 2c 0d 0a 20 20 20 20  ool wow64,..    
26a70 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 74 68 72          bool thr
26a80 6f 77 4f 6e 4d 69 73 73 69 6e 67 2c 0d 0a 20 20  owOnMissing,..  
26a90 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77            bool w
26aa0 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20  hatIf,..        
26ab0 20 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65      bool verbose
26ac0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  ,..            r
26ad0 65 66 20 62 6f 6f 6c 20 73 61 76 65 64 2c 0d 0a  ef bool saved,..
26ae0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20              ref 
26af0 73 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20  string error..  
26b00 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
26b10 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
26b20 20 20 20 20 41 6e 79 50 61 69 72 3c 73 74 72 69      AnyPair<stri
26b30 6e 67 2c 20 62 6f 6f 6c 3e 20 70 61 69 72 20 3d  ng, bool> pair =
26b40 20 63 6c 69 65 6e 74 44 61 74 61 20 61 73 20 41   clientData as A
26b50 6e 79 50 61 69 72 3c 73 74 72 69 6e 67 2c 20 62  nyPair<string, b
26b60 6f 6f 6c 3e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ool>;....       
26b70 20 20 20 20 20 69 66 20 28 70 61 69 72 20 3d 3d       if (pair ==
26b80 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
26b90 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
26ba0 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22         error = "
26bb0 69 6e 76 61 6c 69 64 20 66 72 61 6d 65 77 6f 72  invalid framewor
26bc0 6b 20 63 6f 6e 66 69 67 20 63 61 6c 6c 62 61 63  k config callbac
26bd0 6b 20 64 61 74 61 22 3b 0d 0a 20 20 20 20 20 20  k data";..      
26be0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
26bf0 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20   false;..       
26c00 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
26c10 20 20 20 20 20 20 69 66 20 28 70 61 69 72 2e 59        if (pair.Y
26c20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
26c30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
26c40 20 20 72 65 74 75 72 6e 20 52 65 6d 6f 76 65 44    return RemoveD
26c50 62 50 72 6f 76 69 64 65 72 46 61 63 74 6f 72 79  bProviderFactory
26c60 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
26c70 20 20 20 20 20 20 20 66 69 6c 65 4e 61 6d 65 2c         fileName,
26c80 20 69 6e 76 61 72 69 61 6e 74 2c 20 77 68 61 74   invariant, what
26c90 49 66 2c 20 76 65 72 62 6f 73 65 2c 20 72 65 66  If, verbose, ref
26ca0 20 73 61 76 65 64 2c 0d 0a 20 20 20 20 20 20 20   saved,..       
26cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66               ref
26cc0 20 65 72 72 6f 72 29 20 26 26 0d 0a 20 20 20 20   error) &&..    
26cd0 20 20 20 20 20 20 20 20 20 20 20 20 41 64 64 44              AddD
26ce0 62 50 72 6f 76 69 64 65 72 46 61 63 74 6f 72 79  bProviderFactory
26cf0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
26d00 20 20 20 20 20 20 20 66 69 6c 65 4e 61 6d 65 2c         fileName,
26d10 20 69 6e 76 61 72 69 61 6e 74 2c 20 6e 61 6d 65   invariant, name
26d20 2c 20 64 65 73 63 72 69 70 74 69 6f 6e 2c 20 74  , description, t
26d30 79 70 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20  ypeName,..      
26d40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61 73                as
26d50 73 65 6d 62 6c 79 4e 61 6d 65 2c 20 77 68 61 74  semblyName, what
26d60 49 66 2c 20 76 65 72 62 6f 73 65 2c 20 72 65 66  If, verbose, ref
26d70 20 73 61 76 65 64 2c 20 72 65 66 20 65 72 72 6f   saved, ref erro
26d80 72 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  r);..           
26d90 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
26da0 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20  else..          
26db0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
26dc0 20 20 20 20 20 72 65 74 75 72 6e 20 52 65 6d 6f       return Remo
26dd0 76 65 44 62 50 72 6f 76 69 64 65 72 46 61 63 74  veDbProviderFact
26de0 6f 72 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ory(..          
26df0 20 20 20 20 20 20 20 20 20 20 66 69 6c 65 4e 61            fileNa
26e00 6d 65 2c 20 69 6e 76 61 72 69 61 6e 74 2c 20 77  me, invariant, w
26e10 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 2c 20  hatIf, verbose, 
26e20 72 65 66 20 73 61 76 65 64 2c 0d 0a 20 20 20 20  ref saved,..    
26e30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26e40 72 65 66 20 65 72 72 6f 72 29 3b 0d 0a 20 20 20  ref error);..   
26e50 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
26e60 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23      }..        #
26e70 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20  endregion....   
26e80 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
26e90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26ea0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26eb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26ec0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
26ed0 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20          #region 
26ee0 41 73 73 65 6d 62 6c 79 20 46 6f 6c 64 65 72 73  Assembly Folders
26ef0 20 48 61 6e 64 6c 69 6e 67 0d 0a 20 20 20 20 20   Handling..     
26f00 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69     private stati
26f10 63 20 73 74 72 69 6e 67 20 47 65 74 41 73 73 65  c string GetAsse
26f20 6d 62 6c 79 46 6f 6c 64 65 72 73 4b 65 79 4e 61  mblyFoldersKeyNa
26f30 6d 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me(..           
26f40 20 73 74 72 69 6e 67 20 66 72 61 6d 65 77 6f 72   string framewor
26f50 6b 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20  kName,..        
26f60 20 20 20 20 56 65 72 73 69 6f 6e 20 66 72 61 6d      Version fram
26f70 65 77 6f 72 6b 56 65 72 73 69 6f 6e 2c 0d 0a 20  eworkVersion,.. 
26f80 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
26f90 67 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 2c 0d  g platformName,.
26fa0 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f  .            boo
26fb0 6c 20 77 6f 77 36 34 0d 0a 20 20 20 20 20 20 20  l wow64..       
26fc0 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
26fd0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  {..            /
26fe0 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  /..            /
26ff0 2f 20 4e 4f 54 45 3a 20 54 68 69 73 20 72 65 67  / NOTE: This reg
27000 69 73 74 72 79 20 6b 65 79 20 61 70 70 65 61 72  istry key appear
27010 73 20 74 6f 20 61 6c 77 61 79 73 20 62 65 20 33  s to always be 3
27020 32 2d 62 69 74 20 6f 6e 6c 79 0d 0a 20 20 20 20  2-bit only..    
27030 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
27040 20 28 69 2e 65 2e 20 70 72 6f 62 61 62 6c 79 20   (i.e. probably 
27050 62 65 63 61 75 73 65 20 69 74 20 69 73 20 6f 6e  because it is on
27060 6c 79 20 75 73 65 64 20 62 79 20 56 69 73 75 61  ly used by Visua
27070 6c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  l..            /
27080 2f 20 20 20 20 20 20 20 53 74 75 64 69 6f 2c 20  /       Studio, 
27090 77 68 69 63 68 20 69 73 20 63 75 72 72 65 6e 74  which is current
270a0 6c 79 20 61 6c 77 61 79 73 20 33 32 2d 62 69 74  ly always 32-bit
270b0 20 6f 6e 6c 79 29 2e 0d 0a 20 20 20 20 20 20 20   only)...       
270c0 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
270d0 20 20 20 20 20 73 74 72 69 6e 67 20 66 6f 72 6d       string form
270e0 61 74 20 3d 20 21 53 74 72 69 6e 67 2e 49 73 4e  at = !String.IsN
270f0 75 6c 6c 4f 72 45 6d 70 74 79 28 70 6c 61 74 66  ullOrEmpty(platf
27100 6f 72 6d 4e 61 6d 65 29 20 3f 0d 0a 20 20 20 20  ormName) ?..    
27110 20 20 20 20 20 20 20 20 20 20 20 20 22 7b 30 7d              "{0}
27120 5c 5c 4d 69 63 72 6f 73 6f 66 74 5c 5c 7b 31 7d  \\Microsoft\\{1}
27130 5c 5c 76 7b 32 7d 5c 5c 7b 33 7d 5c 5c 41 73 73  \\v{2}\\{3}\\Ass
27140 65 6d 62 6c 79 46 6f 6c 64 65 72 73 45 78 22 20  emblyFoldersEx" 
27150 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  :..             
27160 20 20 20 22 7b 30 7d 5c 5c 4d 69 63 72 6f 73 6f     "{0}\\Microso
27170 66 74 5c 5c 7b 31 7d 5c 5c 76 7b 32 7d 5c 5c 41  ft\\{1}\\v{2}\\A
27180 73 73 65 6d 62 6c 79 46 6f 6c 64 65 72 73 45 78  ssemblyFoldersEx
27190 22 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  ";....          
271a0 20 20 72 65 74 75 72 6e 20 53 74 72 69 6e 67 2e    return String.
271b0 46 6f 72 6d 61 74 28 66 6f 72 6d 61 74 2c 20 47  Format(format, G
271c0 65 74 52 6f 6f 74 4b 65 79 4e 61 6d 65 28 77 6f  etRootKeyName(wo
271d0 77 36 34 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  w64),..         
271e0 20 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b         framework
271f0 4e 61 6d 65 2c 20 66 72 61 6d 65 77 6f 72 6b 56  Name, frameworkV
27200 65 72 73 69 6f 6e 2c 20 70 6c 61 74 66 6f 72 6d  ersion, platform
27210 4e 61 6d 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  Name);..        
27220 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
27280 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 62  private static b
27290 6f 6f 6c 20 41 64 64 54 6f 41 73 73 65 6d 62 6c  ool AddToAssembl
272a0 79 46 6f 6c 64 65 72 73 28 0d 0a 20 20 20 20 20  yFolders(..     
272b0 20 20 20 20 20 20 20 4d 6f 63 6b 52 65 67 69 73         MockRegis
272c0 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79 2c 0d  tryKey rootKey,.
272d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72  .            str
272e0 69 6e 67 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d  ing frameworkNam
272f0 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
27300 56 65 72 73 69 6f 6e 20 66 72 61 6d 65 77 6f 72  Version framewor
27310 6b 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20  kVersion,..     
27320 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 70 6c         string pl
27330 61 74 66 6f 72 6d 4e 61 6d 65 2c 0d 0a 20 20 20  atformName,..   
27340 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
27350 73 75 62 4b 65 79 4e 61 6d 65 2c 0d 0a 20 20 20  subKeyName,..   
27360 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
27370 64 69 72 65 63 74 6f 72 79 2c 0d 0a 20 20 20 20  directory,..    
27380 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 6f 77          bool wow
27390 36 34 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  64,..           
273a0 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20   bool whatIf,.. 
273b0 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
273c0 76 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20  verbose,..      
273d0 20 20 20 20 20 20 72 65 66 20 73 74 72 69 6e 67        ref string
273e0 20 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20   error..        
273f0 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b      )..        {
27400 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74  ..            st
27410 72 69 6e 67 20 6b 65 79 4e 61 6d 65 20 3d 20 47  ring keyName = G
27420 65 74 41 73 73 65 6d 62 6c 79 46 6f 6c 64 65 72  etAssemblyFolder
27430 73 4b 65 79 4e 61 6d 65 28 0d 0a 20 20 20 20 20  sKeyName(..     
27440 20 20 20 20 20 20 20 20 20 20 20 66 72 61 6d 65             frame
27450 77 6f 72 6b 4e 61 6d 65 2c 20 66 72 61 6d 65 77  workName, framew
27460 6f 72 6b 56 65 72 73 69 6f 6e 2c 20 70 6c 61 74  orkVersion, plat
27470 66 6f 72 6d 4e 61 6d 65 2c 20 77 6f 77 36 34 29  formName, wow64)
27480 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
27490 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69   using (MockRegi
274a0 73 74 72 79 4b 65 79 20 6b 65 79 20 3d 20 52 65  stryKey key = Re
274b0 67 69 73 74 72 79 48 65 6c 70 65 72 2e 4f 70 65  gistryHelper.Ope
274c0 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20  nSubKey(..      
274d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f                ro
274e0 6f 74 4b 65 79 2c 20 6b 65 79 4e 61 6d 65 2c 20  otKey, keyName, 
274f0 74 72 75 65 2c 20 77 68 61 74 49 66 2c 20 76 65  true, whatIf, ve
27500 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 20  rbose))..       
27510 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
27520 20 20 20 20 20 20 20 20 69 66 20 28 6b 65 79 20          if (key 
27530 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
27540 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
27550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27560 20 65 72 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e   error = String.
27570 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
27580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27590 20 22 63 6f 75 6c 64 20 6e 6f 74 20 6f 70 65 6e   "could not open
275a0 20 72 65 67 69 73 74 72 79 20 6b 65 79 3a 20 7b   registry key: {
275b0 30 7d 5c 5c 7b 31 7d 22 2c 0d 0a 20 20 20 20 20  0}\\{1}",..     
275c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
275d0 20 20 20 72 6f 6f 74 4b 65 79 2c 20 6b 65 79 4e     rootKey, keyN
275e0 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ame);....       
275f0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
27600 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20  urn false;..    
27610 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
27620 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
27630 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69   using (MockRegi
27640 73 74 72 79 4b 65 79 20 73 75 62 4b 65 79 20 3d  stryKey subKey =
27650 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e   RegistryHelper.
27660 43 72 65 61 74 65 53 75 62 4b 65 79 28 0d 0a 20  CreateSubKey(.. 
27670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27680 20 20 20 20 20 20 20 6b 65 79 2c 20 73 75 62 4b         key, subK
27690 65 79 4e 61 6d 65 2c 20 77 68 61 74 49 66 2c 20  eyName, whatIf, 
276a0 76 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20  verbose))..     
276b0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
276c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
276d0 20 20 69 66 20 28 73 75 62 4b 65 79 20 3d 3d 20    if (subKey == 
276e0 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
276f0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
27700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27710 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 53 74        error = St
27720 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
27730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27740 20 20 20 20 20 20 20 20 20 20 22 63 6f 75 6c 64            "could
27750 20 6e 6f 74 20 63 72 65 61 74 65 20 72 65 67 69   not create regi
27760 73 74 72 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c 7b  stry key: {0}\\{
27770 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  1}",..          
27780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27790 20 20 6b 65 79 2c 20 73 75 62 4b 65 79 4e 61 6d    key, subKeyNam
277a0 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e);....         
277b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
277c0 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20  eturn false;..  
277d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
277e0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
277f0 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73             Regis
27800 74 72 79 48 65 6c 70 65 72 2e 53 65 74 56 61 6c  tryHelper.SetVal
27810 75 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue(..           
27820 20 20 20 20 20 20 20 20 20 20 20 20 20 73 75 62               sub
27830 4b 65 79 2c 20 6e 75 6c 6c 2c 20 64 69 72 65 63  Key, null, direc
27840 74 6f 72 79 2c 20 77 68 61 74 49 66 2c 20 76 65  tory, whatIf, ve
27850 72 62 6f 73 65 29 3b 0d 0a 20 20 20 20 20 20 20  rbose);..       
27860 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
27870 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
27880 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
27890 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d  true;..        }
278a0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
278b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
278c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
278d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
278e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
278f0 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70  ///....        p
27900 72 69 76 61 74 65 20 73 74 61 74 69 63 20 62 6f  rivate static bo
27910 6f 6c 20 52 65 6d 6f 76 65 46 72 6f 6d 41 73 73  ol RemoveFromAss
27920 65 6d 62 6c 79 46 6f 6c 64 65 72 73 28 0d 0a 20  emblyFolders(.. 
27930 20 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52             MockR
27940 65 67 69 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b  egistryKey rootK
27950 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ey,..           
27960 20 73 74 72 69 6e 67 20 66 72 61 6d 65 77 6f 72   string framewor
27970 6b 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20  kName,..        
27980 20 20 20 20 56 65 72 73 69 6f 6e 20 66 72 61 6d      Version fram
27990 65 77 6f 72 6b 56 65 72 73 69 6f 6e 2c 0d 0a 20  eworkVersion,.. 
279a0 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
279b0 67 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 2c 0d  g platformName,.
279c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72  .            str
279d0 69 6e 67 20 73 75 62 4b 65 79 4e 61 6d 65 2c 0d  ing subKeyName,.
279e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f  .            boo
279f0 6c 20 77 6f 77 36 34 2c 0d 0a 20 20 20 20 20 20  l wow64,..      
27a00 20 20 20 20 20 20 62 6f 6f 6c 20 74 68 72 6f 77        bool throw
27a10 4f 6e 4d 69 73 73 69 6e 67 2c 0d 0a 20 20 20 20  OnMissing,..    
27a20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61          bool wha
27a30 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  tIf,..          
27a40 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 0d    bool verbose,.
27a50 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66  .            ref
27a60 20 73 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20   string error.. 
27a70 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
27a80 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
27a90 20 20 20 20 20 73 74 72 69 6e 67 20 6b 65 79 4e       string keyN
27aa0 61 6d 65 20 3d 20 47 65 74 41 73 73 65 6d 62 6c  ame = GetAssembl
27ab0 79 46 6f 6c 64 65 72 73 4b 65 79 4e 61 6d 65 28  yFoldersKeyName(
27ac0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
27ad0 20 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c    frameworkName,
27ae0 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f   frameworkVersio
27af0 6e 2c 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 2c  n, platformName,
27b00 20 77 6f 77 36 34 29 3b 0d 0a 0d 0a 20 20 20 20   wow64);....    
27b10 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 4d          using (M
27b20 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 6b  ockRegistryKey k
27b30 65 79 20 3d 20 52 65 67 69 73 74 72 79 48 65 6c  ey = RegistryHel
27b40 70 65 72 2e 4f 70 65 6e 53 75 62 4b 65 79 28 0d  per.OpenSubKey(.
27b50 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
27b60 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 6b 65       rootKey, ke
27b70 79 4e 61 6d 65 2c 20 74 72 75 65 2c 20 77 68 61  yName, true, wha
27b80 74 49 66 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a  tIf, verbose))..
27b90 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
27ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
27bb0 66 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d  f (key == null).
27bc0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
27bd0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
27be0 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
27bf0 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
27c00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27c10 20 20 20 20 20 20 20 20 22 63 6f 75 6c 64 20 6e          "could n
27c20 6f 74 20 6f 70 65 6e 20 72 65 67 69 73 74 72 79  ot open registry
27c30 20 6b 65 79 3a 20 7b 30 7d 5c 5c 7b 31 7d 22 2c   key: {0}\\{1}",
27c40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
27c50 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65            rootKe
27c60 79 2c 20 6b 65 79 4e 61 6d 65 29 3b 0d 0a 0d 0a  y, keyName);....
27c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27c80 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
27c90 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
27ca0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
27cb0 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79          Registry
27cc0 48 65 6c 70 65 72 2e 44 65 6c 65 74 65 53 75 62  Helper.DeleteSub
27cd0 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20  Key(..          
27ce0 20 20 20 20 20 20 20 20 20 20 6b 65 79 2c 20 73            key, s
27cf0 75 62 4b 65 79 4e 61 6d 65 2c 20 74 68 72 6f 77  ubKeyName, throw
27d00 4f 6e 4d 69 73 73 69 6e 67 2c 20 77 68 61 74 49  OnMissing, whatI
27d10 66 2c 20 76 65 72 62 6f 73 65 29 3b 0d 0a 20 20  f, verbose);..  
27d20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
27d30 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
27d40 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20  n true;..       
27d50 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f   }....        //
27d60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27d70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27d80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27d90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27da0 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
27db0 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
27dc0 62 6f 6f 6c 20 50 72 6f 63 65 73 73 41 73 73 65  bool ProcessAsse
27dd0 6d 62 6c 79 46 6f 6c 64 65 72 73 28 0d 0a 20 20  mblyFolders(..  
27de0 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65            MockRe
27df0 67 69 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65  gistryKey rootKe
27e00 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y,..            
27e10 73 74 72 69 6e 67 20 66 72 61 6d 65 77 6f 72 6b  string framework
27e20 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  Name,..         
27e30 20 20 20 56 65 72 73 69 6f 6e 20 66 72 61 6d 65     Version frame
27e40 77 6f 72 6b 56 65 72 73 69 6f 6e 2c 0d 0a 20 20  workVersion,..  
27e50 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
27e60 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 2c 0d 0a   platformName,..
27e70 20 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65              obje
27e80 63 74 20 63 6c 69 65 6e 74 44 61 74 61 2c 0d 0a  ct clientData,..
27e90 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
27ea0 20 77 6f 77 36 34 2c 0d 0a 20 20 20 20 20 20 20   wow64,..       
27eb0 20 20 20 20 20 62 6f 6f 6c 20 74 68 72 6f 77 4f       bool throwO
27ec0 6e 4d 69 73 73 69 6e 67 2c 0d 0a 20 20 20 20 20  nMissing,..     
27ed0 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74         bool what
27ee0 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  If,..           
27ef0 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 0d 0a   bool verbose,..
27f00 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20              ref 
27f10 73 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20  string error..  
27f20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
27f30 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
27f40 20 20 20 20 41 6e 79 50 61 69 72 3c 73 74 72 69      AnyPair<stri
27f50 6e 67 2c 20 62 6f 6f 6c 3e 20 70 61 69 72 20 3d  ng, bool> pair =
27f60 20 63 6c 69 65 6e 74 44 61 74 61 20 61 73 20 41   clientData as A
27f70 6e 79 50 61 69 72 3c 73 74 72 69 6e 67 2c 20 62  nyPair<string, b
27f80 6f 6f 6c 3e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ool>;....       
27f90 20 20 20 20 20 69 66 20 28 70 61 69 72 20 3d 3d       if (pair ==
27fa0 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
27fb0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
27fc0 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22         error = "
27fd0 69 6e 76 61 6c 69 64 20 66 72 61 6d 65 77 6f 72  invalid framewor
27fe0 6b 20 63 61 6c 6c 62 61 63 6b 20 64 61 74 61 22  k callback data"
27ff0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
28000 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
28010 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
28020 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
28030 66 20 28 70 61 69 72 2e 59 29 0d 0a 20 20 20 20  f (pair.Y)..    
28040 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
28050 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
28060 6e 20 52 65 6d 6f 76 65 46 72 6f 6d 41 73 73 65  n RemoveFromAsse
28070 6d 62 6c 79 46 6f 6c 64 65 72 73 28 0d 0a 20 20  mblyFolders(..  
28080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28090 20 20 72 6f 6f 74 4b 65 79 2c 20 66 72 61 6d 65    rootKey, frame
280a0 77 6f 72 6b 4e 61 6d 65 2c 20 66 72 61 6d 65 77  workName, framew
280b0 6f 72 6b 56 65 72 73 69 6f 6e 2c 20 70 6c 61 74  orkVersion, plat
280c0 66 6f 72 6d 4e 61 6d 65 2c 0d 0a 20 20 20 20 20  formName,..     
280d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4c                 L
280e0 65 67 61 63 79 50 72 6f 6a 65 63 74 4e 61 6d 65  egacyProjectName
280f0 2c 20 77 6f 77 36 34 2c 20 66 61 6c 73 65 2c 20  , wow64, false, 
28100 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 2c  whatIf, verbose,
28110 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
28120 20 20 20 20 20 20 72 65 66 20 65 72 72 6f 72 29        ref error)
28130 20 26 26 0d 0a 20 20 20 20 20 20 20 20 20 20 20   &&..           
28140 20 20 20 20 20 41 64 64 54 6f 41 73 73 65 6d 62       AddToAssemb
28150 6c 79 46 6f 6c 64 65 72 73 28 0d 0a 20 20 20 20  lyFolders(..    
28160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28170 72 6f 6f 74 4b 65 79 2c 20 66 72 61 6d 65 77 6f  rootKey, framewo
28180 72 6b 4e 61 6d 65 2c 20 66 72 61 6d 65 77 6f 72  rkName, framewor
28190 6b 56 65 72 73 69 6f 6e 2c 20 70 6c 61 74 66 6f  kVersion, platfo
281a0 72 6d 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20  rmName,..       
281b0 20 20 20 20 20 20 20 20 20 20 20 20 20 50 72 6f               Pro
281c0 6a 65 63 74 4e 61 6d 65 2c 20 70 61 69 72 2e 58  jectName, pair.X
281d0 2c 20 77 6f 77 36 34 2c 20 77 68 61 74 49 66 2c  , wow64, whatIf,
281e0 20 76 65 72 62 6f 73 65 2c 20 72 65 66 20 65 72   verbose, ref er
281f0 72 6f 72 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ror);..         
28200 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
28210 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20    else..        
28220 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
28230 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 52 65         return Re
28240 6d 6f 76 65 46 72 6f 6d 41 73 73 65 6d 62 6c 79  moveFromAssembly
28250 46 6f 6c 64 65 72 73 28 0d 0a 20 20 20 20 20 20  Folders(..      
28260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f                ro
28270 6f 74 4b 65 79 2c 20 66 72 61 6d 65 77 6f 72 6b  otKey, framework
28280 4e 61 6d 65 2c 20 66 72 61 6d 65 77 6f 72 6b 56  Name, frameworkV
28290 65 72 73 69 6f 6e 2c 20 70 6c 61 74 66 6f 72 6d  ersion, platform
282a0 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  Name,..         
282b0 20 20 20 20 20 20 20 20 20 20 20 50 72 6f 6a 65             Proje
282c0 63 74 4e 61 6d 65 2c 20 77 6f 77 36 34 2c 20 74  ctName, wow64, t
282d0 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 2c 20 77  hrowOnMissing, w
282e0 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 2c 0d  hatIf, verbose,.
282f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
28300 20 20 20 20 20 72 65 66 20 65 72 72 6f 72 29 3b       ref error);
28310 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
28320 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
28330 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
28340 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
28350 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28360 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28370 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28380 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28390 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65  /....        #re
283a0 67 69 6f 6e 20 56 69 73 75 61 6c 20 53 74 75 64  gion Visual Stud
283b0 69 6f 20 48 61 6e 64 6c 69 6e 67 0d 0a 20 20 20  io Handling..   
283c0 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61       private sta
283d0 74 69 63 20 73 74 72 69 6e 67 20 47 65 74 56 73  tic string GetVs
283e0 52 6f 6f 74 4b 65 79 4e 61 6d 65 28 0d 0a 20 20  RootKeyName(..  
283f0 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77            bool w
28400 6f 77 36 34 0d 0a 20 20 20 20 20 20 20 20 20 20  ow64..          
28410 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a    )..        {..
28420 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
28430 72 6e 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  rn String.Format
28440 28 22 7b 30 7d 5c 5c 4d 69 63 72 6f 73 6f 66 74  ("{0}\\Microsoft
28450 5c 5c 56 69 73 75 61 6c 53 74 75 64 69 6f 22 2c  \\VisualStudio",
28460 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
28470 20 20 47 65 74 52 6f 6f 74 4b 65 79 4e 61 6d 65    GetRootKeyName
28480 28 77 6f 77 36 34 29 29 3b 0d 0a 20 20 20 20 20  (wow64));..     
28490 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
284a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
284b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
284c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
284d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
284e0 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
284f0 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69     private stati
28500 63 20 73 74 72 69 6e 67 20 47 65 74 56 73 4b 65  c string GetVsKe
28510 79 4e 61 6d 65 28 0d 0a 20 20 20 20 20 20 20 20  yName(..        
28520 20 20 20 20 56 65 72 73 69 6f 6e 20 76 73 56 65      Version vsVe
28530 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20  rsion,..        
28540 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34 0d 0a      bool wow64..
28550 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
28560 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
28570 20 20 20 20 20 20 69 66 20 28 76 73 56 65 72 73        if (vsVers
28580 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  ion == null)..  
28590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
285a0 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20  turn null;....  
285b0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
285c0 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d   String.Format(.
285d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
285e0 20 22 7b 30 7d 5c 5c 7b 31 7d 22 2c 20 47 65 74   "{0}\\{1}", Get
285f0 56 73 52 6f 6f 74 4b 65 79 4e 61 6d 65 28 77 6f  VsRootKeyName(wo
28600 77 36 34 29 2c 20 76 73 56 65 72 73 69 6f 6e 29  w64), vsVersion)
28610 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  ;..        }....
28620 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
28630 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28640 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28650 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28660 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
28670 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69  ...        #regi
28680 6f 6e 20 56 69 73 75 61 6c 20 53 74 75 64 69 6f  on Visual Studio
28690 20 44 61 74 61 20 53 6f 75 72 63 65 20 48 61 6e   Data Source Han
286a0 64 6c 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 70  dling..        p
286b0 72 69 76 61 74 65 20 73 74 61 74 69 63 20 62 6f  rivate static bo
286c0 6f 6c 20 41 64 64 56 73 44 61 74 61 53 6f 75 72  ol AddVsDataSour
286d0 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ce(..           
286e0 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79   MockRegistryKey
286f0 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20 20 20   rootKey,..     
28700 20 20 20 20 20 20 20 56 65 72 73 69 6f 6e 20 76         Version v
28710 73 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20  sVersion,..     
28720 20 20 20 20 20 20 20 50 61 63 6b 61 67 65 20 70         Package p
28730 61 63 6b 61 67 65 2c 0d 0a 20 20 20 20 20 20 20  ackage,..       
28740 20 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34 2c       bool wow64,
28750 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
28760 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20  ol whatIf,..    
28770 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65 72          bool ver
28780 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  bose,..         
28790 20 20 20 72 65 66 20 73 74 72 69 6e 67 20 65 72     ref string er
287a0 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ror..           
287b0 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20   )..        {.. 
287c0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76             if (v
287d0 73 56 65 72 73 69 6f 6e 20 3d 3d 20 6e 75 6c 6c  sVersion == null
287e0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
287f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
28800 20 20 65 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c    error = "inval
28810 69 64 20 56 53 20 76 65 72 73 69 6f 6e 22 3b 0d  id VS version";.
28820 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
28830 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
28840 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
28850 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
28860 28 70 61 63 6b 61 67 65 20 3d 3d 20 6e 75 6c 6c  (package == null
28870 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
28880 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
28890 20 20 65 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c    error = "inval
288a0 69 64 20 56 53 20 70 61 63 6b 61 67 65 22 3b 0d  id VS package";.
288b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
288c0 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
288d0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
288e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72  .            str
288f0 69 6e 67 20 6b 65 79 4e 61 6d 65 20 3d 20 47 65  ing keyName = Ge
28900 74 56 73 4b 65 79 4e 61 6d 65 28 76 73 56 65 72  tVsKeyName(vsVer
28910 73 69 6f 6e 2c 20 77 6f 77 36 34 29 3b 0d 0a 0d  sion, wow64);...
28920 0a 20 20 20 20 20 20 20 20 20 20 20 20 75 73 69  .            usi
28930 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73 74 72 79  ng (MockRegistry
28940 4b 65 79 20 6b 65 79 20 3d 20 52 65 67 69 73 74  Key key = Regist
28950 72 79 48 65 6c 70 65 72 2e 4f 70 65 6e 53 75 62  ryHelper.OpenSub
28960 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20  Key(..          
28970 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65            rootKe
28980 79 2c 20 6b 65 79 4e 61 6d 65 2c 20 66 61 6c 73  y, keyName, fals
28990 65 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f  e, whatIf, verbo
289a0 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  se))..          
289b0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
289c0 20 20 20 20 20 69 66 20 28 6b 65 79 20 3d 3d 20       if (key == 
289d0 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
289e0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
289f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72                er
28a00 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72  ror = String.For
28a10 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
28a20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 63                "c
28a30 6f 75 6c 64 20 6e 6f 74 20 6f 70 65 6e 20 72 65  ould not open re
28a40 67 69 73 74 72 79 20 6b 65 79 3a 20 7b 30 7d 5c  gistry key: {0}\
28a50 5c 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20  \{1}",..        
28a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28a70 72 6f 6f 74 4b 65 79 2c 20 6b 65 79 4e 61 6d 65  rootKey, keyName
28a80 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
28a90 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
28aa0 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20   false;..       
28ab0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
28ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 75 73                us
28ad0 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73 74 72  ing (MockRegistr
28ae0 79 4b 65 79 20 73 75 62 4b 65 79 20 3d 20 52 65  yKey subKey = Re
28af0 67 69 73 74 72 79 48 65 6c 70 65 72 2e 4f 70 65  gistryHelper.Ope
28b00 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20  nSubKey(..      
28b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28b20 20 20 6b 65 79 2c 20 22 44 61 74 61 53 6f 75 72    key, "DataSour
28b30 63 65 73 22 2c 20 74 72 75 65 2c 20 77 68 61 74  ces", true, what
28b40 49 66 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a 20  If, verbose)).. 
28b50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
28b60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
28b70 20 20 20 20 20 20 69 66 20 28 73 75 62 4b 65 79        if (subKey
28b80 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
28b90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
28ba0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
28bb0 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20            error 
28bc0 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  = String.Format(
28bd0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
28be0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 63                "c
28bf0 6f 75 6c 64 20 6e 6f 74 20 6f 70 65 6e 20 72 65  ould not open re
28c00 67 69 73 74 72 79 20 6b 65 79 3a 20 7b 30 7d 5c  gistry key: {0}\
28c10 5c 44 61 74 61 53 6f 75 72 63 65 73 22 2c 0d 0a  \DataSources",..
28c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28c30 20 20 20 20 20 20 20 20 20 20 20 20 6b 65 79 29              key)
28c40 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
28c50 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
28c60 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20  urn false;..    
28c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28c80 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
28c90 20 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28           using (
28ca0 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20  MockRegistryKey 
28cb0 64 61 74 61 53 6f 75 72 63 65 4b 65 79 20 3d 0d  dataSourceKey =.
28cc0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
28cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67               Reg
28ce0 69 73 74 72 79 48 65 6c 70 65 72 2e 43 72 65 61  istryHelper.Crea
28cf0 74 65 53 75 62 4b 65 79 28 73 75 62 4b 65 79 2c  teSubKey(subKey,
28d00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
28d10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 61                pa
28d20 63 6b 61 67 65 2e 44 61 74 61 53 6f 75 72 63 65  ckage.DataSource
28d30 49 64 2e 54 6f 53 74 72 69 6e 67 28 56 73 49 64  Id.ToString(VsId
28d40 46 6f 72 6d 61 74 29 2c 0d 0a 20 20 20 20 20 20  Format),..      
28d50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28d60 20 20 20 20 20 20 77 68 61 74 49 66 2c 20 76 65        whatIf, ve
28d70 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 20  rbose))..       
28d80 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
28d90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28da0 20 20 20 20 20 20 20 20 69 66 20 28 64 61 74 61          if (data
28db0 53 6f 75 72 63 65 4b 65 79 20 3d 3d 20 6e 75 6c  SourceKey == nul
28dc0 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
28dd0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
28de0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28df0 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72             error
28e00 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74   = String.Format
28e10 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
28e20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28e30 20 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20 63 72     "could not cr
28e40 65 61 74 65 20 72 65 67 69 73 74 72 79 20 6b 65  eate registry ke
28e50 79 3a 20 7b 30 7d 5c 5c 7b 31 7d 22 2c 20 6b 65  y: {0}\\{1}", ke
28e60 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y,..            
28e70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28e80 20 20 20 20 70 61 63 6b 61 67 65 2e 44 61 74 61      package.Data
28e90 53 6f 75 72 63 65 49 64 2e 54 6f 53 74 72 69 6e  SourceId.ToStrin
28ea0 67 28 56 73 49 64 46 6f 72 6d 61 74 29 29 3b 0d  g(VsIdFormat));.
28eb0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
28ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
28ed0 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20  eturn false;..  
28ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28ef0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
28f00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28f10 20 20 20 52 65 67 69 73 74 72 79 48 65 6c 70 65     RegistryHelpe
28f20 72 2e 53 65 74 56 61 6c 75 65 28 0d 0a 20 20 20  r.SetValue(..   
28f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28f40 20 20 20 20 20 20 20 20 20 64 61 74 61 53 6f 75           dataSou
28f50 72 63 65 4b 65 79 2c 20 6e 75 6c 6c 2c 20 53 74  rceKey, null, St
28f60 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
28f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28f80 20 20 20 20 20 20 20 20 20 20 22 7b 30 7d 20 44            "{0} D
28f90 61 74 61 62 61 73 65 20 46 69 6c 65 22 2c 20 50  atabase File", P
28fa0 72 6f 6a 65 63 74 4e 61 6d 65 29 2c 20 77 68 61  rojectName), wha
28fb0 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  tIf,..          
28fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28fd0 20 20 76 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20    verbose);.... 
28fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28ff0 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79 48         RegistryH
29000 65 6c 70 65 72 2e 43 72 65 61 74 65 53 75 62 4b  elper.CreateSubK
29010 65 79 28 64 61 74 61 53 6f 75 72 63 65 4b 65 79  ey(dataSourceKey
29020 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
29030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53                 S
29040 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 22 53 75  tring.Format("Su
29050 70 70 6f 72 74 69 6e 67 50 72 6f 76 69 64 65 72  pportingProvider
29060 73 5c 5c 7b 30 7d 22 2c 0d 0a 20 20 20 20 20 20  s\\{0}",..      
29070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29080 20 20 20 20 20 20 70 61 63 6b 61 67 65 2e 44 61        package.Da
29090 74 61 50 72 6f 76 69 64 65 72 49 64 2e 54 6f 53  taProviderId.ToS
290a0 74 72 69 6e 67 28 56 73 49 64 46 6f 72 6d 61 74  tring(VsIdFormat
290b0 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  )),..           
290c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
290d0 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65   whatIf, verbose
290e0 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
290f0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
29100 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
29110 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
29120 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
29130 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20  n true;..       
29140 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f   }....        //
29150 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29160 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29170 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29180 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29190 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
291a0 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
291b0 62 6f 6f 6c 20 52 65 6d 6f 76 65 56 73 44 61 74  bool RemoveVsDat
291c0 61 53 6f 75 72 63 65 28 0d 0a 20 20 20 20 20 20  aSource(..      
291d0 20 20 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 74        MockRegist
291e0 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a  ryKey rootKey,..
291f0 20 20 20 20 20 20 20 20 20 20 20 20 56 65 72 73              Vers
29200 69 6f 6e 20 76 73 56 65 72 73 69 6f 6e 2c 0d 0a  ion vsVersion,..
29210 20 20 20 20 20 20 20 20 20 20 20 20 50 61 63 6b              Pack
29220 61 67 65 20 70 61 63 6b 61 67 65 2c 0d 0a 20 20  age package,..  
29230 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77            bool w
29240 6f 77 36 34 2c 0d 0a 20 20 20 20 20 20 20 20 20  ow64,..         
29250 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d     bool whatIf,.
29260 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f  .            boo
29270 6c 20 76 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20  l verbose,..    
29280 20 20 20 20 20 20 20 20 72 65 66 20 73 74 72 69          ref stri
29290 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20 20 20 20  ng error..      
292a0 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
292b0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
292c0 69 66 20 28 76 73 56 65 72 73 69 6f 6e 20 3d 3d  if (vsVersion ==
292d0 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
292e0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
292f0 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22         error = "
29300 69 6e 76 61 6c 69 64 20 56 53 20 76 65 72 73 69  invalid VS versi
29310 6f 6e 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  on";..          
29320 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
29330 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se;..           
29340 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
29350 20 20 69 66 20 28 70 61 63 6b 61 67 65 20 3d 3d    if (package ==
29360 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
29370 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
29380 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22         error = "
29390 69 6e 76 61 6c 69 64 20 56 53 20 70 61 63 6b 61  invalid VS packa
293a0 67 65 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ge";..          
293b0 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
293c0 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se;..           
293d0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
293e0 20 20 73 74 72 69 6e 67 20 6b 65 79 4e 61 6d 65    string keyName
293f0 20 3d 20 47 65 74 56 73 4b 65 79 4e 61 6d 65 28   = GetVsKeyName(
29400 76 73 56 65 72 73 69 6f 6e 2c 20 77 6f 77 36 34  vsVersion, wow64
29410 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
29420 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67    using (MockReg
29430 69 73 74 72 79 4b 65 79 20 6b 65 79 20 3d 20 52  istryKey key = R
29440 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 4f 70  egistryHelper.Op
29450 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20  enSubKey(..     
29460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
29470 6f 6f 74 4b 65 79 2c 20 6b 65 79 4e 61 6d 65 2c  ootKey, keyName,
29480 20 66 61 6c 73 65 2c 20 77 68 61 74 49 66 2c 20   false, whatIf, 
29490 76 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20  verbose))..     
294a0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
294b0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6b 65            if (ke
294c0 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  y == null)..    
294d0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
294e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
294f0 20 20 20 65 72 72 6f 72 20 3d 20 53 74 72 69 6e     error = Strin
29500 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
29510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29520 20 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20 6f 70     "could not op
29530 65 6e 20 72 65 67 69 73 74 72 79 20 6b 65 79 3a  en registry key:
29540 20 7b 30 7d 5c 5c 7b 31 7d 22 2c 0d 0a 20 20 20   {0}\\{1}",..   
29550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29560 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 6b 65       rootKey, ke
29570 79 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20  yName);....     
29580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
29590 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20  eturn false;..  
295a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
295b0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
295c0 20 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65     using (MockRe
295d0 67 69 73 74 72 79 4b 65 79 20 73 75 62 4b 65 79  gistryKey subKey
295e0 20 3d 20 52 65 67 69 73 74 72 79 48 65 6c 70 65   = RegistryHelpe
295f0 72 2e 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20  r.OpenSubKey(.. 
29600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29610 20 20 20 20 20 20 20 6b 65 79 2c 20 22 44 61 74         key, "Dat
29620 61 53 6f 75 72 63 65 73 22 2c 20 74 72 75 65 2c  aSources", true,
29630 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65   whatIf, verbose
29640 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
29650 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
29660 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 73             if (s
29670 75 62 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  ubKey == null)..
29680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29690 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
296a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
296b0 72 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f  rror = String.Fo
296c0 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
296d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
296e0 20 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20 6f 70     "could not op
296f0 65 6e 20 72 65 67 69 73 74 72 79 20 6b 65 79 3a  en registry key:
29700 20 7b 30 7d 5c 5c 44 61 74 61 53 6f 75 72 63 65   {0}\\DataSource
29710 73 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s",..           
29720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29730 20 6b 65 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20   key);....      
29740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29750 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
29760 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
29770 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
29780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65                Re
29790 67 69 73 74 72 79 48 65 6c 70 65 72 2e 44 65 6c  gistryHelper.Del
297a0 65 74 65 53 75 62 4b 65 79 54 72 65 65 28 0d 0a  eteSubKeyTree(..
297b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
297c0 20 20 20 20 20 20 20 20 73 75 62 4b 65 79 2c 20          subKey, 
297d0 70 61 63 6b 61 67 65 2e 44 61 74 61 53 6f 75 72  package.DataSour
297e0 63 65 49 64 2e 54 6f 53 74 72 69 6e 67 28 56 73  ceId.ToString(Vs
297f0 49 64 46 6f 72 6d 61 74 29 2c 0d 0a 20 20 20 20  IdFormat),..    
29800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29810 20 20 20 20 77 68 61 74 49 66 2c 20 76 65 72 62      whatIf, verb
29820 6f 73 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ose);..         
29830 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
29840 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
29850 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72         return tr
29860 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  ue;..        }..
29870 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
29880 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29890 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
298a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
298b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
298c0 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69  /....        pri
298d0 76 61 74 65 20 73 74 61 74 69 63 20 62 6f 6f 6c  vate static bool
298e0 20 50 72 6f 63 65 73 73 56 73 44 61 74 61 53 6f   ProcessVsDataSo
298f0 75 72 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20  urce(..         
29900 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b     MockRegistryK
29910 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20  ey rootKey,..   
29920 20 20 20 20 20 20 20 20 20 56 65 72 73 69 6f 6e           Version
29930 20 76 73 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20   vsVersion,..   
29940 20 20 20 20 20 20 20 20 20 50 61 63 6b 61 67 65           Package
29950 20 70 61 63 6b 61 67 65 2c 0d 0a 20 20 20 20 20   package,..     
29960 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 63 6c         object cl
29970 69 65 6e 74 44 61 74 61 2c 0d 0a 20 20 20 20 20  ientData,..     
29980 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36         bool wow6
29990 34 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  4,..            
299a0 62 6f 6f 6c 20 74 68 72 6f 77 4f 6e 4d 69 73 73  bool throwOnMiss
299b0 69 6e 67 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ing,..          
299c0 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a    bool whatIf,..
299d0 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
299e0 20 76 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20   verbose,..     
299f0 20 20 20 20 20 20 20 72 65 66 20 73 74 72 69 6e         ref strin
29a00 67 20 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20  g error..       
29a10 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
29a20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  {..            i
29a30 66 20 28 70 61 63 6b 61 67 65 20 3d 3d 20 6e 75  f (package == nu
29a40 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
29a50 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
29a60 20 20 20 20 65 72 72 6f 72 20 3d 20 22 69 6e 76      error = "inv
29a70 61 6c 69 64 20 56 53 20 70 61 63 6b 61 67 65 22  alid VS package"
29a80 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
29a90 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
29aa0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
29ab0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 41  ...            A
29ac0 6e 79 50 61 69 72 3c 73 74 72 69 6e 67 2c 20 62  nyPair<string, b
29ad0 6f 6f 6c 3e 20 70 61 69 72 20 3d 20 63 6c 69 65  ool> pair = clie
29ae0 6e 74 44 61 74 61 20 61 73 20 41 6e 79 50 61 69  ntData as AnyPai
29af0 72 3c 73 74 72 69 6e 67 2c 20 62 6f 6f 6c 3e 3b  r<string, bool>;
29b00 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
29b10 69 66 20 28 70 61 69 72 20 3d 3d 20 6e 75 6c 6c  if (pair == null
29b20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
29b30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
29b40 20 20 65 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c    error = "inval
29b50 69 64 20 56 53 20 63 61 6c 6c 62 61 63 6b 20 64  id VS callback d
29b60 61 74 61 22 3b 0d 0a 20 20 20 20 20 20 20 20 20  ata";..         
29b70 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
29b80 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lse;..          
29b90 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
29ba0 20 20 20 69 66 20 28 70 61 69 72 2e 59 29 0d 0a     if (pair.Y)..
29bb0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
29bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
29bd0 65 74 75 72 6e 20 41 64 64 56 73 44 61 74 61 53  eturn AddVsDataS
29be0 6f 75 72 63 65 28 0d 0a 20 20 20 20 20 20 20 20  ource(..        
29bf0 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74              root
29c00 4b 65 79 2c 20 76 73 56 65 72 73 69 6f 6e 2c 20  Key, vsVersion, 
29c10 70 61 63 6b 61 67 65 2c 20 77 6f 77 36 34 2c 20  package, wow64, 
29c20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 2c  whatIf, verbose,
29c30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
29c40 20 20 20 20 20 20 72 65 66 20 65 72 72 6f 72 29        ref error)
29c50 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
29c60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 65 6c  ..            el
29c70 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  se..            
29c80 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
29c90 20 20 20 72 65 74 75 72 6e 20 52 65 6d 6f 76 65     return Remove
29ca0 56 73 44 61 74 61 53 6f 75 72 63 65 28 0d 0a 20  VsDataSource(.. 
29cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29cc0 20 20 20 72 6f 6f 74 4b 65 79 2c 20 76 73 56 65     rootKey, vsVe
29cd0 72 73 69 6f 6e 2c 20 70 61 63 6b 61 67 65 2c 20  rsion, package, 
29ce0 77 6f 77 36 34 2c 20 77 68 61 74 49 66 2c 20 76  wow64, whatIf, v
29cf0 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20  erbose,..       
29d00 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66               ref
29d10 20 65 72 72 6f 72 29 3b 0d 0a 20 20 20 20 20 20   error);..      
29d20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
29d30 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64   }..        #end
29d40 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20  region....      
29d50 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
29d60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29d70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29d80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29d90 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
29da0 20 20 20 20 20 23 72 65 67 69 6f 6e 20 56 69 73       #region Vis
29db0 75 61 6c 20 53 74 75 64 69 6f 20 44 61 74 61 20  ual Studio Data 
29dc0 50 72 6f 76 69 64 65 72 20 48 61 6e 64 6c 69 6e  Provider Handlin
29dd0 67 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  g..        priva
29de0 74 65 20 73 74 61 74 69 63 20 62 6f 6f 6c 20 41  te static bool A
29df0 64 64 56 73 44 61 74 61 50 72 6f 76 69 64 65 72  ddVsDataProvider
29e00 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 4d  (..            M
29e10 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 72  ockRegistryKey r
29e20 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20  ootKey,..       
29e30 20 20 20 20 20 56 65 72 73 69 6f 6e 20 76 73 56       Version vsV
29e40 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20  ersion,..       
29e50 20 20 20 20 20 50 61 63 6b 61 67 65 20 70 61 63       Package pac
29e60 6b 61 67 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  kage,..         
29e70 20 20 20 73 74 72 69 6e 67 20 66 69 6c 65 4e 61     string fileNa
29e80 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me,..           
29e90 20 62 6f 6f 6c 20 77 6f 77 36 34 2c 0d 0a 20 20   bool wow64,..  
29ea0 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77            bool w
29eb0 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20  hatIf,..        
29ec0 20 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65      bool verbose
29ed0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  ,..            r
29ee0 65 66 20 73 74 72 69 6e 67 20 65 72 72 6f 72 0d  ef string error.
29ef0 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a  .            )..
29f00 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
29f10 20 20 20 20 20 20 20 69 66 20 28 76 73 56 65 72         if (vsVer
29f20 73 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  sion == null).. 
29f30 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
29f40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72                er
29f50 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64 20 56  ror = "invalid V
29f60 53 20 76 65 72 73 69 6f 6e 22 3b 0d 0a 20 20 20  S version";..   
29f70 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
29f80 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20  urn false;..    
29f90 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
29fa0 20 20 20 20 20 20 20 20 20 69 66 20 28 70 61 63           if (pac
29fb0 6b 61 67 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  kage == null).. 
29fc0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
29fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72                er
29fe0 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64 20 56  ror = "invalid V
29ff0 53 20 70 61 63 6b 61 67 65 22 3b 0d 0a 20 20 20  S package";..   
2a000 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
2a010 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20  urn false;..    
2a020 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
2a030 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
2a040 6b 65 79 4e 61 6d 65 20 3d 20 47 65 74 56 73 4b  keyName = GetVsK
2a050 65 79 4e 61 6d 65 28 76 73 56 65 72 73 69 6f 6e  eyName(vsVersion
2a060 2c 20 77 6f 77 36 34 29 3b 0d 0a 0d 0a 20 20 20  , wow64);....   
2a070 20 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28           using (
2a080 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20  MockRegistryKey 
2a090 6b 65 79 20 3d 20 52 65 67 69 73 74 72 79 48 65  key = RegistryHe
2a0a0 6c 70 65 72 2e 4f 70 65 6e 53 75 62 4b 65 79 28  lper.OpenSubKey(
2a0b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2a0c0 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 6b        rootKey, k
2a0d0 65 79 4e 61 6d 65 2c 20 66 61 6c 73 65 2c 20 77  eyName, false, w
2a0e0 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 29  hatIf, verbose))
2a0f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
2a100 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2a110 20 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c   if (key == null
2a120 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
2a130 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
2a140 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20            error 
2a150 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  = String.Format(
2a160 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2a170 20 20 20 20 20 20 20 20 20 20 22 63 6f 75 6c 64            "could
2a180 20 6e 6f 74 20 6f 70 65 6e 20 72 65 67 69 73 74   not open regist
2a190 72 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c 7b 31 7d  ry key: {0}\\{1}
2a1a0 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
2a1b0 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74              root
2a1c0 4b 65 79 2c 20 6b 65 79 4e 61 6d 65 29 3b 0d 0a  Key, keyName);..
2a1d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2a1e0 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
2a1f0 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se;..           
2a200 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
2a210 20 20 20 20 20 20 20 20 20 20 75 73 69 6e 67 20            using 
2a220 28 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79  (MockRegistryKey
2a230 20 73 75 62 4b 65 79 20 3d 20 52 65 67 69 73 74   subKey = Regist
2a240 72 79 48 65 6c 70 65 72 2e 4f 70 65 6e 53 75 62  ryHelper.OpenSub
2a250 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20  Key(..          
2a260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6b 65                ke
2a270 79 2c 20 22 44 61 74 61 50 72 6f 76 69 64 65 72  y, "DataProvider
2a280 73 22 2c 20 74 72 75 65 2c 20 77 68 61 74 49 66  s", true, whatIf
2a290 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a 20 20 20  , verbose))..   
2a2a0 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
2a2b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a2c0 20 20 20 20 69 66 20 28 73 75 62 4b 65 79 20 3d      if (subKey =
2a2d0 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
2a2e0 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
2a2f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a300 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
2a310 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
2a320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a330 20 20 20 20 20 20 20 20 20 20 20 20 22 63 6f 75              "cou
2a340 6c 64 20 6e 6f 74 20 6f 70 65 6e 20 72 65 67 69  ld not open regi
2a350 73 74 72 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c 44  stry key: {0}\\D
2a360 61 74 61 50 72 6f 76 69 64 65 72 73 22 2c 0d 0a  ataProviders",..
2a370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a380 20 20 20 20 20 20 20 20 20 20 20 20 6b 65 79 29              key)
2a390 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
2a3a0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
2a3b0 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20  urn false;..    
2a3c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a3d0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
2a3e0 20 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28           using (
2a3f0 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20  MockRegistryKey 
2a400 64 61 74 61 50 72 6f 76 69 64 65 72 4b 65 79 20  dataProviderKey 
2a410 3d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  =..             
2a420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52                 R
2a430 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 43 72  egistryHelper.Cr
2a440 65 61 74 65 53 75 62 4b 65 79 28 73 75 62 4b 65  eateSubKey(subKe
2a450 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y,..            
2a460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a470 70 61 63 6b 61 67 65 2e 44 61 74 61 50 72 6f 76  package.DataProv
2a480 69 64 65 72 49 64 2e 54 6f 53 74 72 69 6e 67 28  iderId.ToString(
2a490 56 73 49 64 46 6f 72 6d 61 74 29 2c 0d 0a 20 20  VsIdFormat),..  
2a4a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a4b0 20 20 20 20 20 20 20 20 20 20 77 68 61 74 49 66            whatIf
2a4c0 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a 20 20 20  , verbose))..   
2a4d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a4e0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
2a4f0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
2a500 64 61 74 61 50 72 6f 76 69 64 65 72 4b 65 79 20  dataProviderKey 
2a510 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
2a520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a530 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
2a540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a550 20 65 72 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e   error = String.
2a560 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
2a570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a580 20 20 20 20 20 20 20 20 20 22 63 6f 75 6c 64 20           "could 
2a590 6e 6f 74 20 63 72 65 61 74 65 20 72 65 67 69 73  not create regis
2a5a0 74 72 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c 7b 31  try key: {0}\\{1
2a5b0 7d 22 2c 20 6b 65 79 2c 0d 0a 20 20 20 20 20 20  }", key,..      
2a5c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a5d0 20 20 20 20 20 20 20 20 20 20 70 61 63 6b 61 67            packag
2a5e0 65 2e 44 61 74 61 50 72 6f 76 69 64 65 72 49 64  e.DataProviderId
2a5f0 2e 54 6f 53 74 72 69 6e 67 28 56 73 49 64 46 6f  .ToString(VsIdFo
2a600 72 6d 61 74 29 29 3b 0d 0a 0d 0a 20 20 20 20 20  rmat));....     
2a610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a620 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
2a630 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lse;..          
2a640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
2a650 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
2a660 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73             Regis
2a670 74 72 79 48 65 6c 70 65 72 2e 53 65 74 56 61 6c  tryHelper.SetVal
2a680 75 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue(..           
2a690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a6a0 20 64 61 74 61 50 72 6f 76 69 64 65 72 4b 65 79   dataProviderKey
2a6b0 2c 20 6e 75 6c 6c 2c 20 44 65 73 63 72 69 70 74  , null, Descript
2a6c0 69 6f 6e 2c 20 77 68 61 74 49 66 2c 0d 0a 20 20  ion, whatIf,..  
2a6d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a6e0 20 20 20 20 20 20 20 20 20 20 76 65 72 62 6f 73            verbos
2a6f0 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e);....         
2a700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52                 R
2a710 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 53 65  egistryHelper.Se
2a720 74 56 61 6c 75 65 28 0d 0a 20 20 20 20 20 20 20  tValue(..       
2a730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a740 20 20 20 20 20 64 61 74 61 50 72 6f 76 69 64 65       dataProvide
2a750 72 4b 65 79 2c 20 22 49 6e 76 61 72 69 61 6e 74  rKey, "Invariant
2a760 4e 61 6d 65 22 2c 20 49 6e 76 61 72 69 61 6e 74  Name", Invariant
2a770 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  Name,..         
2a780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a790 20 20 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f     whatIf, verbo
2a7a0 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  se);....        
2a7b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a7c0 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 53  RegistryHelper.S
2a7d0 65 74 56 61 6c 75 65 28 0d 0a 20 20 20 20 20 20  etValue(..      
2a7e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a7f0 20 20 20 20 20 20 64 61 74 61 50 72 6f 76 69 64        dataProvid
2a800 65 72 4b 65 79 2c 20 22 54 65 63 68 6e 6f 6c 6f  erKey, "Technolo
2a810 67 79 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  gy",..          
2a820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a830 20 20 70 61 63 6b 61 67 65 2e 41 64 6f 4e 65 74    package.AdoNet
2a840 54 65 63 68 6e 6f 6c 6f 67 79 49 64 2e 54 6f 53  TechnologyId.ToS
2a850 74 72 69 6e 67 28 56 73 49 64 46 6f 72 6d 61 74  tring(VsIdFormat
2a860 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
2a870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a880 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29  whatIf, verbose)
2a890 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
2a8a0 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67               Reg
2a8b0 69 73 74 72 79 48 65 6c 70 65 72 2e 53 65 74 56  istryHelper.SetV
2a8c0 61 6c 75 65 28 0d 0a 20 20 20 20 20 20 20 20 20  alue(..         
2a8d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a8e0 20 20 20 64 61 74 61 50 72 6f 76 69 64 65 72 4b     dataProviderK
2a8f0 65 79 2c 20 22 43 6f 64 65 42 61 73 65 22 2c 20  ey, "CodeBase", 
2a900 66 69 6c 65 4e 61 6d 65 2c 20 77 68 61 74 49 66  fileName, whatIf
2a910 2c 0d 0a 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 20 20 76                 v
2a930 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20  erbose);....    
2a940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a950 20 20 20 20 52 65 67 69 73 74 72 79 48 65 6c 70      RegistryHelp
2a960 65 72 2e 53 65 74 56 61 6c 75 65 28 0d 0a 20 20  er.SetValue(..  
2a970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a980 20 20 20 20 20 20 20 20 20 20 64 61 74 61 50 72            dataPr
2a990 6f 76 69 64 65 72 4b 65 79 2c 20 22 46 61 63 74  oviderKey, "Fact
2a9a0 6f 72 79 53 65 72 76 69 63 65 22 2c 0d 0a 20 20  oryService",..  
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 70 61 63 6b 61 67            packag
2a9d0 65 2e 53 65 72 76 69 63 65 49 64 2e 54 6f 53 74  e.ServiceId.ToSt
2a9e0 72 69 6e 67 28 56 73 49 64 46 6f 72 6d 61 74 29  ring(VsIdFormat)
2a9f0 2c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20  , whatIf,..     
2aa00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2aa10 20 20 20 20 20 20 20 76 65 72 62 6f 73 65 29 3b         verbose);
2aa20 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2aa30 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69              Regi
2aa40 73 74 72 79 48 65 6c 70 65 72 2e 43 72 65 61 74  stryHelper.Creat
2aa50 65 53 75 62 4b 65 79 28 64 61 74 61 50 72 6f 76  eSubKey(dataProv
2aa60 69 64 65 72 4b 65 79 2c 0d 0a 20 20 20 20 20 20  iderKey,..      
2aa70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2aa80 20 20 20 20 20 20 22 53 75 70 70 6f 72 74 65 64        "Supported
2aa90 4f 62 6a 65 63 74 73 5c 5c 44 61 74 61 43 6f 6e  Objects\\DataCon
2aaa0 6e 65 63 74 69 6f 6e 55 49 43 6f 6e 74 72 6f 6c  nectionUIControl
2aab0 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
2aac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2aad0 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29  whatIf, verbose)
2aae0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
2aaf0 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67               Reg
2ab00 69 73 74 72 79 48 65 6c 70 65 72 2e 43 72 65 61  istryHelper.Crea
2ab10 74 65 53 75 62 4b 65 79 28 64 61 74 61 50 72 6f  teSubKey(dataPro
2ab20 76 69 64 65 72 4b 65 79 2c 0d 0a 20 20 20 20 20  viderKey,..     
2ab30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ab40 20 20 20 20 20 20 20 22 53 75 70 70 6f 72 74 65         "Supporte
2ab50 64 4f 62 6a 65 63 74 73 5c 5c 44 61 74 61 43 6f  dObjects\\DataCo
2ab60 6e 6e 65 63 74 69 6f 6e 50 72 6f 70 65 72 74 69  nnectionProperti
2ab70 65 73 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  es",..          
2ab80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ab90 20 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73    whatIf, verbos
2aba0 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e);....         
2abb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52                 R
2abc0 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 43 72  egistryHelper.Cr
2abd0 65 61 74 65 53 75 62 4b 65 79 28 64 61 74 61 50  eateSubKey(dataP
2abe0 72 6f 76 69 64 65 72 4b 65 79 2c 0d 0a 20 20 20  roviderKey,..   
2abf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ac00 20 20 20 20 20 20 20 20 20 22 53 75 70 70 6f 72           "Suppor
2ac10 74 65 64 4f 62 6a 65 63 74 73 5c 5c 44 61 74 61  tedObjects\\Data
2ac20 43 6f 6e 6e 65 63 74 69 6f 6e 53 75 70 70 6f 72  ConnectionSuppor
2ac30 74 22 2c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20  t", whatIf,..   
2ac40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ac50 20 20 20 20 20 20 20 20 20 76 65 72 62 6f 73 65           verbose
2ac60 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
2ac70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65                Re
2ac80 67 69 73 74 72 79 48 65 6c 70 65 72 2e 43 72 65  gistryHelper.Cre
2ac90 61 74 65 53 75 62 4b 65 79 28 64 61 74 61 50 72  ateSubKey(dataPr
2aca0 6f 76 69 64 65 72 4b 65 79 2c 0d 0a 20 20 20 20  oviderKey,..    
2acb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2acc0 20 20 20 20 20 20 20 20 22 53 75 70 70 6f 72 74          "Support
2acd0 65 64 4f 62 6a 65 63 74 73 5c 5c 44 61 74 61 4f  edObjects\\DataO
2ace0 62 6a 65 63 74 53 75 70 70 6f 72 74 22 2c 20 77  bjectSupport", w
2acf0 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20  hatIf,..        
2ad00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ad10 20 20 20 20 76 65 72 62 6f 73 65 29 3b 0d 0a 0d      verbose);...
2ad20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2ad30 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72           Registr
2ad40 79 48 65 6c 70 65 72 2e 43 72 65 61 74 65 53 75  yHelper.CreateSu
2ad50 62 4b 65 79 28 64 61 74 61 50 72 6f 76 69 64 65  bKey(dataProvide
2ad60 72 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20  rKey,..         
2ad70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ad80 20 20 20 22 53 75 70 70 6f 72 74 65 64 4f 62 6a     "SupportedObj
2ad90 65 63 74 73 5c 5c 44 61 74 61 56 69 65 77 53 75  ects\\DataViewSu
2ada0 70 70 6f 72 74 22 2c 20 77 68 61 74 49 66 2c 0d  pport", whatIf,.
2adb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2adc0 20 20 20 20 20 20 20 20 20 20 20 20 20 76 65 72               ver
2add0 62 6f 73 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  bose);..        
2ade0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
2adf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
2ae00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
2ae10 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  ...            r
2ae20 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20  eturn true;..   
2ae30 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
2ae40 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
2ae50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ae60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ae70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ae80 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
2ae90 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61       private sta
2aea0 74 69 63 20 62 6f 6f 6c 20 52 65 6d 6f 76 65 56  tic bool RemoveV
2aeb0 73 44 61 74 61 50 72 6f 76 69 64 65 72 28 0d 0a  sDataProvider(..
2aec0 20 20 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b              Mock
2aed0 52 65 67 69 73 74 72 79 4b 65 79 20 72 6f 6f 74  RegistryKey root
2aee0 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  Key,..          
2aef0 20 20 56 65 72 73 69 6f 6e 20 76 73 56 65 72 73    Version vsVers
2af00 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ion,..          
2af10 20 20 50 61 63 6b 61 67 65 20 70 61 63 6b 61 67    Package packag
2af20 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
2af30 62 6f 6f 6c 20 77 6f 77 36 34 2c 0d 0a 20 20 20  bool wow64,..   
2af40 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68           bool wh
2af50 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20  atIf,..         
2af60 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c     bool verbose,
2af70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
2af80 66 20 73 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a  f string error..
2af90 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
2afa0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
2afb0 20 20 20 20 20 20 69 66 20 28 76 73 56 65 72 73        if (vsVers
2afc0 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  ion == null)..  
2afd0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
2afe0 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
2aff0 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64 20 56 53  or = "invalid VS
2b000 20 76 65 72 73 69 6f 6e 22 3b 0d 0a 20 20 20 20   version";..    
2b010 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
2b020 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20  rn false;..     
2b030 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
2b040 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6b          string k
2b050 65 79 4e 61 6d 65 20 3d 20 47 65 74 56 73 4b 65  eyName = GetVsKe
2b060 79 4e 61 6d 65 28 76 73 56 65 72 73 69 6f 6e 2c  yName(vsVersion,
2b070 20 77 6f 77 36 34 29 3b 0d 0a 0d 0a 20 20 20 20   wow64);....    
2b080 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 4d          using (M
2b090 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 6b  ockRegistryKey k
2b0a0 65 79 20 3d 20 52 65 67 69 73 74 72 79 48 65 6c  ey = RegistryHel
2b0b0 70 65 72 2e 4f 70 65 6e 53 75 62 4b 65 79 28 0d  per.OpenSubKey(.
2b0c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2b0d0 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 6b 65       rootKey, ke
2b0e0 79 4e 61 6d 65 2c 20 66 61 6c 73 65 2c 20 77 68  yName, false, wh
2b0f0 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 29 0d  atIf, verbose)).
2b100 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
2b110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b120 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29  if (key == null)
2b130 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2b140 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
2b150 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
2b160 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d   String.Format(.
2b170 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2b180 20 20 20 20 20 20 20 20 20 22 63 6f 75 6c 64 20           "could 
2b190 6e 6f 74 20 6f 70 65 6e 20 72 65 67 69 73 74 72  not open registr
2b1a0 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c 7b 31 7d 22  y key: {0}\\{1}"
2b1b0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
2b1c0 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b             rootK
2b1d0 65 79 2c 20 6b 65 79 4e 61 6d 65 29 3b 0d 0a 0d  ey, keyName);...
2b1e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2b1f0 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
2b200 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
2b210 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
2b220 20 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28           using (
2b230 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20  MockRegistryKey 
2b240 73 75 62 4b 65 79 20 3d 20 52 65 67 69 73 74 72  subKey = Registr
2b250 79 48 65 6c 70 65 72 2e 4f 70 65 6e 53 75 62 4b  yHelper.OpenSubK
2b260 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ey(..           
2b270 20 20 20 20 20 20 20 20 20 20 20 20 20 6b 65 79               key
2b280 2c 20 22 44 61 74 61 50 72 6f 76 69 64 65 72 73  , "DataProviders
2b290 22 2c 20 74 72 75 65 2c 20 77 68 61 74 49 66 2c  ", true, whatIf,
2b2a0 20 76 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 20   verbose))..    
2b2b0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
2b2c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b2d0 20 20 20 69 66 20 28 73 75 62 4b 65 79 20 3d 3d     if (subKey ==
2b2e0 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
2b2f0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
2b300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b310 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 53         error = S
2b320 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
2b330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b340 20 20 20 20 20 20 20 20 20 20 20 22 63 6f 75 6c             "coul
2b350 64 20 6e 6f 74 20 6f 70 65 6e 20 72 65 67 69 73  d not open regis
2b360 74 72 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c 44 61  try key: {0}\\Da
2b370 74 61 50 72 6f 76 69 64 65 72 73 22 2c 0d 0a 20  taProviders",.. 
2b380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b390 20 20 20 20 20 20 20 20 20 20 20 6b 65 79 29 3b             key);
2b3a0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2b3b0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
2b3c0 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20  rn false;..     
2b3d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
2b3e0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2b3f0 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79          Registry
2b400 48 65 6c 70 65 72 2e 44 65 6c 65 74 65 53 75 62  Helper.DeleteSub
2b410 4b 65 79 54 72 65 65 28 0d 0a 20 20 20 20 20 20  KeyTree(..      
2b420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b430 20 20 73 75 62 4b 65 79 2c 20 70 61 63 6b 61 67    subKey, packag
2b440 65 2e 44 61 74 61 50 72 6f 76 69 64 65 72 49 64  e.DataProviderId
2b450 2e 54 6f 53 74 72 69 6e 67 28 56 73 49 64 46 6f  .ToString(VsIdFo
2b460 72 6d 61 74 29 2c 0d 0a 20 20 20 20 20 20 20 20  rmat),..        
2b470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b480 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29  whatIf, verbose)
2b490 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
2b4a0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
2b4b0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
2b4c0 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d     return true;.
2b4d0 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....  
2b4e0 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
2b4f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b500 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b510 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b520 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
2b530 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
2b540 20 73 74 61 74 69 63 20 62 6f 6f 6c 20 50 72 6f   static bool Pro
2b550 63 65 73 73 56 73 44 61 74 61 50 72 6f 76 69 64  cessVsDataProvid
2b560 65 72 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  er(..           
2b570 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79   MockRegistryKey
2b580 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20 20 20   rootKey,..     
2b590 20 20 20 20 20 20 20 56 65 72 73 69 6f 6e 20 76         Version v
2b5a0 73 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20  sVersion,..     
2b5b0 20 20 20 20 20 20 20 50 61 63 6b 61 67 65 20 70         Package p
2b5c0 61 63 6b 61 67 65 2c 0d 0a 20 20 20 20 20 20 20  ackage,..       
2b5d0 20 20 20 20 20 6f 62 6a 65 63 74 20 63 6c 69 65       object clie
2b5e0 6e 74 44 61 74 61 2c 0d 0a 20 20 20 20 20 20 20  ntData,..       
2b5f0 20 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34 2c       bool wow64,
2b600 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
2b610 6f 6c 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e  ol throwOnMissin
2b620 67 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  g,..            
2b630 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20  bool whatIf,..  
2b640 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76            bool v
2b650 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20  erbose,..       
2b660 20 20 20 20 20 72 65 66 20 73 74 72 69 6e 67 20       ref string 
2b670 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 20  error..         
2b680 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d     )..        {.
2b690 0a 20 20 20 20 20 20 20 20 20 20 20 20 41 6e 79  .            Any
2b6a0 50 61 69 72 3c 73 74 72 69 6e 67 2c 20 62 6f 6f  Pair<string, boo
2b6b0 6c 3e 20 70 61 69 72 20 3d 20 63 6c 69 65 6e 74  l> pair = client
2b6c0 44 61 74 61 20 61 73 20 41 6e 79 50 61 69 72 3c  Data as AnyPair<
2b6d0 73 74 72 69 6e 67 2c 20 62 6f 6f 6c 3e 3b 0d 0a  string, bool>;..
2b6e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
2b6f0 20 28 70 61 69 72 20 3d 3d 20 6e 75 6c 6c 29 0d   (pair == null).
2b700 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
2b710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b720 65 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64  error = "invalid
2b730 20 56 53 20 63 61 6c 6c 62 61 63 6b 20 64 61 74   VS callback dat
2b740 61 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  a";..           
2b750 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
2b760 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
2b770 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
2b780 20 69 66 20 28 70 61 69 72 2e 59 29 0d 0a 20 20   if (pair.Y)..  
2b790 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
2b7a0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
2b7b0 75 72 6e 20 41 64 64 56 73 44 61 74 61 50 72 6f  urn AddVsDataPro
2b7c0 76 69 64 65 72 28 0d 0a 20 20 20 20 20 20 20 20  vider(..        
2b7d0 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74              root
2b7e0 4b 65 79 2c 20 76 73 56 65 72 73 69 6f 6e 2c 20  Key, vsVersion, 
2b7f0 70 61 63 6b 61 67 65 2c 20 70 61 69 72 2e 58 2c  package, pair.X,
2b800 20 77 6f 77 36 34 2c 20 77 68 61 74 49 66 2c 0d   wow64, whatIf,.
2b810 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2b820 20 20 20 20 20 76 65 72 62 6f 73 65 2c 20 72 65       verbose, re
2b830 66 20 65 72 72 6f 72 29 3b 0d 0a 20 20 20 20 20  f error);..     
2b840 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
2b850 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20        else..    
2b860 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
2b870 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
2b880 6e 20 52 65 6d 6f 76 65 56 73 44 61 74 61 50 72  n RemoveVsDataPr
2b890 6f 76 69 64 65 72 28 0d 0a 20 20 20 20 20 20 20  ovider(..       
2b8a0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f               roo
2b8b0 74 4b 65 79 2c 20 76 73 56 65 72 73 69 6f 6e 2c  tKey, vsVersion,
2b8c0 20 70 61 63 6b 61 67 65 2c 20 77 6f 77 36 34 2c   package, wow64,
2b8d0 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65   whatIf, verbose
2b8e0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
2b8f0 20 20 20 20 20 20 20 72 65 66 20 65 72 72 6f 72         ref error
2b900 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
2b910 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  }..        }..  
2b920 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
2b930 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
2b940 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b950 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b960 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b970 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b980 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23  ///....        #
2b990 72 65 67 69 6f 6e 20 56 69 73 75 61 6c 20 53 74  region Visual St
2b9a0 75 64 69 6f 20 50 61 63 6b 61 67 65 20 48 61 6e  udio Package Han
2b9b0 64 6c 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 70  dling..        p
2b9c0 72 69 76 61 74 65 20 73 74 61 74 69 63 20 76 6f  rivate static vo
2b9d0 69 64 20 49 6e 69 74 69 61 6c 69 7a 65 56 73 50  id InitializeVsP
2b9e0 61 63 6b 61 67 65 28 0d 0a 20 20 20 20 20 20 20  ackage(..       
2b9f0 20 20 20 20 20 72 65 66 20 50 61 63 6b 61 67 65       ref Package
2ba00 20 70 61 63 6b 61 67 65 0d 0a 20 20 20 20 20 20   package..      
2ba10 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
2ba20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
2ba30 69 66 20 28 70 61 63 6b 61 67 65 20 3d 3d 20 6e  if (package == n
2ba40 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
2ba50 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
2ba60 20 20 20 20 20 70 61 63 6b 61 67 65 20 3d 20 6e       package = n
2ba70 65 77 20 50 61 63 6b 61 67 65 28 29 3b 0d 0a 0d  ew Package();...
2ba80 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2ba90 20 70 61 63 6b 61 67 65 2e 41 64 6f 4e 65 74 54   package.AdoNetT
2baa0 65 63 68 6e 6f 6c 6f 67 79 49 64 20 3d 20 6e 65  echnologyId = ne
2bab0 77 20 47 75 69 64 28 0d 0a 20 20 20 20 20 20 20  w Guid(..       
2bac0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 37 37               "77
2bad0 41 42 39 41 39 44 2d 37 38 42 39 2d 34 42 41 37  AB9A9D-78B9-4BA7
2bae0 2d 39 31 41 43 2d 38 37 33 46 35 33 33 38 46 31  -91AC-873F5338F1
2baf0 44 32 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  D2");....       
2bb00 20 20 20 20 20 20 20 20 20 70 61 63 6b 61 67 65           package
2bb10 2e 50 61 63 6b 61 67 65 49 64 20 3d 20 6e 65 77  .PackageId = new
2bb20 20 47 75 69 64 28 0d 0a 20 20 20 20 20 20 20 20   Guid(..        
2bb30 20 20 20 20 20 20 20 20 20 20 20 20 22 44 43 42              "DCB
2bb40 45 36 43 38 44 2d 30 45 35 37 2d 34 30 39 39 2d  E6C8D-0E57-4099-
2bb50 41 31 38 33 2d 39 38 46 46 37 34 43 36 34 44 39  A183-98FF74C64D9
2bb60 43 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  C");....        
2bb70 20 20 20 20 20 20 20 20 70 61 63 6b 61 67 65 2e          package.
2bb80 53 65 72 76 69 63 65 49 64 20 3d 20 6e 65 77 20  ServiceId = new 
2bb90 47 75 69 64 28 0d 0a 20 20 20 20 20 20 20 20 20  Guid(..         
2bba0 20 20 20 20 20 20 20 20 20 20 20 22 44 43 42 45             "DCBE
2bbb0 36 43 38 44 2d 30 45 35 37 2d 34 30 39 39 2d 41  6C8D-0E57-4099-A
2bbc0 31 38 33 2d 39 38 46 46 37 34 43 36 34 44 39 44  183-98FF74C64D9D
2bbd0 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ");....         
2bbe0 20 20 20 20 20 20 20 70 61 63 6b 61 67 65 2e 44         package.D
2bbf0 61 74 61 53 6f 75 72 63 65 49 64 20 3d 20 6e 65  ataSourceId = ne
2bc00 77 20 47 75 69 64 28 0d 0a 20 20 20 20 20 20 20  w Guid(..       
2bc10 20 20 20 20 20 20 20 20 20 20 20 20 20 22 30 45               "0E
2bc20 42 41 41 42 36 45 2d 43 41 38 30 2d 34 42 34 41  BAAB6E-CA80-4B4A
2bc30 2d 38 44 44 46 2d 43 42 45 36 42 46 30 35 38 43  -8DDF-CBE6BF058C
2bc40 37 31 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  71");....       
2bc50 20 20 20 20 20 20 20 20 20 70 61 63 6b 61 67 65           package
2bc60 2e 44 61 74 61 50 72 6f 76 69 64 65 72 49 64 20  .DataProviderId 
2bc70 3d 20 6e 65 77 20 47 75 69 64 28 0d 0a 20 20 20  = new Guid(..   
2bc80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bc90 20 22 30 45 42 41 41 42 36 45 2d 43 41 38 30 2d   "0EBAAB6E-CA80-
2bca0 34 42 34 41 2d 38 44 44 46 2d 43 42 45 36 42 46  4B4A-8DDF-CBE6BF
2bcb0 30 35 38 43 37 30 22 29 3b 0d 0a 20 20 20 20 20  058C70");..     
2bcc0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
2bcd0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f    }....        /
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 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
2bd30 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63    private static
2bd40 20 62 6f 6f 6c 20 41 64 64 56 73 50 61 63 6b 61   bool AddVsPacka
2bd50 67 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ge(..           
2bd60 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79   MockRegistryKey
2bd70 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20 20 20   rootKey,..     
2bd80 20 20 20 20 20 20 20 56 65 72 73 69 6f 6e 20 76         Version v
2bd90 73 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20  sVersion,..     
2bda0 20 20 20 20 20 20 20 50 61 63 6b 61 67 65 20 70         Package p
2bdb0 61 63 6b 61 67 65 2c 0d 0a 20 20 20 20 20 20 20  ackage,..       
2bdc0 20 20 20 20 20 73 74 72 69 6e 67 20 66 69 6c 65       string file
2bdd0 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  Name,..         
2bde0 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34 2c 0d 0a     bool wow64,..
2bdf0 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
2be00 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20   whatIf,..      
2be10 20 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f        bool verbo
2be20 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se,..           
2be30 20 72 65 66 20 73 74 72 69 6e 67 20 65 72 72 6f   ref string erro
2be40 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29  r..            )
2be50 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
2be60 20 20 20 20 20 20 20 20 20 69 66 20 28 76 73 56           if (vsV
2be70 65 72 73 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 0d  ersion == null).
2be80 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
2be90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bea0 65 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64  error = "invalid
2beb0 20 56 53 20 76 65 72 73 69 6f 6e 22 3b 0d 0a 20   VS version";.. 
2bec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
2bed0 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20  eturn false;..  
2bee0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
2bef0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 70             if (p
2bf00 61 63 6b 61 67 65 20 3d 3d 20 6e 75 6c 6c 29 0d  ackage == null).
2bf10 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
2bf20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bf30 65 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64  error = "invalid
2bf40 20 56 53 20 70 61 63 6b 61 67 65 22 3b 0d 0a 20   VS package";.. 
2bf50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
2bf60 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20  eturn false;..  
2bf70 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
2bf80 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
2bf90 67 20 6b 65 79 4e 61 6d 65 20 3d 20 47 65 74 56  g keyName = GetV
2bfa0 73 4b 65 79 4e 61 6d 65 28 76 73 56 65 72 73 69  sKeyName(vsVersi
2bfb0 6f 6e 2c 20 77 6f 77 36 34 29 3b 0d 0a 0d 0a 20  on, wow64);.... 
2bfc0 20 20 20 20 20 20 20 20 20 20 20 75 73 69 6e 67             using
2bfd0 20 28 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65   (MockRegistryKe
2bfe0 79 20 6b 65 79 20 3d 20 52 65 67 69 73 74 72 79  y key = Registry
2bff0 48 65 6c 70 65 72 2e 4f 70 65 6e 53 75 62 4b 65  Helper.OpenSubKe
2c000 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y(..            
2c010 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c          rootKey,
2c020 20 6b 65 79 4e 61 6d 65 2c 20 66 61 6c 73 65 2c   keyName, false,
2c030 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65   whatIf, verbose
2c040 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
2c050 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
2c060 20 20 20 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75     if (key == nu
2c070 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
2c080 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
2c090 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
2c0a0 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  r = String.Forma
2c0b0 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
2c0c0 20 20 20 20 20 20 20 20 20 20 20 20 22 63 6f 75              "cou
2c0d0 6c 64 20 6e 6f 74 20 6f 70 65 6e 20 72 65 67 69  ld not open regi
2c0e0 73 74 72 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c 7b  stry key: {0}\\{
2c0f0 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  1}",..          
2c100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f                ro
2c110 6f 74 4b 65 79 2c 20 6b 65 79 4e 61 6d 65 29 3b  otKey, keyName);
2c120 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2c130 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
2c140 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alse;..         
2c150 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
2c160 20 20 20 20 20 20 20 20 20 20 20 20 75 73 69 6e              usin
2c170 67 20 28 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b  g (MockRegistryK
2c180 65 79 20 73 75 62 4b 65 79 20 3d 20 52 65 67 69  ey subKey = Regi
2c190 73 74 72 79 48 65 6c 70 65 72 2e 4f 70 65 6e 53  stryHelper.OpenS
2c1a0 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20  ubKey(..        
2c1b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c1c0 6b 65 79 2c 20 22 50 61 63 6b 61 67 65 73 22 2c  key, "Packages",
2c1d0 20 74 72 75 65 2c 20 77 68 61 74 49 66 2c 20 76   true, whatIf, v
2c1e0 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20 20  erbose))..      
2c1f0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
2c200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c210 20 69 66 20 28 73 75 62 4b 65 79 20 3d 3d 20 6e   if (subKey == n
2c220 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
2c230 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
2c240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c250 20 20 20 20 20 65 72 72 6f 72 20 3d 20 53 74 72       error = Str
2c260 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
2c270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c280 20 20 20 20 20 20 20 20 20 22 63 6f 75 6c 64 20           "could 
2c290 6e 6f 74 20 6f 70 65 6e 20 72 65 67 69 73 74 72  not open registr
2c2a0 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c 50 61 63 6b  y key: {0}\\Pack
2c2b0 61 67 65 73 22 2c 0d 0a 20 20 20 20 20 20 20 20  ages",..        
2c2c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c2d0 20 20 20 20 6b 65 79 29 3b 0d 0a 0d 0a 20 20 20      key);....   
2c2e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c2f0 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
2c300 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
2c310 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
2c320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c330 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69   using (MockRegi
2c340 73 74 72 79 4b 65 79 20 70 61 63 6b 61 67 65 4b  stryKey packageK
2c350 65 79 20 3d 0d 0a 20 20 20 20 20 20 20 20 20 20  ey =..          
2c360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c370 20 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72    RegistryHelper
2c380 2e 43 72 65 61 74 65 53 75 62 4b 65 79 28 73 75  .CreateSubKey(su
2c390 62 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20  bKey,..         
2c3a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c3b0 20 20 20 70 61 63 6b 61 67 65 2e 50 61 63 6b 61     package.Packa
2c3c0 67 65 49 64 2e 54 6f 53 74 72 69 6e 67 28 56 73  geId.ToString(Vs
2c3d0 49 64 46 6f 72 6d 61 74 29 2c 20 77 68 61 74 49  IdFormat), whatI
2c3e0 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  f,..            
2c3f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c400 76 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20  verbose))..     
2c410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
2c420 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2c430 20 20 20 20 20 20 20 20 20 20 69 66 20 28 70 61            if (pa
2c440 63 6b 61 67 65 4b 65 79 20 3d 3d 20 6e 75 6c 6c  ckageKey == null
2c450 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
2c460 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
2c470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c480 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20            error 
2c490 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  = String.Format(
2c4a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2c4b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c4c0 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20 63 72 65    "could not cre
2c4d0 61 74 65 20 72 65 67 69 73 74 72 79 20 6b 65 79  ate registry key
2c4e0 3a 20 7b 30 7d 5c 5c 7b 31 7d 22 2c 0d 0a 20 20  : {0}\\{1}",..  
2c4f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6b 65                ke
2c510 79 2c 20 70 61 63 6b 61 67 65 2e 50 61 63 6b 61  y, package.Packa
2c520 67 65 49 64 2e 54 6f 53 74 72 69 6e 67 28 56 73  geId.ToString(Vs
2c530 49 64 46 6f 72 6d 61 74 29 29 3b 0d 0a 0d 0a 20  IdFormat));.... 
2c540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c550 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
2c560 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  n false;..      
2c570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c580 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
2c590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52                 R
2c5a0 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 53 65  egistryHelper.Se
2c5b0 74 56 61 6c 75 65 28 70 61 63 6b 61 67 65 4b 65  tValue(packageKe
2c5c0 79 2c 20 6e 75 6c 6c 2c 0d 0a 20 20 20 20 20 20  y, null,..      
2c5d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c5e0 20 20 20 20 20 20 53 74 72 69 6e 67 2e 46 6f 72        String.For
2c5f0 6d 61 74 28 22 7b 30 7d 20 44 65 73 69 67 6e 65  mat("{0} Designe
2c600 72 20 50 61 63 6b 61 67 65 22 2c 20 50 72 6f 6a  r Package", Proj
2c610 65 63 74 4e 61 6d 65 29 2c 0d 0a 20 20 20 20 20  ectName),..     
2c620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c630 20 20 20 20 20 20 20 77 68 61 74 49 66 2c 20 76         whatIf, v
2c640 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20  erbose);....    
2c650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c660 20 20 20 20 52 65 67 69 73 74 72 79 48 65 6c 70      RegistryHelp
2c670 65 72 2e 53 65 74 56 61 6c 75 65 28 70 61 63 6b  er.SetValue(pack
2c680 61 67 65 4b 65 79 2c 20 22 43 6c 61 73 73 22 2c  ageKey, "Class",
2c690 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2c6a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 53                "S
2c6b0 51 4c 69 74 65 2e 44 65 73 69 67 6e 65 72 2e 53  QLite.Designer.S
2c6c0 51 4c 69 74 65 50 61 63 6b 61 67 65 22 2c 20 77  QLitePackage", w
2c6d0 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 3b  hatIf, verbose);
2c6e0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2c6f0 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69              Regi
2c700 73 74 72 79 48 65 6c 70 65 72 2e 53 65 74 56 61  stryHelper.SetVa
2c710 6c 75 65 28 70 61 63 6b 61 67 65 4b 65 79 2c 20  lue(packageKey, 
2c720 22 43 6f 64 65 42 61 73 65 22 2c 0d 0a 20 20 20  "CodeBase",..   
2c730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c740 20 20 20 20 20 20 20 20 20 66 69 6c 65 4e 61 6d           fileNam
2c750 65 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f  e, whatIf, verbo
2c760 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  se);....        
2c770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c780 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 53  RegistryHelper.S
2c790 65 74 56 61 6c 75 65 28 70 61 63 6b 61 67 65 4b  etValue(packageK
2c7a0 65 79 2c 20 22 49 44 22 2c 20 34 30 30 2c 20 77  ey, "ID", 400, w
2c7b0 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20  hatIf,..        
2c7c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c7d0 20 20 20 20 76 65 72 62 6f 73 65 29 3b 0d 0a 0d      verbose);...
2c7e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2c7f0 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72           Registr
2c800 79 48 65 6c 70 65 72 2e 53 65 74 56 61 6c 75 65  yHelper.SetValue
2c810 28 70 61 63 6b 61 67 65 4b 65 79 2c 20 22 49 6e  (packageKey, "In
2c820 70 72 6f 63 53 65 72 76 65 72 33 32 22 2c 0d 0a  procServer32",..
2c830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c840 20 20 20 20 20 20 20 20 20 20 20 20 50 61 74 68              Path
2c850 2e 43 6f 6d 62 69 6e 65 28 45 6e 76 69 72 6f 6e  .Combine(Environ
2c860 6d 65 6e 74 2e 53 79 73 74 65 6d 44 69 72 65 63  ment.SystemDirec
2c870 74 6f 72 79 2c 0d 0a 20 20 20 20 20 20 20 20 20  tory,..         
2c880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c890 20 20 20 20 20 20 20 22 6d 73 63 6f 72 65 65 2e         "mscoree.
2c8a0 64 6c 6c 22 29 2c 20 77 68 61 74 49 66 2c 20 76  dll"), whatIf, v
2c8b0 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20  erbose);....    
2c8c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c8d0 20 20 20 20 52 65 67 69 73 74 72 79 48 65 6c 70      RegistryHelp
2c8e0 65 72 2e 53 65 74 56 61 6c 75 65 28 70 61 63 6b  er.SetValue(pack
2c8f0 61 67 65 4b 65 79 2c 20 22 43 6f 6d 70 61 6e 79  ageKey, "Company
2c900 4e 61 6d 65 22 2c 0d 0a 20 20 20 20 20 20 20 20  Name",..        
2c910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c920 20 20 20 20 22 68 74 74 70 3a 2f 2f 73 79 73 74      "http://syst
2c930 65 6d 2e 64 61 74 61 2e 73 71 6c 69 74 65 2e 6f  em.data.sqlite.o
2c940 72 67 2f 22 2c 20 77 68 61 74 49 66 2c 20 76 65  rg/", whatIf, ve
2c950 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20  rbose);....     
2c960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c970 20 20 20 52 65 67 69 73 74 72 79 48 65 6c 70 65     RegistryHelpe
2c980 72 2e 53 65 74 56 61 6c 75 65 28 70 61 63 6b 61  r.SetValue(packa
2c990 67 65 4b 65 79 2c 20 22 4d 69 6e 45 64 69 74 69  geKey, "MinEditi
2c9a0 6f 6e 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  on",..          
2c9b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c9c0 20 20 22 73 74 61 6e 64 61 72 64 22 2c 20 77 68    "standard", wh
2c9d0 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 3b 0d  atIf, verbose);.
2c9e0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
2c9f0 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73             Regis
2ca00 74 72 79 48 65 6c 70 65 72 2e 53 65 74 56 61 6c  tryHelper.SetVal
2ca10 75 65 28 70 61 63 6b 61 67 65 4b 65 79 2c 20 22  ue(packageKey, "
2ca20 50 72 6f 64 75 63 74 4e 61 6d 65 22 2c 0d 0a 20  ProductName",.. 
2ca30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ca40 20 20 20 20 20 20 20 20 20 20 20 53 74 72 69 6e             Strin
2ca50 67 2e 46 6f 72 6d 61 74 28 22 7b 30 7d 20 44 65  g.Format("{0} De
2ca60 73 69 67 6e 65 72 20 50 61 63 6b 61 67 65 22 2c  signer Package",
2ca70 20 50 72 6f 6a 65 63 74 4e 61 6d 65 29 2c 0d 0a   ProjectName),..
2ca80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ca90 20 20 20 20 20 20 20 20 20 20 20 20 77 68 61 74              what
2caa0 49 66 2c 20 76 65 72 62 6f 73 65 29 3b 0d 0a 0d  If, verbose);...
2cab0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2cac0 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72           Registr
2cad0 79 48 65 6c 70 65 72 2e 53 65 74 56 61 6c 75 65  yHelper.SetValue
2cae0 28 70 61 63 6b 61 67 65 4b 65 79 2c 20 22 50 72  (packageKey, "Pr
2caf0 6f 64 75 63 74 56 65 72 73 69 6f 6e 22 2c 0d 0a  oductVersion",..
2cb00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cb10 20 20 20 20 20 20 20 20 20 20 20 20 22 31 2e 30              "1.0
2cb20 22 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f  ", whatIf, verbo
2cb30 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  se);....        
2cb40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cb50 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73  using (MockRegis
2cb60 74 72 79 4b 65 79 20 74 6f 6f 6c 62 6f 78 4b 65  tryKey toolboxKe
2cb70 79 20 3d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  y =..           
2cb80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cb90 20 20 20 20 20 52 65 67 69 73 74 72 79 48 65 6c       RegistryHel
2cba0 70 65 72 2e 43 72 65 61 74 65 53 75 62 4b 65 79  per.CreateSubKey
2cbb0 28 70 61 63 6b 61 67 65 4b 65 79 2c 0d 0a 20 20  (packageKey,..  
2cbc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cbd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 54                "T
2cbe0 6f 6f 6c 62 6f 78 22 2c 20 77 68 61 74 49 66 2c  oolbox", whatIf,
2cbf0 20 76 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 20   verbose))..    
2cc00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cc10 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
2cc20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cc30 20 20 20 69 66 20 28 74 6f 6f 6c 62 6f 78 4b 65     if (toolboxKe
2cc40 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  y == null)..    
2cc50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cc60 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
2cc70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cc80 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72             error
2cc90 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74   = String.Format
2cca0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
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 22 63 6f 75 6c 64 20 6e 6f         "could no
2ccd0 74 20 63 72 65 61 74 65 20 72 65 67 69 73 74 72  t create registr
2cce0 79 20 6b 65 79 3a 20 22 20 2b 0d 0a 20 20 20 20  y key: " +..    
2ccf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cd00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cd10 22 7b 30 7d 5c 5c 54 6f 6f 6c 62 6f 78 22 2c 20  "{0}\\Toolbox", 
2cd20 70 61 63 6b 61 67 65 4b 65 79 29 3b 0d 0a 0d 0a  packageKey);....
2cd30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cd40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cd50 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20  return false;.. 
2cd60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cd70 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
2cd80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cd90 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69              Regi
2cda0 73 74 72 79 48 65 6c 70 65 72 2e 53 65 74 56 61  stryHelper.SetVa
2cdb0 6c 75 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  lue(..          
2cdc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cdd0 20 20 20 20 20 20 74 6f 6f 6c 62 6f 78 4b 65 79        toolboxKey
2cde0 2c 20 22 44 65 66 61 75 6c 74 20 49 74 65 6d 73  , "Default Items
2cdf0 22 2c 20 33 2c 20 77 68 61 74 49 66 2c 0d 0a 20  ", 3, whatIf,.. 
2ce00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ce10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 76                 v
2ce20 65 72 62 6f 73 65 29 3b 0d 0a 20 20 20 20 20 20  erbose);..      
2ce30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ce40 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
2ce50 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
2ce60 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
2ce70 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2ce80 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69   using (MockRegi
2ce90 73 74 72 79 4b 65 79 20 73 75 62 4b 65 79 20 3d  stryKey subKey =
2cea0 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e   RegistryHelper.
2ceb0 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20  OpenSubKey(..   
2cec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ced0 20 20 20 20 20 6b 65 79 2c 20 22 4d 65 6e 75 73       key, "Menus
2cee0 22 2c 20 74 72 75 65 2c 20 77 68 61 74 49 66 2c  ", true, whatIf,
2cef0 20 76 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 20   verbose))..    
2cf00 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
2cf10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cf20 20 20 20 69 66 20 28 73 75 62 4b 65 79 20 3d 3d     if (subKey ==
2cf30 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
2cf40 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
2cf50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cf60 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 53         error = S
2cf70 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
2cf80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cf90 20 20 20 20 20 20 20 20 20 20 20 22 63 6f 75 6c             "coul
2cfa0 64 20 6e 6f 74 20 6f 70 65 6e 20 72 65 67 69 73  d not open regis
2cfb0 74 72 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c 4d 65  try key: {0}\\Me
2cfc0 6e 75 73 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  nus",..         
2cfd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cfe0 20 20 20 6b 65 79 29 3b 0d 0a 0d 0a 20 20 20 20     key);....    
2cff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d000 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
2d010 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
2d020 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
2d030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d040 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 53  RegistryHelper.S
2d050 65 74 56 61 6c 75 65 28 0d 0a 20 20 20 20 20 20  etValue(..      
2d060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d070 20 20 73 75 62 4b 65 79 2c 20 70 61 63 6b 61 67    subKey, packag
2d080 65 2e 50 61 63 6b 61 67 65 49 64 2e 54 6f 53 74  e.PackageId.ToSt
2d090 72 69 6e 67 28 56 73 49 64 46 6f 72 6d 61 74 29  ring(VsIdFormat)
2d0a0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
2d0b0 20 20 20 20 20 20 20 20 20 20 20 22 2c 20 31 30             ", 10
2d0c0 30 30 2c 20 33 22 2c 20 77 68 61 74 49 66 2c 20  00, 3", whatIf, 
2d0d0 76 65 72 62 6f 73 65 29 3b 0d 0a 20 20 20 20 20  verbose);..     
2d0e0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
2d0f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d100 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73  using (MockRegis
2d110 74 72 79 4b 65 79 20 73 75 62 4b 65 79 20 3d 20  tryKey subKey = 
2d120 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 4f  RegistryHelper.O
2d130 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20 20  penSubKey(..    
2d140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d150 20 20 20 20 6b 65 79 2c 20 22 53 65 72 76 69 63      key, "Servic
2d160 65 73 22 2c 20 74 72 75 65 2c 20 77 68 61 74 49  es", true, whatI
2d170 66 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a 20 20  f, verbose))..  
2d180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
2d190 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2d1a0 20 20 20 20 20 69 66 20 28 73 75 62 4b 65 79 20       if (subKey 
2d1b0 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
2d1c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
2d1d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2d1e0 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
2d1f0 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d   String.Format(.
2d200 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2d210 20 20 20 20 20 20 20 20 20 20 20 20 20 22 63 6f               "co
2d220 75 6c 64 20 6e 6f 74 20 6f 70 65 6e 20 72 65 67  uld not open reg
2d230 69 73 74 72 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c  istry key: {0}\\
2d240 53 65 72 76 69 63 65 73 22 2c 0d 0a 20 20 20 20  Services",..    
2d250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d260 20 20 20 20 20 20 20 20 6b 65 79 29 3b 0d 0a 0d          key);...
2d270 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2d280 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
2d290 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20  false;..        
2d2a0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
2d2b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2d2c0 20 20 20 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b       using (Mock
2d2d0 52 65 67 69 73 74 72 79 4b 65 79 20 73 65 72 76  RegistryKey serv
2d2e0 69 63 65 4b 65 79 20 3d 0d 0a 20 20 20 20 20 20  iceKey =..      
2d2f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d300 20 20 20 20 20 20 52 65 67 69 73 74 72 79 48 65        RegistryHe
2d310 6c 70 65 72 2e 43 72 65 61 74 65 53 75 62 4b 65  lper.CreateSubKe
2d320 79 28 73 75 62 4b 65 79 2c 0d 0a 20 20 20 20 20  y(subKey,..     
2d330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d340 20 20 20 20 20 20 20 70 61 63 6b 61 67 65 2e 53         package.S
2d350 65 72 76 69 63 65 49 64 2e 54 6f 53 74 72 69 6e  erviceId.ToStrin
2d360 67 28 56 73 49 64 46 6f 72 6d 61 74 29 2c 20 77  g(VsIdFormat), w
2d370 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20  hatIf,..        
2d380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d390 20 20 20 20 76 65 72 62 6f 73 65 29 29 0d 0a 20      verbose)).. 
2d3a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d3b0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
2d3c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
2d3d0 20 28 73 65 72 76 69 63 65 4b 65 79 20 3d 3d 20   (serviceKey == 
2d3e0 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
2d3f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
2d400 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2d410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72                er
2d420 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72  ror = String.For
2d430 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
2d440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d450 20 20 20 20 20 20 22 63 6f 75 6c 64 20 6e 6f 74        "could not
2d460 20 63 72 65 61 74 65 20 72 65 67 69 73 74 72 79   create registry
2d470 20 6b 65 79 3a 20 7b 30 7d 5c 5c 7b 31 7d 22 2c   key: {0}\\{1}",
2d480 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2d490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d4a0 20 20 6b 65 79 2c 20 70 61 63 6b 61 67 65 2e 53    key, package.S
2d4b0 65 72 76 69 63 65 49 64 2e 54 6f 53 74 72 69 6e  erviceId.ToStrin
2d4c0 67 28 56 73 49 64 46 6f 72 6d 61 74 29 29 3b 0d  g(VsIdFormat));.
2d4d0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
2d4e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
2d4f0 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20  eturn false;..  
2d500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d510 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
2d520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d530 20 20 20 52 65 67 69 73 74 72 79 48 65 6c 70 65     RegistryHelpe
2d540 72 2e 53 65 74 56 61 6c 75 65 28 73 65 72 76 69  r.SetValue(servi
2d550 63 65 4b 65 79 2c 20 6e 75 6c 6c 2c 0d 0a 20 20  ceKey, null,..  
2d560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d570 20 20 20 20 20 20 20 20 20 20 70 61 63 6b 61 67            packag
2d580 65 2e 50 61 63 6b 61 67 65 49 64 2e 54 6f 53 74  e.PackageId.ToSt
2d590 72 69 6e 67 28 56 73 49 64 46 6f 72 6d 61 74 29  ring(VsIdFormat)
2d5a0 2c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20  , whatIf,..     
2d5b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d5c0 20 20 20 20 20 20 20 76 65 72 62 6f 73 65 29 3b         verbose);
2d5d0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2d5e0 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69              Regi
2d5f0 73 74 72 79 48 65 6c 70 65 72 2e 53 65 74 56 61  stryHelper.SetVa
2d600 6c 75 65 28 73 65 72 76 69 63 65 4b 65 79 2c 20  lue(serviceKey, 
2d610 22 4e 61 6d 65 22 2c 0d 0a 20 20 20 20 20 20 20  "Name",..       
2d620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d630 20 20 20 20 20 53 74 72 69 6e 67 2e 46 6f 72 6d       String.Form
2d640 61 74 28 22 7b 30 7d 20 44 65 73 69 67 6e 65 72  at("{0} Designer
2d650 20 53 65 72 76 69 63 65 22 2c 20 50 72 6f 6a 65   Service", Proje
2d660 63 74 4e 61 6d 65 29 2c 0d 0a 20 20 20 20 20 20  ctName),..      
2d670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d680 20 20 20 20 20 20 77 68 61 74 49 66 2c 20 76 65        whatIf, ve
2d690 72 62 6f 73 65 29 3b 0d 0a 20 20 20 20 20 20 20  rbose);..       
2d6a0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
2d6b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d6c0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
2d6d0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2d6e0 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20  return true;..  
2d6f0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
2d700 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
2d710 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d720 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d730 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d740 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
2d750 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74        private st
2d760 61 74 69 63 20 62 6f 6f 6c 20 52 65 6d 6f 76 65  atic bool Remove
2d770 56 73 50 61 63 6b 61 67 65 28 0d 0a 20 20 20 20  VsPackage(..    
2d780 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65 67 69          MockRegi
2d790 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79 2c  stryKey rootKey,
2d7a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 56 65  ..            Ve
2d7b0 72 73 69 6f 6e 20 76 73 56 65 72 73 69 6f 6e 2c  rsion vsVersion,
2d7c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 50 61  ..            Pa
2d7d0 63 6b 61 67 65 20 70 61 63 6b 61 67 65 2c 0d 0a  ckage package,..
2d7e0 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
2d7f0 20 77 6f 77 36 34 2c 0d 0a 20 20 20 20 20 20 20   wow64,..       
2d800 20 20 20 20 20 62 6f 6f 6c 20 74 68 72 6f 77 4f       bool throwO
2d810 6e 4d 69 73 73 69 6e 67 2c 0d 0a 20 20 20 20 20  nMissing,..     
2d820 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74         bool what
2d830 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  If,..           
2d840 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 0d 0a   bool verbose,..
2d850 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20              ref 
2d860 73 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20  string error..  
2d870 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
2d880 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
2d890 20 20 20 20 69 66 20 28 76 73 56 65 72 73 69 6f      if (vsVersio
2d8a0 6e 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  n == null)..    
2d8b0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
2d8c0 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72             error
2d8d0 20 3d 20 22 69 6e 76 61 6c 69 64 20 56 53 20 76   = "invalid VS v
2d8e0 65 72 73 69 6f 6e 22 3b 0d 0a 20 20 20 20 20 20  ersion";..      
2d8f0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
2d900 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20   false;..       
2d910 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
2d920 20 20 20 20 20 20 69 66 20 28 70 61 63 6b 61 67        if (packag
2d930 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  e == null)..    
2d940 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
2d950 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72             error
2d960 20 3d 20 22 69 6e 76 61 6c 69 64 20 56 53 20 70   = "invalid VS p
2d970 61 63 6b 61 67 65 22 3b 0d 0a 20 20 20 20 20 20  ackage";..      
2d980 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
2d990 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20   false;..       
2d9a0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
2d9b0 20 20 20 20 20 20 73 74 72 69 6e 67 20 6b 65 79        string key
2d9c0 4e 61 6d 65 20 3d 20 47 65 74 56 73 4b 65 79 4e  Name = GetVsKeyN
2d9d0 61 6d 65 28 76 73 56 65 72 73 69 6f 6e 2c 20 77  ame(vsVersion, w
2d9e0 6f 77 36 34 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  ow64);....      
2d9f0 20 20 20 20 20 20 75 73 69 6e 67 20 28 4d 6f 63        using (Moc
2da00 6b 52 65 67 69 73 74 72 79 4b 65 79 20 6b 65 79  kRegistryKey key
2da10 20 3d 20 52 65 67 69 73 74 72 79 48 65 6c 70 65   = RegistryHelpe
2da20 72 2e 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20  r.OpenSubKey(.. 
2da30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2da40 20 20 20 72 6f 6f 74 4b 65 79 2c 20 6b 65 79 4e     rootKey, keyN
2da50 61 6d 65 2c 20 66 61 6c 73 65 2c 20 77 68 61 74  ame, false, what
2da60 49 66 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a 20  If, verbose)).. 
2da70 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
2da80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
2da90 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a   (key == null)..
2daa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2dab0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
2dac0 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 53         error = S
2dad0 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
2dae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2daf0 20 20 20 20 20 20 20 22 63 6f 75 6c 64 20 6e 6f         "could no
2db00 74 20 6f 70 65 6e 20 72 65 67 69 73 74 72 79 20  t open registry 
2db10 6b 65 79 3a 20 7b 30 7d 5c 5c 7b 31 7d 22 2c 0d  key: {0}\\{1}",.
2db20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2db30 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79           rootKey
2db40 2c 20 6b 65 79 4e 61 6d 65 29 3b 0d 0a 0d 0a 20  , keyName);.... 
2db50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2db60 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
2db70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2db80 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
2db90 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 4d 6f         using (Mo
2dba0 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 73 75  ckRegistryKey su
2dbb0 62 4b 65 79 20 3d 20 52 65 67 69 73 74 72 79 48  bKey = RegistryH
2dbc0 65 6c 70 65 72 2e 4f 70 65 6e 53 75 62 4b 65 79  elper.OpenSubKey
2dbd0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
2dbe0 20 20 20 20 20 20 20 20 20 20 20 6b 65 79 2c 20             key, 
2dbf0 22 50 61 63 6b 61 67 65 73 22 2c 20 74 72 75 65  "Packages", true
2dc00 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73  , whatIf, verbos
2dc10 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e))..           
2dc20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
2dc30 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
2dc40 73 75 62 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d  subKey == null).
2dc50 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2dc60 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
2dc70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2dc80 65 72 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46  error = String.F
2dc90 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
2dca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2dcb0 20 20 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20 6f      "could not o
2dcc0 70 65 6e 20 72 65 67 69 73 74 72 79 20 6b 65 79  pen registry key
2dcd0 3a 20 7b 30 7d 5c 5c 50 61 63 6b 61 67 65 73 22  : {0}\\Packages"
2dce0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
2dcf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6b                 k
2dd00 65 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ey);....        
2dd10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2dd20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20  return false;.. 
2dd30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2dd40 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
2dd50 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69              Regi
2dd60 73 74 72 79 48 65 6c 70 65 72 2e 44 65 6c 65 74  stryHelper.Delet
2dd70 65 53 75 62 4b 65 79 54 72 65 65 28 0d 0a 20 20  eSubKeyTree(..  
2dd80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2dd90 20 20 20 20 20 20 73 75 62 4b 65 79 2c 20 70 61        subKey, pa
2dda0 63 6b 61 67 65 2e 50 61 63 6b 61 67 65 49 64 2e  ckage.PackageId.
2ddb0 54 6f 53 74 72 69 6e 67 28 56 73 49 64 46 6f 72  ToString(VsIdFor
2ddc0 6d 61 74 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  mat),..         
2ddd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 77                 w
2dde0 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 3b  hatIf, verbose);
2ddf0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2de00 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
2de10 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 4d 6f         using (Mo
2de20 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 73 75  ckRegistryKey su
2de30 62 4b 65 79 20 3d 20 52 65 67 69 73 74 72 79 48  bKey = RegistryH
2de40 65 6c 70 65 72 2e 4f 70 65 6e 53 75 62 4b 65 79  elper.OpenSubKey
2de50 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
2de60 20 20 20 20 20 20 20 20 20 20 20 6b 65 79 2c 20             key, 
2de70 22 4d 65 6e 75 73 22 2c 20 74 72 75 65 2c 20 77  "Menus", true, w
2de80 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 29  hatIf, verbose))
2de90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2dea0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
2deb0 20 20 20 20 20 20 20 20 20 69 66 20 28 73 75 62           if (sub
2dec0 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  Key == null)..  
2ded0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2dee0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
2def0 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
2df00 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d  or = String.Form
2df10 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
2df20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2df30 20 22 63 6f 75 6c 64 20 6e 6f 74 20 6f 70 65 6e   "could not open
2df40 20 72 65 67 69 73 74 72 79 20 6b 65 79 3a 20 7b   registry key: {
2df50 30 7d 5c 5c 4d 65 6e 75 73 22 2c 0d 0a 20 20 20  0}\\Menus",..   
2df60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2df70 20 20 20 20 20 20 20 20 20 6b 65 79 29 3b 0d 0a           key);..
2df80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2df90 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
2dfa0 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20   false;..       
2dfb0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
2dfc0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2dfd0 20 20 20 20 20 20 52 65 67 69 73 74 72 79 48 65        RegistryHe
2dfe0 6c 70 65 72 2e 44 65 6c 65 74 65 56 61 6c 75 65  lper.DeleteValue
2dff0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
2e000 20 20 20 20 20 20 20 20 20 20 20 73 75 62 4b 65             subKe
2e010 79 2c 20 70 61 63 6b 61 67 65 2e 50 61 63 6b 61  y, package.Packa
2e020 67 65 49 64 2e 54 6f 53 74 72 69 6e 67 28 56 73  geId.ToString(Vs
2e030 49 64 46 6f 72 6d 61 74 29 2c 0d 0a 20 20 20 20  IdFormat),..    
2e040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e050 20 20 20 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69      throwOnMissi
2e060 6e 67 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62  ng, whatIf, verb
2e070 6f 73 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ose);..         
2e080 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
2e090 20 20 20 20 20 20 20 20 20 20 20 20 75 73 69 6e              usin
2e0a0 67 20 28 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b  g (MockRegistryK
2e0b0 65 79 20 73 75 62 4b 65 79 20 3d 20 52 65 67 69  ey subKey = Regi
2e0c0 73 74 72 79 48 65 6c 70 65 72 2e 4f 70 65 6e 53  stryHelper.OpenS
2e0d0 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20  ubKey(..        
2e0e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e0f0 6b 65 79 2c 20 22 53 65 72 76 69 63 65 73 22 2c  key, "Services",
2e100 20 74 72 75 65 2c 20 77 68 61 74 49 66 2c 20 76   true, whatIf, v
2e110 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20 20  erbose))..      
2e120 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
2e130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e140 20 69 66 20 28 73 75 62 4b 65 79 20 3d 3d 20 6e   if (subKey == n
2e150 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
2e160 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
2e170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e180 20 20 20 20 20 65 72 72 6f 72 20 3d 20 53 74 72       error = Str
2e190 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
2e1a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e1b0 20 20 20 20 20 20 20 20 20 22 63 6f 75 6c 64 20           "could 
2e1c0 6e 6f 74 20 6f 70 65 6e 20 72 65 67 69 73 74 72  not open registr
2e1d0 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c 53 65 72 76  y key: {0}\\Serv
2e1e0 69 63 65 73 22 2c 0d 0a 20 20 20 20 20 20 20 20  ices",..        
2e1f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e200 20 20 20 20 6b 65 79 29 3b 0d 0a 0d 0a 20 20 20      key);....   
2e210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e220 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
2e230 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
2e240 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
2e250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e260 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e   RegistryHelper.
2e270 44 65 6c 65 74 65 53 75 62 4b 65 79 54 72 65 65  DeleteSubKeyTree
2e280 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
2e290 20 20 20 20 20 20 20 20 20 20 20 73 75 62 4b 65             subKe
2e2a0 79 2c 20 70 61 63 6b 61 67 65 2e 53 65 72 76 69  y, package.Servi
2e2b0 63 65 49 64 2e 54 6f 53 74 72 69 6e 67 28 56 73  ceId.ToString(Vs
2e2c0 49 64 46 6f 72 6d 61 74 29 2c 0d 0a 20 20 20 20  IdFormat),..    
2e2d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e2e0 20 20 20 20 77 68 61 74 49 66 2c 20 76 65 72 62      whatIf, verb
2e2f0 6f 73 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ose);..         
2e300 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
2e310 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
2e320 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72         return tr
2e330 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  ue;..        }..
2e340 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
2e350 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e360 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e370 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e380 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e390 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69  /....        pri
2e3a0 76 61 74 65 20 73 74 61 74 69 63 20 62 6f 6f 6c  vate static bool
2e3b0 20 50 72 6f 63 65 73 73 56 73 50 61 63 6b 61 67   ProcessVsPackag
2e3c0 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
2e3d0 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20  MockRegistryKey 
2e3e0 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20 20 20 20  rootKey,..      
2e3f0 20 20 20 20 20 20 56 65 72 73 69 6f 6e 20 76 73        Version vs
2e400 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20  Version,..      
2e410 20 20 20 20 20 20 50 61 63 6b 61 67 65 20 70 61        Package pa
2e420 63 6b 61 67 65 2c 0d 0a 20 20 20 20 20 20 20 20  ckage,..        
2e430 20 20 20 20 6f 62 6a 65 63 74 20 63 6c 69 65 6e      object clien
2e440 74 44 61 74 61 2c 0d 0a 20 20 20 20 20 20 20 20  tData,..        
2e450 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34 2c 0d      bool wow64,.
2e460 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f  .            boo
2e470 6c 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67  l throwOnMissing
2e480 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  ,..            b
2e490 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20  ool whatIf,..   
2e4a0 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65           bool ve
2e4b0 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20 20  rbose,..        
2e4c0 20 20 20 20 72 65 66 20 73 74 72 69 6e 67 20 65      ref string e
2e4d0 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20  rror..          
2e4e0 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a    )..        {..
2e4f0 20 20 20 20 20 20 20 20 20 20 20 20 41 6e 79 50              AnyP
2e500 61 69 72 3c 73 74 72 69 6e 67 2c 20 62 6f 6f 6c  air<string, bool
2e510 3e 20 70 61 69 72 20 3d 20 63 6c 69 65 6e 74 44  > pair = clientD
2e520 61 74 61 20 61 73 20 41 6e 79 50 61 69 72 3c 73  ata as AnyPair<s
2e530 74 72 69 6e 67 2c 20 62 6f 6f 6c 3e 3b 0d 0a 0d  tring, bool>;...
2e540 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
2e550 28 70 61 69 72 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  (pair == null)..
2e560 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
2e570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
2e580 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64 20  rror = "invalid 
2e590 56 53 20 63 61 6c 6c 62 61 63 6b 20 64 61 74 61  VS callback data
2e5a0 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ";..            
2e5b0 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
2e5c0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
2e5d0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2e5e0 69 66 20 28 70 61 69 72 2e 59 29 0d 0a 20 20 20  if (pair.Y)..   
2e5f0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
2e600 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
2e610 72 6e 20 41 64 64 56 73 50 61 63 6b 61 67 65 28  rn AddVsPackage(
2e620 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2e630 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 76        rootKey, v
2e640 73 56 65 72 73 69 6f 6e 2c 20 70 61 63 6b 61 67  sVersion, packag
2e650 65 2c 20 70 61 69 72 2e 58 2c 20 77 6f 77 36 34  e, pair.X, wow64
2e660 2c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20  , whatIf,..     
2e670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 76                 v
2e680 65 72 62 6f 73 65 2c 20 72 65 66 20 65 72 72 6f  erbose, ref erro
2e690 72 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  r);..           
2e6a0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
2e6b0 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20  else..          
2e6c0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
2e6d0 20 20 20 20 20 72 65 74 75 72 6e 20 52 65 6d 6f       return Remo
2e6e0 76 65 56 73 50 61 63 6b 61 67 65 28 0d 0a 20 20  veVsPackage(..  
2e6f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e700 20 20 72 6f 6f 74 4b 65 79 2c 20 76 73 56 65 72    rootKey, vsVer
2e710 73 69 6f 6e 2c 20 70 61 63 6b 61 67 65 2c 20 77  sion, package, w
2e720 6f 77 36 34 2c 20 74 68 72 6f 77 4f 6e 4d 69 73  ow64, throwOnMis
2e730 73 69 6e 67 2c 0d 0a 20 20 20 20 20 20 20 20 20  sing,..         
2e740 20 20 20 20 20 20 20 20 20 20 20 77 68 61 74 49             whatI
2e750 66 2c 20 76 65 72 62 6f 73 65 2c 20 72 65 66 20  f, verbose, ref 
2e760 65 72 72 6f 72 29 3b 0d 0a 20 20 20 20 20 20 20  error);..       
2e770 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
2e780 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72  }..        #endr
2e790 65 67 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20 23  egion..        #
2e7a0 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20  endregion....   
2e7b0 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
2e7c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e7d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e7e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e7f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
2e800 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20          #region 
2e810 41 70 70 6c 69 63 61 74 69 6f 6e 20 45 6e 74 72  Application Entr
2e820 79 20 50 6f 69 6e 74 0d 0a 20 20 20 20 20 20 20  y Point..       
2e830 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
2e840 69 6e 74 20 4d 61 69 6e 28 0d 0a 20 20 20 20 20  int Main(..     
2e850 20 20 20 20 20 20 20 73 74 72 69 6e 67 5b 5d 20         string[] 
2e860 61 72 67 73 0d 0a 20 20 20 20 20 20 20 20 20 20  args..          
2e870 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a    )..        {..
2e880 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79 0d              try.
2e890 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
2e8a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e8b0 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 63 6f  Configuration co
2e8c0 6e 66 69 67 75 72 61 74 69 6f 6e 20 3d 20 6e 75  nfiguration = nu
2e8d0 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll;..           
2e8e0 20 20 20 20 20 73 74 72 69 6e 67 20 65 72 72 6f       string erro
2e8f0 72 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20  r = null;....   
2e900 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f               ///
2e910 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e920 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e930 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e940 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
2e950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e960 23 72 65 67 69 6f 6e 20 43 6f 6d 6d 61 6e 64 20  #region Command 
2e970 4c 69 6e 65 20 50 72 6f 63 65 73 73 69 6e 67 0d  Line Processing.
2e980 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2e990 20 69 66 20 28 21 43 6f 6e 66 69 67 75 72 61 74   if (!Configurat
2e9a0 69 6f 6e 2e 46 72 6f 6d 41 72 67 73 28 0d 0a 20  ion.FromArgs(.. 
2e9b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e9c0 20 20 20 20 20 20 20 61 72 67 73 2c 20 74 72 75         args, tru
2e9d0 65 2c 20 72 65 66 20 63 6f 6e 66 69 67 75 72 61  e, ref configura
2e9e0 74 69 6f 6e 2c 20 72 65 66 20 65 72 72 6f 72 29  tion, ref error)
2e9f0 20 7c 7c 0d 0a 20 20 20 20 20 20 20 20 20 20 20   ||..           
2ea00 20 20 20 20 20 20 20 20 20 21 43 6f 6e 66 69 67           !Config
2ea10 75 72 61 74 69 6f 6e 2e 50 72 6f 63 65 73 73 28  uration.Process(
2ea20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2ea30 20 20 20 20 20 20 20 20 20 20 61 72 67 73 2c 20            args, 
2ea40 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2c 20 74  configuration, t
2ea50 72 75 65 2c 20 72 65 66 20 65 72 72 6f 72 29 20  rue, ref error) 
2ea60 7c 7c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ||..            
2ea70 20 20 20 20 20 20 20 20 21 43 6f 6e 66 69 67 75          !Configu
2ea80 72 61 74 69 6f 6e 2e 43 68 65 63 6b 52 75 6e 74  ration.CheckRunt
2ea90 69 6d 65 56 65 72 73 69 6f 6e 28 0d 0a 20 20 20  imeVersion(..   
2eaa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2eab0 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69       configurati
2eac0 6f 6e 2c 20 74 72 75 65 2c 20 72 65 66 20 65 72  on, true, ref er
2ead0 72 6f 72 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ror))..         
2eae0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
2eaf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
2eb00 61 63 65 4f 70 73 2e 53 68 6f 77 4d 65 73 73 61  aceOps.ShowMessa
2eb10 67 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 79  ge(TracePriority
2eb20 2e 48 69 67 68 65 73 74 2c 0d 0a 20 20 20 20 20  .Highest,..     
2eb30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2eb40 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b     debugCallback
2eb50 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c  , traceCallback,
2eb60 20 74 68 69 73 41 73 73 65 6d 62 6c 79 2c 0d 0a   thisAssembly,..
2eb70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2eb80 20 20 20 20 20 20 20 20 65 72 72 6f 72 2c 20 74          error, t
2eb90 72 61 63 65 43 61 74 65 67 6f 72 79 2c 20 4d 65  raceCategory, Me
2eba0 73 73 61 67 65 42 6f 78 42 75 74 74 6f 6e 73 2e  ssageBoxButtons.
2ebb0 4f 4b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  OK,..           
2ebc0 20 20 20 20 20 20 20 20 20 20 20 20 20 4d 65 73               Mes
2ebd0 73 61 67 65 42 6f 78 49 63 6f 6e 2e 45 72 72 6f  sageBoxIcon.Erro
2ebe0 72 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  r);....         
2ebf0 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
2ec00 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63  Ops.DebugAndTrac
2ec10 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e  e(TracePriority.
2ec20 4d 65 64 69 75 6d 48 69 67 68 2c 0d 0a 20 20 20  MediumHigh,..   
2ec30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ec40 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61       debugCallba
2ec50 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63  ck, traceCallbac
2ec60 6b 2c 20 22 46 61 69 6c 75 72 65 2e 22 2c 0d 0a  k, "Failure.",..
2ec70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ec80 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74          traceCat
2ec90 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  egory);....     
2eca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
2ecb0 65 74 75 72 6e 20 31 3b 20 2f 2a 20 46 41 49 4c  eturn 1; /* FAIL
2ecc0 55 52 45 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20  URE */..        
2ecd0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
2ece0 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 72             #endr
2ecf0 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20  egion....       
2ed00 20 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ed30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ed40 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
2ed50 20 20 20 20 20 20 20 20 20 20 20 20 75 73 69 6e              usin
2ed60 67 20 28 4d 6f 63 6b 52 65 67 69 73 74 72 79 20  g (MockRegistry 
2ed70 72 65 67 69 73 74 72 79 20 3d 20 6e 65 77 20 4d  registry = new M
2ed80 6f 63 6b 52 65 67 69 73 74 72 79 28 0d 0a 20 20  ockRegistry(..  
2ed90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2eda0 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74        configurat
2edb0 69 6f 6e 2e 57 68 61 74 49 66 2c 20 66 61 6c 73  ion.WhatIf, fals
2edc0 65 2c 20 66 61 6c 73 65 29 29 0d 0a 20 20 20 20  e, false))..    
2edd0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
2ede0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2edf0 20 20 20 23 72 65 67 69 6f 6e 20 2e 4e 45 54 20     #region .NET 
2ee00 46 72 61 6d 65 77 6f 72 6b 20 2f 20 56 69 73 75  Framework / Visu
2ee10 61 6c 20 53 74 75 64 69 6f 20 44 61 74 61 0d 0a  al Studio Data..
2ee20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ee30 20 20 20 20 50 61 63 6b 61 67 65 20 70 61 63 6b      Package pack
2ee40 61 67 65 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20  age = null;..   
2ee50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ee60 20 46 72 61 6d 65 77 6f 72 6b 4c 69 73 74 20 66   FrameworkList f
2ee70 72 61 6d 65 77 6f 72 6b 4c 69 73 74 20 3d 20 6e  rameworkList = n
2ee80 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ull;..          
2ee90 20 20 20 20 20 20 20 20 20 20 56 73 4c 69 73 74            VsList
2eea0 20 76 73 4c 69 73 74 20 3d 20 6e 75 6c 6c 3b 0d   vsList = null;.
2eeb0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
2eec0 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
2eed0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2eee0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2eef0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ef00 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
2ef10 20 20 20 20 20 20 20 20 20 20 49 6e 69 74 69 61            Initia
2ef20 6c 69 7a 65 56 73 50 61 63 6b 61 67 65 28 72 65  lizeVsPackage(re
2ef30 66 20 70 61 63 6b 61 67 65 29 3b 0d 0a 0d 0a 20  f package);.... 
2ef40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ef50 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
2ef60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ef70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ef80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
2ef90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2efa0 20 20 20 20 20 20 49 6e 69 74 69 61 6c 69 7a 65        Initialize
2efb0 46 72 61 6d 65 77 6f 72 6b 4c 69 73 74 28 72 65  FrameworkList(re
2efc0 67 69 73 74 72 79 2e 4c 6f 63 61 6c 4d 61 63 68  gistry.LocalMach
2efd0 69 6e 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ine,..          
2efe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
2eff0 6e 66 69 67 75 72 61 74 69 6f 6e 2c 20 72 65 66  nfiguration, ref
2f000 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 29 3b   frameworkList);
2f010 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2f020 20 20 20 20 20 20 20 20 49 6e 69 74 69 61 6c 69          Initiali
2f030 7a 65 56 73 4c 69 73 74 28 72 65 67 69 73 74 72  zeVsList(registr
2f040 79 2e 4c 6f 63 61 6c 4d 61 63 68 69 6e 65 2c 20  y.LocalMachine, 
2f050 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2c 0d 0a  configuration,..
2f060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f070 20 20 20 20 20 20 20 20 72 65 66 20 76 73 4c 69          ref vsLi
2f080 73 74 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  st);..          
2f090 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65            #endre
2f0a0 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20  gion....        
2f0b0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
2f0c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f0d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f0e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f0f0 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
2f100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23                 #
2f110 72 65 67 69 6f 6e 20 43 6f 72 65 20 41 73 73 65  region Core Asse
2f120 6d 62 6c 79 20 4e 61 6d 65 20 43 68 65 63 6b 0d  mbly Name Check.
2f130 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2f140 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
2f150 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
2f160 4e 4f 54 45 3a 20 44 6f 20 74 68 69 73 20 66 69  NOTE: Do this fi
2f170 72 73 74 2c 20 62 65 66 6f 72 65 20 6d 61 6b 69  rst, before maki
2f180 6e 67 20 61 6e 79 20 63 68 61 6e 67 65 73 20 74  ng any changes t
2f190 6f 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 20  o the..         
2f1a0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
2f1b0 20 20 20 20 73 79 73 74 65 6d 2c 20 62 65 63 61      system, beca
2f1c0 75 73 65 20 69 74 20 77 69 6c 6c 20 74 68 72 6f  use it will thro
2f1d0 77 20 61 6e 20 65 78 63 65 70 74 69 6f 6e 20 69  w an exception i
2f1e0 66 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 20  f the..         
2f1f0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
2f200 20 20 20 20 66 69 6c 65 20 6e 61 6d 65 20 64 6f      file name do
2f210 65 73 20 6e 6f 74 20 72 65 70 72 65 73 65 6e 74  es not represent
2f220 20 61 20 76 61 6c 69 64 20 6d 61 6e 61 67 65 64   a valid managed
2f230 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2f240 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 61        //       a
2f250 73 73 65 6d 62 6c 79 2e 0d 0a 20 20 20 20 20 20  ssembly...      
2f260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
2f270 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2f280 20 20 20 20 20 20 41 73 73 65 6d 62 6c 79 4e 61        AssemblyNa
2f290 6d 65 20 61 73 73 65 6d 62 6c 79 4e 61 6d 65 20  me assemblyName 
2f2a0 3d 20 41 73 73 65 6d 62 6c 79 4e 61 6d 65 2e 47  = AssemblyName.G
2f2b0 65 74 41 73 73 65 6d 62 6c 79 4e 61 6d 65 28 0d  etAssemblyName(.
2f2c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2f2d0 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75           configu
2f2e0 72 61 74 69 6f 6e 2e 43 6f 72 65 46 69 6c 65 4e  ration.CoreFileN
2f2f0 61 6d 65 29 3b 20 2f 2a 20 74 68 72 6f 77 20 2a  ame); /* throw *
2f300 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
2f310 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f         #endregio
2f320 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n....           
2f330 20 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f370 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
2f380 20 20 20 20 20 20 20 20 20 20 20 20 23 72 65 67              #reg
2f390 69 6f 6e 20 53 68 61 72 65 64 20 43 6c 69 65 6e  ion Shared Clien
2f3a0 74 20 44 61 74 61 20 43 72 65 61 74 69 6f 6e 0d  t Data Creation.
2f3b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2f3c0 20 20 20 20 20 6f 62 6a 65 63 74 20 64 69 72 65       object dire
2f3d0 63 74 6f 72 79 44 61 74 61 20 3d 20 6e 65 77 20  ctoryData = new 
2f3e0 41 6e 79 50 61 69 72 3c 73 74 72 69 6e 67 2c 20  AnyPair<string, 
2f3f0 62 6f 6f 6c 3e 28 0d 0a 20 20 20 20 20 20 20 20  bool>(..        
2f400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f410 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 44 69  configuration.Di
2f420 72 65 63 74 6f 72 79 2c 20 63 6f 6e 66 69 67 75  rectory, configu
2f430 72 61 74 69 6f 6e 2e 49 6e 73 74 61 6c 6c 29 3b  ration.Install);
2f440 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2f450 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 66          object f
2f460 69 6c 65 4e 61 6d 65 44 61 74 61 20 3d 20 6e 65  ileNameData = ne
2f470 77 20 41 6e 79 50 61 69 72 3c 73 74 72 69 6e 67  w AnyPair<string
2f480 2c 20 62 6f 6f 6c 3e 28 0d 0a 20 20 20 20 20 20  , bool>(..      
2f490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f4a0 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e    configuration.
2f4b0 44 65 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65  DesignerFileName
2f4c0 2c 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e  , configuration.
2f4d0 49 6e 73 74 61 6c 6c 29 3b 0d 0a 20 20 20 20 20  Install);..     
2f4e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23                 #
2f4f0 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20  endregion....   
2f500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f510 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
2f520 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f530 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f540 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
2f550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f560 20 20 20 20 23 72 65 67 69 6f 6e 20 2e 4e 45 54      #region .NET
2f570 20 47 41 43 20 49 6e 73 74 61 6c 6c 2f 52 65 6d   GAC Install/Rem
2f580 6f 76 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ove..           
2f590 20 20 20 20 20 20 20 20 20 69 66 20 28 63 6f 6e           if (con
2f5a0 66 69 67 75 72 61 74 69 6f 6e 2e 48 61 73 46 6c  figuration.HasFl
2f5b0 61 67 73 28 49 6e 73 74 61 6c 6c 46 6c 61 67 73  ags(InstallFlags
2f5c0 2e 47 41 43 2c 20 74 72 75 65 29 29 0d 0a 20 20  .GAC, true))..  
2f5d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f5e0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
2f5f0 20 20 20 20 20 20 20 20 20 20 20 20 20 50 75 62               Pub
2f600 6c 69 73 68 20 70 75 62 6c 69 73 68 20 3d 20 6e  lish publish = n
2f610 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ull;....        
2f620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f630 69 66 20 28 21 63 6f 6e 66 69 67 75 72 61 74 69  if (!configurati
2f640 6f 6e 2e 57 68 61 74 49 66 29 0d 0a 20 20 20 20  on.WhatIf)..    
2f650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f660 20 20 20 20 20 20 20 20 70 75 62 6c 69 73 68 20          publish 
2f670 3d 20 6e 65 77 20 50 75 62 6c 69 73 68 28 29 3b  = new Publish();
2f680 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2f690 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
2f6a0 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 49 6e  configuration.In
2f6b0 73 74 61 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20  stall)..        
2f6c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f6d0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
2f6e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
2f6f0 66 20 28 21 63 6f 6e 66 69 67 75 72 61 74 69 6f  f (!configuratio
2f700 6e 2e 57 68 61 74 49 66 29 0d 0a 20 20 20 20 20  n.WhatIf)..     
2f710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f720 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 74 68             /* th
2f730 72 6f 77 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20  row */..        
2f740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f750 20 20 20 20 20 20 20 20 70 75 62 6c 69 73 68 2e          publish.
2f760 47 61 63 49 6e 73 74 61 6c 6c 28 63 6f 6e 66 69  GacInstall(confi
2f770 67 75 72 61 74 69 6f 6e 2e 43 6f 72 65 46 69 6c  guration.CoreFil
2f780 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20  eName);....     
2f790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f7a0 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e         TraceOps.
2f7b0 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 54 72  DebugAndTrace(Tr
2f7c0 61 63 65 50 72 69 6f 72 69 74 79 2e 48 69 67 68  acePriority.High
2f7d0 65 73 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  est,..          
2f7e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f7f0 20 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62        debugCallb
2f800 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61  ack, traceCallba
2f810 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ck, String.Forma
2f820 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
2f830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f840 20 20 20 20 22 47 61 63 49 6e 73 74 61 6c 6c 3a      "GacInstall:
2f850 20 61 73 73 65 6d 62 6c 79 50 61 74 68 20 3d 20   assemblyPath = 
2f860 7b 30 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  {0}",..         
2f870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f880 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61         ForDispla
2f890 79 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e  y(configuration.
2f8a0 43 6f 72 65 46 69 6c 65 4e 61 6d 65 29 29 2c 0d  CoreFileName)),.
2f8b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2f8c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f8d0 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
2f8e0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2f8f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f900 69 66 20 28 21 63 6f 6e 66 69 67 75 72 61 74 69  if (!configurati
2f910 6f 6e 2e 57 68 61 74 49 66 29 0d 0a 20 20 20 20  on.WhatIf)..    
2f920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f930 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 74              /* t
2f940 68 72 6f 77 20 2a 2f 0d 0a 20 20 20 20 20 20 20  hrow */..       
2f950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f960 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 73 68           publish
2f970 2e 47 61 63 49 6e 73 74 61 6c 6c 28 63 6f 6e 66  .GacInstall(conf
2f980 69 67 75 72 61 74 69 6f 6e 2e 4c 69 6e 71 46 69  iguration.LinqFi
2f990 6c 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20  leName);....    
2f9a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f9b0 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73          TraceOps
2f9c0 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 54  .DebugAndTrace(T
2f9d0 72 61 63 65 50 72 69 6f 72 69 74 79 2e 48 69 67  racePriority.Hig
2f9e0 68 65 73 74 2c 0d 0a 20 20 20 20 20 20 20 20 20  hest,..         
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 64 65 62 75 67 43 61 6c 6c         debugCall
2fa10 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62  back, traceCallb
2fa20 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d  ack, String.Form
2fa30 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
2fa40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fa50 20 20 20 20 20 22 47 61 63 49 6e 73 74 61 6c 6c       "GacInstall
2fa60 3a 20 61 73 73 65 6d 62 6c 79 50 61 74 68 20 3d  : assemblyPath =
2fa70 20 7b 30 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20   {0}",..        
2fa80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fa90 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c          ForDispl
2faa0 61 79 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  ay(configuration
2fab0 2e 4c 69 6e 71 46 69 6c 65 4e 61 6d 65 29 29 2c  .LinqFileName)),
2fac0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2fad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fae0 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29    traceCategory)
2faf0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
2fb00 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
2fb10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fb20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20        else..    
2fb30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fb40 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
2fb50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fb60 20 20 20 69 66 20 28 21 63 6f 6e 66 69 67 75 72     if (!configur
2fb70 61 74 69 6f 6e 2e 57 68 61 74 49 66 29 0d 0a 20  ation.WhatIf).. 
2fb80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fb90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
2fba0 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a 20 20 20 20  * throw */..    
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 70 75 62 6c              publ
2fbd0 69 73 68 2e 47 61 63 52 65 6d 6f 76 65 28 63 6f  ish.GacRemove(co
2fbe0 6e 66 69 67 75 72 61 74 69 6f 6e 2e 4c 69 6e 71  nfiguration.Linq
2fbf0 46 69 6c 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20  FileName);....  
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 54 72 61 63 65 4f            TraceO
2fc20 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65  ps.DebugAndTrace
2fc30 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 48  (TracePriority.H
2fc40 69 67 68 65 73 74 2c 0d 0a 20 20 20 20 20 20 20  ighest,..       
2fc50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fc60 20 20 20 20 20 20 20 20 20 64 65 62 75 67 43 61           debugCa
2fc70 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c  llback, traceCal
2fc80 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f  lback, String.Fo
2fc90 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
2fca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fcb0 20 20 20 20 20 20 20 22 47 61 63 52 65 6d 6f 76         "GacRemov
2fcc0 65 3a 20 61 73 73 65 6d 62 6c 79 50 61 74 68 20  e: assemblyPath 
2fcd0 3d 20 7b 30 7d 22 2c 0d 0a 20 20 20 20 20 20 20  = {0}",..       
2fce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fcf0 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70           ForDisp
2fd00 6c 61 79 28 63 6f 6e 66 69 67 75 72 61 74 69 6f  lay(configuratio
2fd10 6e 2e 4c 69 6e 71 46 69 6c 65 4e 61 6d 65 29 29  n.LinqFileName))
2fd20 2c 0d 0a 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 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
2fd50 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
2fd60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fd70 20 20 69 66 20 28 21 63 6f 6e 66 69 67 75 72 61    if (!configura
2fd80 74 69 6f 6e 2e 57 68 61 74 49 66 29 0d 0a 20 20  tion.WhatIf)..  
2fd90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fda0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
2fdb0 20 74 68 72 6f 77 20 2a 2f 0d 0a 20 20 20 20 20   throw */..     
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 70 75 62 6c 69             publi
2fde0 73 68 2e 47 61 63 52 65 6d 6f 76 65 28 63 6f 6e  sh.GacRemove(con
2fdf0 66 69 67 75 72 61 74 69 6f 6e 2e 43 6f 72 65 46  figuration.CoreF
2fe00 69 6c 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20  ileName);....   
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 54 72 61 63 65 4f 70           TraceOp
2fe30 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28  s.DebugAndTrace(
2fe40 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 48 69  TracePriority.Hi
2fe50 67 68 65 73 74 2c 0d 0a 20 20 20 20 20 20 20 20  ghest,..        
2fe60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fe70 20 20 20 20 20 20 20 20 64 65 62 75 67 43 61 6c          debugCal
2fe80 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c  lback, traceCall
2fe90 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72  back, String.For
2fea0 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
2feb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fec0 20 20 20 20 20 20 22 47 61 63 52 65 6d 6f 76 65        "GacRemove
2fed0 3a 20 61 73 73 65 6d 62 6c 79 50 61 74 68 20 3d  : assemblyPath =
2fee0 20 7b 30 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20   {0}",..        
2fef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ff00 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c          ForDispl
2ff10 61 79 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  ay(configuration
2ff20 2e 43 6f 72 65 46 69 6c 65 4e 61 6d 65 29 29 2c  .CoreFileName)),
2ff30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2ff40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ff50 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29    traceCategory)
2ff60 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
2ff70 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
2ff80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ff90 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
2ffa0 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67           #endreg
2ffb0 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ion....         
2ffc0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
2ffd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ffe0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2fff0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30000 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
30010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 72                #r
30020 65 67 69 6f 6e 20 2e 4e 45 54 20 41 73 73 65 6d  egion .NET Assem
30030 62 6c 79 46 6f 6c 64 65 72 73 0d 0a 20 20 20 20  blyFolders..    
30040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30050 69 66 20 28 63 6f 6e 66 69 67 75 72 61 74 69 6f  if (configuratio
30060 6e 2e 48 61 73 46 6c 61 67 73 28 0d 0a 20 20 20  n.HasFlags(..   
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 49 6e 73 74 61 6c 6c           Install
30090 46 6c 61 67 73 2e 41 73 73 65 6d 62 6c 79 46 6f  Flags.AssemblyFo
300a0 6c 64 65 72 73 2c 20 74 72 75 65 29 29 0d 0a 20  lders, true)).. 
300b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
300c0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
300d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
300e0 20 28 21 46 6f 72 45 61 63 68 46 72 61 6d 65 77   (!ForEachFramew
300f0 6f 72 6b 52 65 67 69 73 74 72 79 28 72 65 67 69  orkRegistry(regi
30100 73 74 72 79 2c 0d 0a 20 20 20 20 20 20 20 20 20  stry,..         
30110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30120 20 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b         framework
30130 4c 69 73 74 2c 20 50 72 6f 63 65 73 73 41 73 73  List, ProcessAss
30140 65 6d 62 6c 79 46 6f 6c 64 65 72 73 2c 0d 0a 20  emblyFolders,.. 
30150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
30170 69 72 65 63 74 6f 72 79 44 61 74 61 2c 0d 0a 20  irectoryData,.. 
30180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4e                 N
301a0 65 74 46 78 49 73 33 32 42 69 74 4f 6e 6c 79 20  etFxIs32BitOnly 
301b0 7c 7c 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  || configuration
301c0 2e 57 6f 77 36 34 2c 0d 0a 20 20 20 20 20 20 20  .Wow64,..       
301d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
301e0 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75           configu
301f0 72 61 74 69 6f 6e 2e 54 68 72 6f 77 4f 6e 4d 69  ration.ThrowOnMi
30200 73 73 69 6e 67 2c 0d 0a 20 20 20 20 20 20 20 20  ssing,..        
30210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30220 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72          configur
30230 61 74 69 6f 6e 2e 57 68 61 74 49 66 2c 20 63 6f  ation.WhatIf, co
30240 6e 66 69 67 75 72 61 74 69 6f 6e 2e 56 65 72 62  nfiguration.Verb
30250 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ose,..          
30260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30270 20 20 20 20 20 20 72 65 66 20 65 72 72 6f 72 29        ref error)
30280 29 0d 0a 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 7b 0d 0a 20 20             {..  
302a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
302b0 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f            TraceO
302c0 70 73 2e 53 68 6f 77 4d 65 73 73 61 67 65 28 54  ps.ShowMessage(T
302d0 72 61 63 65 50 72 69 6f 72 69 74 79 2e 48 69 67  racePriority.Hig
302e0 68 65 73 74 2c 0d 0a 20 20 20 20 20 20 20 20 20  hest,..         
302f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30300 20 20 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c         debugCall
30310 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62  back, traceCallb
30320 61 63 6b 2c 20 74 68 69 73 41 73 73 65 6d 62 6c  ack, thisAssembl
30330 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y,..            
30340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30350 20 20 20 20 65 72 72 6f 72 2c 20 74 72 61 63 65      error, trace
30360 43 61 74 65 67 6f 72 79 2c 20 4d 65 73 73 61 67  Category, Messag
30370 65 42 6f 78 42 75 74 74 6f 6e 73 2e 4f 4b 2c 0d  eBoxButtons.OK,.
30380 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
30390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
303a0 20 4d 65 73 73 61 67 65 42 6f 78 49 63 6f 6e 2e   MessageBoxIcon.
303b0 45 72 72 6f 72 29 3b 0d 0a 0d 0a 20 20 20 20 20  Error);....     
303c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
303d0 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e         TraceOps.
303e0 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 54 72  DebugAndTrace(Tr
303f0 61 63 65 50 72 69 6f 72 69 74 79 2e 4d 65 64 69  acePriority.Medi
30400 75 6d 48 69 67 68 2c 0d 0a 20 20 20 20 20 20 20  umHigh,..       
30410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30420 20 20 20 20 20 20 20 20 20 64 65 62 75 67 43 61           debugCa
30430 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c  llback, traceCal
30440 6c 62 61 63 6b 2c 20 22 46 61 69 6c 75 72 65 2e  lback, "Failure.
30450 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
30460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30470 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72      traceCategor
30480 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
30490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
304a0 20 20 20 72 65 74 75 72 6e 20 31 3b 20 2f 2a 20     return 1; /* 
304b0 46 41 49 4c 55 52 45 20 2a 2f 0d 0a 20 20 20 20  FAILURE */..    
304c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
304d0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
304e0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
304f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30500 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a    #endregion....
30510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30520 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
30530 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30540 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30550 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
30560 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
30570 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 2e         #region .
30580 4e 45 54 20 44 62 50 72 6f 76 69 64 65 72 46 61  NET DbProviderFa
30590 63 74 6f 72 79 0d 0a 20 20 20 20 20 20 20 20 20  ctory..         
305a0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 63             if (c
305b0 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 48 61 73  onfiguration.Has
305c0 46 6c 61 67 73 28 0d 0a 20 20 20 20 20 20 20 20  Flags(..        
305d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
305e0 20 20 20 20 49 6e 73 74 61 6c 6c 46 6c 61 67 73      InstallFlags
305f0 2e 44 62 50 72 6f 76 69 64 65 72 46 61 63 74 6f  .DbProviderFacto
30600 72 79 2c 20 74 72 75 65 29 29 0d 0a 20 20 20 20  ry, true))..    
30610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30620 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
30630 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
30640 73 61 76 65 64 20 3d 20 66 61 6c 73 65 3b 0d 0a  saved = false;..
30650 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
30660 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21 46            if (!F
30670 6f 72 45 61 63 68 46 72 61 6d 65 77 6f 72 6b 43  orEachFrameworkC
30680 6f 6e 66 69 67 28 72 65 67 69 73 74 72 79 2c 0d  onfig(registry,.
30690 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
306a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
306b0 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2c 20   frameworkList, 
306c0 50 72 6f 63 65 73 73 44 62 50 72 6f 76 69 64 65  ProcessDbProvide
306d0 72 46 61 63 74 6f 72 79 2c 0d 0a 20 20 20 20 20  rFactory,..     
306e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
306f0 20 20 20 20 20 20 20 20 20 20 20 49 6e 76 61 72             Invar
30700 69 61 6e 74 4e 61 6d 65 2c 20 50 72 6f 76 69 64  iantName, Provid
30710 65 72 4e 61 6d 65 2c 20 44 65 73 63 72 69 70 74  erName, Descript
30720 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ion,..          
30730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30740 20 20 20 20 20 20 46 61 63 74 6f 72 79 54 79 70        FactoryTyp
30750 65 4e 61 6d 65 2c 20 61 73 73 65 6d 62 6c 79 4e  eName, assemblyN
30760 61 6d 65 2c 20 64 69 72 65 63 74 6f 72 79 44 61  ame, directoryDa
30770 74 61 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ta,..           
30780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30790 20 20 20 20 20 4e 65 74 46 78 49 73 33 32 42 69       NetFxIs32Bi
307a0 74 4f 6e 6c 79 20 7c 7c 20 63 6f 6e 66 69 67 75  tOnly || configu
307b0 72 61 74 69 6f 6e 2e 57 6f 77 36 34 2c 0d 0a 20  ration.Wow64,.. 
307c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
307d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
307e0 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 54 68 72  onfiguration.Thr
307f0 6f 77 4f 6e 4d 69 73 73 69 6e 67 2c 0d 0a 20 20  owOnMissing,..  
30800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
30820 6e 66 69 67 75 72 61 74 69 6f 6e 2e 57 68 61 74  nfiguration.What
30830 49 66 2c 20 63 6f 6e 66 69 67 75 72 61 74 69 6f  If, configuratio
30840 6e 2e 56 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20  n.Verbose,..    
30850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30860 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20              ref 
30870 73 61 76 65 64 2c 20 72 65 66 20 65 72 72 6f 72  saved, ref error
30880 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
30890 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
308a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
308b0 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
308c0 4f 70 73 2e 53 68 6f 77 4d 65 73 73 61 67 65 28  Ops.ShowMessage(
308d0 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 48 69  TracePriority.Hi
308e0 67 68 65 73 74 2c 0d 0a 20 20 20 20 20 20 20 20  ghest,..        
308f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30900 20 20 20 20 20 20 20 20 64 65 62 75 67 43 61 6c          debugCal
30910 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c  lback, traceCall
30920 62 61 63 6b 2c 20 74 68 69 73 41 73 73 65 6d 62  back, thisAssemb
30930 6c 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ly,..           
30940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30950 20 20 20 20 20 65 72 72 6f 72 2c 20 74 72 61 63       error, trac
30960 65 43 61 74 65 67 6f 72 79 2c 20 4d 65 73 73 61  eCategory, Messa
30970 67 65 42 6f 78 42 75 74 74 6f 6e 73 2e 4f 4b 2c  geBoxButtons.OK,
30980 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
30990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
309a0 20 20 4d 65 73 73 61 67 65 42 6f 78 49 63 6f 6e    MessageBoxIcon
309b0 2e 45 72 72 6f 72 29 3b 0d 0a 0d 0a 20 20 20 20  .Error);....    
309c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
309d0 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73          TraceOps
309e0 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 54  .DebugAndTrace(T
309f0 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4d 65 64  racePriority.Med
30a00 69 75 6d 48 69 67 68 2c 0d 0a 20 20 20 20 20 20  iumHigh,..      
30a10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30a20 20 20 20 20 20 20 20 20 20 20 64 65 62 75 67 43            debugC
30a30 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61  allback, traceCa
30a40 6c 6c 62 61 63 6b 2c 20 22 46 61 69 6c 75 72 65  llback, "Failure
30a50 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  .",..           
30a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30a70 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f       traceCatego
30a80 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
30a90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30aa0 20 20 20 20 72 65 74 75 72 6e 20 31 3b 20 2f 2a      return 1; /*
30ab0 20 46 41 49 4c 55 52 45 20 2a 2f 0d 0a 20 20 20   FAILURE */..   
30ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30ad0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
30ae0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
30af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30b00 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
30b10 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
30b20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
30b30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30b40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30b50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30b60 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
30b70 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20          #region 
30b80 56 53 20 50 61 63 6b 61 67 65 0d 0a 20 20 20 20  VS Package..    
30b90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30ba0 69 66 20 28 63 6f 6e 66 69 67 75 72 61 74 69 6f  if (configuratio
30bb0 6e 2e 48 61 73 46 6c 61 67 73 28 0d 0a 20 20 20  n.HasFlags(..   
30bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30bd0 20 20 20 20 20 20 20 20 20 49 6e 73 74 61 6c 6c           Install
30be0 46 6c 61 67 73 2e 56 73 50 61 63 6b 61 67 65 2c  Flags.VsPackage,
30bf0 20 74 72 75 65 29 29 0d 0a 20 20 20 20 20 20 20   true))..       
30c00 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
30c10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30c20 20 20 20 20 20 20 20 20 69 66 20 28 21 46 6f 72          if (!For
30c30 45 61 63 68 56 73 56 65 72 73 69 6f 6e 52 65 67  EachVsVersionReg
30c40 69 73 74 72 79 28 72 65 67 69 73 74 72 79 2c 0d  istry(registry,.
30c50 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
30c60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30c70 20 76 73 4c 69 73 74 2c 20 50 72 6f 63 65 73 73   vsList, Process
30c80 56 73 50 61 63 6b 61 67 65 2c 20 70 61 63 6b 61  VsPackage, packa
30c90 67 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ge,..           
30ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30cb0 20 20 20 20 20 66 69 6c 65 4e 61 6d 65 44 61 74       fileNameDat
30cc0 61 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  a,..            
30cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30ce0 20 20 20 20 56 73 49 73 33 32 42 69 74 4f 6e 6c      VsIs32BitOnl
30cf0 79 20 7c 7c 20 63 6f 6e 66 69 67 75 72 61 74 69  y || configurati
30d00 6f 6e 2e 57 6f 77 36 34 2c 0d 0a 20 20 20 20 20  on.Wow64,..     
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 63 6f 6e 66 69             confi
30d30 67 75 72 61 74 69 6f 6e 2e 54 68 72 6f 77 4f 6e  guration.ThrowOn
30d40 4d 69 73 73 69 6e 67 2c 0d 0a 20 20 20 20 20 20  Missing,..      
30d50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30d60 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67            config
30d70 75 72 61 74 69 6f 6e 2e 57 68 61 74 49 66 2c 20  uration.WhatIf, 
30d80 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 56 65  configuration.Ve
30d90 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20 20  rbose,..        
30da0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30db0 20 20 20 20 20 20 20 20 72 65 66 20 65 72 72 6f          ref erro
30dc0 72 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  r))..           
30dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
30de0 20 20 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 54 72 61 63              Trac
30e00 65 4f 70 73 2e 53 68 6f 77 4d 65 73 73 61 67 65  eOps.ShowMessage
30e10 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 48  (TracePriority.H
30e20 69 67 68 65 73 74 2c 0d 0a 20 20 20 20 20 20 20  ighest,..       
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 64 65 62 75 67 43 61           debugCa
30e50 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c  llback, traceCal
30e60 6c 62 61 63 6b 2c 20 74 68 69 73 41 73 73 65 6d  lback, thisAssem
30e70 62 6c 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  bly,..          
30e80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30e90 20 20 20 20 20 20 65 72 72 6f 72 2c 20 74 72 61        error, tra
30ea0 63 65 43 61 74 65 67 6f 72 79 2c 20 4d 65 73 73  ceCategory, Mess
30eb0 61 67 65 42 6f 78 42 75 74 74 6f 6e 73 2e 4f 4b  ageBoxButtons.OK
30ec0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
30ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30ee0 20 20 20 4d 65 73 73 61 67 65 42 6f 78 49 63 6f     MessageBoxIco
30ef0 6e 2e 45 72 72 6f 72 29 3b 0d 0a 0d 0a 20 20 20  n.Error);....   
30f00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30f10 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70           TraceOp
30f20 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28  s.DebugAndTrace(
30f30 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4d 65  TracePriority.Me
30f40 64 69 75 6d 48 69 67 68 2c 0d 0a 20 20 20 20 20  diumHigh,..     
30f50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30f60 20 20 20 20 20 20 20 20 20 20 20 64 65 62 75 67             debug
30f70 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43  Callback, traceC
30f80 61 6c 6c 62 61 63 6b 2c 20 22 46 61 69 6c 75 72  allback, "Failur
30f90 65 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  e.",..          
30fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30fb0 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67        traceCateg
30fc0 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
30fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30fe0 20 20 20 20 20 72 65 74 75 72 6e 20 31 3b 20 2f       return 1; /
30ff0 2a 20 46 41 49 4c 55 52 45 20 2a 2f 0d 0a 20 20  * FAILURE */..  
31000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31010 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
31020 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
31030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31040 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
31050 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
31060 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
31070 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31080 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31090 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
310a0 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
310b0 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e           #region
310c0 20 56 53 20 44 61 74 61 53 6f 75 72 63 65 0d 0a   VS DataSource..
310d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
310e0 20 20 20 20 69 66 20 28 63 6f 6e 66 69 67 75 72      if (configur
310f0 61 74 69 6f 6e 2e 48 61 73 46 6c 61 67 73 28 0d  ation.HasFlags(.
31100 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
31110 20 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 73               Ins
31120 74 61 6c 6c 46 6c 61 67 73 2e 56 73 44 61 74 61  tallFlags.VsData
31130 53 6f 75 72 63 65 2c 20 74 72 75 65 29 29 0d 0a  Source, true))..
31140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31150 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
31160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
31170 66 20 28 21 46 6f 72 45 61 63 68 56 73 56 65 72  f (!ForEachVsVer
31180 73 69 6f 6e 52 65 67 69 73 74 72 79 28 72 65 67  sionRegistry(reg
31190 69 73 74 72 79 2c 0d 0a 20 20 20 20 20 20 20 20  istry,..        
311a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
311b0 20 20 20 20 20 20 20 20 76 73 4c 69 73 74 2c 20          vsList, 
311c0 50 72 6f 63 65 73 73 56 73 44 61 74 61 53 6f 75  ProcessVsDataSou
311d0 72 63 65 2c 20 70 61 63 6b 61 67 65 2c 0d 0a 20  rce, package,.. 
311e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
311f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66                 f
31200 69 6c 65 4e 61 6d 65 44 61 74 61 2c 0d 0a 20 20  ileNameData,..  
31210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 56 73                Vs
31230 49 73 33 32 42 69 74 4f 6e 6c 79 20 7c 7c 20 63  Is32BitOnly || c
31240 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 57 6f 77  onfiguration.Wow
31250 36 34 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  64,..           
31260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31270 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69       configurati
31280 6f 6e 2e 54 68 72 6f 77 4f 6e 4d 69 73 73 69 6e  on.ThrowOnMissin
31290 67 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  g,..            
312a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
312b0 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f      configuratio
312c0 6e 2e 57 68 61 74 49 66 2c 20 63 6f 6e 66 69 67  n.WhatIf, config
312d0 75 72 61 74 69 6f 6e 2e 56 65 72 62 6f 73 65 2c  uration.Verbose,
312e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
312f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31300 20 20 72 65 66 20 65 72 72 6f 72 29 29 0d 0a 20    ref error)).. 
31310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31320 20 20 20 20 20 20 20 7b 0d 0a 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 20 20 20 54 72 61 63 65 4f 70 73 2e 53        TraceOps.S
31350 68 6f 77 4d 65 73 73 61 67 65 28 54 72 61 63 65  howMessage(Trace
31360 50 72 69 6f 72 69 74 79 2e 48 69 67 68 65 73 74  Priority.Highest
31370 2c 0d 0a 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 20 20                  
31390 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b     debugCallback
313a0 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c  , traceCallback,
313b0 20 74 68 69 73 41 73 73 65 6d 62 6c 79 2c 0d 0a   thisAssembly,..
313c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
313d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
313e0 65 72 72 6f 72 2c 20 74 72 61 63 65 43 61 74 65  error, traceCate
313f0 67 6f 72 79 2c 20 4d 65 73 73 61 67 65 42 6f 78  gory, MessageBox
31400 42 75 74 74 6f 6e 73 2e 4f 4b 2c 0d 0a 20 20 20  Buttons.OK,..   
31410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31420 20 20 20 20 20 20 20 20 20 20 20 20 20 4d 65 73               Mes
31430 73 61 67 65 42 6f 78 49 63 6f 6e 2e 45 72 72 6f  sageBoxIcon.Erro
31440 72 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  r);....         
31450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31460 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75     TraceOps.Debu
31470 67 41 6e 64 54 72 61 63 65 28 54 72 61 63 65 50  gAndTrace(TraceP
31480 72 69 6f 72 69 74 79 2e 4d 65 64 69 75 6d 48 69  riority.MediumHi
31490 67 68 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  gh,..           
314a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
314b0 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61       debugCallba
314c0 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63  ck, traceCallbac
314d0 6b 2c 20 22 46 61 69 6c 75 72 65 2e 22 2c 0d 0a  k, "Failure.",..
314e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
314f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31500 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
31510 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
31520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
31530 65 74 75 72 6e 20 31 3b 20 2f 2a 20 46 41 49 4c  eturn 1; /* FAIL
31540 55 52 45 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20  URE */..        
31550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31560 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
31570 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
31580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 65                #e
31590 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20  ndregion....    
315a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
315b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
315c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
315d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
315e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
315f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31600 20 20 20 23 72 65 67 69 6f 6e 20 56 53 20 44 61     #region VS Da
31610 74 61 50 72 6f 76 69 64 65 72 0d 0a 20 20 20 20  taProvider..    
31620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31630 69 66 20 28 63 6f 6e 66 69 67 75 72 61 74 69 6f  if (configuratio
31640 6e 2e 48 61 73 46 6c 61 67 73 28 0d 0a 20 20 20  n.HasFlags(..   
31650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31660 20 20 20 20 20 20 20 20 20 49 6e 73 74 61 6c 6c           Install
31670 46 6c 61 67 73 2e 56 73 44 61 74 61 50 72 6f 76  Flags.VsDataProv
31680 69 64 65 72 2c 20 74 72 75 65 29 29 0d 0a 20 20  ider, true))..  
31690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
316a0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
316b0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
316c0 28 21 46 6f 72 45 61 63 68 56 73 56 65 72 73 69  (!ForEachVsVersi
316d0 6f 6e 52 65 67 69 73 74 72 79 28 72 65 67 69 73  onRegistry(regis
316e0 74 72 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  try,..          
316f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31700 20 20 20 20 20 20 76 73 4c 69 73 74 2c 20 50 72        vsList, Pr
31710 6f 63 65 73 73 56 73 44 61 74 61 50 72 6f 76 69  ocessVsDataProvi
31720 64 65 72 2c 20 70 61 63 6b 61 67 65 2c 0d 0a 20  der, package,.. 
31730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66                 f
31750 69 6c 65 4e 61 6d 65 44 61 74 61 2c 0d 0a 20 20  ileNameData,..  
31760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 56 73                Vs
31780 49 73 33 32 42 69 74 4f 6e 6c 79 20 7c 7c 20 63  Is32BitOnly || c
31790 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 57 6f 77  onfiguration.Wow
317a0 36 34 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  64,..           
317b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
317c0 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69       configurati
317d0 6f 6e 2e 54 68 72 6f 77 4f 6e 4d 69 73 73 69 6e  on.ThrowOnMissin
317e0 67 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  g,..            
317f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31800 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f      configuratio
31810 6e 2e 57 68 61 74 49 66 2c 20 63 6f 6e 66 69 67  n.WhatIf, config
31820 75 72 61 74 69 6f 6e 2e 56 65 72 62 6f 73 65 2c  uration.Verbose,
31830 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
31840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31850 20 20 72 65 66 20 65 72 72 6f 72 29 29 0d 0a 20    ref error)).. 
31860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31870 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
31880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31890 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 53        TraceOps.S
318a0 68 6f 77 4d 65 73 73 61 67 65 28 54 72 61 63 65  howMessage(Trace
318b0 50 72 69 6f 72 69 74 79 2e 48 69 67 68 65 73 74  Priority.Highest
318c0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
318d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
318e0 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b     debugCallback
318f0 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c  , traceCallback,
31900 20 74 68 69 73 41 73 73 65 6d 62 6c 79 2c 0d 0a   thisAssembly,..
31910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31930 65 72 72 6f 72 2c 20 74 72 61 63 65 43 61 74 65  error, traceCate
31940 67 6f 72 79 2c 20 4d 65 73 73 61 67 65 42 6f 78  gory, MessageBox
31950 42 75 74 74 6f 6e 73 2e 4f 4b 2c 0d 0a 20 20 20  Buttons.OK,..   
31960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31970 20 20 20 20 20 20 20 20 20 20 20 20 20 4d 65 73               Mes
31980 73 61 67 65 42 6f 78 49 63 6f 6e 2e 45 72 72 6f  sageBoxIcon.Erro
31990 72 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  r);....         
319a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
319b0 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75     TraceOps.Debu
319c0 67 41 6e 64 54 72 61 63 65 28 54 72 61 63 65 50  gAndTrace(TraceP
319d0 72 69 6f 72 69 74 79 2e 4d 65 64 69 75 6d 48 69  riority.MediumHi
319e0 67 68 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  gh,..           
319f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31a00 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61       debugCallba
31a10 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63  ck, traceCallbac
31a20 6b 2c 20 22 46 61 69 6c 75 72 65 2e 22 2c 0d 0a  k, "Failure.",..
31a30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31a40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31a50 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
31a60 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
31a70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
31a80 65 74 75 72 6e 20 31 3b 20 2f 2a 20 46 41 49 4c  eturn 1; /* FAIL
31a90 55 52 45 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20  URE */..        
31aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31ab0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
31ac0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
31ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 65                #e
31ae0 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20  ndregion....    
31af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31b00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31b10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31b20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31b30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
31b40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31b50 20 20 20 23 72 65 67 69 6f 6e 20 4c 6f 67 20 53     #region Log S
31b60 75 6d 6d 61 72 79 0d 0a 20 20 20 20 20 20 20 20  ummary..        
31b70 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
31b80 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61  eOps.DebugAndTra
31b90 63 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 79  ce(TracePriority
31ba0 2e 4d 65 64 69 75 6d 48 69 67 68 2c 0d 0a 20 20  .MediumHigh,..  
31bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31bc0 20 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62        debugCallb
31bd0 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61  ack, traceCallba
31be0 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ck, String.Forma
31bf0 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
31c00 20 20 20 20 20 20 20 20 20 20 20 20 22 73 75 62              "sub
31c10 4b 65 79 73 43 72 65 61 74 65 64 20 3d 20 7b 30  KeysCreated = {0
31c20 7d 2c 20 73 75 62 4b 65 79 73 44 65 6c 65 74 65  }, subKeysDelete
31c30 64 20 3d 20 7b 31 7d 2c 20 22 20 2b 0d 0a 20 20  d = {1}, " +..  
31c40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31c50 20 20 20 20 20 20 22 6b 65 79 56 61 6c 75 65 73        "keyValues
31c60 53 65 74 20 3d 20 7b 32 7d 2c 20 6b 65 79 56 61  Set = {2}, keyVa
31c70 6c 75 65 73 44 65 6c 65 74 65 64 20 3d 20 7b 33  luesDeleted = {3
31c80 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }",..           
31c90 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72               For
31ca0 44 69 73 70 6c 61 79 28 52 65 67 69 73 74 72 79  Display(Registry
31cb0 48 65 6c 70 65 72 2e 53 75 62 4b 65 79 73 43 72  Helper.SubKeysCr
31cc0 65 61 74 65 64 29 2c 0d 0a 20 20 20 20 20 20 20  eated),..       
31cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31ce0 20 46 6f 72 44 69 73 70 6c 61 79 28 52 65 67 69   ForDisplay(Regi
31cf0 73 74 72 79 48 65 6c 70 65 72 2e 53 75 62 4b 65  stryHelper.SubKe
31d00 79 73 44 65 6c 65 74 65 64 29 2c 0d 0a 20 20 20  ysDeleted),..   
31d10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31d20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28       ForDisplay(
31d30 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 4b  RegistryHelper.K
31d40 65 79 56 61 6c 75 65 73 53 65 74 29 2c 0d 0a 20  eyValuesSet),.. 
31d50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31d60 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61         ForDispla
31d70 79 28 52 65 67 69 73 74 72 79 48 65 6c 70 65 72  y(RegistryHelper
31d80 2e 4b 65 79 56 61 6c 75 65 73 44 65 6c 65 74 65  .KeyValuesDelete
31d90 64 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  d)),..          
31da0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
31db0 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 20  aceCategory);.. 
31dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31dd0 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
31de0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
31df0 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
31e00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31e10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31e20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31e30 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
31e40 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73          TraceOps
31e50 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 54  .DebugAndTrace(T
31e60 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4d 65 64  racePriority.Med
31e70 69 75 6d 48 69 67 68 2c 0d 0a 20 20 20 20 20 20  iumHigh,..      
31e80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31e90 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c    debugCallback,
31ea0 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20   traceCallback, 
31eb0 22 53 75 63 63 65 73 73 2e 22 2c 0d 0a 20 20 20  "Success.",..   
31ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31ed0 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f       traceCatego
31ee0 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
31ef0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
31f00 72 6e 20 30 3b 20 2f 2a 20 53 55 43 43 45 53 53  rn 0; /* SUCCESS
31f10 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   */..           
31f20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
31f30 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
31f40 20 20 20 63 61 74 63 68 20 28 45 78 63 65 70 74     catch (Except
31f50 69 6f 6e 20 65 29 0d 0a 20 20 20 20 20 20 20 20  ion e)..        
31f60 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
31f70 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e         TraceOps.
31f80 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 54 72  DebugAndTrace(Tr
31f90 61 63 65 50 72 69 6f 72 69 74 79 2e 48 69 67 68  acePriority.High
31fa0 65 73 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  est,..          
31fb0 20 20 20 20 20 20 20 20 20 20 64 65 62 75 67 43            debugC
31fc0 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61  allback, traceCa
31fd0 6c 6c 62 61 63 6b 2c 20 65 2c 20 74 72 61 63 65  llback, e, trace
31fe0 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
31ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
32000 72 6f 77 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  row;..          
32010 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a    }..        }..
32020 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
32030 6f 6e 0d 0a 20 20 20 20 7d 0d 0a 20 20 20 20 23  on..    }..    #
32040 65 6e 64 72 65 67 69 6f 6e 0d 0a 7d 0d 0a        endregion..}..