System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact aa0ba71922c316ca87c3e292f230602c5b6cd3df:


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 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
1de40 72 65 61 64 6f 6e 6c 79 20 62 6f 6f 6c 20 4e 65  readonly bool Ne
1de50 74 46 78 49 73 33 32 42 69 74 4f 6e 6c 79 20 3d  tFxIs32BitOnly =
1de60 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20   false;..       
1de70 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
1de80 72 65 61 64 6f 6e 6c 79 20 62 6f 6f 6c 20 56 73  readonly bool Vs
1de90 49 73 33 32 42 69 74 4f 6e 6c 79 20 3d 20 74 72  Is32BitOnly = tr
1dea0 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  ue;....        /
1deb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1dec0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ded0 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
1df00 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63    private static
1df10 20 72 65 61 64 6f 6e 6c 79 20 73 74 72 69 6e 67   readonly string
1df20 20 56 73 49 64 46 6f 72 6d 61 74 20 3d 20 22 42   VsIdFormat = "B
1df30 22 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ";....        //
1df40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1df50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1df60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1df70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1df80 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
1df90 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
1dfa0 72 65 61 64 6f 6e 6c 79 20 73 74 72 69 6e 67 20  readonly string 
1dfb0 58 50 61 74 68 46 6f 72 41 64 64 45 6c 65 6d 65  XPathForAddEleme
1dfc0 6e 74 20 3d 0d 0a 20 20 20 20 20 20 20 20 20 20  nt =..          
1dfd0 20 20 22 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e    "configuration
1dfe0 2f 73 79 73 74 65 6d 2e 64 61 74 61 2f 44 62 50  /system.data/DbP
1dff0 72 6f 76 69 64 65 72 46 61 63 74 6f 72 69 65 73  roviderFactories
1e000 2f 61 64 64 5b 40 69 6e 76 61 72 69 61 6e 74 3d  /add[@invariant=
1e010 5c 22 7b 30 7d 5c 22 5d 22 3b 0d 0a 0d 0a 20 20  \"{0}\"]";....  
1e020 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74        private st
1e030 61 74 69 63 20 72 65 61 64 6f 6e 6c 79 20 73 74  atic readonly st
1e040 72 69 6e 67 20 58 50 61 74 68 46 6f 72 52 65 6d  ring XPathForRem
1e050 6f 76 65 45 6c 65 6d 65 6e 74 20 3d 0d 0a 20 20  oveElement =..  
1e060 20 20 20 20 20 20 20 20 20 20 22 63 6f 6e 66 69            "confi
1e070 67 75 72 61 74 69 6f 6e 2f 73 79 73 74 65 6d 2e  guration/system.
1e080 64 61 74 61 2f 44 62 50 72 6f 76 69 64 65 72 46  data/DbProviderF
1e090 61 63 74 6f 72 69 65 73 2f 72 65 6d 6f 76 65 5b  actories/remove[
1e0a0 40 69 6e 76 61 72 69 61 6e 74 3d 5c 22 7b 30 7d  @invariant=\"{0}
1e0b0 5c 22 5d 22 3b 0d 0a 20 20 20 20 20 20 20 20 23  \"]";..        #
1e0c0 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20  endregion....   
1e0d0 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
1e0e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e0f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e100 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e110 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
1e120 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20          #region 
1e130 50 72 69 76 61 74 65 20 53 74 61 74 69 63 20 44  Private Static D
1e140 61 74 61 0d 0a 20 20 20 20 20 20 20 20 70 72 69  ata..        pri
1e150 76 61 74 65 20 73 74 61 74 69 63 20 41 73 73 65  vate static Asse
1e160 6d 62 6c 79 20 74 68 69 73 41 73 73 65 6d 62 6c  mbly thisAssembl
1e170 79 20 3d 20 41 73 73 65 6d 62 6c 79 2e 47 65 74  y = Assembly.Get
1e180 45 78 65 63 75 74 69 6e 67 41 73 73 65 6d 62 6c  ExecutingAssembl
1e190 79 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  y();....        
1e1a0 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 73  private static s
1e1b0 74 72 69 6e 67 20 74 72 61 63 65 43 61 74 65 67  tring traceCateg
1e1c0 6f 72 79 20 3d 20 50 61 74 68 2e 47 65 74 46 69  ory = Path.GetFi
1e1d0 6c 65 4e 61 6d 65 28 0d 0a 20 20 20 20 20 20 20  leName(..       
1e1e0 20 20 20 20 20 74 68 69 73 41 73 73 65 6d 62 6c       thisAssembl
1e1f0 79 2e 4c 6f 63 61 74 69 6f 6e 29 3b 20 2f 2a 20  y.Location); /* 
1e200 4e 4f 54 45 3a 20 53 61 6d 65 20 66 6f 72 20 64  NOTE: Same for d
1e210 65 62 75 67 20 61 6e 64 20 74 72 61 63 65 2e 20  ebug and trace. 
1e220 2a 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72  */....        pr
1e230 69 76 61 74 65 20 73 74 61 74 69 63 20 54 72 61  ivate static Tra
1e240 63 65 43 61 6c 6c 62 61 63 6b 20 64 65 62 75 67  ceCallback debug
1e250 43 61 6c 6c 62 61 63 6b 20 3d 20 41 70 70 44 65  Callback = AppDe
1e260 62 75 67 3b 0d 0a 20 20 20 20 20 20 20 20 70 72  bug;..        pr
1e270 69 76 61 74 65 20 73 74 61 74 69 63 20 54 72 61  ivate static Tra
1e280 63 65 43 61 6c 6c 62 61 63 6b 20 74 72 61 63 65  ceCallback trace
1e290 43 61 6c 6c 62 61 63 6b 20 3d 20 41 70 70 54 72  Callback = AppTr
1e2a0 61 63 65 3b 0d 0a 20 20 20 20 20 20 20 20 23 65  ace;..        #e
1e2b0 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20  ndregion....    
1e2c0 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
1e2d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e2e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e2f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e300 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
1e310 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 54         #region T
1e320 72 61 63 65 20 48 61 6e 64 6c 69 6e 67 0d 0a 20  race Handling.. 
1e330 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
1e340 74 61 74 69 63 20 73 74 72 69 6e 67 20 47 65 74  tatic string Get
1e350 4c 6f 67 46 69 6c 65 4e 61 6d 65 28 0d 0a 20 20  LogFileName(..  
1e360 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
1e370 20 74 79 70 65 4e 61 6d 65 0d 0a 20 20 20 20 20   typeName..     
1e380 20 20 20 20 20 20 20 29 20 2f 2a 20 74 68 72 6f         ) /* thro
1e390 77 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 7b 0d  w */..        {.
1e3a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72  .            str
1e3b0 69 6e 67 20 66 69 6c 65 4e 61 6d 65 20 3d 20 50  ing fileName = P
1e3c0 61 74 68 2e 47 65 74 54 65 6d 70 46 69 6c 65 4e  ath.GetTempFileN
1e3d0 61 6d 65 28 29 3b 0d 0a 20 20 20 20 20 20 20 20  ame();..        
1e3e0 20 20 20 20 73 74 72 69 6e 67 20 64 69 72 65 63      string direc
1e3f0 74 6f 72 79 20 3d 20 50 61 74 68 2e 47 65 74 44  tory = Path.GetD
1e400 69 72 65 63 74 6f 72 79 4e 61 6d 65 28 66 69 6c  irectoryName(fil
1e410 65 4e 61 6d 65 29 3b 0d 0a 20 20 20 20 20 20 20  eName);..       
1e420 20 20 20 20 20 73 74 72 69 6e 67 20 66 69 6c 65       string file
1e430 4e 61 6d 65 4f 6e 6c 79 20 3d 20 50 61 74 68 2e  NameOnly = Path.
1e440 47 65 74 46 69 6c 65 4e 61 6d 65 57 69 74 68 6f  GetFileNameWitho
1e450 75 74 45 78 74 65 6e 73 69 6f 6e 28 66 69 6c 65  utExtension(file
1e460 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  Name);....      
1e470 20 20 20 20 20 20 73 74 72 69 6e 67 20 6e 65 77        string new
1e480 46 69 6c 65 4e 61 6d 65 20 3d 20 50 61 74 68 2e  FileName = Path.
1e490 43 6f 6d 62 69 6e 65 28 64 69 72 65 63 74 6f 72  Combine(director
1e4a0 79 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  y, String.Format
1e4b0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
1e4c0 20 20 20 22 7b 30 7d 7b 31 7d 7b 32 7d 22 2c 20     "{0}{1}{2}", 
1e4d0 74 72 61 63 65 43 61 74 65 67 6f 72 79 2c 20 21  traceCategory, !
1e4e0 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45  String.IsNullOrE
1e4f0 6d 70 74 79 28 74 79 70 65 4e 61 6d 65 29 20 3f  mpty(typeName) ?
1e500 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1e510 20 20 20 20 20 20 22 2e 22 20 2b 20 74 79 70 65        "." + type
1e520 4e 61 6d 65 20 3a 20 53 74 72 69 6e 67 2e 45 6d  Name : String.Em
1e530 70 74 79 2c 20 22 2e 22 20 2b 20 66 69 6c 65 4e  pty, "." + fileN
1e540 61 6d 65 4f 6e 6c 79 20 2b 0d 0a 20 20 20 20 20  ameOnly +..     
1e550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4c                 L
1e560 6f 67 46 69 6c 65 53 75 66 66 69 78 29 29 3b 0d  ogFileSuffix));.
1e570 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 46  ...            F
1e580 69 6c 65 2e 4d 6f 76 65 28 66 69 6c 65 4e 61 6d  ile.Move(fileNam
1e590 65 2c 20 6e 65 77 46 69 6c 65 4e 61 6d 65 29 3b  e, newFileName);
1e5a0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1e5b0 72 65 74 75 72 6e 20 6e 65 77 46 69 6c 65 4e 61  return newFileNa
1e5c0 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  me;..        }..
1e5d0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
1e5e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e5f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e600 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e610 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e620 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69  /....        pri
1e630 76 61 74 65 20 73 74 61 74 69 63 20 76 6f 69 64  vate static void
1e640 20 41 70 70 44 65 62 75 67 28 0d 0a 20 20 20 20   AppDebug(..    
1e650 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6d          string m
1e660 65 73 73 61 67 65 2c 0d 0a 20 20 20 20 20 20 20  essage,..       
1e670 20 20 20 20 20 73 74 72 69 6e 67 20 63 61 74 65       string cate
1e680 67 6f 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20  gory..          
1e690 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a    )..        {..
1e6a0 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
1e6b0 65 4f 70 73 2e 44 65 62 75 67 43 6f 72 65 28 53  eOps.DebugCore(S
1e6c0 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
1e6d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
1e6e0 72 61 63 65 4f 70 73 2e 44 65 62 75 67 46 6f 72  raceOps.DebugFor
1e6f0 6d 61 74 2c 20 54 72 61 63 65 4f 70 73 2e 4e 65  mat, TraceOps.Ne
1e700 78 74 44 65 62 75 67 49 64 28 29 2c 0d 0a 20 20  xtDebugId(),..  
1e710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
1e720 61 63 65 4f 70 73 2e 54 69 6d 65 53 74 61 6d 70  aceOps.TimeStamp
1e730 28 44 61 74 65 54 69 6d 65 2e 55 74 63 4e 6f 77  (DateTime.UtcNow
1e740 29 2c 20 6d 65 73 73 61 67 65 29 2c 20 63 61 74  ), message), cat
1e750 65 67 6f 72 79 29 3b 0d 0a 20 20 20 20 20 20 20  egory);..       
1e760 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f   }....        //
1e770 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e780 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e790 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e7a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e7b0 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
1e7c0 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
1e7d0 76 6f 69 64 20 41 70 70 54 72 61 63 65 28 0d 0a  void AppTrace(..
1e7e0 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
1e7f0 6e 67 20 6d 65 73 73 61 67 65 2c 0d 0a 20 20 20  ng message,..   
1e800 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
1e810 63 61 74 65 67 6f 72 79 0d 0a 20 20 20 20 20 20  category..      
1e820 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
1e830 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
1e840 54 72 61 63 65 4f 70 73 2e 54 72 61 63 65 43 6f  TraceOps.TraceCo
1e850 72 65 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  re(String.Format
1e860 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
1e870 20 20 20 54 72 61 63 65 4f 70 73 2e 54 72 61 63     TraceOps.Trac
1e880 65 46 6f 72 6d 61 74 2c 20 54 72 61 63 65 4f 70  eFormat, TraceOp
1e890 73 2e 4e 65 78 74 54 72 61 63 65 49 64 28 29 2c  s.NextTraceId(),
1e8a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1e8b0 20 20 54 72 61 63 65 4f 70 73 2e 54 69 6d 65 53    TraceOps.TimeS
1e8c0 74 61 6d 70 28 44 61 74 65 54 69 6d 65 2e 55 74  tamp(DateTime.Ut
1e8d0 63 4e 6f 77 29 2c 20 6d 65 73 73 61 67 65 29 2c  cNow), message),
1e8e0 20 63 61 74 65 67 6f 72 79 29 3b 0d 0a 20 20 20   category);..   
1e8f0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
1e900 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20  #endregion....  
1e910 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
1e920 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e930 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e940 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e950 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
1e960 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e  .        #region
1e970 20 47 65 6e 65 72 69 63 20 50 6c 61 74 66 6f 72   Generic Platfor
1e980 6d 20 48 61 6e 64 6c 69 6e 67 0d 0a 20 20 20 20  m Handling..    
1e990 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74      private stat
1e9a0 69 63 20 62 6f 6f 6c 20 49 73 36 34 42 69 74 28  ic bool Is64Bit(
1e9b0 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
1e9c0 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
1e9d0 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54            // NOT
1e9e0 45 3a 20 52 65 74 75 72 6e 73 20 74 72 75 65 20  E: Returns true 
1e9f0 69 66 20 74 68 65 20 63 75 72 72 65 6e 74 20 70  if the current p
1ea00 72 6f 63 65 73 73 20 69 73 20 36 34 2d 62 69 74  rocess is 64-bit
1ea10 2e 20 20 49 66 20 74 68 69 73 0d 0a 20 20 20 20  .  If this..    
1ea20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
1ea30 20 69 73 20 74 72 75 65 2c 20 77 65 20 2a 6b 6e   is true, we *kn
1ea40 6f 77 2a 20 74 68 61 74 20 77 65 20 6d 75 73 74  ow* that we must
1ea50 20 62 65 20 72 75 6e 6e 69 6e 67 20 6f 6e 20 61   be running on a
1ea60 20 36 34 2d 62 69 74 0d 0a 20 20 20 20 20 20 20   64-bit..       
1ea70 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 6f 70       //       op
1ea80 65 72 61 74 69 6e 67 20 73 79 73 74 65 6d 20 61  erating system a
1ea90 73 20 77 65 6c 6c 2e 20 20 48 6f 77 65 76 65 72  s well.  However
1eaa0 2c 20 69 66 20 74 68 69 73 20 69 73 20 66 61 6c  , if this is fal
1eab0 73 65 2c 20 77 65 0d 0a 20 20 20 20 20 20 20 20  se, we..        
1eac0 20 20 20 20 2f 2f 20 20 20 20 20 20 20 64 6f 20      //       do 
1ead0 6e 6f 74 20 6e 65 63 65 73 73 61 72 69 6c 79 20  not necessarily 
1eae0 6b 6e 6f 77 20 74 68 61 74 20 77 65 20 61 72 65  know that we are
1eaf0 20 72 75 6e 6e 69 6e 67 20 6f 6e 20 61 20 33 32   running on a 32
1eb00 2d 62 69 74 0d 0a 20 20 20 20 20 20 20 20 20 20  -bit..          
1eb10 20 20 2f 2f 20 20 20 20 20 20 20 6f 70 65 72 61    //       opera
1eb20 74 69 6e 67 20 73 79 73 74 65 6d 2c 20 64 75 65  ting system, due
1eb30 20 74 6f 20 57 6f 57 36 34 20 28 57 69 6e 33 32   to WoW64 (Win32
1eb40 2d 6f 6e 2d 57 69 6e 36 34 29 2c 20 65 74 63 2e  -on-Win64), etc.
1eb50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
1eb60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
1eb70 74 75 72 6e 20 28 49 6e 74 50 74 72 2e 53 69 7a  turn (IntPtr.Siz
1eb80 65 20 3d 3d 20 73 69 7a 65 6f 66 28 6c 6f 6e 67  e == sizeof(long
1eb90 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  ));..        }..
1eba0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
1ebb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ebc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ebd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ebe0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ebf0 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69  /....        pri
1ec00 76 61 74 65 20 73 74 61 74 69 63 20 73 74 72 69  vate static stri
1ec10 6e 67 20 47 65 74 52 6f 6f 74 4b 65 79 4e 61 6d  ng GetRootKeyNam
1ec20 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
1ec30 62 6f 6f 6c 20 77 6f 77 36 34 0d 0a 20 20 20 20  bool wow64..    
1ec40 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
1ec50 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
1ec60 20 20 72 65 74 75 72 6e 20 53 74 72 69 6e 67 2e    return String.
1ec70 46 6f 72 6d 61 74 28 22 7b 30 7d 7b 31 7d 22 2c  Format("{0}{1}",
1ec80 20 52 6f 6f 74 4b 65 79 4e 61 6d 65 2c 0d 0a 20   RootKeyName,.. 
1ec90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 77                 w
1eca0 6f 77 36 34 20 26 26 20 49 73 36 34 42 69 74 28  ow64 && Is64Bit(
1ecb0 29 20 3f 20 22 5c 5c 22 20 2b 20 57 6f 77 36 34  ) ? "\\" + Wow64
1ecc0 53 75 62 4b 65 79 4e 61 6d 65 20 3a 20 53 74 72  SubKeyName : Str
1ecd0 69 6e 67 2e 45 6d 70 74 79 29 3b 0d 0a 20 20 20  ing.Empty);..   
1ece0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
1ecf0 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20  #endregion....  
1ed00 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
1ed10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ed20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ed30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ed40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
1ed50 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e  .        #region
1ed60 20 47 65 6e 65 72 69 63 20 53 74 72 69 6e 67 20   Generic String 
1ed70 48 61 6e 64 6c 69 6e 67 0d 0a 20 20 20 20 20 20  Handling..      
1ed80 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63    private static
1ed90 20 73 74 72 69 6e 67 20 46 6f 72 44 69 73 70 6c   string ForDispl
1eda0 61 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ay(..           
1edb0 20 6f 62 6a 65 63 74 20 76 61 6c 75 65 0d 0a 20   object value.. 
1edc0 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
1edd0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
1ede0 20 20 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d       if (value =
1edf0 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
1ee00 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
1ee10 22 3c 6e 75 6c 6c 3e 22 3b 0d 0a 0d 0a 20 20 20  "<null>";....   
1ee20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
1ee30 72 65 73 75 6c 74 3b 0d 0a 20 20 20 20 20 20 20  result;..       
1ee40 20 20 20 20 20 54 79 70 65 20 74 79 70 65 20 3d       Type type =
1ee50 20 76 61 6c 75 65 2e 47 65 74 54 79 70 65 28 29   value.GetType()
1ee60 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
1ee70 20 69 66 20 28 74 79 70 65 20 3d 3d 20 74 79 70   if (type == typ
1ee80 65 6f 66 28 58 6d 6c 45 6c 65 6d 65 6e 74 29 29  eof(XmlElement))
1ee90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
1eea0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1eeb0 20 58 6d 6c 45 6c 65 6d 65 6e 74 20 65 6c 65 6d   XmlElement elem
1eec0 65 6e 74 20 3d 20 28 58 6d 6c 45 6c 65 6d 65 6e  ent = (XmlElemen
1eed0 74 29 76 61 6c 75 65 3b 0d 0a 0d 0a 20 20 20 20  t)value;....    
1eee0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 73 75              resu
1eef0 6c 74 20 3d 20 65 6c 65 6d 65 6e 74 2e 4f 75 74  lt = element.Out
1ef00 65 72 58 6d 6c 3b 0d 0a 20 20 20 20 20 20 20 20  erXml;..        
1ef10 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
1ef20 20 20 20 65 6c 73 65 20 69 66 20 28 74 79 70 65     else if (type
1ef30 20 3d 3d 20 74 79 70 65 6f 66 28 56 65 72 73 69   == typeof(Versi
1ef40 6f 6e 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  on))..          
1ef50 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
1ef60 20 20 20 20 20 56 65 72 73 69 6f 6e 20 76 65 72       Version ver
1ef70 73 69 6f 6e 20 3d 20 28 56 65 72 73 69 6f 6e 29  sion = (Version)
1ef80 76 61 6c 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  value;....      
1ef90 20 20 20 20 20 20 20 20 20 20 72 65 73 75 6c 74            result
1efa0 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74   = String.Format
1efb0 28 22 76 7b 30 7d 22 2c 20 76 65 72 73 69 6f 6e  ("v{0}", version
1efc0 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
1efd0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 65  }..            e
1efe0 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  lse..           
1eff0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
1f000 20 20 20 20 72 65 73 75 6c 74 20 3d 20 76 61 6c      result = val
1f010 75 65 2e 54 6f 53 74 72 69 6e 67 28 29 3b 0d 0a  ue.ToString();..
1f020 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1f030 20 20 69 66 20 28 72 65 73 75 6c 74 2e 4c 65 6e    if (result.Len
1f040 67 74 68 20 3d 3d 20 30 29 0d 0a 20 20 20 20 20  gth == 0)..     
1f050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
1f060 65 74 75 72 6e 20 22 3c 65 6d 70 74 79 3e 22 3b  eturn "<empty>";
1f070 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1f080 20 20 20 20 72 65 73 75 6c 74 20 3d 20 53 74 72      result = Str
1f090 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
1f0a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f0b0 20 74 79 70 65 2e 49 73 53 75 62 63 6c 61 73 73   type.IsSubclass
1f0c0 4f 66 28 74 79 70 65 6f 66 28 56 61 6c 75 65 54  Of(typeof(ValueT
1f0d0 79 70 65 29 29 20 3f 20 22 7b 30 7d 22 20 3a 20  ype)) ? "{0}" : 
1f0e0 22 5c 22 7b 30 7d 5c 22 22 2c 0d 0a 20 20 20 20  "\"{0}\"",..    
1f0f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f100 72 65 73 75 6c 74 29 3b 0d 0a 20 20 20 20 20 20  result);..      
1f110 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
1f120 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 72 65         return re
1f130 73 75 6c 74 3b 0d 0a 20 20 20 20 20 20 20 20 7d  sult;..        }
1f140 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65  ..        #endre
1f150 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20  gion....        
1f160 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f170 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f180 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f190 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f1a0 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
1f1b0 20 20 20 23 72 65 67 69 6f 6e 20 41 73 73 65 6d     #region Assem
1f1c0 62 6c 79 20 41 74 74 72 69 62 75 74 65 20 48 61  bly Attribute Ha
1f1d0 6e 64 6c 69 6e 67 0d 0a 20 20 20 20 20 20 20 20  ndling..        
1f1e0 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 73 74  public static st
1f1f0 72 69 6e 67 20 47 65 74 41 73 73 65 6d 62 6c 79  ring GetAssembly
1f200 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 28 0d 0a  Configuration(..
1f210 20 20 20 20 20 20 20 20 20 20 20 20 41 73 73 65              Asse
1f220 6d 62 6c 79 20 61 73 73 65 6d 62 6c 79 0d 0a 20  mbly assembly.. 
1f230 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
1f240 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
1f250 20 20 20 20 20 69 66 20 28 61 73 73 65 6d 62 6c       if (assembl
1f260 79 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  y != null)..    
1f270 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
1f280 20 20 20 20 20 20 20 20 20 20 20 74 72 79 0d 0a             try..
1f290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f2a0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
1f2b0 20 20 20 20 20 20 20 69 66 20 28 61 73 73 65 6d         if (assem
1f2c0 62 6c 79 2e 49 73 44 65 66 69 6e 65 64 28 0d 0a  bly.IsDefined(..
1f2d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f2e0 20 20 20 20 20 20 20 20 20 20 20 20 74 79 70 65              type
1f2f0 6f 66 28 41 73 73 65 6d 62 6c 79 43 6f 6e 66 69  of(AssemblyConfi
1f300 67 75 72 61 74 69 6f 6e 41 74 74 72 69 62 75 74  gurationAttribut
1f310 65 29 2c 20 66 61 6c 73 65 29 29 0d 0a 20 20 20  e), false))..   
1f320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f330 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
1f340 20 20 20 20 20 20 20 20 20 20 20 20 41 73 73 65              Asse
1f350 6d 62 6c 79 43 6f 6e 66 69 67 75 72 61 74 69 6f  mblyConfiguratio
1f360 6e 41 74 74 72 69 62 75 74 65 20 63 6f 6e 66 69  nAttribute confi
1f370 67 75 72 61 74 69 6f 6e 20 3d 0d 0a 20 20 20 20  guration =..    
1f380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f390 20 20 20 20 20 20 20 20 28 41 73 73 65 6d 62 6c          (Assembl
1f3a0 79 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 41 74  yConfigurationAt
1f3b0 74 72 69 62 75 74 65 29 0d 0a 20 20 20 20 20 20  tribute)..      
1f3c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f3d0 20 20 20 20 20 20 61 73 73 65 6d 62 6c 79 2e 47        assembly.G
1f3e0 65 74 43 75 73 74 6f 6d 41 74 74 72 69 62 75 74  etCustomAttribut
1f3f0 65 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  es(..           
1f400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f410 20 20 20 20 20 74 79 70 65 6f 66 28 41 73 73 65       typeof(Asse
1f420 6d 62 6c 79 43 6f 6e 66 69 67 75 72 61 74 69 6f  mblyConfiguratio
1f430 6e 41 74 74 72 69 62 75 74 65 29 2c 0d 0a 20 20  nAttribute),..  
1f440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 61                fa
1f460 6c 73 65 29 5b 30 5d 3b 0d 0a 0d 0a 20 20 20 20  lse)[0];....    
1f470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f480 20 20 20 20 72 65 74 75 72 6e 20 63 6f 6e 66 69      return confi
1f490 67 75 72 61 74 69 6f 6e 2e 43 6f 6e 66 69 67 75  guration.Configu
1f4a0 72 61 74 69 6f 6e 3b 0d 0a 20 20 20 20 20 20 20  ration;..       
1f4b0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
1f4c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f4d0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
1f4e0 20 20 20 63 61 74 63 68 0d 0a 20 20 20 20 20 20     catch..      
1f4f0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
1f500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f510 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d   // do nothing..
1f520 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1f530 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
1f540 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
1f550 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 20   return null;.. 
1f560 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
1f570 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
1f580 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f590 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f5a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f5b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
1f5c0 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74         public st
1f5d0 61 74 69 63 20 73 74 72 69 6e 67 20 47 65 74 41  atic string GetA
1f5e0 73 73 65 6d 62 6c 79 54 69 74 6c 65 28 0d 0a 20  ssemblyTitle(.. 
1f5f0 20 20 20 20 20 20 20 20 20 20 20 41 73 73 65 6d             Assem
1f600 62 6c 79 20 61 73 73 65 6d 62 6c 79 0d 0a 20 20  bly assembly..  
1f610 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
1f620 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
1f630 20 20 20 20 69 66 20 28 61 73 73 65 6d 62 6c 79      if (assembly
1f640 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   != null)..     
1f650 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
1f660 20 20 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20            try.. 
1f670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
1f680 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1f690 20 20 20 20 20 20 69 66 20 28 61 73 73 65 6d 62        if (assemb
1f6a0 6c 79 2e 49 73 44 65 66 69 6e 65 64 28 0d 0a 20  ly.IsDefined(.. 
1f6b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f6c0 20 20 20 20 20 20 20 20 20 20 20 74 79 70 65 6f             typeo
1f6d0 66 28 41 73 73 65 6d 62 6c 79 54 69 74 6c 65 41  f(AssemblyTitleA
1f6e0 74 74 72 69 62 75 74 65 29 2c 20 66 61 6c 73 65  ttribute), false
1f6f0 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
1f700 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
1f710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f720 20 20 20 41 73 73 65 6d 62 6c 79 54 69 74 6c 65     AssemblyTitle
1f730 41 74 74 72 69 62 75 74 65 20 74 69 74 6c 65 20  Attribute title 
1f740 3d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  =..             
1f750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28                 (
1f760 41 73 73 65 6d 62 6c 79 54 69 74 6c 65 41 74 74  AssemblyTitleAtt
1f770 72 69 62 75 74 65 29 0d 0a 20 20 20 20 20 20 20  ribute)..       
1f780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f790 20 20 20 20 20 61 73 73 65 6d 62 6c 79 2e 47 65       assembly.Ge
1f7a0 74 43 75 73 74 6f 6d 41 74 74 72 69 62 75 74 65  tCustomAttribute
1f7b0 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  s(..            
1f7c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f7d0 20 20 20 20 74 79 70 65 6f 66 28 41 73 73 65 6d      typeof(Assem
1f7e0 62 6c 79 54 69 74 6c 65 41 74 74 72 69 62 75 74  blyTitleAttribut
1f7f0 65 29 2c 20 66 61 6c 73 65 29 5b 30 5d 3b 0d 0a  e), false)[0];..
1f800 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1f810 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
1f820 20 74 69 74 6c 65 2e 54 69 74 6c 65 3b 0d 0a 20   title.Title;.. 
1f830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f840 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
1f850 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
1f860 20 20 20 20 20 20 20 20 20 63 61 74 63 68 0d 0a           catch..
1f870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f880 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
1f890 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74         // do not
1f8a0 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 20  hing...         
1f8b0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
1f8c0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
1f8d0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 75         return nu
1f8e0 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  ll;..        }..
1f8f0 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
1f900 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  on....        //
1f910 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f920 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f930 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f940 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f950 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
1f960 20 23 72 65 67 69 6f 6e 20 2e 4e 45 54 20 46 72   #region .NET Fr
1f970 61 6d 65 77 6f 72 6b 20 48 61 6e 64 6c 69 6e 67  amework Handling
1f980 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
1f990 65 20 73 74 61 74 69 63 20 73 74 72 69 6e 67 20  e static string 
1f9a0 47 65 74 46 72 61 6d 65 77 6f 72 6b 52 6f 6f 74  GetFrameworkRoot
1f9b0 4b 65 79 4e 61 6d 65 28 0d 0a 20 20 20 20 20 20  KeyName(..      
1f9c0 20 20 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34        bool wow64
1f9d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d  ..            ).
1f9e0 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
1f9f0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 53          return S
1fa00 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 22 7b 30  tring.Format("{0
1fa10 7d 5c 5c 4d 69 63 72 6f 73 6f 66 74 5c 5c 2e 4e  }\\Microsoft\\.N
1fa20 45 54 46 72 61 6d 65 77 6f 72 6b 22 2c 0d 0a 20  ETFramework",.. 
1fa30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 47                 G
1fa40 65 74 52 6f 6f 74 4b 65 79 4e 61 6d 65 28 77 6f  etRootKeyName(wo
1fa50 77 36 34 29 29 3b 0d 0a 20 20 20 20 20 20 20 20  w64));..        
1fa60 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 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 2f 2f 2f  ////////////////
1fab0 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
1fac0 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 73  private static s
1fad0 74 72 69 6e 67 20 47 65 74 46 72 61 6d 65 77 6f  tring GetFramewo
1fae0 72 6b 4b 65 79 4e 61 6d 65 28 0d 0a 20 20 20 20  rkKeyName(..    
1faf0 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 66          string f
1fb00 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c 0d 0a 20  rameworkName,.. 
1fb10 20 20 20 20 20 20 20 20 20 20 20 56 65 72 73 69             Versi
1fb20 6f 6e 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73  on frameworkVers
1fb30 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ion,..          
1fb40 20 20 73 74 72 69 6e 67 20 70 6c 61 74 66 6f 72    string platfor
1fb50 6d 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20  mName,..        
1fb60 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34 0d 0a      bool wow64..
1fb70 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
1fb80 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
1fb90 20 20 20 20 20 20 73 74 72 69 6e 67 20 66 6f 72        string for
1fba0 6d 61 74 20 3d 20 21 53 74 72 69 6e 67 2e 49 73  mat = !String.Is
1fbb0 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 70 6c 61 74  NullOrEmpty(plat
1fbc0 66 6f 72 6d 4e 61 6d 65 29 20 3f 0d 0a 20 20 20  formName) ?..   
1fbd0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 7b 30               "{0
1fbe0 7d 5c 5c 4d 69 63 72 6f 73 6f 66 74 5c 5c 7b 31  }\\Microsoft\\{1
1fbf0 7d 5c 5c 76 7b 32 7d 5c 5c 7b 33 7d 22 20 3a 0d  }\\v{2}\\{3}" :.
1fc00 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1fc10 20 22 7b 30 7d 5c 5c 4d 69 63 72 6f 73 6f 66 74   "{0}\\Microsoft
1fc20 5c 5c 7b 31 7d 5c 5c 76 7b 32 7d 22 3b 0d 0a 0d  \\{1}\\v{2}";...
1fc30 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
1fc40 75 72 6e 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  urn String.Forma
1fc50 74 28 66 6f 72 6d 61 74 2c 20 47 65 74 52 6f 6f  t(format, GetRoo
1fc60 74 4b 65 79 4e 61 6d 65 28 77 6f 77 36 34 29 2c  tKeyName(wow64),
1fc70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1fc80 20 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c    frameworkName,
1fc90 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f   frameworkVersio
1fca0 6e 2c 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 29  n, platformName)
1fcb0 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  ;..        }....
1fcc0 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
1fcd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fce0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fcf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fd00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
1fd10 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  ...        priva
1fd20 74 65 20 73 74 61 74 69 63 20 73 74 72 69 6e 67  te static string
1fd30 20 47 65 74 49 6d 61 67 65 52 75 6e 74 69 6d 65   GetImageRuntime
1fd40 56 65 72 73 69 6f 6e 28 0d 0a 20 20 20 20 20 20  Version(..      
1fd50 20 20 20 20 20 20 73 74 72 69 6e 67 20 66 69 6c        string fil
1fd60 65 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 20  eName..         
1fd70 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d     )..        {.
1fd80 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79  .            try
1fd90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
1fda0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1fdb0 20 41 73 73 65 6d 62 6c 79 20 61 73 73 65 6d 62   Assembly assemb
1fdc0 6c 79 20 3d 0d 0a 20 20 20 20 20 20 20 20 20 20  ly =..          
1fdd0 20 20 20 20 20 20 20 20 20 20 41 73 73 65 6d 62            Assemb
1fde0 6c 79 2e 52 65 66 6c 65 63 74 69 6f 6e 4f 6e 6c  ly.ReflectionOnl
1fdf0 79 4c 6f 61 64 46 72 6f 6d 28 66 69 6c 65 4e 61  yLoadFrom(fileNa
1fe00 6d 65 29 3b 20 2f 2a 20 74 68 72 6f 77 20 2a 2f  me); /* throw */
1fe10 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1fe20 20 20 20 20 69 66 20 28 61 73 73 65 6d 62 6c 79      if (assembly
1fe30 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   != null)..     
1fe40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
1fe50 65 74 75 72 6e 20 61 73 73 65 6d 62 6c 79 2e 49  eturn assembly.I
1fe60 6d 61 67 65 52 75 6e 74 69 6d 65 56 65 72 73 69  mageRuntimeVersi
1fe70 6f 6e 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  on;..           
1fe80 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
1fe90 63 61 74 63 68 0d 0a 20 20 20 20 20 20 20 20 20  catch..         
1fea0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
1feb0 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68        // do noth
1fec0 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  ing...          
1fed0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
1fee0 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d     return null;.
1fef0 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....  
1ff00 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
1ff10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ff20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ff30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ff40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
1ff50 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
1ff60 20 73 74 61 74 69 63 20 73 74 72 69 6e 67 20 47   static string G
1ff70 65 74 46 72 61 6d 65 77 6f 72 6b 44 69 72 65 63  etFrameworkDirec
1ff80 74 6f 72 79 28 0d 0a 20 20 20 20 20 20 20 20 20  tory(..         
1ff90 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b     MockRegistryK
1ffa0 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20  ey rootKey,..   
1ffb0 20 20 20 20 20 20 20 20 20 56 65 72 73 69 6f 6e           Version
1ffc0 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f   frameworkVersio
1ffd0 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n,..            
1ffe0 62 6f 6f 6c 20 77 6f 77 36 34 2c 0d 0a 20 20 20  bool wow64,..   
1fff0 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68           bool wh
20000 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20  atIf,..         
20010 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 0d     bool verbose.
20020 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a  .            )..
20030 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
20040 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 4d 6f         using (Mo
20050 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 6b 65  ckRegistryKey ke
20060 79 20 3d 20 52 65 67 69 73 74 72 79 48 65 6c 70  y = RegistryHelp
20070 65 72 2e 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a  er.OpenSubKey(..
20080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20090 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 47 65 74      rootKey, Get
200a0 46 72 61 6d 65 77 6f 72 6b 52 6f 6f 74 4b 65 79  FrameworkRootKey
200b0 4e 61 6d 65 28 77 6f 77 36 34 29 2c 20 66 61 6c  Name(wow64), fal
200c0 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se,..           
200d0 20 20 20 20 20 20 20 20 20 77 68 61 74 49 66 2c           whatIf,
200e0 20 76 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 20   verbose))..    
200f0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
20100 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6b             if (k
20110 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ey == null)..   
20120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20130 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d   return null;...
20140 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
20150 20 6f 62 6a 65 63 74 20 76 61 6c 75 65 20 3d 20   object value = 
20160 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 47  RegistryHelper.G
20170 65 74 56 61 6c 75 65 28 0d 0a 20 20 20 20 20 20  etValue(..      
20180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6b 65                ke
20190 79 2c 20 22 49 6e 73 74 61 6c 6c 52 6f 6f 74 22  y, "InstallRoot"
201a0 2c 20 6e 75 6c 6c 2c 20 77 68 61 74 49 66 2c 20  , null, whatIf, 
201b0 76 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20  verbose);....   
201c0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
201d0 28 21 28 76 61 6c 75 65 20 69 73 20 73 74 72 69  (!(value is stri
201e0 6e 67 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ng))..          
201f0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
20200 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20   null;....      
20210 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
20220 20 50 61 74 68 2e 43 6f 6d 62 69 6e 65 28 0d 0a   Path.Combine(..
20230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20240 20 20 20 20 28 73 74 72 69 6e 67 29 76 61 6c 75      (string)valu
20250 65 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  e, String.Format
20260 28 22 76 7b 30 7d 22 2c 20 66 72 61 6d 65 77 6f  ("v{0}", framewo
20270 72 6b 56 65 72 73 69 6f 6e 29 29 3b 0d 0a 20 20  rkVersion));..  
20280 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
20290 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
202a0 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20  #endregion....  
202b0 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
202c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
202d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
202e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
202f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
20300 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e  .        #region
20310 20 50 65 72 2d 46 72 61 6d 65 77 6f 72 6b 2f 50   Per-Framework/P
20320 6c 61 74 66 6f 72 6d 20 48 61 6e 64 6c 69 6e 67  latform Handling
20330 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
20340 65 20 73 74 61 74 69 63 20 76 6f 69 64 20 49 6e  e static void In
20350 69 74 69 61 6c 69 7a 65 46 72 61 6d 65 77 6f 72  itializeFramewor
20360 6b 4c 69 73 74 28 0d 0a 20 20 20 20 20 20 20 20  kList(..        
20370 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79      MockRegistry
20380 4b 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20  Key rootKey,..  
20390 20 20 20 20 20 20 20 20 20 20 43 6f 6e 66 69 67            Config
203a0 75 72 61 74 69 6f 6e 20 63 6f 6e 66 69 67 75 72  uration configur
203b0 61 74 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20  ation,..        
203c0 20 20 20 20 72 65 66 20 46 72 61 6d 65 77 6f 72      ref Framewor
203d0 6b 4c 69 73 74 20 66 72 61 6d 65 77 6f 72 6b 4c  kList frameworkL
203e0 69 73 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ist..           
203f0 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20   )..        {.. 
20400 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 66             if (f
20410 72 61 6d 65 77 6f 72 6b 4c 69 73 74 20 3d 3d 20  rameworkList == 
20420 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
20430 20 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b         framework
20440 4c 69 73 74 20 3d 20 6e 65 77 20 46 72 61 6d 65  List = new Frame
20450 77 6f 72 6b 4c 69 73 74 28 29 3b 0d 0a 0d 0a 20  workList();.... 
20460 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 66             if (f
20470 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 52 6f 6f  rameworkList.Roo
20480 74 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  tKey == null).. 
20490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66                 f
204a0 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 52 6f 6f  rameworkList.Roo
204b0 74 4b 65 79 20 3d 20 72 6f 6f 74 4b 65 79 3b 0d  tKey = rootKey;.
204c0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
204d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
204e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
204f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20500 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20510 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
20520 20 20 69 66 20 28 66 72 61 6d 65 77 6f 72 6b 4c    if (frameworkL
20530 69 73 74 2e 4e 61 6d 65 73 20 3d 3d 20 6e 75 6c  ist.Names == nul
20540 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
20550 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
20560 20 20 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74     frameworkList
20570 2e 4e 61 6d 65 73 20 3d 20 6e 65 77 20 53 74 72  .Names = new Str
20580 69 6e 67 4c 69 73 74 28 29 3b 0d 0a 0d 0a 20 20  ingList();....  
20590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
205a0 20 28 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e   ((configuration
205b0 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20 21 63 6f   == null) || !co
205c0 6e 66 69 67 75 72 61 74 69 6f 6e 2e 4e 6f 44 65  nfiguration.NoDe
205d0 73 6b 74 6f 70 29 0d 0a 20 20 20 20 20 20 20 20  sktop)..        
205e0 20 20 20 20 20 20 20 20 20 20 20 20 66 72 61 6d              fram
205f0 65 77 6f 72 6b 4c 69 73 74 2e 4e 61 6d 65 73 2e  eworkList.Names.
20600 41 64 64 28 22 2e 4e 45 54 46 72 61 6d 65 77 6f  Add(".NETFramewo
20610 72 6b 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  rk");....       
20620 20 20 20 20 20 20 20 20 20 69 66 20 28 28 63 6f           if ((co
20630 6e 66 69 67 75 72 61 74 69 6f 6e 20 3d 3d 20 6e  nfiguration == n
20640 75 6c 6c 29 20 7c 7c 20 21 63 6f 6e 66 69 67 75  ull) || !configu
20650 72 61 74 69 6f 6e 2e 4e 6f 43 6f 6d 70 61 63 74  ration.NoCompact
20660 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
20670 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
20680 20 20 20 20 20 20 20 20 20 20 66 72 61 6d 65 77            framew
20690 6f 72 6b 4c 69 73 74 2e 4e 61 6d 65 73 2e 41 64  orkList.Names.Ad
206a0 64 28 22 2e 4e 45 54 43 6f 6d 70 61 63 74 46 72  d(".NETCompactFr
206b0 61 6d 65 77 6f 72 6b 22 29 3b 0d 0a 20 20 20 20  amework");..    
206c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
206d0 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 4e 61  frameworkList.Na
206e0 6d 65 73 2e 41 64 64 28 22 2e 4e 45 54 43 6f 6d  mes.Add(".NETCom
206f0 70 61 63 74 46 72 61 6d 65 77 6f 72 6b 22 29 3b  pactFramework");
20700 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
20710 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 4c        frameworkL
20720 69 73 74 2e 4e 61 6d 65 73 2e 41 64 64 28 22 2e  ist.Names.Add(".
20730 4e 45 54 43 6f 6d 70 61 63 74 46 72 61 6d 65 77  NETCompactFramew
20740 6f 72 6b 22 29 3b 0d 0a 20 20 20 20 20 20 20 20  ork");..        
20750 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
20760 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
20770 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
20780 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20790 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
207a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
207b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
207c0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 66             if (f
207d0 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 56 65 72  rameworkList.Ver
207e0 73 69 6f 6e 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  sions == null)..
207f0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
20800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66                 f
20810 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 56 65 72  rameworkList.Ver
20820 73 69 6f 6e 73 20 3d 20 6e 65 77 20 56 65 72 73  sions = new Vers
20830 69 6f 6e 4d 61 70 28 29 3b 0d 0a 0d 0a 20 20 20  ionMap();....   
20840 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
20850 28 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20  ((configuration 
20860 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20 21 63 6f 6e  == null) || !con
20870 66 69 67 75 72 61 74 69 6f 6e 2e 4e 6f 44 65 73  figuration.NoDes
20880 6b 74 6f 70 29 0d 0a 20 20 20 20 20 20 20 20 20  ktop)..         
20890 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
208a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 56 65                Ve
208b0 72 73 69 6f 6e 4c 69 73 74 20 64 65 73 6b 74 6f  rsionList deskto
208c0 70 56 65 72 73 69 6f 6e 4c 69 73 74 20 3d 20 6e  pVersionList = n
208d0 65 77 20 56 65 72 73 69 6f 6e 4c 69 73 74 28 29  ew VersionList()
208e0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
208f0 20 20 20 20 20 20 20 20 20 69 66 20 28 28 63 6f           if ((co
20900 6e 66 69 67 75 72 61 74 69 6f 6e 20 3d 3d 20 6e  nfiguration == n
20910 75 6c 6c 29 20 7c 7c 20 21 63 6f 6e 66 69 67 75  ull) || !configu
20920 72 61 74 69 6f 6e 2e 4e 6f 4e 65 74 46 78 32 30  ration.NoNetFx20
20930 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
20940 20 20 20 20 20 20 20 20 20 20 20 64 65 73 6b 74             deskt
20950 6f 70 56 65 72 73 69 6f 6e 4c 69 73 74 2e 41 64  opVersionList.Ad
20960 64 28 6e 65 77 20 56 65 72 73 69 6f 6e 28 32 2c  d(new Version(2,
20970 20 30 2c 20 35 30 37 32 37 29 29 3b 0d 0a 0d 0a   0, 50727));....
20980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20990 20 20 20 20 69 66 20 28 28 63 6f 6e 66 69 67 75      if ((configu
209a0 72 61 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 20  ration == null) 
209b0 7c 7c 20 21 63 6f 6e 66 69 67 75 72 61 74 69 6f  || !configuratio
209c0 6e 2e 4e 6f 4e 65 74 46 78 34 30 29 0d 0a 20 20  n.NoNetFx40)..  
209d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
209e0 20 20 20 20 20 20 64 65 73 6b 74 6f 70 56 65 72        desktopVer
209f0 73 69 6f 6e 4c 69 73 74 2e 41 64 64 28 6e 65 77  sionList.Add(new
20a00 20 56 65 72 73 69 6f 6e 28 34 2c 20 30 2c 20 33   Version(4, 0, 3
20a10 30 33 31 39 29 29 3b 0d 0a 0d 0a 20 20 20 20 20  0319));....     
20a20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66                 f
20a30 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 56 65 72  rameworkList.Ver
20a40 73 69 6f 6e 73 2e 41 64 64 28 22 2e 4e 45 54 46  sions.Add(".NETF
20a50 72 61 6d 65 77 6f 72 6b 22 2c 0d 0a 20 20 20 20  ramework",..    
20a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20a70 20 20 20 20 64 65 73 6b 74 6f 70 56 65 72 73 69      desktopVersi
20a80 6f 6e 4c 69 73 74 29 3b 0d 0a 20 20 20 20 20 20  onList);..      
20a90 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
20aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
20ab0 66 20 28 28 63 6f 6e 66 69 67 75 72 61 74 69 6f  f ((configuratio
20ac0 6e 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20 21 63  n == null) || !c
20ad0 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 4e 6f 43  onfiguration.NoC
20ae0 6f 6d 70 61 63 74 29 0d 0a 20 20 20 20 20 20 20  ompact)..       
20af0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
20b00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20b10 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 56 65  frameworkList.Ve
20b20 72 73 69 6f 6e 73 2e 41 64 64 28 22 2e 4e 45 54  rsions.Add(".NET
20b30 43 6f 6d 70 61 63 74 46 72 61 6d 65 77 6f 72 6b  CompactFramework
20b40 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
20b50 20 20 20 20 20 20 20 20 20 20 20 20 6e 65 77 20              new 
20b60 56 65 72 73 69 6f 6e 4c 69 73 74 28 6e 65 77 20  VersionList(new 
20b70 56 65 72 73 69 6f 6e 5b 5d 20 7b 0d 0a 20 20 20  Version[] {..   
20b80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20b90 20 20 20 20 20 6e 65 77 20 56 65 72 73 69 6f 6e       new Version
20ba0 28 32 2c 20 30 2c 20 30 2c 20 30 29 2c 20 6e 65  (2, 0, 0, 0), ne
20bb0 77 20 56 65 72 73 69 6f 6e 28 33 2c 20 35 2c 20  w Version(3, 5, 
20bc0 30 2c 20 30 29 0d 0a 20 20 20 20 20 20 20 20 20  0, 0)..         
20bd0 20 20 20 20 20 20 20 20 20 20 20 7d 29 29 3b 0d             }));.
20be0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
20bf0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
20c00 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
20c10 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
20c20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20c30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20c40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20c50 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
20c60 20 20 20 20 69 66 20 28 66 72 61 6d 65 77 6f 72      if (framewor
20c70 6b 4c 69 73 74 2e 50 6c 61 74 66 6f 72 6d 4e 61  kList.PlatformNa
20c80 6d 65 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  mes == null)..  
20c90 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
20ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 66 72 61               fra
20cb0 6d 65 77 6f 72 6b 4c 69 73 74 2e 50 6c 61 74 66  meworkList.Platf
20cc0 6f 72 6d 4e 61 6d 65 73 20 3d 20 6e 65 77 20 53  ormNames = new S
20cd0 74 72 69 6e 67 4c 69 73 74 28 29 3b 0d 0a 0d 0a  tringList();....
20ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20cf0 69 66 20 28 28 63 6f 6e 66 69 67 75 72 61 74 69  if ((configurati
20d00 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20 21  on == null) || !
20d10 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 4e 6f  configuration.No
20d20 44 65 73 6b 74 6f 70 29 0d 0a 20 20 20 20 20 20  Desktop)..      
20d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 72                fr
20d40 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 50 6c 61 74  ameworkList.Plat
20d50 66 6f 72 6d 4e 61 6d 65 73 2e 41 64 64 28 6e 75  formNames.Add(nu
20d60 6c 6c 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ll);....        
20d70 20 20 20 20 20 20 20 20 69 66 20 28 28 63 6f 6e          if ((con
20d80 66 69 67 75 72 61 74 69 6f 6e 20 3d 3d 20 6e 75  figuration == nu
20d90 6c 6c 29 20 7c 7c 20 21 63 6f 6e 66 69 67 75 72  ll) || !configur
20da0 61 74 69 6f 6e 2e 4e 6f 43 6f 6d 70 61 63 74 29  ation.NoCompact)
20db0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
20dc0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
20dd0 20 20 20 20 20 20 20 20 20 66 72 61 6d 65 77 6f           framewo
20de0 72 6b 4c 69 73 74 2e 50 6c 61 74 66 6f 72 6d 4e  rkList.PlatformN
20df0 61 6d 65 73 2e 41 64 64 28 22 50 6f 63 6b 65 74  ames.Add("Pocket
20e00 50 43 22 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  PC");..         
20e10 20 20 20 20 20 20 20 20 20 20 20 66 72 61 6d 65             frame
20e20 77 6f 72 6b 4c 69 73 74 2e 50 6c 61 74 66 6f 72  workList.Platfor
20e30 6d 4e 61 6d 65 73 2e 41 64 64 28 22 53 6d 61 72  mNames.Add("Smar
20e40 74 70 68 6f 6e 65 22 29 3b 0d 0a 20 20 20 20 20  tphone");..     
20e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66                 f
20e60 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 50 6c 61  rameworkList.Pla
20e70 74 66 6f 72 6d 4e 61 6d 65 73 2e 41 64 64 28 22  tformNames.Add("
20e80 57 69 6e 64 6f 77 73 43 45 22 29 3b 0d 0a 20 20  WindowsCE");..  
20e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
20ea0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
20eb0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
20ec0 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
20ed0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20ee0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20ef0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20f00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
20f10 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
20f20 73 74 61 74 69 63 20 62 6f 6f 6c 20 48 61 76 65  static bool Have
20f30 46 72 61 6d 65 77 6f 72 6b 28 0d 0a 20 20 20 20  Framework(..    
20f40 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65 67 69          MockRegi
20f50 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79 2c  stryKey rootKey,
20f60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74  ..            st
20f70 72 69 6e 67 20 66 72 61 6d 65 77 6f 72 6b 4e 61  ring frameworkNa
20f80 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me,..           
20f90 20 56 65 72 73 69 6f 6e 20 66 72 61 6d 65 77 6f   Version framewo
20fa0 72 6b 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20  rkVersion,..    
20fb0 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 70          string p
20fc0 6c 61 74 66 6f 72 6d 4e 61 6d 65 2c 0d 0a 20 20  latformName,..  
20fd0 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77            bool w
20fe0 6f 77 36 34 2c 0d 0a 20 20 20 20 20 20 20 20 20  ow64,..         
20ff0 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d     bool whatIf,.
21000 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f  .            boo
21010 6c 20 76 65 72 62 6f 73 65 0d 0a 20 20 20 20 20  l verbose..     
21020 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
21030 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
21040 20 73 74 72 69 6e 67 20 6b 65 79 4e 61 6d 65 20   string keyName 
21050 3d 20 47 65 74 46 72 61 6d 65 77 6f 72 6b 4b 65  = GetFrameworkKe
21060 79 4e 61 6d 65 28 0d 0a 20 20 20 20 20 20 20 20  yName(..        
21070 20 20 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72          framewor
21080 6b 4e 61 6d 65 2c 20 66 72 61 6d 65 77 6f 72 6b  kName, framework
21090 56 65 72 73 69 6f 6e 2c 20 70 6c 61 74 66 6f 72  Version, platfor
210a0 6d 4e 61 6d 65 2c 20 77 6f 77 36 34 29 3b 0d 0a  mName, wow64);..
210b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 75 73  ..            us
210c0 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73 74 72  ing (MockRegistr
210d0 79 4b 65 79 20 6b 65 79 20 3d 20 52 65 67 69 73  yKey key = Regis
210e0 74 72 79 48 65 6c 70 65 72 2e 4f 70 65 6e 53 75  tryHelper.OpenSu
210f0 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20  bKey(..         
21100 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b             rootK
21110 65 79 2c 20 6b 65 79 4e 61 6d 65 2c 20 66 61 6c  ey, keyName, fal
21120 73 65 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62  se, whatIf, verb
21130 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ose))..         
21140 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
21150 20 20 20 20 20 20 69 66 20 28 6b 65 79 20 3d 3d        if (key ==
21160 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
21170 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
21180 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20  rn false;....   
21190 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
211a0 28 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 20 21 3d  (platformName !=
211b0 20 6e 75 6c 6c 29 20 2f 2f 20 4e 4f 54 45 3a 20   null) // NOTE: 
211c0 53 6b 69 70 20 6e 6f 6e 2d 64 65 73 6b 74 6f 70  Skip non-desktop
211d0 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
211e0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72         return tr
211f0 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ue;....         
21200 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 64 69         string di
21210 72 65 63 74 6f 72 79 20 3d 20 47 65 74 46 72 61  rectory = GetFra
21220 6d 65 77 6f 72 6b 44 69 72 65 63 74 6f 72 79 28  meworkDirectory(
21230 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
21240 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 66        rootKey, f
21250 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 2c  rameworkVersion,
21260 20 77 6f 77 36 34 2c 20 77 68 61 74 49 66 2c 20   wow64, whatIf, 
21270 76 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20  verbose);....   
21280 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
21290 28 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72  (String.IsNullOr
212a0 45 6d 70 74 79 28 64 69 72 65 63 74 6f 72 79 29  Empty(directory)
212b0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
212c0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
212d0 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  lse;....        
212e0 20 20 20 20 20 20 20 20 69 66 20 28 21 44 69 72          if (!Dir
212f0 65 63 74 6f 72 79 2e 45 78 69 73 74 73 28 64 69  ectory.Exists(di
21300 72 65 63 74 6f 72 79 29 29 0d 0a 20 20 20 20 20  rectory))..     
21310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
21320 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a  eturn false;....
21330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21340 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20  return true;..  
21350 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
21360 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
21370 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
21380 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21390 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
213a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
213b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
213c0 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61       private sta
213d0 74 69 63 20 62 6f 6f 6c 20 46 6f 72 45 61 63 68  tic bool ForEach
213e0 46 72 61 6d 65 77 6f 72 6b 43 6f 6e 66 69 67 28  FrameworkConfig(
213f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 4d 6f  ..            Mo
21400 63 6b 52 65 67 69 73 74 72 79 20 72 65 67 69 73  ckRegistry regis
21410 74 72 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  try,..          
21420 20 20 46 72 61 6d 65 77 6f 72 6b 4c 69 73 74 20    FrameworkList 
21430 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2c 0d 0a  frameworkList,..
21440 20 20 20 20 20 20 20 20 20 20 20 20 46 72 61 6d              Fram
21450 65 77 6f 72 6b 43 6f 6e 66 69 67 43 61 6c 6c 62  eworkConfigCallb
21460 61 63 6b 20 63 61 6c 6c 62 61 63 6b 2c 0d 0a 20  ack callback,.. 
21470 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
21480 67 20 69 6e 76 61 72 69 61 6e 74 2c 0d 0a 20 20  g invariant,..  
21490 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
214a0 20 6e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20   name,..        
214b0 20 20 20 20 73 74 72 69 6e 67 20 64 65 73 63 72      string descr
214c0 69 70 74 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20  iption,..       
214d0 20 20 20 20 20 73 74 72 69 6e 67 20 74 79 70 65       string type
214e0 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  Name,..         
214f0 20 20 20 41 73 73 65 6d 62 6c 79 4e 61 6d 65 20     AssemblyName 
21500 61 73 73 65 6d 62 6c 79 4e 61 6d 65 2c 0d 0a 20  assemblyName,.. 
21510 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63             objec
21520 74 20 63 6c 69 65 6e 74 44 61 74 61 2c 0d 0a 20  t clientData,.. 
21530 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
21540 77 6f 77 36 34 2c 0d 0a 20 20 20 20 20 20 20 20  wow64,..        
21550 20 20 20 20 62 6f 6f 6c 20 74 68 72 6f 77 4f 6e      bool throwOn
21560 4d 69 73 73 69 6e 67 2c 0d 0a 20 20 20 20 20 20  Missing,..      
21570 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49        bool whatI
21580 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  f,..            
21590 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 0d 0a 20  bool verbose,.. 
215a0 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20 62             ref b
215b0 6f 6f 6c 20 73 61 76 65 64 2c 0d 0a 20 20 20 20  ool saved,..    
215c0 20 20 20 20 20 20 20 20 72 65 66 20 73 74 72 69          ref stri
215d0 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20 20 20 20  ng error..      
215e0 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
215f0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
21600 69 66 20 28 72 65 67 69 73 74 72 79 20 3d 3d 20  if (registry == 
21610 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
21620 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
21630 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 69        error = "i
21640 6e 76 61 6c 69 64 20 72 65 67 69 73 74 72 79 22  nvalid registry"
21650 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
21660 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
21670 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
21680 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
21690 66 20 28 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74  f (frameworkList
216a0 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
216b0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
216c0 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20            error 
216d0 3d 20 22 69 6e 76 61 6c 69 64 20 66 72 61 6d 65  = "invalid frame
216e0 77 6f 72 6b 20 6c 69 73 74 22 3b 0d 0a 20 20 20  work list";..   
216f0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
21700 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20  urn false;..    
21710 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
21720 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65 67           MockReg
21730 69 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79  istryKey rootKey
21740 20 3d 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74   = frameworkList
21750 2e 52 6f 6f 74 4b 65 79 3b 0d 0a 0d 0a 20 20 20  .RootKey;....   
21760 20 20 20 20 20 20 20 20 20 69 66 20 28 72 6f 6f           if (roo
21770 74 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  tKey == null).. 
21780 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
21790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72                er
217a0 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64 20 72  ror = "invalid r
217b0 6f 6f 74 20 6b 65 79 22 3b 0d 0a 20 20 20 20 20  oot key";..     
217c0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
217d0 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  n false;..      
217e0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
217f0 20 20 20 20 20 20 20 69 66 20 28 21 4f 62 6a 65         if (!Obje
21800 63 74 2e 52 65 66 65 72 65 6e 63 65 45 71 75 61  ct.ReferenceEqua
21810 6c 73 28 72 6f 6f 74 4b 65 79 2c 20 72 65 67 69  ls(rootKey, regi
21820 73 74 72 79 2e 43 75 72 72 65 6e 74 55 73 65 72  stry.CurrentUser
21830 29 20 26 26 0d 0a 20 20 20 20 20 20 20 20 20 20  ) &&..          
21840 20 20 20 20 20 20 21 4f 62 6a 65 63 74 2e 52 65        !Object.Re
21850 66 65 72 65 6e 63 65 45 71 75 61 6c 73 28 72 6f  ferenceEquals(ro
21860 6f 74 4b 65 79 2c 20 72 65 67 69 73 74 72 79 2e  otKey, registry.
21870 4c 6f 63 61 6c 4d 61 63 68 69 6e 65 29 29 0d 0a  LocalMachine))..
21880 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
21890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
218a0 72 72 6f 72 20 3d 20 22 72 6f 6f 74 20 6b 65 79  rror = "root key
218b0 20 6d 75 73 74 20 62 65 20 70 65 72 2d 75 73 65   must be per-use
218c0 72 20 6f 72 20 70 65 72 2d 6d 61 63 68 69 6e 65  r or per-machine
218d0 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ";..            
218e0 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
218f0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
21900 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
21910 69 66 20 28 66 72 61 6d 65 77 6f 72 6b 4c 69 73  if (frameworkLis
21920 74 2e 4e 61 6d 65 73 20 3d 3d 20 6e 75 6c 6c 29  t.Names == null)
21930 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
21940 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
21950 20 65 72 72 6f 72 20 3d 20 22 6e 6f 20 66 72 61   error = "no fra
21960 6d 65 77 6f 72 6b 20 6e 61 6d 65 73 20 66 6f 75  mework names fou
21970 6e 64 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  nd";..          
21980 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
21990 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se;..           
219a0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
219b0 20 20 69 66 20 28 66 72 61 6d 65 77 6f 72 6b 4c    if (frameworkL
219c0 69 73 74 2e 56 65 72 73 69 6f 6e 73 20 3d 3d 20  ist.Versions == 
219d0 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
219e0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
219f0 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 6e        error = "n
21a00 6f 20 66 72 61 6d 65 77 6f 72 6b 20 76 65 72 73  o framework vers
21a10 69 6f 6e 73 20 66 6f 75 6e 64 22 3b 0d 0a 20 20  ions found";..  
21a20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
21a30 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20  turn false;..   
21a40 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
21a50 20 20 20 20 20 20 20 20 20 20 69 66 20 28 66 72            if (fr
21a60 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 50 6c 61 74  ameworkList.Plat
21a70 66 6f 72 6d 4e 61 6d 65 73 20 3d 3d 20 6e 75 6c  formNames == nul
21a80 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
21a90 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
21aa0 20 20 20 65 72 72 6f 72 20 3d 20 22 6e 6f 20 70     error = "no p
21ab0 6c 61 74 66 6f 72 6d 20 6e 61 6d 65 73 20 66 6f  latform names fo
21ac0 75 6e 64 22 3b 0d 0a 20 20 20 20 20 20 20 20 20  und";..         
21ad0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
21ae0 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lse;..          
21af0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
21b00 20 20 20 69 66 20 28 66 72 61 6d 65 77 6f 72 6b     if (framework
21b10 4c 69 73 74 2e 4e 61 6d 65 73 2e 43 6f 75 6e 74  List.Names.Count
21b20 20 21 3d 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73   != frameworkLis
21b30 74 2e 50 6c 61 74 66 6f 72 6d 4e 61 6d 65 73 2e  t.PlatformNames.
21b40 43 6f 75 6e 74 29 0d 0a 20 20 20 20 20 20 20 20  Count)..        
21b50 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
21b60 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 53         error = S
21b70 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 22 66 72  tring.Format("fr
21b80 61 6d 65 77 6f 72 6b 20 6e 61 6d 65 20 63 6f 75  amework name cou
21b90 6e 74 20 7b 30 7d 20 64 6f 65 73 20 6e 6f 74 20  nt {0} does not 
21ba0 22 20 2b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  " +..           
21bb0 20 20 20 20 20 20 20 20 20 22 6d 61 74 63 68 20           "match 
21bc0 70 6c 61 74 66 6f 72 6d 20 6e 61 6d 65 20 63 6f  platform name co
21bd0 75 6e 74 20 7b 31 7d 22 2c 20 66 72 61 6d 65 77  unt {1}", framew
21be0 6f 72 6b 4c 69 73 74 2e 4e 61 6d 65 73 2e 43 6f  orkList.Names.Co
21bf0 75 6e 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  unt,..          
21c00 20 20 20 20 20 20 20 20 20 20 66 72 61 6d 65 77            framew
21c10 6f 72 6b 4c 69 73 74 2e 50 6c 61 74 66 6f 72 6d  orkList.Platform
21c20 4e 61 6d 65 73 2e 43 6f 75 6e 74 29 3b 0d 0a 0d  Names.Count);...
21c30 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
21c40 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
21c50 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
21c60 0a 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72  .            for
21c70 20 28 69 6e 74 20 69 6e 64 65 78 20 3d 20 30 3b   (int index = 0;
21c80 20 69 6e 64 65 78 20 3c 20 66 72 61 6d 65 77 6f   index < framewo
21c90 72 6b 4c 69 73 74 2e 4e 61 6d 65 73 2e 43 6f 75  rkList.Names.Cou
21ca0 6e 74 3b 20 69 6e 64 65 78 2b 2b 29 0d 0a 20 20  nt; index++)..  
21cb0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
21cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
21cd0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
21ce0 20 2f 2f 20 4e 4f 54 45 3a 20 47 72 61 62 20 74   // NOTE: Grab t
21cf0 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 66  he name of the f
21d00 72 61 6d 65 77 6f 72 6b 20 28 65 2e 67 2e 20 22  ramework (e.g. "
21d10 2e 4e 45 54 46 72 61 6d 65 77 6f 72 6b 22 29 0d  .NETFramework").
21d20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
21d30 20 2f 2f 20 20 20 20 20 20 20 61 6e 64 20 74 68   //       and th
21d40 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 70 6c  e name of the pl
21d50 61 74 66 6f 72 6d 20 28 65 2e 67 2e 20 22 57 69  atform (e.g. "Wi
21d60 6e 64 6f 77 73 43 45 22 29 2e 0d 0a 20 20 20 20  ndowsCE")...    
21d70 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
21d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21d90 73 74 72 69 6e 67 20 66 72 61 6d 65 77 6f 72 6b  string framework
21da0 4e 61 6d 65 20 3d 20 66 72 61 6d 65 77 6f 72 6b  Name = framework
21db0 4c 69 73 74 2e 4e 61 6d 65 73 5b 69 6e 64 65 78  List.Names[index
21dc0 5d 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ];..            
21dd0 20 20 20 20 73 74 72 69 6e 67 20 70 6c 61 74 66      string platf
21de0 6f 72 6d 4e 61 6d 65 20 3d 20 66 72 61 6d 65 77  ormName = framew
21df0 6f 72 6b 4c 69 73 74 2e 50 6c 61 74 66 6f 72 6d  orkList.Platform
21e00 4e 61 6d 65 73 5b 69 6e 64 65 78 5d 3b 0d 0a 0d  Names[index];...
21e10 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
21e20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
21e30 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 53 6b       // NOTE: Sk
21e40 69 70 20 61 6c 6c 20 6e 6f 6e 2d 64 65 73 6b 74  ip all non-deskt
21e50 6f 70 20 66 72 61 6d 65 77 6f 72 6b 73 20 28 69  op frameworks (i
21e60 2e 65 2e 20 69 66 20 74 68 65 20 70 6c 61 74 66  .e. if the platf
21e70 6f 72 6d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  orm..           
21e80 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 6e 61       //       na
21e90 6d 65 20 69 73 20 6e 6f 74 20 6e 75 6c 6c 29 2e  me is not null).
21ea0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
21eb0 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
21ec0 20 20 20 20 20 20 69 66 20 28 70 6c 61 74 66 6f        if (platfo
21ed0 72 6d 4e 61 6d 65 20 21 3d 20 6e 75 6c 6c 29 0d  rmName != null).
21ee0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
21ef0 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a       continue;..
21f00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
21f10 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
21f20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 47        // NOTE: G
21f30 72 61 62 20 74 68 65 20 73 75 70 70 6f 72 74 65  rab the supporte
21f40 64 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 74 68  d versions of th
21f50 69 73 20 70 61 72 74 69 63 75 6c 61 72 0d 0a 20  is particular.. 
21f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
21f70 2f 20 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72  /       framewor
21f80 6b 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  k...            
21f90 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
21fa0 20 20 20 20 20 20 20 20 56 65 72 73 69 6f 6e 4c          VersionL
21fb0 69 73 74 20 66 72 61 6d 65 77 6f 72 6b 56 65 72  ist frameworkVer
21fc0 73 69 6f 6e 4c 69 73 74 3b 0d 0a 0d 0a 20 20 20  sionList;....   
21fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
21fe0 28 21 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e  (!frameworkList.
21ff0 56 65 72 73 69 6f 6e 73 2e 54 72 79 47 65 74 56  Versions.TryGetV
22000 61 6c 75 65 28 0d 0a 20 20 20 20 20 20 20 20 20  alue(..         
22010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66                 f
22020 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c 20 6f 75  rameworkName, ou
22030 74 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69  t frameworkVersi
22040 6f 6e 4c 69 73 74 29 20 7c 7c 0d 0a 20 20 20 20  onList) ||..    
22050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22060 28 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f  (frameworkVersio
22070 6e 4c 69 73 74 20 3d 3d 20 6e 75 6c 6c 29 29 0d  nList == null)).
22080 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
22090 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
220a0 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65          continue
220b0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
220c0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
220d0 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20          foreach 
220e0 28 56 65 72 73 69 6f 6e 20 66 72 61 6d 65 77 6f  (Version framewo
220f0 72 6b 56 65 72 73 69 6f 6e 20 69 6e 20 66 72 61  rkVersion in fra
22100 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 4c 69 73  meworkVersionLis
22110 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t)..            
22120 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
22130 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
22140 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63  Ops.DebugAndTrac
22150 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e  e(TracePriority.
22160 4c 6f 77 65 72 2c 0d 0a 20 20 20 20 20 20 20 20  Lower,..        
22170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22180 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74  debugCallback, t
22190 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74  raceCallback, St
221a0 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
221b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
221c0 20 20 20 20 20 20 22 66 72 61 6d 65 77 6f 72 6b        "framework
221d0 4e 61 6d 65 20 3d 20 7b 30 7d 2c 20 66 72 61 6d  Name = {0}, fram
221e0 65 77 6f 72 6b 56 65 72 73 69 6f 6e 20 3d 20 7b  eworkVersion = {
221f0 31 7d 2c 20 22 20 2b 0d 0a 20 20 20 20 20 20 20  1}, " +..       
22200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22210 20 22 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 20 3d   "platformName =
22220 20 7b 32 7d 22 2c 20 46 6f 72 44 69 73 70 6c 61   {2}", ForDispla
22230 79 28 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 29  y(frameworkName)
22240 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
22250 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69             ForDi
22260 73 70 6c 61 79 28 66 72 61 6d 65 77 6f 72 6b 56  splay(frameworkV
22270 65 72 73 69 6f 6e 29 2c 0d 0a 20 20 20 20 20 20  ersion),..      
22280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22290 20 20 46 6f 72 44 69 73 70 6c 61 79 28 70 6c 61    ForDisplay(pla
222a0 74 66 6f 72 6d 4e 61 6d 65 29 29 2c 20 74 72 61  tformName)), tra
222b0 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
222c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
222d0 20 20 20 20 69 66 20 28 21 48 61 76 65 46 72 61      if (!HaveFra
222e0 6d 65 77 6f 72 6b 28 0d 0a 20 20 20 20 20 20 20  mework(..       
222f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22300 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 66 72       rootKey, fr
22310 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c 20 66 72 61  ameworkName, fra
22320 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 2c 0d 0a  meworkVersion,..
22330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22340 20 20 20 20 20 20 20 20 20 20 20 20 70 6c 61 74              plat
22350 66 6f 72 6d 4e 61 6d 65 2c 20 77 6f 77 36 34 2c  formName, wow64,
22360 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65   whatIf, verbose
22370 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
22380 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
22390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
223a0 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75     TraceOps.Debu
223b0 67 41 6e 64 54 72 61 63 65 28 54 72 61 63 65 50  gAndTrace(TraceP
223c0 72 69 6f 72 69 74 79 2e 4c 6f 77 2c 0d 0a 20 20  riority.Low,..  
223d0 20 20 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 64 65 62 75 67 43            debugC
223f0 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61  allback, traceCa
22400 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20  llback,..       
22410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22420 20 20 20 20 20 22 2e 4e 45 54 20 46 72 61 6d 65       ".NET Frame
22430 77 6f 72 6b 20 6e 6f 74 20 66 6f 75 6e 64 2c 20  work not found, 
22440 73 6b 69 70 70 69 6e 67 2e 2e 2e 22 2c 0d 0a 20  skipping...",.. 
22450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22460 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
22470 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
22480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22490 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d        continue;.
224a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
224b0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
224c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
224d0 20 28 63 61 6c 6c 62 61 63 6b 20 3d 3d 20 6e 75   (callback == nu
224e0 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
224f0 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
22500 74 69 6e 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  tinue;....      
22510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
22520 72 69 6e 67 20 64 69 72 65 63 74 6f 72 79 20 3d  ring directory =
22530 20 47 65 74 46 72 61 6d 65 77 6f 72 6b 44 69 72   GetFrameworkDir
22540 65 63 74 6f 72 79 28 0d 0a 20 20 20 20 20 20 20  ectory(..       
22550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22560 20 72 6f 6f 74 4b 65 79 2c 20 66 72 61 6d 65 77   rootKey, framew
22570 6f 72 6b 56 65 72 73 69 6f 6e 2c 20 77 6f 77 36  orkVersion, wow6
22580 34 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f  4, whatIf, verbo
22590 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  se);....        
225a0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
225b0 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45  String.IsNullOrE
225c0 6d 70 74 79 28 64 69 72 65 63 74 6f 72 79 29 29  mpty(directory))
225d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
225e0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
225f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22600 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41   TraceOps.DebugA
22610 6e 64 54 72 61 63 65 28 54 72 61 63 65 50 72 69  ndTrace(TracePri
22620 6f 72 69 74 79 2e 4c 6f 77 2c 0d 0a 20 20 20 20  ority.Low,..    
22630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22640 20 20 20 20 20 20 20 20 64 65 62 75 67 43 61 6c          debugCal
22650 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c  lback, traceCall
22660 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72  back, String.For
22670 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
22680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22690 20 20 22 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72    ".NET Framewor
226a0 6b 20 7b 30 7d 20 64 69 72 65 63 74 6f 72 79 20  k {0} directory 
226b0 69 73 20 69 6e 76 61 6c 69 64 2c 20 22 20 2b 0d  is invalid, " +.
226c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
226d0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 73 6b               "sk
226e0 69 70 70 69 6e 67 2e 2e 2e 22 2c 20 46 6f 72 44  ipping...", ForD
226f0 69 73 70 6c 61 79 28 66 72 61 6d 65 77 6f 72 6b  isplay(framework
22700 56 65 72 73 69 6f 6e 29 29 2c 0d 0a 20 20 20 20  Version)),..    
22710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22720 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74          traceCat
22730 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  egory);....     
22740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22750 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20     continue;..  
22760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22770 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
22780 20 20 20 20 20 20 20 20 20 20 20 64 69 72 65 63             direc
22790 74 6f 72 79 20 3d 20 50 61 74 68 2e 43 6f 6d 62  tory = Path.Comb
227a0 69 6e 65 28 64 69 72 65 63 74 6f 72 79 2c 20 22  ine(directory, "
227b0 43 6f 6e 66 69 67 22 29 3b 0d 0a 0d 0a 20 20 20  Config");....   
227c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
227d0 20 69 66 20 28 21 44 69 72 65 63 74 6f 72 79 2e   if (!Directory.
227e0 45 78 69 73 74 73 28 64 69 72 65 63 74 6f 72 79  Exists(directory
227f0 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
22800 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
22810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22820 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75     TraceOps.Debu
22830 67 41 6e 64 54 72 61 63 65 28 54 72 61 63 65 50  gAndTrace(TraceP
22840 72 69 6f 72 69 74 79 2e 4c 6f 77 2c 0d 0a 20 20  riority.Low,..  
22850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22860 20 20 20 20 20 20 20 20 20 20 64 65 62 75 67 43            debugC
22870 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61  allback, traceCa
22880 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46  llback, String.F
22890 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
228a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
228b0 20 20 20 20 22 2e 4e 45 54 20 46 72 61 6d 65 77      ".NET Framew
228c0 6f 72 6b 20 7b 30 7d 20 64 69 72 65 63 74 6f 72  ork {0} director
228d0 79 20 7b 31 7d 20 64 6f 65 73 20 6e 6f 74 20 22  y {1} does not "
228e0 20 2b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   +..            
228f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22900 22 65 78 69 73 74 2c 20 73 6b 69 70 70 69 6e 67  "exist, skipping
22910 2e 2e 2e 22 2c 20 46 6f 72 44 69 73 70 6c 61 79  ...", ForDisplay
22920 28 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f  (frameworkVersio
22930 6e 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n),..           
22940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22950 20 46 6f 72 44 69 73 70 6c 61 79 28 64 69 72 65   ForDisplay(dire
22960 63 74 6f 72 79 29 29 2c 20 74 72 61 63 65 43 61  ctory)), traceCa
22970 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
22980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22990 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20      continue;.. 
229a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
229b0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
229c0 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
229d0 6e 67 20 66 69 6c 65 4e 61 6d 65 20 3d 20 50 61  ng fileName = Pa
229e0 74 68 2e 43 6f 6d 62 69 6e 65 28 64 69 72 65 63  th.Combine(direc
229f0 74 6f 72 79 2c 20 22 6d 61 63 68 69 6e 65 2e 63  tory, "machine.c
22a00 6f 6e 66 69 67 22 29 3b 0d 0a 0d 0a 20 20 20 20  onfig");....    
22a10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22a20 69 66 20 28 21 46 69 6c 65 2e 45 78 69 73 74 73  if (!File.Exists
22a30 28 66 69 6c 65 4e 61 6d 65 29 29 0d 0a 20 20 20  (fileName))..   
22a40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22a50 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
22a60 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
22a70 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61  eOps.DebugAndTra
22a80 63 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 79  ce(TracePriority
22a90 2e 4c 6f 77 2c 0d 0a 20 20 20 20 20 20 20 20 20  .Low,..         
22aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22ab0 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b     debugCallback
22ac0 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c  , traceCallback,
22ad0 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d   String.Format(.
22ae0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
22af0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2e 4e               ".N
22b00 45 54 20 46 72 61 6d 65 77 6f 72 6b 20 7b 30 7d  ET Framework {0}
22b10 20 66 69 6c 65 20 7b 31 7d 20 64 6f 65 73 20 6e   file {1} does n
22b20 6f 74 20 65 78 69 73 74 2c 20 22 20 2b 0d 0a 20  ot exist, " +.. 
22b30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22b40 20 20 20 20 20 20 20 20 20 20 20 22 73 6b 69 70             "skip
22b50 70 69 6e 67 2e 2e 2e 22 2c 20 46 6f 72 44 69 73  ping...", ForDis
22b60 70 6c 61 79 28 66 72 61 6d 65 77 6f 72 6b 56 65  play(frameworkVe
22b70 72 73 69 6f 6e 29 2c 0d 0a 20 20 20 20 20 20 20  rsion),..       
22b80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22b90 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28       ForDisplay(
22ba0 66 69 6c 65 4e 61 6d 65 29 29 2c 20 74 72 61 63  fileName)), trac
22bb0 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
22bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22bd0 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b         continue;
22be0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
22bf0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
22c00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62                 b
22c10 6f 6f 6c 20 6c 6f 63 61 6c 53 61 76 65 64 20 3d  ool localSaved =
22c20 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20   false;....     
22c30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
22c40 66 20 28 21 63 61 6c 6c 62 61 63 6b 28 0d 0a 20  f (!callback(.. 
22c50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22c60 20 20 20 20 20 20 20 20 20 20 20 66 69 6c 65 4e             fileN
22c70 61 6d 65 2c 20 69 6e 76 61 72 69 61 6e 74 2c 20  ame, invariant, 
22c80 6e 61 6d 65 2c 20 64 65 73 63 72 69 70 74 69 6f  name, descriptio
22c90 6e 2c 20 74 79 70 65 4e 61 6d 65 2c 0d 0a 20 20  n, typeName,..  
22ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22cb0 20 20 20 20 20 20 20 20 20 20 61 73 73 65 6d 62            assemb
22cc0 6c 79 4e 61 6d 65 2c 20 63 6c 69 65 6e 74 44 61  lyName, clientDa
22cd0 74 61 2c 20 77 6f 77 36 34 2c 20 74 68 72 6f 77  ta, wow64, throw
22ce0 4f 6e 4d 69 73 73 69 6e 67 2c 0d 0a 20 20 20 20  OnMissing,..    
22cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22d00 20 20 20 20 20 20 20 20 77 68 61 74 49 66 2c 20          whatIf, 
22d10 76 65 72 62 6f 73 65 2c 20 72 65 66 20 6c 6f 63  verbose, ref loc
22d20 61 6c 53 61 76 65 64 2c 20 72 65 66 20 65 72 72  alSaved, ref err
22d30 6f 72 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  or))..          
22d40 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
22d50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22d60 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
22d70 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
22d80 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
22d90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
22da0 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  lse..           
22db0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
22dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22dd0 20 20 20 20 69 66 20 28 6c 6f 63 61 6c 53 61 76      if (localSav
22de0 65 64 20 26 26 20 21 73 61 76 65 64 29 0d 0a 20  ed && !saved).. 
22df0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22e00 20 20 20 20 20 20 20 20 20 20 20 73 61 76 65 64             saved
22e10 20 3d 20 74 72 75 65 3b 0d 0a 0d 0a 20 20 20 20   = true;....    
22e20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22e30 20 20 20 20 69 66 20 28 76 65 72 62 6f 73 65 29      if (verbose)
22e40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
22e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
22e60 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54  aceOps.DebugAndT
22e70 72 61 63 65 28 54 72 61 63 65 50 72 69 6f 72 69  race(TracePriori
22e80 74 79 2e 4c 6f 77 65 73 74 2c 0d 0a 20 20 20 20  ty.Lowest,..    
22e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22ea0 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62 75              debu
22eb0 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65  gCallback, trace
22ec0 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67  Callback, String
22ed0 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  .Format(..      
22ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22ef0 20 20 20 20 20 20 20 20 20 20 22 6c 6f 63 61 6c            "local
22f00 53 61 76 65 64 20 3d 20 7b 30 7d 2c 20 73 61 76  Saved = {0}, sav
22f10 65 64 20 3d 20 7b 31 7d 22 2c 0d 0a 20 20 20 20  ed = {1}",..    
22f20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22f30 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44              ForD
22f40 69 73 70 6c 61 79 28 6c 6f 63 61 6c 53 61 76 65  isplay(localSave
22f50 64 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 73  d), ForDisplay(s
22f60 61 76 65 64 29 29 2c 0d 0a 20 20 20 20 20 20 20  aved)),..       
22f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22f80 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
22f90 74 65 67 6f 72 79 29 3b 0d 0a 20 20 20 20 20 20  tegory);..      
22fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
22fb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
22fc0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
22fd0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
22fe0 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20   return true;.. 
22ff0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
23000 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
23010 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23020 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23030 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23040 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
23050 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
23060 74 61 74 69 63 20 62 6f 6f 6c 20 46 6f 72 45 61  tatic bool ForEa
23070 63 68 46 72 61 6d 65 77 6f 72 6b 52 65 67 69 73  chFrameworkRegis
23080 74 72 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20  try(..          
23090 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 20 72    MockRegistry r
230a0 65 67 69 73 74 72 79 2c 0d 0a 20 20 20 20 20 20  egistry,..      
230b0 20 20 20 20 20 20 46 72 61 6d 65 77 6f 72 6b 4c        FrameworkL
230c0 69 73 74 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73  ist frameworkLis
230d0 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t,..            
230e0 46 72 61 6d 65 77 6f 72 6b 52 65 67 69 73 74 72  FrameworkRegistr
230f0 79 43 61 6c 6c 62 61 63 6b 20 63 61 6c 6c 62 61  yCallback callba
23100 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ck,..           
23110 20 6f 62 6a 65 63 74 20 63 6c 69 65 6e 74 44 61   object clientDa
23120 74 61 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ta,..           
23130 20 62 6f 6f 6c 20 77 6f 77 36 34 2c 0d 0a 20 20   bool wow64,..  
23140 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 74            bool t
23150 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 2c 0d 0a  hrowOnMissing,..
23160 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
23170 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20   whatIf,..      
23180 20 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f        bool verbo
23190 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se,..           
231a0 20 72 65 66 20 73 74 72 69 6e 67 20 65 72 72 6f   ref string erro
231b0 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29  r..            )
231c0 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
231d0 20 20 20 20 20 20 20 20 20 69 66 20 28 72 65 67           if (reg
231e0 69 73 74 72 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  istry == null)..
231f0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
23200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
23210 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64 20  rror = "invalid 
23220 72 65 67 69 73 74 72 79 22 3b 0d 0a 20 20 20 20  registry";..    
23230 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
23240 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20  rn false;..     
23250 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
23260 20 20 20 20 20 20 20 20 69 66 20 28 66 72 61 6d          if (fram
23270 65 77 6f 72 6b 4c 69 73 74 20 3d 3d 20 6e 75 6c  eworkList == nul
23280 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
23290 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
232a0 20 20 20 65 72 72 6f 72 20 3d 20 22 69 6e 76 61     error = "inva
232b0 6c 69 64 20 66 72 61 6d 65 77 6f 72 6b 20 6c 69  lid framework li
232c0 73 74 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  st";..          
232d0 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
232e0 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se;..           
232f0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
23300 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65    MockRegistryKe
23310 79 20 72 6f 6f 74 4b 65 79 20 3d 20 66 72 61 6d  y rootKey = fram
23320 65 77 6f 72 6b 4c 69 73 74 2e 52 6f 6f 74 4b 65  eworkList.RootKe
23330 79 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  y;....          
23340 20 20 69 66 20 28 72 6f 6f 74 4b 65 79 20 3d 3d    if (rootKey ==
23350 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
23360 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
23370 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22         error = "
23380 69 6e 76 61 6c 69 64 20 72 6f 6f 74 20 6b 65 79  invalid root key
23390 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ";..            
233a0 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
233b0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
233c0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
233d0 69 66 20 28 21 4f 62 6a 65 63 74 2e 52 65 66 65  if (!Object.Refe
233e0 72 65 6e 63 65 45 71 75 61 6c 73 28 72 6f 6f 74  renceEquals(root
233f0 4b 65 79 2c 20 72 65 67 69 73 74 72 79 2e 43 75  Key, registry.Cu
23400 72 72 65 6e 74 55 73 65 72 29 20 26 26 0d 0a 20  rrentUser) &&.. 
23410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 21                 !
23420 4f 62 6a 65 63 74 2e 52 65 66 65 72 65 6e 63 65  Object.Reference
23430 45 71 75 61 6c 73 28 72 6f 6f 74 4b 65 79 2c 20  Equals(rootKey, 
23440 72 65 67 69 73 74 72 79 2e 4c 6f 63 61 6c 4d 61  registry.LocalMa
23450 63 68 69 6e 65 29 29 0d 0a 20 20 20 20 20 20 20  chine))..       
23460 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
23470 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
23480 22 72 6f 6f 74 20 6b 65 79 20 6d 75 73 74 20 62  "root key must b
23490 65 20 70 65 72 2d 75 73 65 72 20 6f 72 20 70 65  e per-user or pe
234a0 72 2d 6d 61 63 68 69 6e 65 22 3b 0d 0a 20 20 20  r-machine";..   
234b0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
234c0 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20  urn false;..    
234d0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
234e0 20 20 20 20 20 20 20 20 20 69 66 20 28 66 72 61           if (fra
234f0 6d 65 77 6f 72 6b 4c 69 73 74 2e 4e 61 6d 65 73  meworkList.Names
23500 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
23510 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
23520 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20            error 
23530 3d 20 22 6e 6f 20 66 72 61 6d 65 77 6f 72 6b 20  = "no framework 
23540 6e 61 6d 65 73 20 66 6f 75 6e 64 22 3b 0d 0a 20  names found";.. 
23550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
23560 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20  eturn false;..  
23570 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
23580 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 66             if (f
23590 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 56 65 72  rameworkList.Ver
235a0 73 69 6f 6e 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  sions == null)..
235b0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
235c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
235d0 72 72 6f 72 20 3d 20 22 6e 6f 20 66 72 61 6d 65  rror = "no frame
235e0 77 6f 72 6b 20 76 65 72 73 69 6f 6e 73 20 66 6f  work versions fo
235f0 75 6e 64 22 3b 0d 0a 20 20 20 20 20 20 20 20 20  und";..         
23600 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
23610 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lse;..          
23620 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
23630 20 20 20 69 66 20 28 66 72 61 6d 65 77 6f 72 6b     if (framework
23640 4c 69 73 74 2e 50 6c 61 74 66 6f 72 6d 4e 61 6d  List.PlatformNam
23650 65 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  es == null)..   
23660 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
23670 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
23680 72 20 3d 20 22 6e 6f 20 70 6c 61 74 66 6f 72 6d  r = "no platform
23690 20 6e 61 6d 65 73 20 66 6f 75 6e 64 22 3b 0d 0a   names found";..
236a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
236b0 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20  return false;.. 
236c0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
236d0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
236e0 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 4e 61  frameworkList.Na
236f0 6d 65 73 2e 43 6f 75 6e 74 20 21 3d 20 66 72 61  mes.Count != fra
23700 6d 65 77 6f 72 6b 4c 69 73 74 2e 50 6c 61 74 66  meworkList.Platf
23710 6f 72 6d 4e 61 6d 65 73 2e 43 6f 75 6e 74 29 0d  ormNames.Count).
23720 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
23730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23740 65 72 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46  error = String.F
23750 6f 72 6d 61 74 28 22 66 72 61 6d 65 77 6f 72 6b  ormat("framework
23760 20 6e 61 6d 65 20 63 6f 75 6e 74 20 7b 30 7d 20   name count {0} 
23770 64 6f 65 73 20 6e 6f 74 20 22 20 2b 0d 0a 20 20  does not " +..  
23780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23790 20 20 22 6d 61 74 63 68 20 70 6c 61 74 66 6f 72    "match platfor
237a0 6d 20 6e 61 6d 65 20 63 6f 75 6e 74 20 7b 31 7d  m name count {1}
237b0 22 2c 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74  ", frameworkList
237c0 2e 4e 61 6d 65 73 2e 43 6f 75 6e 74 2c 0d 0a 20  .Names.Count,.. 
237d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
237e0 20 20 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74     frameworkList
237f0 2e 50 6c 61 74 66 6f 72 6d 4e 61 6d 65 73 2e 43  .PlatformNames.C
23800 6f 75 6e 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  ount);....      
23810 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
23820 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20   false;..       
23830 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
23840 20 20 20 20 20 20 66 6f 72 20 28 69 6e 74 20 69        for (int i
23850 6e 64 65 78 20 3d 20 30 3b 20 69 6e 64 65 78 20  ndex = 0; index 
23860 3c 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e  < frameworkList.
23870 4e 61 6d 65 73 2e 43 6f 75 6e 74 3b 20 69 6e 64  Names.Count; ind
23880 65 78 2b 2b 29 0d 0a 20 20 20 20 20 20 20 20 20  ex++)..         
23890 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
238a0 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
238b0 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54            // NOT
238c0 45 3a 20 47 72 61 62 20 74 68 65 20 6e 61 6d 65  E: Grab the name
238d0 20 6f 66 20 74 68 65 20 66 72 61 6d 65 77 6f 72   of the framewor
238e0 6b 20 28 65 2e 67 2e 20 22 2e 4e 45 54 46 72 61  k (e.g. ".NETFra
238f0 6d 65 77 6f 72 6b 22 29 0d 0a 20 20 20 20 20 20  mework")..      
23900 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
23910 20 20 20 61 6e 64 20 74 68 65 20 6e 61 6d 65 20     and the name 
23920 6f 66 20 74 68 65 20 70 6c 61 74 66 6f 72 6d 20  of the platform 
23930 28 65 2e 67 2e 20 22 57 69 6e 64 6f 77 73 43 45  (e.g. "WindowsCE
23940 22 29 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ")...           
23950 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
23960 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
23970 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 20 3d 20  frameworkName = 
23980 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 4e 61  frameworkList.Na
23990 6d 65 73 5b 69 6e 64 65 78 5d 3b 0d 0a 20 20 20  mes[index];..   
239a0 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72               str
239b0 69 6e 67 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65  ing platformName
239c0 20 3d 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74   = frameworkList
239d0 2e 50 6c 61 74 66 6f 72 6d 4e 61 6d 65 73 5b 69  .PlatformNames[i
239e0 6e 64 65 78 5d 3b 0d 0a 0d 0a 20 20 20 20 20 20  ndex];....      
239f0 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
23a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
23a10 20 4e 4f 54 45 3a 20 47 72 61 62 20 74 68 65 20   NOTE: Grab the 
23a20 73 75 70 70 6f 72 74 65 64 20 76 65 72 73 69 6f  supported versio
23a30 6e 73 20 6f 66 20 74 68 69 73 20 70 61 72 74 69  ns of this parti
23a40 63 75 6c 61 72 0d 0a 20 20 20 20 20 20 20 20 20  cular..         
23a50 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
23a60 66 72 61 6d 65 77 6f 72 6b 2e 0d 0a 20 20 20 20  framework...    
23a70 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
23a80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23a90 56 65 72 73 69 6f 6e 4c 69 73 74 20 66 72 61 6d  VersionList fram
23aa0 65 77 6f 72 6b 56 65 72 73 69 6f 6e 4c 69 73 74  eworkVersionList
23ab0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
23ac0 20 20 20 20 20 69 66 20 28 21 66 72 61 6d 65 77       if (!framew
23ad0 6f 72 6b 4c 69 73 74 2e 56 65 72 73 69 6f 6e 73  orkList.Versions
23ae0 2e 54 72 79 47 65 74 56 61 6c 75 65 28 0d 0a 20  .TryGetValue(.. 
23af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23b00 20 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b         framework
23b10 4e 61 6d 65 2c 20 6f 75 74 20 66 72 61 6d 65 77  Name, out framew
23b20 6f 72 6b 56 65 72 73 69 6f 6e 4c 69 73 74 29 20  orkVersionList) 
23b30 7c 7c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ||..            
23b40 20 20 20 20 20 20 20 20 28 66 72 61 6d 65 77 6f          (framewo
23b50 72 6b 56 65 72 73 69 6f 6e 4c 69 73 74 20 3d 3d  rkVersionList ==
23b60 20 6e 75 6c 6c 29 29 0d 0a 20 20 20 20 20 20 20   null))..       
23b70 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
23b80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23b90 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20  continue;..     
23ba0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
23bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23bc0 66 6f 72 65 61 63 68 20 28 56 65 72 73 69 6f 6e  foreach (Version
23bd0 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f   frameworkVersio
23be0 6e 20 69 6e 20 66 72 61 6d 65 77 6f 72 6b 56 65  n in frameworkVe
23bf0 72 73 69 6f 6e 4c 69 73 74 29 0d 0a 20 20 20 20  rsionList)..    
23c00 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
23c10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23c20 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75     TraceOps.Debu
23c30 67 41 6e 64 54 72 61 63 65 28 54 72 61 63 65 50  gAndTrace(TraceP
23c40 72 69 6f 72 69 74 79 2e 4c 6f 77 65 72 2c 0d 0a  riority.Lower,..
23c50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23c60 20 20 20 20 20 20 20 20 64 65 62 75 67 43 61 6c          debugCal
23c70 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c  lback, traceCall
23c80 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72  back, String.For
23c90 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
23ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 66                "f
23cb0 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 20 3d 20 7b  rameworkName = {
23cc0 30 7d 2c 20 66 72 61 6d 65 77 6f 72 6b 56 65 72  0}, frameworkVer
23cd0 73 69 6f 6e 20 3d 20 7b 31 7d 2c 20 22 20 2b 0d  sion = {1}, " +.
23ce0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
23cf0 20 20 20 20 20 20 20 20 20 22 70 6c 61 74 66 6f           "platfo
23d00 72 6d 4e 61 6d 65 20 3d 20 7b 32 7d 22 2c 20 46  rmName = {2}", F
23d10 6f 72 44 69 73 70 6c 61 79 28 66 72 61 6d 65 77  orDisplay(framew
23d20 6f 72 6b 4e 61 6d 65 29 2c 0d 0a 20 20 20 20 20  orkName),..     
23d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23d40 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 66 72     ForDisplay(fr
23d50 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 29 2c  ameworkVersion),
23d60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
23d70 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73            ForDis
23d80 70 6c 61 79 28 70 6c 61 74 66 6f 72 6d 4e 61 6d  play(platformNam
23d90 65 29 29 2c 20 74 72 61 63 65 43 61 74 65 67 6f  e)), traceCatego
23da0 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
23db0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
23dc0 21 48 61 76 65 46 72 61 6d 65 77 6f 72 6b 28 0d  !HaveFramework(.
23dd0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
23de0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f               roo
23df0 74 4b 65 79 2c 20 66 72 61 6d 65 77 6f 72 6b 4e  tKey, frameworkN
23e00 61 6d 65 2c 20 66 72 61 6d 65 77 6f 72 6b 56 65  ame, frameworkVe
23e10 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20  rsion,..        
23e20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23e30 20 20 20 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65      platformName
23e40 2c 20 77 6f 77 36 34 2c 20 77 68 61 74 49 66 2c  , wow64, whatIf,
23e50 20 76 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 20   verbose))..    
23e60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23e70 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
23e80 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
23e90 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63  Ops.DebugAndTrac
23ea0 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e  e(TracePriority.
23eb0 4c 6f 77 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  Low,..          
23ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23ed0 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c    debugCallback,
23ee0 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 0d   traceCallback,.
23ef0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
23f00 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2e 4e               ".N
23f10 45 54 20 46 72 61 6d 65 77 6f 72 6b 20 6e 6f 74  ET Framework not
23f20 20 66 6f 75 6e 64 2c 20 73 6b 69 70 70 69 6e 67   found, skipping
23f30 2e 2e 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  ...",..         
23f40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23f50 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
23f60 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
23f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
23f80 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20  ntinue;..       
23f90 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
23fa0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
23fb0 20 20 20 20 20 20 69 66 20 28 63 61 6c 6c 62 61        if (callba
23fc0 63 6b 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ck == null)..   
23fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23fe0 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a       continue;..
23ff0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
24000 20 20 20 20 20 20 69 66 20 28 21 63 61 6c 6c 62        if (!callb
24010 61 63 6b 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ack(..          
24020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24030 20 20 72 6f 6f 74 4b 65 79 2c 20 66 72 61 6d 65    rootKey, frame
24040 77 6f 72 6b 4e 61 6d 65 2c 20 66 72 61 6d 65 77  workName, framew
24050 6f 72 6b 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20  orkVersion,..   
24060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24070 20 20 20 20 20 20 20 20 20 70 6c 61 74 66 6f 72           platfor
24080 6d 4e 61 6d 65 2c 20 63 6c 69 65 6e 74 44 61 74  mName, clientDat
24090 61 2c 20 77 6f 77 36 34 2c 20 74 68 72 6f 77 4f  a, wow64, throwO
240a0 6e 4d 69 73 73 69 6e 67 2c 0d 0a 20 20 20 20 20  nMissing,..     
240b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
240c0 20 20 20 20 20 20 20 77 68 61 74 49 66 2c 20 76         whatIf, v
240d0 65 72 62 6f 73 65 2c 20 72 65 66 20 65 72 72 6f  erbose, ref erro
240e0 72 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  r))..           
240f0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
24100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24110 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
24120 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
24130 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
24140 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
24150 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
24160 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
24170 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20   true;..        
24180 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72  }..        #endr
24190 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20  egion....       
241a0 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
241b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
241c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
241d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
241e0 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
241f0 20 20 20 20 23 72 65 67 69 6f 6e 20 50 65 72 2d      #region Per-
24200 56 69 73 75 61 6c 20 53 74 75 64 69 6f 20 56 65  Visual Studio Ve
24210 72 73 69 6f 6e 20 48 61 6e 64 6c 69 6e 67 0d 0a  rsion Handling..
24220 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
24230 73 74 61 74 69 63 20 76 6f 69 64 20 49 6e 69 74  static void Init
24240 69 61 6c 69 7a 65 56 73 4c 69 73 74 28 0d 0a 20  ializeVsList(.. 
24250 20 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52             MockR
24260 65 67 69 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b  egistryKey rootK
24270 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ey,..           
24280 20 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 63   Configuration c
24290 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2c 0d 0a 20  onfiguration,.. 
242a0 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20 56             ref V
242b0 73 4c 69 73 74 20 76 73 4c 69 73 74 0d 0a 20 20  sList vsList..  
242c0 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
242d0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
242e0 20 20 20 20 69 66 20 28 76 73 4c 69 73 74 20 3d      if (vsList =
242f0 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
24300 20 20 20 20 20 20 20 20 20 76 73 4c 69 73 74 20           vsList 
24310 3d 20 6e 65 77 20 56 73 4c 69 73 74 28 29 3b 0d  = new VsList();.
24320 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
24330 66 20 28 76 73 4c 69 73 74 2e 52 6f 6f 74 4b 65  f (vsList.RootKe
24340 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  y == null)..    
24350 20 20 20 20 20 20 20 20 20 20 20 20 76 73 4c 69              vsLi
24360 73 74 2e 52 6f 6f 74 4b 65 79 20 3d 20 72 6f 6f  st.RootKey = roo
24370 74 4b 65 79 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  tKey;....       
24380 20 20 20 20 20 69 66 20 28 76 73 4c 69 73 74 2e       if (vsList.
24390 56 65 72 73 69 6f 6e 73 20 3d 3d 20 6e 75 6c 6c  Versions == null
243a0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
243b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
243c0 20 20 76 73 4c 69 73 74 2e 56 65 72 73 69 6f 6e    vsList.Version
243d0 73 20 3d 20 6e 65 77 20 56 65 72 73 69 6f 6e 4c  s = new VersionL
243e0 69 73 74 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  ist();....      
243f0 20 20 20 20 20 20 20 20 20 20 2f 2f 20 76 73 4c            // vsL
24400 69 73 74 2e 56 65 72 73 69 6f 6e 73 2e 41 64 64  ist.Versions.Add
24410 28 6e 65 77 20 56 65 72 73 69 6f 6e 28 38 2c 20  (new Version(8, 
24420 30 29 29 3b 20 2f 2f 20 56 69 73 75 61 6c 20 53  0)); // Visual S
24430 74 75 64 69 6f 20 32 30 30 35 0d 0a 0d 0a 20 20  tudio 2005....  
24440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
24450 20 28 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e   ((configuration
24460 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20 21 63 6f   == null) || !co
24470 6e 66 69 67 75 72 61 74 69 6f 6e 2e 4e 6f 56 73  nfiguration.NoVs
24480 32 30 30 38 29 0d 0a 20 20 20 20 20 20 20 20 20  2008)..         
24490 20 20 20 20 20 20 20 20 20 20 20 76 73 4c 69 73             vsLis
244a0 74 2e 56 65 72 73 69 6f 6e 73 2e 41 64 64 28 6e  t.Versions.Add(n
244b0 65 77 20 56 65 72 73 69 6f 6e 28 39 2c 20 30 29  ew Version(9, 0)
244c0 29 3b 20 2f 2f 20 56 69 73 75 61 6c 20 53 74 75  ); // Visual Stu
244d0 64 69 6f 20 32 30 30 38 0d 0a 0d 0a 20 20 20 20  dio 2008....    
244e0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
244f0 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 3d  (configuration =
24500 3d 20 6e 75 6c 6c 29 20 7c 7c 20 21 63 6f 6e 66  = null) || !conf
24510 69 67 75 72 61 74 69 6f 6e 2e 4e 6f 56 73 32 30  iguration.NoVs20
24520 31 30 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  10)..           
24530 20 20 20 20 20 20 20 20 20 76 73 4c 69 73 74 2e           vsList.
24540 56 65 72 73 69 6f 6e 73 2e 41 64 64 28 6e 65 77  Versions.Add(new
24550 20 56 65 72 73 69 6f 6e 28 31 30 2c 20 30 29 29   Version(10, 0))
24560 3b 2f 2f 20 56 69 73 75 61 6c 20 53 74 75 64 69  ;// Visual Studi
24570 6f 20 32 30 31 30 0d 0a 20 20 20 20 20 20 20 20  o 2010..        
24580 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d      }..        }
24590 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
245a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
245b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
245c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
245d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
245e0 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70  ///....        p
245f0 72 69 76 61 74 65 20 73 74 61 74 69 63 20 62 6f  rivate static bo
24600 6f 6c 20 48 61 76 65 56 73 56 65 72 73 69 6f 6e  ol HaveVsVersion
24610 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 4d  (..            M
24620 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 72  ockRegistryKey r
24630 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20  ootKey,..       
24640 20 20 20 20 20 56 65 72 73 69 6f 6e 20 76 73 56       Version vsV
24650 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20  ersion,..       
24660 20 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34 2c       bool wow64,
24670 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
24680 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20  ol whatIf,..    
24690 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65 72          bool ver
246a0 62 6f 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20  bose..          
246b0 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a    )..        {..
246c0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
246d0 76 73 56 65 72 73 69 6f 6e 20 3d 3d 20 6e 75 6c  vsVersion == nul
246e0 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
246f0 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
24700 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
24710 20 73 74 72 69 6e 67 20 6b 65 79 4e 61 6d 65 20   string keyName 
24720 3d 20 47 65 74 56 73 4b 65 79 4e 61 6d 65 28 76  = GetVsKeyName(v
24730 73 56 65 72 73 69 6f 6e 2c 20 77 6f 77 36 34 29  sVersion, wow64)
24740 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
24750 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69   using (MockRegi
24760 73 74 72 79 4b 65 79 20 6b 65 79 20 3d 20 52 65  stryKey key = Re
24770 67 69 73 74 72 79 48 65 6c 70 65 72 2e 4f 70 65  gistryHelper.Ope
24780 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20  nSubKey(..      
24790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f                ro
247a0 6f 74 4b 65 79 2c 20 6b 65 79 4e 61 6d 65 2c 20  otKey, keyName, 
247b0 66 61 6c 73 65 2c 20 77 68 61 74 49 66 2c 20 76  false, whatIf, v
247c0 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20 20  erbose))..      
247d0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
247e0 20 20 20 20 20 20 20 20 20 69 66 20 28 6b 65 79           if (key
247f0 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
24800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
24810 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a  eturn false;....
24820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24830 6f 62 6a 65 63 74 20 76 61 6c 75 65 20 3d 20 52  object value = R
24840 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 47 65  egistryHelper.Ge
24850 74 56 61 6c 75 65 28 0d 0a 20 20 20 20 20 20 20  tValue(..       
24860 20 20 20 20 20 20 20 20 20 20 20 20 20 6b 65 79               key
24870 2c 20 22 49 6e 73 74 61 6c 6c 44 69 72 22 2c 20  , "InstallDir", 
24880 6e 75 6c 6c 2c 20 77 68 61 74 49 66 2c 20 76 65  null, whatIf, ve
24890 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20  rbose);....     
248a0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21             if (!
248b0 28 76 61 6c 75 65 20 69 73 20 73 74 72 69 6e 67  (value is string
248c0 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
248d0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
248e0 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  alse;....       
248f0 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
24900 64 69 72 65 63 74 6f 72 79 20 3d 20 28 73 74 72  directory = (str
24910 69 6e 67 29 76 61 6c 75 65 3b 0d 0a 0d 0a 20 20  ing)value;....  
24920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
24930 20 28 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f   (String.IsNullO
24940 72 45 6d 70 74 79 28 64 69 72 65 63 74 6f 72 79  rEmpty(directory
24950 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
24960 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
24970 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  alse;....       
24980 20 20 20 20 20 20 20 20 20 69 66 20 28 21 44 69           if (!Di
24990 72 65 63 74 6f 72 79 2e 45 78 69 73 74 73 28 64  rectory.Exists(d
249a0 69 72 65 63 74 6f 72 79 29 29 0d 0a 20 20 20 20  irectory))..    
249b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
249c0 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d  return false;...
249d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
249e0 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20   return true;.. 
249f0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
24a00 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
24a10 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
24a20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24a30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24a40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24a50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
24a60 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74        private st
24a70 61 74 69 63 20 62 6f 6f 6c 20 46 6f 72 45 61 63  atic bool ForEac
24a80 68 56 73 56 65 72 73 69 6f 6e 52 65 67 69 73 74  hVsVersionRegist
24a90 72 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ry(..           
24aa0 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 20 72 65   MockRegistry re
24ab0 67 69 73 74 72 79 2c 0d 0a 20 20 20 20 20 20 20  gistry,..       
24ac0 20 20 20 20 20 56 73 4c 69 73 74 20 76 73 4c 69       VsList vsLi
24ad0 73 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  st,..           
24ae0 20 56 69 73 75 61 6c 53 74 75 64 69 6f 52 65 67   VisualStudioReg
24af0 69 73 74 72 79 43 61 6c 6c 62 61 63 6b 20 63 61  istryCallback ca
24b00 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20  llback,..       
24b10 20 20 20 20 20 50 61 63 6b 61 67 65 20 70 61 63       Package pac
24b20 6b 61 67 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  kage,..         
24b30 20 20 20 6f 62 6a 65 63 74 20 63 6c 69 65 6e 74     object client
24b40 44 61 74 61 2c 0d 0a 20 20 20 20 20 20 20 20 20  Data,..         
24b50 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34 2c 0d 0a     bool wow64,..
24b60 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
24b70 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 2c   throwOnMissing,
24b80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
24b90 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20  ol whatIf,..    
24ba0 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65 72          bool ver
24bb0 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  bose,..         
24bc0 20 20 20 72 65 66 20 73 74 72 69 6e 67 20 65 72     ref string er
24bd0 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ror..           
24be0 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20   )..        {.. 
24bf0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 72             if (r
24c00 65 67 69 73 74 72 79 20 3d 3d 20 6e 75 6c 6c 29  egistry == null)
24c10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
24c20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
24c30 20 65 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69   error = "invali
24c40 64 20 72 65 67 69 73 74 72 79 22 3b 0d 0a 20 20  d registry";..  
24c50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
24c60 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20  turn false;..   
24c70 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
24c80 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76 73            if (vs
24c90 4c 69 73 74 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  List == null).. 
24ca0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
24cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72                er
24cc0 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64 20 56  ror = "invalid V
24cd0 53 20 6c 69 73 74 22 3b 0d 0a 20 20 20 20 20 20  S list";..      
24ce0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
24cf0 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20   false;..       
24d00 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
24d10 20 20 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 74        MockRegist
24d20 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79 20 3d 20  ryKey rootKey = 
24d30 76 73 4c 69 73 74 2e 52 6f 6f 74 4b 65 79 3b 0d  vsList.RootKey;.
24d40 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
24d50 66 20 28 72 6f 6f 74 4b 65 79 20 3d 3d 20 6e 75  f (rootKey == nu
24d60 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
24d70 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
24d80 20 20 20 20 65 72 72 6f 72 20 3d 20 22 69 6e 76      error = "inv
24d90 61 6c 69 64 20 72 6f 6f 74 20 6b 65 79 22 3b 0d  alid root key";.
24da0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
24db0 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
24dc0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
24dd0 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
24de0 28 21 4f 62 6a 65 63 74 2e 52 65 66 65 72 65 6e  (!Object.Referen
24df0 63 65 45 71 75 61 6c 73 28 72 6f 6f 74 4b 65 79  ceEquals(rootKey
24e00 2c 20 72 65 67 69 73 74 72 79 2e 43 75 72 72 65  , registry.Curre
24e10 6e 74 55 73 65 72 29 20 26 26 0d 0a 20 20 20 20  ntUser) &&..    
24e20 20 20 20 20 20 20 20 20 20 20 20 20 21 4f 62 6a              !Obj
24e30 65 63 74 2e 52 65 66 65 72 65 6e 63 65 45 71 75  ect.ReferenceEqu
24e40 61 6c 73 28 72 6f 6f 74 4b 65 79 2c 20 72 65 67  als(rootKey, reg
24e50 69 73 74 72 79 2e 4c 6f 63 61 6c 4d 61 63 68 69  istry.LocalMachi
24e60 6e 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ne))..          
24e70 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
24e80 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 72 6f       error = "ro
24e90 6f 74 20 6b 65 79 20 6d 75 73 74 20 62 65 20 70  ot key must be p
24ea0 65 72 2d 75 73 65 72 20 6f 72 20 70 65 72 2d 6d  er-user or per-m
24eb0 61 63 68 69 6e 65 22 3b 0d 0a 20 20 20 20 20 20  achine";..      
24ec0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
24ed0 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20   false;..       
24ee0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
24ef0 20 20 20 20 20 20 69 66 20 28 76 73 4c 69 73 74        if (vsList
24f00 2e 56 65 72 73 69 6f 6e 73 20 3d 3d 20 6e 75 6c  .Versions == nul
24f10 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
24f20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
24f30 20 20 20 65 72 72 6f 72 20 3d 20 22 6e 6f 20 56     error = "no V
24f40 53 20 76 65 72 73 69 6f 6e 73 20 66 6f 75 6e 64  S versions found
24f50 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ";..            
24f60 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
24f70 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
24f80 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
24f90 66 6f 72 65 61 63 68 20 28 56 65 72 73 69 6f 6e  foreach (Version
24fa0 20 76 73 56 65 72 73 69 6f 6e 20 69 6e 20 76 73   vsVersion in vs
24fb0 4c 69 73 74 2e 56 65 72 73 69 6f 6e 73 29 0d 0a  List.Versions)..
24fc0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
24fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
24fe0 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64  raceOps.DebugAnd
24ff0 54 72 61 63 65 28 54 72 61 63 65 50 72 69 6f 72  Trace(TracePrior
25000 69 74 79 2e 4c 6f 77 65 72 2c 0d 0a 20 20 20 20  ity.Lower,..    
25010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25020 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74  debugCallback, t
25030 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74  raceCallback, St
25040 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
25050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25060 20 20 22 76 73 56 65 72 73 69 6f 6e 20 3d 20 7b    "vsVersion = {
25070 30 7d 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28  0}", ForDisplay(
25080 76 73 56 65 72 73 69 6f 6e 29 29 2c 0d 0a 20 20  vsVersion)),..  
25090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
250a0 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29    traceCategory)
250b0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
250c0 20 20 20 20 20 69 66 20 28 21 48 61 76 65 56 73       if (!HaveVs
250d0 56 65 72 73 69 6f 6e 28 72 6f 6f 74 4b 65 79 2c  Version(rootKey,
250e0 20 76 73 56 65 72 73 69 6f 6e 2c 20 77 6f 77 36   vsVersion, wow6
250f0 34 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f  4, whatIf, verbo
25100 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  se))..          
25110 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
25120 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61               Tra
25130 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72  ceOps.DebugAndTr
25140 61 63 65 28 54 72 61 63 65 50 72 69 6f 72 69 74  ace(TracePriorit
25150 79 2e 4c 6f 77 2c 0d 0a 20 20 20 20 20 20 20 20  y.Low,..        
25160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25170 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74  debugCallback, t
25180 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20  raceCallback,.. 
25190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
251a0 20 20 20 20 20 20 20 22 56 69 73 75 61 6c 20 53         "Visual S
251b0 74 75 64 69 6f 20 76 65 72 73 69 6f 6e 20 6e 6f  tudio version no
251c0 74 20 66 6f 75 6e 64 2c 20 73 6b 69 70 70 69 6e  t found, skippin
251d0 67 2e 2e 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20  g...",..        
251e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
251f0 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
25200 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
25210 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b         continue;
25220 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
25230 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
25240 20 20 20 20 20 20 20 69 66 20 28 63 61 6c 6c 62         if (callb
25250 61 63 6b 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  ack == null)..  
25260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25270 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 0d 0a 20    continue;.... 
25280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
25290 66 20 28 21 63 61 6c 6c 62 61 63 6b 28 0d 0a 20  f (!callback(.. 
252a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
252b0 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20         rootKey, 
252c0 76 73 56 65 72 73 69 6f 6e 2c 20 70 61 63 6b 61  vsVersion, packa
252d0 67 65 2c 20 63 6c 69 65 6e 74 44 61 74 61 2c 20  ge, clientData, 
252e0 77 6f 77 36 34 2c 0d 0a 20 20 20 20 20 20 20 20  wow64,..        
252f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25300 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 2c 20  throwOnMissing, 
25310 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 2c  whatIf, verbose,
25320 20 72 65 66 20 65 72 72 6f 72 29 29 0d 0a 20 20   ref error))..  
25330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
25340 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
25350 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
25360 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
25370 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
25380 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
25390 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b      return true;
253a0 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..   
253b0 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d       #endregion.
253c0 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
253d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
253e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
253f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25400 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25410 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72  //....        #r
25420 65 67 69 6f 6e 20 43 6f 6e 66 69 67 75 72 61 74  egion Configurat
25430 69 6f 6e 20 46 69 6c 65 20 48 61 6e 64 6c 69 6e  ion File Handlin
25440 67 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  g..        priva
25450 74 65 20 73 74 61 74 69 63 20 62 6f 6f 6c 20 41  te static bool A
25460 64 64 44 62 50 72 6f 76 69 64 65 72 46 61 63 74  ddDbProviderFact
25470 6f 72 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ory(..          
25480 20 20 73 74 72 69 6e 67 20 66 69 6c 65 4e 61 6d    string fileNam
25490 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
254a0 73 74 72 69 6e 67 20 69 6e 76 61 72 69 61 6e 74  string invariant
254b0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  ,..            s
254c0 74 72 69 6e 67 20 6e 61 6d 65 2c 0d 0a 20 20 20  tring name,..   
254d0 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
254e0 64 65 73 63 72 69 70 74 69 6f 6e 2c 0d 0a 20 20  description,..  
254f0 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
25500 20 74 79 70 65 4e 61 6d 65 2c 0d 0a 20 20 20 20   typeName,..    
25510 20 20 20 20 20 20 20 20 41 73 73 65 6d 62 6c 79          Assembly
25520 4e 61 6d 65 20 61 73 73 65 6d 62 6c 79 4e 61 6d  Name assemblyNam
25530 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
25540 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20  bool whatIf,..  
25550 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76            bool v
25560 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20  erbose,..       
25570 20 20 20 20 20 72 65 66 20 62 6f 6f 6c 20 73 61       ref bool sa
25580 76 65 64 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ved,..          
25590 20 20 72 65 66 20 73 74 72 69 6e 67 20 65 72 72    ref string err
255a0 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  or..            
255b0 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
255c0 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 64            bool d
255d0 69 72 74 79 20 3d 20 66 61 6c 73 65 3b 0d 0a 20  irty = false;.. 
255e0 20 20 20 20 20 20 20 20 20 20 20 58 6d 6c 44 6f             XmlDo
255f0 63 75 6d 65 6e 74 20 64 6f 63 75 6d 65 6e 74 20  cument document 
25600 3d 20 6e 65 77 20 58 6d 6c 44 6f 63 75 6d 65 6e  = new XmlDocumen
25610 74 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  t();....        
25620 20 20 20 20 64 6f 63 75 6d 65 6e 74 2e 50 72 65      document.Pre
25630 73 65 72 76 65 57 68 69 74 65 73 70 61 63 65 20  serveWhitespace 
25640 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20  = true;..       
25650 20 20 20 20 20 64 6f 63 75 6d 65 6e 74 2e 4c 6f       document.Lo
25660 61 64 28 66 69 6c 65 4e 61 6d 65 29 3b 0d 0a 0d  ad(fileName);...
25670 0a 20 20 20 20 20 20 20 20 20 20 20 20 58 6d 6c  .            Xml
25680 45 6c 65 6d 65 6e 74 20 65 6c 65 6d 65 6e 74 20  Element element 
25690 3d 20 64 6f 63 75 6d 65 6e 74 2e 53 65 6c 65 63  = document.Selec
256a0 74 53 69 6e 67 6c 65 4e 6f 64 65 28 53 74 72 69  tSingleNode(Stri
256b0 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ng.Format(..    
256c0 20 20 20 20 20 20 20 20 20 20 20 20 58 50 61 74              XPat
256d0 68 46 6f 72 41 64 64 45 6c 65 6d 65 6e 74 2c 20  hForAddElement, 
256e0 69 6e 76 61 72 69 61 6e 74 29 29 20 61 73 20 58  invariant)) as X
256f0 6d 6c 45 6c 65 6d 65 6e 74 3b 0d 0a 0d 0a 20 20  mlElement;....  
25700 20 20 20 20 20 20 20 20 20 20 69 66 20 28 65 6c            if (el
25710 65 6d 65 6e 74 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  ement == null)..
25720 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
25730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
25740 74 72 69 6e 67 5b 5d 20 65 6c 65 6d 65 6e 74 4e  tring[] elementN
25750 61 6d 65 73 20 3d 20 7b 0d 0a 20 20 20 20 20 20  ames = {..      
25760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25770 20 20 22 73 79 73 74 65 6d 2e 64 61 74 61 22 2c    "system.data",
25780 20 22 44 62 50 72 6f 76 69 64 65 72 46 61 63 74   "DbProviderFact
25790 6f 72 69 65 73 22 0d 0a 20 20 20 20 20 20 20 20  ories"..        
257a0 20 20 20 20 20 20 20 20 20 20 20 20 7d 3b 0d 0a              };..
257b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
257c0 20 20 58 6d 6c 45 6c 65 6d 65 6e 74 20 70 72 65    XmlElement pre
257d0 76 69 6f 75 73 45 6c 65 6d 65 6e 74 20 3d 0d 0a  viousElement =..
257e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
257f0 20 20 20 20 64 6f 63 75 6d 65 6e 74 2e 44 6f 63      document.Doc
25800 75 6d 65 6e 74 45 6c 65 6d 65 6e 74 3b 20 2f 2a  umentElement; /*
25810 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 2a   configuration *
25820 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
25830 20 20 20 20 20 66 6f 72 65 61 63 68 20 28 73 74       foreach (st
25840 72 69 6e 67 20 65 6c 65 6d 65 6e 74 4e 61 6d 65  ring elementName
25850 20 69 6e 20 65 6c 65 6d 65 6e 74 4e 61 6d 65 73   in elementNames
25860 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
25870 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
25880 20 20 20 20 20 20 20 20 20 20 65 6c 65 6d 65 6e            elemen
25890 74 20 3d 20 70 72 65 76 69 6f 75 73 45 6c 65 6d  t = previousElem
258a0 65 6e 74 2e 53 65 6c 65 63 74 53 69 6e 67 6c 65  ent.SelectSingle
258b0 4e 6f 64 65 28 0d 0a 20 20 20 20 20 20 20 20 20  Node(..         
258c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
258d0 6c 65 6d 65 6e 74 4e 61 6d 65 29 20 61 73 20 58  lementName) as X
258e0 6d 6c 45 6c 65 6d 65 6e 74 3b 0d 0a 0d 0a 20 20  mlElement;....  
258f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25900 20 20 69 66 20 28 65 6c 65 6d 65 6e 74 20 3d 3d    if (element ==
25910 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
25920 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
25930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25940 20 20 20 20 20 20 20 65 6c 65 6d 65 6e 74 20 3d         element =
25950 20 64 6f 63 75 6d 65 6e 74 2e 43 72 65 61 74 65   document.Create
25960 45 6c 65 6d 65 6e 74 28 0d 0a 20 20 20 20 20 20  Element(..      
25970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25980 20 20 20 20 20 20 65 6c 65 6d 65 6e 74 4e 61 6d        elementNam
25990 65 2c 20 53 74 72 69 6e 67 2e 45 6d 70 74 79 29  e, String.Empty)
259a0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
259b0 20 20 20 20 20 20 20 20 20 20 20 20 20 70 72 65               pre
259c0 76 69 6f 75 73 45 6c 65 6d 65 6e 74 2e 41 70 70  viousElement.App
259d0 65 6e 64 43 68 69 6c 64 28 65 6c 65 6d 65 6e 74  endChild(element
259e0 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
259f0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
25a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25a10 20 70 72 65 76 69 6f 75 73 45 6c 65 6d 65 6e 74   previousElement
25a20 20 3d 20 65 6c 65 6d 65 6e 74 3b 0d 0a 20 20 20   = element;..   
25a30 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
25a40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
25a50 20 20 65 6c 65 6d 65 6e 74 20 3d 20 64 6f 63 75    element = docu
25a60 6d 65 6e 74 2e 43 72 65 61 74 65 45 6c 65 6d 65  ment.CreateEleme
25a70 6e 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  nt(..           
25a80 20 20 20 20 20 20 20 20 20 22 61 64 64 22 2c 20           "add", 
25a90 53 74 72 69 6e 67 2e 45 6d 70 74 79 29 3b 0d 0a  String.Empty);..
25aa0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
25ab0 20 20 70 72 65 76 69 6f 75 73 45 6c 65 6d 65 6e    previousElemen
25ac0 74 2e 41 70 70 65 6e 64 43 68 69 6c 64 28 65 6c  t.AppendChild(el
25ad0 65 6d 65 6e 74 29 3b 0d 0a 0d 0a 20 20 20 20 20  ement);....     
25ae0 20 20 20 20 20 20 20 20 20 20 20 64 69 72 74 79             dirty
25af0 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20   = true;..      
25b00 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
25b10 20 20 20 20 20 20 20 69 66 20 28 21 53 74 72 69         if (!Stri
25b20 6e 67 2e 45 71 75 61 6c 73 28 65 6c 65 6d 65 6e  ng.Equals(elemen
25b30 74 2e 47 65 74 41 74 74 72 69 62 75 74 65 28 22  t.GetAttribute("
25b40 6e 61 6d 65 22 29 2c 0d 0a 20 20 20 20 20 20 20  name"),..       
25b50 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 61 6d               nam
25b60 65 2c 20 53 74 72 69 6e 67 43 6f 6d 70 61 72 69  e, StringCompari
25b70 73 6f 6e 2e 49 6e 76 61 72 69 61 6e 74 43 75 6c  son.InvariantCul
25b80 74 75 72 65 29 29 0d 0a 20 20 20 20 20 20 20 20  ture))..        
25b90 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
25ba0 20 20 20 20 20 20 20 65 6c 65 6d 65 6e 74 2e 53         element.S
25bb0 65 74 41 74 74 72 69 62 75 74 65 28 22 6e 61 6d  etAttribute("nam
25bc0 65 22 2c 20 6e 61 6d 65 29 3b 0d 0a 20 20 20 20  e", name);..    
25bd0 20 20 20 20 20 20 20 20 20 20 20 20 64 69 72 74              dirt
25be0 79 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20  y = true;..     
25bf0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
25c00 20 20 20 20 20 20 20 20 69 66 20 28 21 53 74 72          if (!Str
25c10 69 6e 67 2e 45 71 75 61 6c 73 28 65 6c 65 6d 65  ing.Equals(eleme
25c20 6e 74 2e 47 65 74 41 74 74 72 69 62 75 74 65 28  nt.GetAttribute(
25c30 22 69 6e 76 61 72 69 61 6e 74 22 29 2c 0d 0a 20  "invariant"),.. 
25c40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25c50 20 20 20 69 6e 76 61 72 69 61 6e 74 2c 20 53 74     invariant, St
25c60 72 69 6e 67 43 6f 6d 70 61 72 69 73 6f 6e 2e 49  ringComparison.I
25c70 6e 76 61 72 69 61 6e 74 43 75 6c 74 75 72 65 29  nvariantCulture)
25c80 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
25c90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
25ca0 20 20 65 6c 65 6d 65 6e 74 2e 53 65 74 41 74 74    element.SetAtt
25cb0 72 69 62 75 74 65 28 22 69 6e 76 61 72 69 61 6e  ribute("invarian
25cc0 74 22 2c 20 69 6e 76 61 72 69 61 6e 74 29 3b 0d  t", invariant);.
25cd0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
25ce0 20 64 69 72 74 79 20 3d 20 74 72 75 65 3b 0d 0a   dirty = true;..
25cf0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
25d00 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
25d10 28 21 53 74 72 69 6e 67 2e 45 71 75 61 6c 73 28  (!String.Equals(
25d20 65 6c 65 6d 65 6e 74 2e 47 65 74 41 74 74 72 69  element.GetAttri
25d30 62 75 74 65 28 22 64 65 73 63 72 69 70 74 69 6f  bute("descriptio
25d40 6e 22 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  n"),..          
25d50 20 20 20 20 20 20 20 20 20 20 64 65 73 63 72 69            descri
25d60 70 74 69 6f 6e 2c 20 53 74 72 69 6e 67 43 6f 6d  ption, StringCom
25d70 70 61 72 69 73 6f 6e 2e 49 6e 76 61 72 69 61 6e  parison.Invarian
25d80 74 43 75 6c 74 75 72 65 29 29 0d 0a 20 20 20 20  tCulture))..    
25d90 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
25da0 20 20 20 20 20 20 20 20 20 20 20 65 6c 65 6d 65             eleme
25db0 6e 74 2e 53 65 74 41 74 74 72 69 62 75 74 65 28  nt.SetAttribute(
25dc0 22 64 65 73 63 72 69 70 74 69 6f 6e 22 2c 20 64  "description", d
25dd0 65 73 63 72 69 70 74 69 6f 6e 29 3b 0d 0a 20 20  escription);..  
25de0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 69                di
25df0 72 74 79 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20  rty = true;..   
25e00 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
25e10 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
25e20 20 66 75 6c 6c 54 79 70 65 4e 61 6d 65 20 3d 20   fullTypeName = 
25e30 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 22 7b  String.Format("{
25e40 30 7d 2c 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20  0}, {1}",..     
25e50 20 20 20 20 20 20 20 20 20 20 20 74 79 70 65 4e             typeN
25e60 61 6d 65 2c 20 61 73 73 65 6d 62 6c 79 4e 61 6d  ame, assemblyNam
25e70 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e);....         
25e80 20 20 20 69 66 20 28 21 53 74 72 69 6e 67 2e 45     if (!String.E
25e90 71 75 61 6c 73 28 65 6c 65 6d 65 6e 74 2e 47 65  quals(element.Ge
25ea0 74 41 74 74 72 69 62 75 74 65 28 22 74 79 70 65  tAttribute("type
25eb0 22 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  "),..           
25ec0 20 20 20 20 20 20 20 20 20 66 75 6c 6c 54 79 70           fullTyp
25ed0 65 4e 61 6d 65 2c 20 53 74 72 69 6e 67 43 6f 6d  eName, StringCom
25ee0 70 61 72 69 73 6f 6e 2e 49 6e 76 61 72 69 61 6e  parison.Invarian
25ef0 74 43 75 6c 74 75 72 65 29 29 0d 0a 20 20 20 20  tCulture))..    
25f00 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
25f10 20 20 20 20 20 20 20 20 20 20 20 65 6c 65 6d 65             eleme
25f20 6e 74 2e 53 65 74 41 74 74 72 69 62 75 74 65 28  nt.SetAttribute(
25f30 22 74 79 70 65 22 2c 20 66 75 6c 6c 54 79 70 65  "type", fullType
25f40 4e 61 6d 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  Name);..        
25f50 20 20 20 20 20 20 20 20 64 69 72 74 79 20 3d 20          dirty = 
25f60 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  true;..         
25f70 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
25f80 20 20 20 20 69 66 20 28 64 69 72 74 79 20 7c 7c      if (dirty ||
25f90 20 77 68 61 74 49 66 29 0d 0a 20 20 20 20 20 20   whatIf)..      
25fa0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
25fb0 20 20 20 20 20 20 20 20 20 69 66 20 28 76 65 72           if (ver
25fc0 62 6f 73 65 29 0d 0a 20 20 20 20 20 20 20 20 20  bose)..         
25fd0 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
25fe0 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63  Ops.DebugAndTrac
25ff0 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e  e(TracePriority.
26000 48 69 67 68 65 73 74 2c 0d 0a 20 20 20 20 20 20  Highest,..      
26010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26020 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c    debugCallback,
26030 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20   traceCallback, 
26040 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
26050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26060 20 20 20 20 20 20 20 20 22 65 6c 65 6d 65 6e 74          "element
26070 20 3d 20 7b 30 7d 22 2c 20 46 6f 72 44 69 73 70   = {0}", ForDisp
26080 6c 61 79 28 65 6c 65 6d 65 6e 74 29 29 2c 0d 0a  lay(element)),..
26090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
260a0 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74          traceCat
260b0 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  egory);....     
260c0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21             if (!
260d0 77 68 61 74 49 66 29 0d 0a 20 20 20 20 20 20 20  whatIf)..       
260e0 20 20 20 20 20 20 20 20 20 20 20 20 20 64 6f 63               doc
260f0 75 6d 65 6e 74 2e 53 61 76 65 28 66 69 6c 65 4e  ument.Save(fileN
26100 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ame);....       
26110 20 20 20 20 20 20 20 20 20 73 61 76 65 64 20 3d           saved =
26120 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20   true;..        
26130 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
26140 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65       return true
26150 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  ;..        }....
26160 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
26170 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26180 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26190 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
261a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
261b0 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  ...        priva
261c0 74 65 20 73 74 61 74 69 63 20 62 6f 6f 6c 20 52  te static bool R
261d0 65 6d 6f 76 65 44 62 50 72 6f 76 69 64 65 72 46  emoveDbProviderF
261e0 61 63 74 6f 72 79 28 0d 0a 20 20 20 20 20 20 20  actory(..       
261f0 20 20 20 20 20 73 74 72 69 6e 67 20 66 69 6c 65       string file
26200 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  Name,..         
26210 20 20 20 73 74 72 69 6e 67 20 69 6e 76 61 72 69     string invari
26220 61 6e 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ant,..          
26230 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a    bool whatIf,..
26240 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
26250 20 76 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20   verbose,..     
26260 20 20 20 20 20 20 20 72 65 66 20 62 6f 6f 6c 20         ref bool 
26270 73 61 76 65 64 2c 0d 0a 20 20 20 20 20 20 20 20  saved,..        
26280 20 20 20 20 72 65 66 20 73 74 72 69 6e 67 20 65      ref string e
26290 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20  rror..          
262a0 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a    )..        {..
262b0 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
262c0 20 64 69 72 74 79 20 3d 20 66 61 6c 73 65 3b 0d   dirty = false;.
262d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 58 6d 6c  .            Xml
262e0 44 6f 63 75 6d 65 6e 74 20 64 6f 63 75 6d 65 6e  Document documen
262f0 74 20 3d 20 6e 65 77 20 58 6d 6c 44 6f 63 75 6d  t = new XmlDocum
26300 65 6e 74 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  ent();....      
26310 20 20 20 20 20 20 64 6f 63 75 6d 65 6e 74 2e 50        document.P
26320 72 65 73 65 72 76 65 57 68 69 74 65 73 70 61 63  reserveWhitespac
26330 65 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20  e = true;..     
26340 20 20 20 20 20 20 20 64 6f 63 75 6d 65 6e 74 2e         document.
26350 4c 6f 61 64 28 66 69 6c 65 4e 61 6d 65 29 3b 0d  Load(fileName);.
26360 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 58  ...            X
26370 6d 6c 45 6c 65 6d 65 6e 74 20 65 6c 65 6d 65 6e  mlElement elemen
26380 74 20 3d 20 64 6f 63 75 6d 65 6e 74 2e 53 65 6c  t = document.Sel
26390 65 63 74 53 69 6e 67 6c 65 4e 6f 64 65 28 53 74  ectSingleNode(St
263a0 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
263b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 58 50                XP
263c0 61 74 68 46 6f 72 41 64 64 45 6c 65 6d 65 6e 74  athForAddElement
263d0 2c 20 69 6e 76 61 72 69 61 6e 74 29 29 20 61 73  , invariant)) as
263e0 20 58 6d 6c 45 6c 65 6d 65 6e 74 3b 0d 0a 0d 0a   XmlElement;....
263f0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
26400 65 6c 65 6d 65 6e 74 20 21 3d 20 6e 75 6c 6c 29  element != null)
26410 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
26420 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
26430 20 65 6c 65 6d 65 6e 74 2e 50 61 72 65 6e 74 4e   element.ParentN
26440 6f 64 65 2e 52 65 6d 6f 76 65 43 68 69 6c 64 28  ode.RemoveChild(
26450 65 6c 65 6d 65 6e 74 29 3b 0d 0a 20 20 20 20 20  element);..     
26460 20 20 20 20 20 20 20 20 20 20 20 64 69 72 74 79             dirty
26470 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20   = true;..      
26480 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
26490 20 20 20 20 20 20 20 65 6c 65 6d 65 6e 74 20 3d         element =
264a0 20 64 6f 63 75 6d 65 6e 74 2e 53 65 6c 65 63 74   document.Select
264b0 53 69 6e 67 6c 65 4e 6f 64 65 28 53 74 72 69 6e  SingleNode(Strin
264c0 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
264d0 20 20 20 20 20 20 20 20 20 20 20 58 50 61 74 68             XPath
264e0 46 6f 72 52 65 6d 6f 76 65 45 6c 65 6d 65 6e 74  ForRemoveElement
264f0 2c 20 69 6e 76 61 72 69 61 6e 74 29 29 20 61 73  , invariant)) as
26500 20 58 6d 6c 45 6c 65 6d 65 6e 74 3b 0d 0a 0d 0a   XmlElement;....
26510 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
26520 65 6c 65 6d 65 6e 74 20 21 3d 20 6e 75 6c 6c 29  element != null)
26530 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
26540 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
26550 20 65 6c 65 6d 65 6e 74 2e 50 61 72 65 6e 74 4e   element.ParentN
26560 6f 64 65 2e 52 65 6d 6f 76 65 43 68 69 6c 64 28  ode.RemoveChild(
26570 65 6c 65 6d 65 6e 74 29 3b 0d 0a 20 20 20 20 20  element);..     
26580 20 20 20 20 20 20 20 20 20 20 20 64 69 72 74 79             dirty
26590 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20   = true;..      
265a0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
265b0 20 20 20 20 20 20 20 69 66 20 28 64 69 72 74 79         if (dirty
265c0 20 7c 7c 20 77 68 61 74 49 66 29 0d 0a 20 20 20   || whatIf)..   
265d0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
265e0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
265f0 76 65 72 62 6f 73 65 29 0d 0a 20 20 20 20 20 20  verbose)..      
26600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
26610 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54  aceOps.DebugAndT
26620 72 61 63 65 28 54 72 61 63 65 50 72 69 6f 72 69  race(TracePriori
26630 74 79 2e 48 69 67 68 65 73 74 2c 0d 0a 20 20 20  ty.Highest,..   
26640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26650 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61       debugCallba
26660 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63  ck, traceCallbac
26670 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  k, String.Format
26680 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
26690 20 20 20 20 20 20 20 20 20 20 20 22 65 6c 65 6d             "elem
266a0 65 6e 74 20 3d 20 7b 30 7d 22 2c 20 46 6f 72 44  ent = {0}", ForD
266b0 69 73 70 6c 61 79 28 65 6c 65 6d 65 6e 74 29 29  isplay(element))
266c0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
266d0 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
266e0 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
266f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
26700 20 28 21 77 68 61 74 49 66 29 0d 0a 20 20 20 20   (!whatIf)..    
26710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26720 64 6f 63 75 6d 65 6e 74 2e 53 61 76 65 28 66 69  document.Save(fi
26730 6c 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20  leName);....    
26740 20 20 20 20 20 20 20 20 20 20 20 20 73 61 76 65              save
26750 64 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20  d = true;..     
26760 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
26770 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74          return t
26780 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  rue;..        }.
26790 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
267a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
267b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
267c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
267d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
267e0 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72  //....        pr
267f0 69 76 61 74 65 20 73 74 61 74 69 63 20 62 6f 6f  ivate static boo
26800 6c 20 50 72 6f 63 65 73 73 44 62 50 72 6f 76 69  l ProcessDbProvi
26810 64 65 72 46 61 63 74 6f 72 79 28 0d 0a 20 20 20  derFactory(..   
26820 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
26830 66 69 6c 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20  fileName,..     
26840 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 69 6e         string in
26850 76 61 72 69 61 6e 74 2c 0d 0a 20 20 20 20 20 20  variant,..      
26860 20 20 20 20 20 20 73 74 72 69 6e 67 20 6e 61 6d        string nam
26870 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
26880 73 74 72 69 6e 67 20 64 65 73 63 72 69 70 74 69  string descripti
26890 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  on,..           
268a0 20 73 74 72 69 6e 67 20 74 79 70 65 4e 61 6d 65   string typeName
268b0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 41  ,..            A
268c0 73 73 65 6d 62 6c 79 4e 61 6d 65 20 61 73 73 65  ssemblyName asse
268d0 6d 62 6c 79 4e 61 6d 65 2c 0d 0a 20 20 20 20 20  mblyName,..     
268e0 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 63 6c         object cl
268f0 69 65 6e 74 44 61 74 61 2c 0d 0a 20 20 20 20 20  ientData,..     
26900 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36         bool wow6
26910 34 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  4,..            
26920 62 6f 6f 6c 20 74 68 72 6f 77 4f 6e 4d 69 73 73  bool throwOnMiss
26930 69 6e 67 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ing,..          
26940 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a    bool whatIf,..
26950 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
26960 20 76 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20   verbose,..     
26970 20 20 20 20 20 20 20 72 65 66 20 62 6f 6f 6c 20         ref bool 
26980 73 61 76 65 64 2c 0d 0a 20 20 20 20 20 20 20 20  saved,..        
26990 20 20 20 20 72 65 66 20 73 74 72 69 6e 67 20 65      ref string e
269a0 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20  rror..          
269b0 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a    )..        {..
269c0 20 20 20 20 20 20 20 20 20 20 20 20 41 6e 79 50              AnyP
269d0 61 69 72 3c 73 74 72 69 6e 67 2c 20 62 6f 6f 6c  air<string, bool
269e0 3e 20 70 61 69 72 20 3d 20 63 6c 69 65 6e 74 44  > pair = clientD
269f0 61 74 61 20 61 73 20 41 6e 79 50 61 69 72 3c 73  ata as AnyPair<s
26a00 74 72 69 6e 67 2c 20 62 6f 6f 6c 3e 3b 0d 0a 0d  tring, bool>;...
26a10 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
26a20 28 70 61 69 72 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  (pair == null)..
26a30 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
26a40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
26a50 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64 20  rror = "invalid 
26a60 66 72 61 6d 65 77 6f 72 6b 20 63 6f 6e 66 69 67  framework config
26a70 20 63 61 6c 6c 62 61 63 6b 20 64 61 74 61 22 3b   callback data";
26a80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
26a90 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
26aa0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
26ab0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
26ac0 20 28 70 61 69 72 2e 59 29 0d 0a 20 20 20 20 20   (pair.Y)..     
26ad0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
26ae0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
26af0 20 52 65 6d 6f 76 65 44 62 50 72 6f 76 69 64 65   RemoveDbProvide
26b00 72 46 61 63 74 6f 72 79 28 0d 0a 20 20 20 20 20  rFactory(..     
26b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66                 f
26b20 69 6c 65 4e 61 6d 65 2c 20 69 6e 76 61 72 69 61  ileName, invaria
26b30 6e 74 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62  nt, whatIf, verb
26b40 6f 73 65 2c 20 72 65 66 20 73 61 76 65 64 2c 0d  ose, ref saved,.
26b50 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
26b60 20 20 20 20 20 72 65 66 20 65 72 72 6f 72 29 20       ref error) 
26b70 26 26 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  &&..            
26b80 20 20 20 20 41 64 64 44 62 50 72 6f 76 69 64 65      AddDbProvide
26b90 72 46 61 63 74 6f 72 79 28 0d 0a 20 20 20 20 20  rFactory(..     
26ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66                 f
26bb0 69 6c 65 4e 61 6d 65 2c 20 69 6e 76 61 72 69 61  ileName, invaria
26bc0 6e 74 2c 20 6e 61 6d 65 2c 20 64 65 73 63 72 69  nt, name, descri
26bd0 70 74 69 6f 6e 2c 20 74 79 70 65 4e 61 6d 65 2c  ption, typeName,
26be0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
26bf0 20 20 20 20 20 20 61 73 73 65 6d 62 6c 79 4e 61        assemblyNa
26c00 6d 65 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62  me, whatIf, verb
26c10 6f 73 65 2c 20 72 65 66 20 73 61 76 65 64 2c 20  ose, ref saved, 
26c20 72 65 66 20 65 72 72 6f 72 29 3b 0d 0a 20 20 20  ref error);..   
26c30 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
26c40 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20          else..  
26c50 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
26c60 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
26c70 75 72 6e 20 52 65 6d 6f 76 65 44 62 50 72 6f 76  urn RemoveDbProv
26c80 69 64 65 72 46 61 63 74 6f 72 79 28 0d 0a 20 20  iderFactory(..  
26c90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26ca0 20 20 66 69 6c 65 4e 61 6d 65 2c 20 69 6e 76 61    fileName, inva
26cb0 72 69 61 6e 74 2c 20 77 68 61 74 49 66 2c 20 76  riant, whatIf, v
26cc0 65 72 62 6f 73 65 2c 20 72 65 66 20 73 61 76 65  erbose, ref save
26cd0 64 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  d,..            
26ce0 20 20 20 20 20 20 20 20 72 65 66 20 65 72 72 6f          ref erro
26cf0 72 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  r);..           
26d00 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20   }..        }.. 
26d10 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f         #endregio
26d20 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  n....        ///
26d30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26d40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26d50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26d60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26d70 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
26d80 23 72 65 67 69 6f 6e 20 41 73 73 65 6d 62 6c 79  #region Assembly
26d90 20 46 6f 6c 64 65 72 73 20 48 61 6e 64 6c 69 6e   Folders Handlin
26da0 67 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  g..        priva
26db0 74 65 20 73 74 61 74 69 63 20 73 74 72 69 6e 67  te static string
26dc0 20 47 65 74 41 73 73 65 6d 62 6c 79 46 6f 6c 64   GetAssemblyFold
26dd0 65 72 73 4b 65 79 4e 61 6d 65 28 0d 0a 20 20 20  ersKeyName(..   
26de0 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
26df0 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c 0d 0a  frameworkName,..
26e00 20 20 20 20 20 20 20 20 20 20 20 20 56 65 72 73              Vers
26e10 69 6f 6e 20 66 72 61 6d 65 77 6f 72 6b 56 65 72  ion frameworkVer
26e20 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20  sion,..         
26e30 20 20 20 73 74 72 69 6e 67 20 70 6c 61 74 66 6f     string platfo
26e40 72 6d 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20  rmName,..       
26e50 20 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34 0d       bool wow64.
26e60 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a  .            )..
26e70 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
26e80 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
26e90 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20         // NOTE: 
26ea0 54 68 69 73 20 72 65 67 69 73 74 72 79 20 6b 65  This registry ke
26eb0 79 20 61 70 70 65 61 72 73 20 74 6f 20 61 6c 77  y appears to alw
26ec0 61 79 73 20 62 65 20 33 32 2d 62 69 74 20 6f 6e  ays be 32-bit on
26ed0 6c 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ly..            
26ee0 2f 2f 20 20 20 20 20 20 20 28 69 2e 65 2e 20 70  //       (i.e. p
26ef0 72 6f 62 61 62 6c 79 20 62 65 63 61 75 73 65 20  robably because 
26f00 69 74 20 69 73 20 6f 6e 6c 79 20 75 73 65 64 20  it is only used 
26f10 62 79 20 56 69 73 75 61 6c 0d 0a 20 20 20 20 20  by Visual..     
26f20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
26f30 53 74 75 64 69 6f 2c 20 77 68 69 63 68 20 69 73  Studio, which is
26f40 20 63 75 72 72 65 6e 74 6c 79 20 61 6c 77 61 79   currently alway
26f50 73 20 33 32 2d 62 69 74 20 6f 6e 6c 79 29 2e 0d  s 32-bit only)..
26f60 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d  .            //.
26f70 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72  .            str
26f80 69 6e 67 20 66 6f 72 6d 61 74 20 3d 20 21 53 74  ing format = !St
26f90 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70  ring.IsNullOrEmp
26fa0 74 79 28 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 29  ty(platformName)
26fb0 20 3f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   ?..            
26fc0 20 20 20 20 22 7b 30 7d 5c 5c 4d 69 63 72 6f 73      "{0}\\Micros
26fd0 6f 66 74 5c 5c 7b 31 7d 5c 5c 76 7b 32 7d 5c 5c  oft\\{1}\\v{2}\\
26fe0 7b 33 7d 5c 5c 41 73 73 65 6d 62 6c 79 46 6f 6c  {3}\\AssemblyFol
26ff0 64 65 72 73 45 78 22 20 3a 0d 0a 20 20 20 20 20  dersEx" :..     
27000 20 20 20 20 20 20 20 20 20 20 20 22 7b 30 7d 5c             "{0}\
27010 5c 4d 69 63 72 6f 73 6f 66 74 5c 5c 7b 31 7d 5c  \Microsoft\\{1}\
27020 5c 76 7b 32 7d 5c 5c 41 73 73 65 6d 62 6c 79 46  \v{2}\\AssemblyF
27030 6f 6c 64 65 72 73 45 78 22 3b 0d 0a 0d 0a 20 20  oldersEx";....  
27040 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
27050 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 66   String.Format(f
27060 6f 72 6d 61 74 2c 20 47 65 74 52 6f 6f 74 4b 65  ormat, GetRootKe
27070 79 4e 61 6d 65 28 77 6f 77 36 34 29 2c 0d 0a 20  yName(wow64),.. 
27080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66                 f
27090 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c 20 66 72  rameworkName, fr
270a0 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 2c 20  ameworkVersion, 
270b0 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 29 3b 0d 0a  platformName);..
270c0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
270d0 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
270e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
270f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27100 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27110 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
27120 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
27130 73 74 61 74 69 63 20 62 6f 6f 6c 20 41 64 64 54  static bool AddT
27140 6f 41 73 73 65 6d 62 6c 79 46 6f 6c 64 65 72 73  oAssemblyFolders
27150 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 4d  (..            M
27160 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 72  ockRegistryKey r
27170 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20  ootKey,..       
27180 20 20 20 20 20 73 74 72 69 6e 67 20 66 72 61 6d       string fram
27190 65 77 6f 72 6b 4e 61 6d 65 2c 0d 0a 20 20 20 20  eworkName,..    
271a0 20 20 20 20 20 20 20 20 56 65 72 73 69 6f 6e 20          Version 
271b0 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e  frameworkVersion
271c0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  ,..            s
271d0 74 72 69 6e 67 20 70 6c 61 74 66 6f 72 6d 4e 61  tring platformNa
271e0 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me,..           
271f0 20 73 74 72 69 6e 67 20 73 75 62 4b 65 79 4e 61   string subKeyNa
27200 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me,..           
27210 20 73 74 72 69 6e 67 20 64 69 72 65 63 74 6f 72   string director
27220 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y,..            
27230 62 6f 6f 6c 20 77 6f 77 36 34 2c 0d 0a 20 20 20  bool wow64,..   
27240 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68           bool wh
27250 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20  atIf,..         
27260 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c     bool verbose,
27270 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
27280 66 20 73 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a  f string error..
27290 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
272a0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
272b0 20 20 20 20 20 20 73 74 72 69 6e 67 20 6b 65 79        string key
272c0 4e 61 6d 65 20 3d 20 47 65 74 41 73 73 65 6d 62  Name = GetAssemb
272d0 6c 79 46 6f 6c 64 65 72 73 4b 65 79 4e 61 6d 65  lyFoldersKeyName
272e0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
272f0 20 20 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65     frameworkName
27300 2c 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69  , frameworkVersi
27310 6f 6e 2c 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65  on, platformName
27320 2c 20 77 6f 77 36 34 29 3b 0d 0a 0d 0a 20 20 20  , wow64);....   
27330 20 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28           using (
27340 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20  MockRegistryKey 
27350 6b 65 79 20 3d 20 52 65 67 69 73 74 72 79 48 65  key = RegistryHe
27360 6c 70 65 72 2e 4f 70 65 6e 53 75 62 4b 65 79 28  lper.OpenSubKey(
27370 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
27380 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 6b        rootKey, k
27390 65 79 4e 61 6d 65 2c 20 74 72 75 65 2c 20 77 68  eyName, true, wh
273a0 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 29 0d  atIf, verbose)).
273b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
273c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
273d0 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29  if (key == null)
273e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
273f0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
27400 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
27410 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d   String.Format(.
27420 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
27430 20 20 20 20 20 20 20 20 20 22 63 6f 75 6c 64 20           "could 
27440 6e 6f 74 20 6f 70 65 6e 20 72 65 67 69 73 74 72  not open registr
27450 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c 7b 31 7d 22  y key: {0}\\{1}"
27460 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
27470 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b             rootK
27480 65 79 2c 20 6b 65 79 4e 61 6d 65 29 3b 0d 0a 0d  ey, keyName);...
27490 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
274a0 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
274b0 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
274c0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
274d0 20 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28           using (
274e0 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20  MockRegistryKey 
274f0 73 75 62 4b 65 79 20 3d 20 52 65 67 69 73 74 72  subKey = Registr
27500 79 48 65 6c 70 65 72 2e 43 72 65 61 74 65 53 75  yHelper.CreateSu
27510 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20  bKey(..         
27520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6b                 k
27530 65 79 2c 20 73 75 62 4b 65 79 4e 61 6d 65 2c 20  ey, subKeyName, 
27540 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29  whatIf, verbose)
27550 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
27560 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
27570 20 20 20 20 20 20 20 20 20 20 69 66 20 28 73 75            if (su
27580 62 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  bKey == null).. 
27590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
275a0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
275b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72                er
275c0 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72  ror = String.For
275d0 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
275e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
275f0 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20 63 72 65    "could not cre
27600 61 74 65 20 72 65 67 69 73 74 72 79 20 6b 65 79  ate registry key
27610 3a 20 7b 30 7d 5c 5c 7b 31 7d 22 2c 0d 0a 20 20  : {0}\\{1}",..  
27620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27630 20 20 20 20 20 20 20 20 20 20 6b 65 79 2c 20 73            key, s
27640 75 62 4b 65 79 4e 61 6d 65 29 3b 0d 0a 0d 0a 20  ubKeyName);.... 
27650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27660 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
27670 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lse;..          
27680 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
27690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
276a0 20 20 20 52 65 67 69 73 74 72 79 48 65 6c 70 65     RegistryHelpe
276b0 72 2e 53 65 74 56 61 6c 75 65 28 0d 0a 20 20 20  r.SetValue(..   
276c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
276d0 20 20 20 20 20 73 75 62 4b 65 79 2c 20 6e 75 6c       subKey, nul
276e0 6c 2c 20 64 69 72 65 63 74 6f 72 79 2c 20 77 68  l, directory, wh
276f0 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 3b 0d  atIf, verbose);.
27700 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
27710 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
27720 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
27730 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20   return true;.. 
27740 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
27750 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
27760 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27770 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27780 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27790 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
277a0 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
277b0 74 61 74 69 63 20 62 6f 6f 6c 20 52 65 6d 6f 76  tatic bool Remov
277c0 65 46 72 6f 6d 41 73 73 65 6d 62 6c 79 46 6f 6c  eFromAssemblyFol
277d0 64 65 72 73 28 0d 0a 20 20 20 20 20 20 20 20 20  ders(..         
277e0 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b     MockRegistryK
277f0 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20  ey rootKey,..   
27800 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
27810 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c 0d 0a  frameworkName,..
27820 20 20 20 20 20 20 20 20 20 20 20 20 56 65 72 73              Vers
27830 69 6f 6e 20 66 72 61 6d 65 77 6f 72 6b 56 65 72  ion frameworkVer
27840 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20  sion,..         
27850 20 20 20 73 74 72 69 6e 67 20 70 6c 61 74 66 6f     string platfo
27860 72 6d 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20  rmName,..       
27870 20 20 20 20 20 73 74 72 69 6e 67 20 73 75 62 4b       string subK
27880 65 79 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20  eyName,..       
27890 20 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34 2c       bool wow64,
278a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
278b0 6f 6c 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e  ol throwOnMissin
278c0 67 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  g,..            
278d0 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20  bool whatIf,..  
278e0 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76            bool v
278f0 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20  erbose,..       
27900 20 20 20 20 20 72 65 66 20 73 74 72 69 6e 67 20       ref string 
27910 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 20  error..         
27920 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d     )..        {.
27930 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72  .            str
27940 69 6e 67 20 6b 65 79 4e 61 6d 65 20 3d 20 47 65  ing keyName = Ge
27950 74 41 73 73 65 6d 62 6c 79 46 6f 6c 64 65 72 73  tAssemblyFolders
27960 4b 65 79 4e 61 6d 65 28 0d 0a 20 20 20 20 20 20  KeyName(..      
27970 20 20 20 20 20 20 20 20 20 20 66 72 61 6d 65 77            framew
27980 6f 72 6b 4e 61 6d 65 2c 20 66 72 61 6d 65 77 6f  orkName, framewo
27990 72 6b 56 65 72 73 69 6f 6e 2c 20 70 6c 61 74 66  rkVersion, platf
279a0 6f 72 6d 4e 61 6d 65 2c 20 77 6f 77 36 34 29 3b  ormName, wow64);
279b0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
279c0 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73  using (MockRegis
279d0 74 72 79 4b 65 79 20 6b 65 79 20 3d 20 52 65 67  tryKey key = Reg
279e0 69 73 74 72 79 48 65 6c 70 65 72 2e 4f 70 65 6e  istryHelper.Open
279f0 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20  SubKey(..       
27a00 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f               roo
27a10 74 4b 65 79 2c 20 6b 65 79 4e 61 6d 65 2c 20 74  tKey, keyName, t
27a20 72 75 65 2c 20 77 68 61 74 49 66 2c 20 76 65 72  rue, whatIf, ver
27a30 62 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20  bose))..        
27a40 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
27a50 20 20 20 20 20 20 20 69 66 20 28 6b 65 79 20 3d         if (key =
27a60 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
27a70 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
27a80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27a90 65 72 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46  error = String.F
27aa0 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
27ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27ac0 22 63 6f 75 6c 64 20 6e 6f 74 20 6f 70 65 6e 20  "could not open 
27ad0 72 65 67 69 73 74 72 79 20 6b 65 79 3a 20 7b 30  registry key: {0
27ae0 7d 5c 5c 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20  }\\{1}",..      
27af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27b00 20 20 72 6f 6f 74 4b 65 79 2c 20 6b 65 79 4e 61    rootKey, keyNa
27b10 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  me);....        
27b20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
27b30 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20  rn false;..     
27b40 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
27b50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27b60 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 44  RegistryHelper.D
27b70 65 6c 65 74 65 53 75 62 4b 65 79 28 0d 0a 20 20  eleteSubKey(..  
27b80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27b90 20 20 6b 65 79 2c 20 73 75 62 4b 65 79 4e 61 6d    key, subKeyNam
27ba0 65 2c 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e  e, throwOnMissin
27bb0 67 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f  g, whatIf, verbo
27bc0 73 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  se);..          
27bd0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
27be0 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d     return true;.
27bf0 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....  
27c00 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
27c10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27c20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27c30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27c40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
27c50 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
27c60 20 73 74 61 74 69 63 20 62 6f 6f 6c 20 50 72 6f   static bool Pro
27c70 63 65 73 73 41 73 73 65 6d 62 6c 79 46 6f 6c 64  cessAssemblyFold
27c80 65 72 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ers(..          
27c90 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65    MockRegistryKe
27ca0 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20 20  y rootKey,..    
27cb0 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 66          string f
27cc0 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c 0d 0a 20  rameworkName,.. 
27cd0 20 20 20 20 20 20 20 20 20 20 20 56 65 72 73 69             Versi
27ce0 6f 6e 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73  on frameworkVers
27cf0 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ion,..          
27d00 20 20 73 74 72 69 6e 67 20 70 6c 61 74 66 6f 72    string platfor
27d10 6d 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20  mName,..        
27d20 20 20 20 20 6f 62 6a 65 63 74 20 63 6c 69 65 6e      object clien
27d30 74 44 61 74 61 2c 0d 0a 20 20 20 20 20 20 20 20  tData,..        
27d40 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34 2c 0d      bool wow64,.
27d50 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f  .            boo
27d60 6c 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67  l throwOnMissing
27d70 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  ,..            b
27d80 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20  ool whatIf,..   
27d90 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65           bool ve
27da0 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20 20  rbose,..        
27db0 20 20 20 20 72 65 66 20 73 74 72 69 6e 67 20 65      ref string e
27dc0 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20  rror..          
27dd0 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a    )..        {..
27de0 20 20 20 20 20 20 20 20 20 20 20 20 41 6e 79 50              AnyP
27df0 61 69 72 3c 73 74 72 69 6e 67 2c 20 62 6f 6f 6c  air<string, bool
27e00 3e 20 70 61 69 72 20 3d 20 63 6c 69 65 6e 74 44  > pair = clientD
27e10 61 74 61 20 61 73 20 41 6e 79 50 61 69 72 3c 73  ata as AnyPair<s
27e20 74 72 69 6e 67 2c 20 62 6f 6f 6c 3e 3b 0d 0a 0d  tring, bool>;...
27e30 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
27e40 28 70 61 69 72 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  (pair == null)..
27e50 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
27e60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
27e70 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64 20  rror = "invalid 
27e80 66 72 61 6d 65 77 6f 72 6b 20 63 61 6c 6c 62 61  framework callba
27e90 63 6b 20 64 61 74 61 22 3b 0d 0a 20 20 20 20 20  ck data";..     
27ea0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
27eb0 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  n false;..      
27ec0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
27ed0 20 20 20 20 20 20 20 69 66 20 28 70 61 69 72 2e         if (pair.
27ee0 59 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  Y)..            
27ef0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
27f00 20 20 20 72 65 74 75 72 6e 20 52 65 6d 6f 76 65     return Remove
27f10 46 72 6f 6d 41 73 73 65 6d 62 6c 79 46 6f 6c 64  FromAssemblyFold
27f20 65 72 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ers(..          
27f30 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65            rootKe
27f40 79 2c 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65  y, frameworkName
27f50 2c 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69  , frameworkVersi
27f60 6f 6e 2c 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65  on, platformName
27f70 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
27f80 20 20 20 20 20 20 20 4c 65 67 61 63 79 50 72 6f         LegacyPro
27f90 6a 65 63 74 4e 61 6d 65 2c 20 77 6f 77 36 34 2c  jectName, wow64,
27fa0 20 66 61 6c 73 65 2c 20 77 68 61 74 49 66 2c 20   false, whatIf, 
27fb0 76 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20  verbose,..      
27fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
27fd0 66 20 65 72 72 6f 72 29 20 26 26 0d 0a 20 20 20  f error) &&..   
27fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 41 64 64               Add
27ff0 54 6f 41 73 73 65 6d 62 6c 79 46 6f 6c 64 65 72  ToAssemblyFolder
28000 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  s(..            
28010 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c          rootKey,
28020 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c 20   frameworkName, 
28030 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e  frameworkVersion
28040 2c 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 2c 0d  , platformName,.
28050 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
28060 20 20 20 20 20 50 72 6f 6a 65 63 74 4e 61 6d 65       ProjectName
28070 2c 20 70 61 69 72 2e 58 2c 20 77 6f 77 36 34 2c  , pair.X, wow64,
28080 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65   whatIf, verbose
28090 2c 20 72 65 66 20 65 72 72 6f 72 29 3b 0d 0a 20  , ref error);.. 
280a0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
280b0 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a            else..
280c0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
280d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
280e0 65 74 75 72 6e 20 52 65 6d 6f 76 65 46 72 6f 6d  eturn RemoveFrom
280f0 41 73 73 65 6d 62 6c 79 46 6f 6c 64 65 72 73 28  AssemblyFolders(
28100 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
28110 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 66        rootKey, f
28120 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c 20 66 72  rameworkName, fr
28130 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 2c 20  ameworkVersion, 
28140 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 2c 0d 0a 20  platformName,.. 
28150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28160 20 20 20 50 72 6f 6a 65 63 74 4e 61 6d 65 2c 20     ProjectName, 
28170 77 6f 77 36 34 2c 20 74 68 72 6f 77 4f 6e 4d 69  wow64, throwOnMi
28180 73 73 69 6e 67 2c 20 77 68 61 74 49 66 2c 20 76  ssing, whatIf, v
28190 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20  erbose,..       
281a0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66               ref
281b0 20 65 72 72 6f 72 29 3b 0d 0a 20 20 20 20 20 20   error);..      
281c0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
281d0 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64   }..        #end
281e0 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20  region....      
281f0 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
28200 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28210 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28220 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28230 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
28240 20 20 20 20 20 23 72 65 67 69 6f 6e 20 56 69 73       #region Vis
28250 75 61 6c 20 53 74 75 64 69 6f 20 48 61 6e 64 6c  ual Studio Handl
28260 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 70 72 69  ing..        pri
28270 76 61 74 65 20 73 74 61 74 69 63 20 73 74 72 69  vate static stri
28280 6e 67 20 47 65 74 56 73 52 6f 6f 74 4b 65 79 4e  ng GetVsRootKeyN
28290 61 6d 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ame(..          
282a0 20 20 62 6f 6f 6c 20 77 6f 77 36 34 0d 0a 20 20    bool wow64..  
282b0 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
282c0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
282d0 20 20 20 20 72 65 74 75 72 6e 20 53 74 72 69 6e      return Strin
282e0 67 2e 46 6f 72 6d 61 74 28 22 7b 30 7d 5c 5c 4d  g.Format("{0}\\M
282f0 69 63 72 6f 73 6f 66 74 5c 5c 56 69 73 75 61 6c  icrosoft\\Visual
28300 53 74 75 64 69 6f 22 2c 0d 0a 20 20 20 20 20 20  Studio",..      
28310 20 20 20 20 20 20 20 20 20 20 47 65 74 52 6f 6f            GetRoo
28320 74 4b 65 79 4e 61 6d 65 28 77 6f 77 36 34 29 29  tKeyName(wow64))
28330 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  ;..        }....
28340 20 20 20 20 20 20 20 20 2f 2f 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 0d  ///////////////.
28390 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  ...        priva
283a0 74 65 20 73 74 61 74 69 63 20 73 74 72 69 6e 67  te static string
283b0 20 47 65 74 56 73 4b 65 79 4e 61 6d 65 28 0d 0a   GetVsKeyName(..
283c0 20 20 20 20 20 20 20 20 20 20 20 20 56 65 72 73              Vers
283d0 69 6f 6e 20 76 73 56 65 72 73 69 6f 6e 2c 0d 0a  ion vsVersion,..
283e0 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
283f0 20 77 6f 77 36 34 0d 0a 20 20 20 20 20 20 20 20   wow64..        
28400 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b      )..        {
28410 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
28420 20 28 76 73 56 65 72 73 69 6f 6e 20 3d 3d 20 6e   (vsVersion == n
28430 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
28440 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c        return nul
28450 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  l;....          
28460 20 20 72 65 74 75 72 6e 20 53 74 72 69 6e 67 2e    return String.
28470 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
28480 20 20 20 20 20 20 20 20 20 22 7b 30 7d 5c 5c 7b           "{0}\\{
28490 31 7d 22 2c 20 47 65 74 56 73 52 6f 6f 74 4b 65  1}", GetVsRootKe
284a0 79 4e 61 6d 65 28 77 6f 77 36 34 29 2c 20 76 73  yName(wow64), vs
284b0 56 65 72 73 69 6f 6e 29 3b 0d 0a 20 20 20 20 20  Version);..     
284c0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
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 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
284f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28500 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28510 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
28520 20 20 20 23 72 65 67 69 6f 6e 20 56 69 73 75 61     #region Visua
28530 6c 20 53 74 75 64 69 6f 20 44 61 74 61 20 53 6f  l Studio Data So
28540 75 72 63 65 20 48 61 6e 64 6c 69 6e 67 0d 0a 20  urce Handling.. 
28550 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
28560 74 61 74 69 63 20 62 6f 6f 6c 20 41 64 64 56 73  tatic bool AddVs
28570 44 61 74 61 53 6f 75 72 63 65 28 0d 0a 20 20 20  DataSource(..   
28580 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65 67           MockReg
28590 69 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79  istryKey rootKey
285a0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 56  ,..            V
285b0 65 72 73 69 6f 6e 20 76 73 56 65 72 73 69 6f 6e  ersion vsVersion
285c0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 50  ,..            P
285d0 61 63 6b 61 67 65 20 70 61 63 6b 61 67 65 2c 0d  ackage package,.
285e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f  .            boo
285f0 6c 20 77 6f 77 36 34 2c 0d 0a 20 20 20 20 20 20  l wow64,..      
28600 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49        bool whatI
28610 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  f,..            
28620 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 0d 0a 20  bool verbose,.. 
28630 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20 73             ref s
28640 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20  tring error..   
28650 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
28660 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
28670 20 20 20 69 66 20 28 76 73 56 65 72 73 69 6f 6e     if (vsVersion
28680 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
28690 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
286a0 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20            error 
286b0 3d 20 22 69 6e 76 61 6c 69 64 20 56 53 20 76 65  = "invalid VS ve
286c0 72 73 69 6f 6e 22 3b 0d 0a 20 20 20 20 20 20 20  rsion";..       
286d0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
286e0 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20  false;..        
286f0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
28700 20 20 20 20 20 69 66 20 28 70 61 63 6b 61 67 65       if (package
28710 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
28720 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
28730 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20            error 
28740 3d 20 22 69 6e 76 61 6c 69 64 20 56 53 20 70 61  = "invalid VS pa
28750 63 6b 61 67 65 22 3b 0d 0a 20 20 20 20 20 20 20  ckage";..       
28760 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
28770 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20  false;..        
28780 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
28790 20 20 20 20 20 73 74 72 69 6e 67 20 6b 65 79 4e       string keyN
287a0 61 6d 65 20 3d 20 47 65 74 56 73 4b 65 79 4e 61  ame = GetVsKeyNa
287b0 6d 65 28 76 73 56 65 72 73 69 6f 6e 2c 20 77 6f  me(vsVersion, wo
287c0 77 36 34 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  w64);....       
287d0 20 20 20 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b       using (Mock
287e0 52 65 67 69 73 74 72 79 4b 65 79 20 6b 65 79 20  RegistryKey key 
287f0 3d 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72  = RegistryHelper
28800 2e 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20  .OpenSubKey(..  
28810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28820 20 20 72 6f 6f 74 4b 65 79 2c 20 6b 65 79 4e 61    rootKey, keyNa
28830 6d 65 2c 20 66 61 6c 73 65 2c 20 77 68 61 74 49  me, false, whatI
28840 66 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a 20 20  f, verbose))..  
28850 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
28860 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
28870 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  (key == null).. 
28880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
28890 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
288a0 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 53 74        error = St
288b0 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
288c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
288d0 20 20 20 20 20 20 22 63 6f 75 6c 64 20 6e 6f 74        "could not
288e0 20 6f 70 65 6e 20 72 65 67 69 73 74 72 79 20 6b   open registry k
288f0 65 79 3a 20 7b 30 7d 5c 5c 7b 31 7d 22 2c 0d 0a  ey: {0}\\{1}",..
28900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28910 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c          rootKey,
28920 20 6b 65 79 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20   keyName);....  
28930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28940 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
28950 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
28960 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
28970 20 20 20 20 20 20 75 73 69 6e 67 20 28 4d 6f 63        using (Moc
28980 6b 52 65 67 69 73 74 72 79 4b 65 79 20 73 75 62  kRegistryKey sub
28990 4b 65 79 20 3d 20 52 65 67 69 73 74 72 79 48 65  Key = RegistryHe
289a0 6c 70 65 72 2e 4f 70 65 6e 53 75 62 4b 65 79 28  lper.OpenSubKey(
289b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
289c0 20 20 20 20 20 20 20 20 20 20 6b 65 79 2c 20 22            key, "
289d0 44 61 74 61 53 6f 75 72 63 65 73 22 2c 20 74 72  DataSources", tr
289e0 75 65 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62  ue, whatIf, verb
289f0 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ose))..         
28a00 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
28a10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
28a20 20 28 73 75 62 4b 65 79 20 3d 3d 20 6e 75 6c 6c   (subKey == null
28a30 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
28a40 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
28a50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28a60 20 20 65 72 72 6f 72 20 3d 20 53 74 72 69 6e 67    error = String
28a70 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  .Format(..      
28a80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28a90 20 20 20 20 20 20 22 63 6f 75 6c 64 20 6e 6f 74        "could not
28aa0 20 6f 70 65 6e 20 72 65 67 69 73 74 72 79 20 6b   open registry k
28ab0 65 79 3a 20 7b 30 7d 5c 5c 44 61 74 61 53 6f 75  ey: {0}\\DataSou
28ac0 72 63 65 73 22 2c 0d 0a 20 20 20 20 20 20 20 20  rces",..        
28ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28ae0 20 20 20 20 6b 65 79 29 3b 0d 0a 0d 0a 20 20 20      key);....   
28af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28b00 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
28b10 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
28b20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
28b30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28b40 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69   using (MockRegi
28b50 73 74 72 79 4b 65 79 20 64 61 74 61 53 6f 75 72  stryKey dataSour
28b60 63 65 4b 65 79 20 3d 0d 0a 20 20 20 20 20 20 20  ceKey =..       
28b70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28b80 20 20 20 20 20 52 65 67 69 73 74 72 79 48 65 6c       RegistryHel
28b90 70 65 72 2e 43 72 65 61 74 65 53 75 62 4b 65 79  per.CreateSubKey
28ba0 28 73 75 62 4b 65 79 2c 0d 0a 20 20 20 20 20 20  (subKey,..      
28bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28bc0 20 20 20 20 20 20 70 61 63 6b 61 67 65 2e 44 61        package.Da
28bd0 74 61 53 6f 75 72 63 65 49 64 2e 54 6f 53 74 72  taSourceId.ToStr
28be0 69 6e 67 28 56 73 49 64 46 6f 72 6d 61 74 29 2c  ing(VsIdFormat),
28bf0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
28c00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 77 68                wh
28c10 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 29 0d  atIf, verbose)).
28c20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
28c30 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
28c40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28c50 69 66 20 28 64 61 74 61 53 6f 75 72 63 65 4b 65  if (dataSourceKe
28c60 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  y == null)..    
28c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28c80 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
28c90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28ca0 20 20 20 65 72 72 6f 72 20 3d 20 53 74 72 69 6e     error = Strin
28cb0 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
28cc0 20 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 22 63 6f 75 6c             "coul
28ce0 64 20 6e 6f 74 20 63 72 65 61 74 65 20 72 65 67  d not create reg
28cf0 69 73 74 72 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c  istry key: {0}\\
28d00 7b 31 7d 22 2c 20 6b 65 79 2c 0d 0a 20 20 20 20  {1}", key,..    
28d10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28d20 20 20 20 20 20 20 20 20 20 20 20 20 70 61 63 6b              pack
28d30 61 67 65 2e 44 61 74 61 53 6f 75 72 63 65 49 64  age.DataSourceId
28d40 2e 54 6f 53 74 72 69 6e 67 28 56 73 49 64 46 6f  .ToString(VsIdFo
28d50 72 6d 61 74 29 29 3b 0d 0a 0d 0a 20 20 20 20 20  rmat));....     
28d60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28d70 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
28d80 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lse;..          
28d90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
28da0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
28db0 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73             Regis
28dc0 74 72 79 48 65 6c 70 65 72 2e 53 65 74 56 61 6c  tryHelper.SetVal
28dd0 75 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue(..           
28de0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28df0 20 64 61 74 61 53 6f 75 72 63 65 4b 65 79 2c 20   dataSourceKey, 
28e00 6e 75 6c 6c 2c 20 53 74 72 69 6e 67 2e 46 6f 72  null, String.For
28e10 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
28e20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28e30 20 20 22 7b 30 7d 20 44 61 74 61 62 61 73 65 20    "{0} Database 
28e40 46 69 6c 65 22 2c 20 50 72 6f 6a 65 63 74 4e 61  File", ProjectNa
28e50 6d 65 29 2c 20 77 68 61 74 49 66 2c 0d 0a 20 20  me), whatIf,..  
28e60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28e70 20 20 20 20 20 20 20 20 20 20 76 65 72 62 6f 73            verbos
28e80 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e);....         
28e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52                 R
28ea0 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 43 72  egistryHelper.Cr
28eb0 65 61 74 65 53 75 62 4b 65 79 28 64 61 74 61 53  eateSubKey(dataS
28ec0 6f 75 72 63 65 4b 65 79 2c 0d 0a 20 20 20 20 20  ourceKey,..     
28ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28ee0 20 20 20 20 20 20 20 53 74 72 69 6e 67 2e 46 6f         String.Fo
28ef0 72 6d 61 74 28 22 53 75 70 70 6f 72 74 69 6e 67  rmat("Supporting
28f00 50 72 6f 76 69 64 65 72 73 5c 5c 7b 30 7d 22 2c  Providers\\{0}",
28f10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
28f20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 61                pa
28f30 63 6b 61 67 65 2e 44 61 74 61 50 72 6f 76 69 64  ckage.DataProvid
28f40 65 72 49 64 2e 54 6f 53 74 72 69 6e 67 28 56 73  erId.ToString(Vs
28f50 49 64 46 6f 72 6d 61 74 29 29 2c 0d 0a 20 20 20  IdFormat)),..   
28f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28f70 20 20 20 20 20 20 20 20 20 77 68 61 74 49 66 2c           whatIf,
28f80 20 76 65 72 62 6f 73 65 29 3b 0d 0a 20 20 20 20   verbose);..    
28f90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28fa0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
28fb0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
28fc0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
28fd0 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d     return true;.
28fe0 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....  
28ff0 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
29000 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29010 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29020 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29030 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
29040 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
29050 20 73 74 61 74 69 63 20 62 6f 6f 6c 20 52 65 6d   static bool Rem
29060 6f 76 65 56 73 44 61 74 61 53 6f 75 72 63 65 28  oveVsDataSource(
29070 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 4d 6f  ..            Mo
29080 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 72 6f  ckRegistryKey ro
29090 6f 74 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20  otKey,..        
290a0 20 20 20 20 56 65 72 73 69 6f 6e 20 76 73 56 65      Version vsVe
290b0 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20  rsion,..        
290c0 20 20 20 20 50 61 63 6b 61 67 65 20 70 61 63 6b      Package pack
290d0 61 67 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  age,..          
290e0 20 20 62 6f 6f 6c 20 77 6f 77 36 34 2c 0d 0a 20    bool wow64,.. 
290f0 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
29100 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20  whatIf,..       
29110 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73       bool verbos
29120 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
29130 72 65 66 20 73 74 72 69 6e 67 20 65 72 72 6f 72  ref string error
29140 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d  ..            ).
29150 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
29160 20 20 20 20 20 20 20 20 69 66 20 28 76 73 56 65          if (vsVe
29170 72 73 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  rsion == null)..
29180 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
29190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
291a0 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64 20  rror = "invalid 
291b0 56 53 20 76 65 72 73 69 6f 6e 22 3b 0d 0a 20 20  VS version";..  
291c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
291d0 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20  turn false;..   
291e0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
291f0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 70 61            if (pa
29200 63 6b 61 67 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  ckage == null)..
29210 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
29220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
29230 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64 20  rror = "invalid 
29240 56 53 20 70 61 63 6b 61 67 65 22 3b 0d 0a 20 20  VS package";..  
29250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
29260 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20  turn false;..   
29270 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
29280 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
29290 20 6b 65 79 4e 61 6d 65 20 3d 20 47 65 74 56 73   keyName = GetVs
292a0 4b 65 79 4e 61 6d 65 28 76 73 56 65 72 73 69 6f  KeyName(vsVersio
292b0 6e 2c 20 77 6f 77 36 34 29 3b 0d 0a 0d 0a 20 20  n, wow64);....  
292c0 20 20 20 20 20 20 20 20 20 20 75 73 69 6e 67 20            using 
292d0 28 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79  (MockRegistryKey
292e0 20 6b 65 79 20 3d 20 52 65 67 69 73 74 72 79 48   key = RegistryH
292f0 65 6c 70 65 72 2e 4f 70 65 6e 53 75 62 4b 65 79  elper.OpenSubKey
29300 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
29310 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20         rootKey, 
29320 6b 65 79 4e 61 6d 65 2c 20 66 61 6c 73 65 2c 20  keyName, false, 
29330 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29  whatIf, verbose)
29340 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
29350 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
29360 20 20 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75 6c    if (key == nul
29370 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
29380 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
29390 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72             error
293a0 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74   = String.Format
293b0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
293c0 20 20 20 20 20 20 20 20 20 20 20 22 63 6f 75 6c             "coul
293d0 64 20 6e 6f 74 20 6f 70 65 6e 20 72 65 67 69 73  d not open regis
293e0 74 72 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c 7b 31  try key: {0}\\{1
293f0 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }",..           
29400 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f               roo
29410 74 4b 65 79 2c 20 6b 65 79 4e 61 6d 65 29 3b 0d  tKey, keyName);.
29420 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
29430 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
29440 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lse;..          
29450 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
29460 20 20 20 20 20 20 20 20 20 20 20 75 73 69 6e 67             using
29470 20 28 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65   (MockRegistryKe
29480 79 20 73 75 62 4b 65 79 20 3d 20 52 65 67 69 73  y subKey = Regis
29490 74 72 79 48 65 6c 70 65 72 2e 4f 70 65 6e 53 75  tryHelper.OpenSu
294a0 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20  bKey(..         
294b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6b                 k
294c0 65 79 2c 20 22 44 61 74 61 53 6f 75 72 63 65 73  ey, "DataSources
294d0 22 2c 20 74 72 75 65 2c 20 77 68 61 74 49 66 2c  ", true, whatIf,
294e0 20 76 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 20   verbose))..    
294f0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
29500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29510 20 20 20 69 66 20 28 73 75 62 4b 65 79 20 3d 3d     if (subKey ==
29520 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
29530 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
29540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29550 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 53         error = S
29560 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
29570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29580 20 20 20 20 20 20 20 20 20 20 20 22 63 6f 75 6c             "coul
29590 64 20 6e 6f 74 20 6f 70 65 6e 20 72 65 67 69 73  d not open regis
295a0 74 72 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c 44 61  try key: {0}\\Da
295b0 74 61 53 6f 75 72 63 65 73 22 2c 0d 0a 20 20 20  taSources",..   
295c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
295d0 20 20 20 20 20 20 20 20 20 6b 65 79 29 3b 0d 0a           key);..
295e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
295f0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
29600 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20   false;..       
29610 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
29620 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
29630 20 20 20 20 20 20 52 65 67 69 73 74 72 79 48 65        RegistryHe
29640 6c 70 65 72 2e 44 65 6c 65 74 65 53 75 62 4b 65  lper.DeleteSubKe
29650 79 54 72 65 65 28 0d 0a 20 20 20 20 20 20 20 20  yTree(..        
29660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29670 73 75 62 4b 65 79 2c 20 70 61 63 6b 61 67 65 2e  subKey, package.
29680 44 61 74 61 53 6f 75 72 63 65 49 64 2e 54 6f 53  DataSourceId.ToS
29690 74 72 69 6e 67 28 56 73 49 64 46 6f 72 6d 61 74  tring(VsIdFormat
296a0 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
296b0 20 20 20 20 20 20 20 20 20 20 20 20 77 68 61 74              what
296c0 49 66 2c 20 76 65 72 62 6f 73 65 29 3b 0d 0a 20  If, verbose);.. 
296d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
296e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
296f0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  ...            r
29700 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20  eturn true;..   
29710 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
29720 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
29730 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29740 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29750 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29760 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
29770 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61       private sta
29780 74 69 63 20 62 6f 6f 6c 20 50 72 6f 63 65 73 73  tic bool Process
29790 56 73 44 61 74 61 53 6f 75 72 63 65 28 0d 0a 20  VsDataSource(.. 
297a0 20 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52             MockR
297b0 65 67 69 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b  egistryKey rootK
297c0 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ey,..           
297d0 20 56 65 72 73 69 6f 6e 20 76 73 56 65 72 73 69   Version vsVersi
297e0 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  on,..           
297f0 20 50 61 63 6b 61 67 65 20 70 61 63 6b 61 67 65   Package package
29800 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6f  ,..            o
29810 62 6a 65 63 74 20 63 6c 69 65 6e 74 44 61 74 61  bject clientData
29820 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  ,..            b
29830 6f 6f 6c 20 77 6f 77 36 34 2c 0d 0a 20 20 20 20  ool wow64,..    
29840 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 74 68 72          bool thr
29850 6f 77 4f 6e 4d 69 73 73 69 6e 67 2c 0d 0a 20 20  owOnMissing,..  
29860 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77            bool w
29870 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20  hatIf,..        
29880 20 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65      bool verbose
29890 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  ,..            r
298a0 65 66 20 73 74 72 69 6e 67 20 65 72 72 6f 72 0d  ef string error.
298b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a  .            )..
298c0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
298d0 20 20 20 20 20 20 20 69 66 20 28 70 61 63 6b 61         if (packa
298e0 67 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ge == null)..   
298f0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
29900 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
29910 72 20 3d 20 22 69 6e 76 61 6c 69 64 20 56 53 20  r = "invalid VS 
29920 70 61 63 6b 61 67 65 22 3b 0d 0a 20 20 20 20 20  package";..     
29930 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
29940 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  n false;..      
29950 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
29960 20 20 20 20 20 20 20 41 6e 79 50 61 69 72 3c 73         AnyPair<s
29970 74 72 69 6e 67 2c 20 62 6f 6f 6c 3e 20 70 61 69  tring, bool> pai
29980 72 20 3d 20 63 6c 69 65 6e 74 44 61 74 61 20 61  r = clientData a
29990 73 20 41 6e 79 50 61 69 72 3c 73 74 72 69 6e 67  s AnyPair<string
299a0 2c 20 62 6f 6f 6c 3e 3b 0d 0a 0d 0a 20 20 20 20  , bool>;....    
299b0 20 20 20 20 20 20 20 20 69 66 20 28 70 61 69 72          if (pair
299c0 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
299d0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
299e0 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20            error 
299f0 3d 20 22 69 6e 76 61 6c 69 64 20 56 53 20 63 61  = "invalid VS ca
29a00 6c 6c 62 61 63 6b 20 64 61 74 61 22 3b 0d 0a 20  llback data";.. 
29a10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
29a20 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20  eturn false;..  
29a30 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
29a40 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 70             if (p
29a50 61 69 72 2e 59 29 0d 0a 20 20 20 20 20 20 20 20  air.Y)..        
29a60 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
29a70 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 41 64         return Ad
29a80 64 56 73 44 61 74 61 53 6f 75 72 63 65 28 0d 0a  dVsDataSource(..
29a90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29aa0 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 76 73 56      rootKey, vsV
29ab0 65 72 73 69 6f 6e 2c 20 70 61 63 6b 61 67 65 2c  ersion, package,
29ac0 20 77 6f 77 36 34 2c 20 77 68 61 74 49 66 2c 20   wow64, whatIf, 
29ad0 76 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20  verbose,..      
29ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
29af0 66 20 65 72 72 6f 72 29 3b 0d 0a 20 20 20 20 20  f error);..     
29b00 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
29b10 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20        else..    
29b20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
29b30 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
29b40 6e 20 52 65 6d 6f 76 65 56 73 44 61 74 61 53 6f  n RemoveVsDataSo
29b50 75 72 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20  urce(..         
29b60 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b             rootK
29b70 65 79 2c 20 76 73 56 65 72 73 69 6f 6e 2c 20 70  ey, vsVersion, p
29b80 61 63 6b 61 67 65 2c 20 77 6f 77 36 34 2c 20 77  ackage, wow64, w
29b90 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 2c 0d  hatIf, verbose,.
29ba0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
29bb0 20 20 20 20 20 72 65 66 20 65 72 72 6f 72 29 3b       ref error);
29bc0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
29bd0 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
29be0 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
29bf0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
29c00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29c10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29c20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29c30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29c40 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65  /....        #re
29c50 67 69 6f 6e 20 56 69 73 75 61 6c 20 53 74 75 64  gion Visual Stud
29c60 69 6f 20 44 61 74 61 20 50 72 6f 76 69 64 65 72  io Data Provider
29c70 20 48 61 6e 64 6c 69 6e 67 0d 0a 20 20 20 20 20   Handling..     
29c80 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69     private stati
29c90 63 20 62 6f 6f 6c 20 41 64 64 56 73 44 61 74 61  c bool AddVsData
29ca0 50 72 6f 76 69 64 65 72 28 0d 0a 20 20 20 20 20  Provider(..     
29cb0 20 20 20 20 20 20 20 4d 6f 63 6b 52 65 67 69 73         MockRegis
29cc0 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79 2c 0d  tryKey rootKey,.
29cd0 0a 20 20 20 20 20 20 20 20 20 20 20 20 56 65 72  .            Ver
29ce0 73 69 6f 6e 20 76 73 56 65 72 73 69 6f 6e 2c 0d  sion vsVersion,.
29cf0 0a 20 20 20 20 20 20 20 20 20 20 20 20 50 61 63  .            Pac
29d00 6b 61 67 65 20 70 61 63 6b 61 67 65 2c 0d 0a 20  kage package,.. 
29d10 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
29d20 67 20 66 69 6c 65 4e 61 6d 65 2c 0d 0a 20 20 20  g fileName,..   
29d30 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 6f           bool wo
29d40 77 36 34 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  w64,..          
29d50 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a    bool whatIf,..
29d60 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
29d70 20 76 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20   verbose,..     
29d80 20 20 20 20 20 20 20 72 65 66 20 73 74 72 69 6e         ref strin
29d90 67 20 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20  g error..       
29da0 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
29db0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  {..            i
29dc0 66 20 28 76 73 56 65 72 73 69 6f 6e 20 3d 3d 20  f (vsVersion == 
29dd0 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
29de0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
29df0 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 69        error = "i
29e00 6e 76 61 6c 69 64 20 56 53 20 76 65 72 73 69 6f  nvalid VS versio
29e10 6e 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n";..           
29e20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
29e30 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
29e40 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
29e50 20 69 66 20 28 70 61 63 6b 61 67 65 20 3d 3d 20   if (package == 
29e60 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
29e70 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
29e80 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 69        error = "i
29e90 6e 76 61 6c 69 64 20 56 53 20 70 61 63 6b 61 67  nvalid VS packag
29ea0 65 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e";..           
29eb0 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
29ec0 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
29ed0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
29ee0 20 73 74 72 69 6e 67 20 6b 65 79 4e 61 6d 65 20   string keyName 
29ef0 3d 20 47 65 74 56 73 4b 65 79 4e 61 6d 65 28 76  = GetVsKeyName(v
29f00 73 56 65 72 73 69 6f 6e 2c 20 77 6f 77 36 34 29  sVersion, wow64)
29f10 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
29f20 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69   using (MockRegi
29f30 73 74 72 79 4b 65 79 20 6b 65 79 20 3d 20 52 65  stryKey key = Re
29f40 67 69 73 74 72 79 48 65 6c 70 65 72 2e 4f 70 65  gistryHelper.Ope
29f50 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20  nSubKey(..      
29f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f                ro
29f70 6f 74 4b 65 79 2c 20 6b 65 79 4e 61 6d 65 2c 20  otKey, keyName, 
29f80 66 61 6c 73 65 2c 20 77 68 61 74 49 66 2c 20 76  false, whatIf, v
29f90 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20 20  erbose))..      
29fa0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
29fb0 20 20 20 20 20 20 20 20 20 69 66 20 28 6b 65 79           if (key
29fc0 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
29fd0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
29fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29ff0 20 20 65 72 72 6f 72 20 3d 20 53 74 72 69 6e 67    error = String
2a000 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  .Format(..      
2a010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a020 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20 6f 70 65    "could not ope
2a030 6e 20 72 65 67 69 73 74 72 79 20 6b 65 79 3a 20  n registry key: 
2a040 7b 30 7d 5c 5c 7b 31 7d 22 2c 0d 0a 20 20 20 20  {0}\\{1}",..    
2a050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a060 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 6b 65 79      rootKey, key
2a070 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  Name);....      
2a080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
2a090 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20  turn false;..   
2a0a0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
2a0b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2a0c0 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67    using (MockReg
2a0d0 69 73 74 72 79 4b 65 79 20 73 75 62 4b 65 79 20  istryKey subKey 
2a0e0 3d 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72  = RegistryHelper
2a0f0 2e 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20  .OpenSubKey(..  
2a100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a110 20 20 20 20 20 20 6b 65 79 2c 20 22 44 61 74 61        key, "Data
2a120 50 72 6f 76 69 64 65 72 73 22 2c 20 74 72 75 65  Providers", true
2a130 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73  , whatIf, verbos
2a140 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e))..           
2a150 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
2a160 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
2a170 73 75 62 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d  subKey == null).
2a180 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2a190 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
2a1a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a1b0 65 72 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46  error = String.F
2a1c0 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
2a1d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a1e0 20 20 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20 6f      "could not o
2a1f0 70 65 6e 20 72 65 67 69 73 74 72 79 20 6b 65 79  pen registry key
2a200 3a 20 7b 30 7d 5c 5c 44 61 74 61 50 72 6f 76 69  : {0}\\DataProvi
2a210 64 65 72 73 22 2c 0d 0a 20 20 20 20 20 20 20 20  ders",..        
2a220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a230 20 20 20 20 6b 65 79 29 3b 0d 0a 0d 0a 20 20 20      key);....   
2a240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a250 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
2a260 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
2a270 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
2a280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a290 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69   using (MockRegi
2a2a0 73 74 72 79 4b 65 79 20 64 61 74 61 50 72 6f 76  stryKey dataProv
2a2b0 69 64 65 72 4b 65 79 20 3d 0d 0a 20 20 20 20 20  iderKey =..     
2a2c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a2d0 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79 48         RegistryH
2a2e0 65 6c 70 65 72 2e 43 72 65 61 74 65 53 75 62 4b  elper.CreateSubK
2a2f0 65 79 28 73 75 62 4b 65 79 2c 0d 0a 20 20 20 20  ey(subKey,..    
2a300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a310 20 20 20 20 20 20 20 20 70 61 63 6b 61 67 65 2e          package.
2a320 44 61 74 61 50 72 6f 76 69 64 65 72 49 64 2e 54  DataProviderId.T
2a330 6f 53 74 72 69 6e 67 28 56 73 49 64 46 6f 72 6d  oString(VsIdForm
2a340 61 74 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  at),..          
2a350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a360 20 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73    whatIf, verbos
2a370 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e))..           
2a380 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
2a390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a3a0 20 20 20 20 69 66 20 28 64 61 74 61 50 72 6f 76      if (dataProv
2a3b0 69 64 65 72 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29  iderKey == null)
2a3c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2a3d0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
2a3e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a3f0 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
2a400 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d   String.Format(.
2a410 0a 20 20 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 20                  
2a430 20 22 63 6f 75 6c 64 20 6e 6f 74 20 63 72 65 61   "could not crea
2a440 74 65 20 72 65 67 69 73 74 72 79 20 6b 65 79 3a  te registry key:
2a450 20 7b 30 7d 5c 5c 7b 31 7d 22 2c 20 6b 65 79 2c   {0}\\{1}", key,
2a460 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2a470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a480 20 20 70 61 63 6b 61 67 65 2e 44 61 74 61 50 72    package.DataPr
2a490 6f 76 69 64 65 72 49 64 2e 54 6f 53 74 72 69 6e  oviderId.ToStrin
2a4a0 67 28 56 73 49 64 46 6f 72 6d 61 74 29 29 3b 0d  g(VsIdFormat));.
2a4b0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
2a4c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
2a4d0 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20  eturn false;..  
2a4e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a4f0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
2a500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a510 20 20 20 52 65 67 69 73 74 72 79 48 65 6c 70 65     RegistryHelpe
2a520 72 2e 53 65 74 56 61 6c 75 65 28 0d 0a 20 20 20  r.SetValue(..   
2a530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a540 20 20 20 20 20 20 20 20 20 64 61 74 61 50 72 6f           dataPro
2a550 76 69 64 65 72 4b 65 79 2c 20 6e 75 6c 6c 2c 20  viderKey, null, 
2a560 44 65 73 63 72 69 70 74 69 6f 6e 2c 20 77 68 61  Description, wha
2a570 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  tIf,..          
2a580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a590 20 20 76 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20    verbose);.... 
2a5a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a5b0 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79 48         RegistryH
2a5c0 65 6c 70 65 72 2e 53 65 74 56 61 6c 75 65 28 0d  elper.SetValue(.
2a5d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2a5e0 20 20 20 20 20 20 20 20 20 20 20 20 20 64 61 74               dat
2a5f0 61 50 72 6f 76 69 64 65 72 4b 65 79 2c 20 22 49  aProviderKey, "I
2a600 6e 76 61 72 69 61 6e 74 4e 61 6d 65 22 2c 20 49  nvariantName", I
2a610 6e 76 61 72 69 61 6e 74 4e 61 6d 65 2c 0d 0a 20  nvariantName,.. 
2a620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a630 20 20 20 20 20 20 20 20 20 20 20 77 68 61 74 49             whatI
2a640 66 2c 20 76 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a  f, verbose);....
2a650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a660 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79          Registry
2a670 48 65 6c 70 65 72 2e 53 65 74 56 61 6c 75 65 28  Helper.SetValue(
2a680 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2a690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 61                da
2a6a0 74 61 50 72 6f 76 69 64 65 72 4b 65 79 2c 20 22  taProviderKey, "
2a6b0 54 65 63 68 6e 6f 6c 6f 67 79 22 2c 0d 0a 20 20  Technology",..  
2a6c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a6d0 20 20 20 20 20 20 20 20 20 20 70 61 63 6b 61 67            packag
2a6e0 65 2e 41 64 6f 4e 65 74 54 65 63 68 6e 6f 6c 6f  e.AdoNetTechnolo
2a6f0 67 79 49 64 2e 54 6f 53 74 72 69 6e 67 28 56 73  gyId.ToString(Vs
2a700 49 64 46 6f 72 6d 61 74 29 2c 0d 0a 20 20 20 20  IdFormat),..    
2a710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a720 20 20 20 20 20 20 20 20 77 68 61 74 49 66 2c 20          whatIf, 
2a730 76 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20  verbose);....   
2a740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a750 20 20 20 20 20 52 65 67 69 73 74 72 79 48 65 6c       RegistryHel
2a760 70 65 72 2e 53 65 74 56 61 6c 75 65 28 0d 0a 20  per.SetValue(.. 
2a770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a780 20 20 20 20 20 20 20 20 20 20 20 64 61 74 61 50             dataP
2a790 72 6f 76 69 64 65 72 4b 65 79 2c 20 22 43 6f 64  roviderKey, "Cod
2a7a0 65 42 61 73 65 22 2c 20 66 69 6c 65 4e 61 6d 65  eBase", fileName
2a7b0 2c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20  , whatIf,..     
2a7c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a7d0 20 20 20 20 20 20 20 76 65 72 62 6f 73 65 29 3b         verbose);
2a7e0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2a7f0 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69              Regi
2a800 73 74 72 79 48 65 6c 70 65 72 2e 53 65 74 56 61  stryHelper.SetVa
2a810 6c 75 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  lue(..          
2a820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a830 20 20 64 61 74 61 50 72 6f 76 69 64 65 72 4b 65    dataProviderKe
2a840 79 2c 20 22 46 61 63 74 6f 72 79 53 65 72 76 69  y, "FactoryServi
2a850 63 65 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ce",..          
2a860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a870 20 20 70 61 63 6b 61 67 65 2e 53 65 72 76 69 63    package.Servic
2a880 65 49 64 2e 54 6f 53 74 72 69 6e 67 28 56 73 49  eId.ToString(VsI
2a890 64 46 6f 72 6d 61 74 29 2c 20 77 68 61 74 49 66  dFormat), whatIf
2a8a0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
2a8b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 76                 v
2a8c0 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20  erbose);....    
2a8d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a8e0 20 20 20 20 52 65 67 69 73 74 72 79 48 65 6c 70      RegistryHelp
2a8f0 65 72 2e 43 72 65 61 74 65 53 75 62 4b 65 79 28  er.CreateSubKey(
2a900 64 61 74 61 50 72 6f 76 69 64 65 72 4b 65 79 2c  dataProviderKey,
2a910 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2a920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 53                "S
2a930 75 70 70 6f 72 74 65 64 4f 62 6a 65 63 74 73 5c  upportedObjects\
2a940 5c 44 61 74 61 43 6f 6e 6e 65 63 74 69 6f 6e 55  \DataConnectionU
2a950 49 43 6f 6e 74 72 6f 6c 22 2c 0d 0a 20 20 20 20  IControl",..    
2a960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a970 20 20 20 20 20 20 20 20 77 68 61 74 49 66 2c 20          whatIf, 
2a980 76 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20  verbose);....   
2a990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a9a0 20 20 20 20 20 52 65 67 69 73 74 72 79 48 65 6c       RegistryHel
2a9b0 70 65 72 2e 43 72 65 61 74 65 53 75 62 4b 65 79  per.CreateSubKey
2a9c0 28 64 61 74 61 50 72 6f 76 69 64 65 72 4b 65 79  (dataProviderKey
2a9d0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
2a9e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
2a9f0 53 75 70 70 6f 72 74 65 64 4f 62 6a 65 63 74 73  SupportedObjects
2aa00 5c 5c 44 61 74 61 43 6f 6e 6e 65 63 74 69 6f 6e  \\DataConnection
2aa10 50 72 6f 70 65 72 74 69 65 73 22 2c 0d 0a 20 20  Properties",..  
2aa20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2aa30 20 20 20 20 20 20 20 20 20 20 77 68 61 74 49 66            whatIf
2aa40 2c 20 76 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20  , verbose);.... 
2aa50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2aa60 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79 48         RegistryH
2aa70 65 6c 70 65 72 2e 43 72 65 61 74 65 53 75 62 4b  elper.CreateSubK
2aa80 65 79 28 64 61 74 61 50 72 6f 76 69 64 65 72 4b  ey(dataProviderK
2aa90 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ey,..           
2aaa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2aab0 20 22 53 75 70 70 6f 72 74 65 64 4f 62 6a 65 63   "SupportedObjec
2aac0 74 73 5c 5c 44 61 74 61 43 6f 6e 6e 65 63 74 69  ts\\DataConnecti
2aad0 6f 6e 53 75 70 70 6f 72 74 22 2c 20 77 68 61 74  onSupport", what
2aae0 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  If,..           
2aaf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ab00 20 76 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20   verbose);....  
2ab10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ab20 20 20 20 20 20 20 52 65 67 69 73 74 72 79 48 65        RegistryHe
2ab30 6c 70 65 72 2e 43 72 65 61 74 65 53 75 62 4b 65  lper.CreateSubKe
2ab40 79 28 64 61 74 61 50 72 6f 76 69 64 65 72 4b 65  y(dataProviderKe
2ab50 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y,..            
2ab60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ab70 22 53 75 70 70 6f 72 74 65 64 4f 62 6a 65 63 74  "SupportedObject
2ab80 73 5c 5c 44 61 74 61 4f 62 6a 65 63 74 53 75 70  s\\DataObjectSup
2ab90 70 6f 72 74 22 2c 20 77 68 61 74 49 66 2c 0d 0a  port", whatIf,..
2aba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2abb0 20 20 20 20 20 20 20 20 20 20 20 20 76 65 72 62              verb
2abc0 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ose);....       
2abd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2abe0 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e   RegistryHelper.
2abf0 43 72 65 61 74 65 53 75 62 4b 65 79 28 64 61 74  CreateSubKey(dat
2ac00 61 50 72 6f 76 69 64 65 72 4b 65 79 2c 0d 0a 20  aProviderKey,.. 
2ac10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ac20 20 20 20 20 20 20 20 20 20 20 20 22 53 75 70 70             "Supp
2ac30 6f 72 74 65 64 4f 62 6a 65 63 74 73 5c 5c 44 61  ortedObjects\\Da
2ac40 74 61 56 69 65 77 53 75 70 70 6f 72 74 22 2c 20  taViewSupport", 
2ac50 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20  whatIf,..       
2ac60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ac70 20 20 20 20 20 76 65 72 62 6f 73 65 29 3b 0d 0a       verbose);..
2ac80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ac90 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
2aca0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
2acb0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
2acc0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72         return tr
2acd0 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  ue;..        }..
2ace0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
2acf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ad00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ad10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ad20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ad30 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69  /....        pri
2ad40 76 61 74 65 20 73 74 61 74 69 63 20 62 6f 6f 6c  vate static bool
2ad50 20 52 65 6d 6f 76 65 56 73 44 61 74 61 50 72 6f   RemoveVsDataPro
2ad60 76 69 64 65 72 28 0d 0a 20 20 20 20 20 20 20 20  vider(..        
2ad70 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79      MockRegistry
2ad80 4b 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20  Key rootKey,..  
2ad90 20 20 20 20 20 20 20 20 20 20 56 65 72 73 69 6f            Versio
2ada0 6e 20 76 73 56 65 72 73 69 6f 6e 2c 0d 0a 20 20  n vsVersion,..  
2adb0 20 20 20 20 20 20 20 20 20 20 50 61 63 6b 61 67            Packag
2adc0 65 20 70 61 63 6b 61 67 65 2c 0d 0a 20 20 20 20  e package,..    
2add0 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 6f 77          bool wow
2ade0 36 34 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  64,..           
2adf0 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20   bool whatIf,.. 
2ae00 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
2ae10 76 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20  verbose,..      
2ae20 20 20 20 20 20 20 72 65 66 20 73 74 72 69 6e 67        ref string
2ae30 20 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20   error..        
2ae40 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b      )..        {
2ae50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
2ae60 20 28 76 73 56 65 72 73 69 6f 6e 20 3d 3d 20 6e   (vsVersion == n
2ae70 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
2ae80 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
2ae90 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 69 6e       error = "in
2aea0 76 61 6c 69 64 20 56 53 20 76 65 72 73 69 6f 6e  valid VS version
2aeb0 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ";..            
2aec0 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
2aed0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
2aee0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2aef0 73 74 72 69 6e 67 20 6b 65 79 4e 61 6d 65 20 3d  string keyName =
2af00 20 47 65 74 56 73 4b 65 79 4e 61 6d 65 28 76 73   GetVsKeyName(vs
2af10 56 65 72 73 69 6f 6e 2c 20 77 6f 77 36 34 29 3b  Version, wow64);
2af20 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2af30 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73  using (MockRegis
2af40 74 72 79 4b 65 79 20 6b 65 79 20 3d 20 52 65 67  tryKey key = Reg
2af50 69 73 74 72 79 48 65 6c 70 65 72 2e 4f 70 65 6e  istryHelper.Open
2af60 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20  SubKey(..       
2af70 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f               roo
2af80 74 4b 65 79 2c 20 6b 65 79 4e 61 6d 65 2c 20 66  tKey, keyName, f
2af90 61 6c 73 65 2c 20 77 68 61 74 49 66 2c 20 76 65  alse, whatIf, ve
2afa0 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 20  rbose))..       
2afb0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
2afc0 20 20 20 20 20 20 20 20 69 66 20 28 6b 65 79 20          if (key 
2afd0 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
2afe0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
2aff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b000 20 65 72 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e   error = String.
2b010 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
2b020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b030 20 22 63 6f 75 6c 64 20 6e 6f 74 20 6f 70 65 6e   "could not open
2b040 20 72 65 67 69 73 74 72 79 20 6b 65 79 3a 20 7b   registry key: {
2b050 30 7d 5c 5c 7b 31 7d 22 2c 0d 0a 20 20 20 20 20  0}\\{1}",..     
2b060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b070 20 20 20 72 6f 6f 74 4b 65 79 2c 20 6b 65 79 4e     rootKey, keyN
2b080 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ame);....       
2b090 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
2b0a0 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20  urn false;..    
2b0b0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
2b0c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2b0d0 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69   using (MockRegi
2b0e0 73 74 72 79 4b 65 79 20 73 75 62 4b 65 79 20 3d  stryKey subKey =
2b0f0 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e   RegistryHelper.
2b100 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20  OpenSubKey(..   
2b110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b120 20 20 20 20 20 6b 65 79 2c 20 22 44 61 74 61 50       key, "DataP
2b130 72 6f 76 69 64 65 72 73 22 2c 20 74 72 75 65 2c  roviders", true,
2b140 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65   whatIf, verbose
2b150 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
2b160 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
2b170 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 73             if (s
2b180 75 62 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  ubKey == null)..
2b190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b1a0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
2b1b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
2b1c0 72 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f  rror = String.Fo
2b1d0 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
2b1e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b1f0 20 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20 6f 70     "could not op
2b200 65 6e 20 72 65 67 69 73 74 72 79 20 6b 65 79 3a  en registry key:
2b210 20 7b 30 7d 5c 5c 44 61 74 61 50 72 6f 76 69 64   {0}\\DataProvid
2b220 65 72 73 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  ers",..         
2b230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b240 20 20 20 6b 65 79 29 3b 0d 0a 0d 0a 20 20 20 20     key);....    
2b250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b260 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
2b270 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
2b280 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
2b290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b2a0 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 44  RegistryHelper.D
2b2b0 65 6c 65 74 65 53 75 62 4b 65 79 54 72 65 65 28  eleteSubKeyTree(
2b2c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2b2d0 20 20 20 20 20 20 20 20 20 20 73 75 62 4b 65 79            subKey
2b2e0 2c 20 70 61 63 6b 61 67 65 2e 44 61 74 61 50 72  , package.DataPr
2b2f0 6f 76 69 64 65 72 49 64 2e 54 6f 53 74 72 69 6e  oviderId.ToStrin
2b300 67 28 56 73 49 64 46 6f 72 6d 61 74 29 2c 0d 0a  g(VsIdFormat),..
2b310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b320 20 20 20 20 20 20 20 20 77 68 61 74 49 66 2c 20          whatIf, 
2b330 76 65 72 62 6f 73 65 29 3b 0d 0a 20 20 20 20 20  verbose);..     
2b340 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
2b350 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
2b360 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
2b370 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20  n true;..       
2b380 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f   }....        //
2b390 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b3a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b3b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b3c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b3d0 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
2b3e0 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
2b3f0 62 6f 6f 6c 20 50 72 6f 63 65 73 73 56 73 44 61  bool ProcessVsDa
2b400 74 61 50 72 6f 76 69 64 65 72 28 0d 0a 20 20 20  taProvider(..   
2b410 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65 67           MockReg
2b420 69 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79  istryKey rootKey
2b430 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 56  ,..            V
2b440 65 72 73 69 6f 6e 20 76 73 56 65 72 73 69 6f 6e  ersion vsVersion
2b450 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 50  ,..            P
2b460 61 63 6b 61 67 65 20 70 61 63 6b 61 67 65 2c 0d  ackage package,.
2b470 0a 20 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a  .            obj
2b480 65 63 74 20 63 6c 69 65 6e 74 44 61 74 61 2c 0d  ect clientData,.
2b490 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f  .            boo
2b4a0 6c 20 77 6f 77 36 34 2c 0d 0a 20 20 20 20 20 20  l wow64,..      
2b4b0 20 20 20 20 20 20 62 6f 6f 6c 20 74 68 72 6f 77        bool throw
2b4c0 4f 6e 4d 69 73 73 69 6e 67 2c 0d 0a 20 20 20 20  OnMissing,..    
2b4d0 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61          bool wha
2b4e0 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  tIf,..          
2b4f0 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 0d    bool verbose,.
2b500 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66  .            ref
2b510 20 73 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20   string error.. 
2b520 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
2b530 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
2b540 20 20 20 20 20 41 6e 79 50 61 69 72 3c 73 74 72       AnyPair<str
2b550 69 6e 67 2c 20 62 6f 6f 6c 3e 20 70 61 69 72 20  ing, bool> pair 
2b560 3d 20 63 6c 69 65 6e 74 44 61 74 61 20 61 73 20  = clientData as 
2b570 41 6e 79 50 61 69 72 3c 73 74 72 69 6e 67 2c 20  AnyPair<string, 
2b580 62 6f 6f 6c 3e 3b 0d 0a 0d 0a 20 20 20 20 20 20  bool>;....      
2b590 20 20 20 20 20 20 69 66 20 28 70 61 69 72 20 3d        if (pair =
2b5a0 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
2b5b0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
2b5c0 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
2b5d0 22 69 6e 76 61 6c 69 64 20 56 53 20 63 61 6c 6c  "invalid VS call
2b5e0 62 61 63 6b 20 64 61 74 61 22 3b 0d 0a 20 20 20  back data";..   
2b5f0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
2b600 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20  urn false;..    
2b610 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
2b620 20 20 20 20 20 20 20 20 20 69 66 20 28 70 61 69           if (pai
2b630 72 2e 59 29 0d 0a 20 20 20 20 20 20 20 20 20 20  r.Y)..          
2b640 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
2b650 20 20 20 20 20 72 65 74 75 72 6e 20 41 64 64 56       return AddV
2b660 73 44 61 74 61 50 72 6f 76 69 64 65 72 28 0d 0a  sDataProvider(..
2b670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b680 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 76 73 56      rootKey, vsV
2b690 65 72 73 69 6f 6e 2c 20 70 61 63 6b 61 67 65 2c  ersion, package,
2b6a0 20 70 61 69 72 2e 58 2c 20 77 6f 77 36 34 2c 20   pair.X, wow64, 
2b6b0 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20  whatIf,..       
2b6c0 20 20 20 20 20 20 20 20 20 20 20 20 20 76 65 72               ver
2b6d0 62 6f 73 65 2c 20 72 65 66 20 65 72 72 6f 72 29  bose, ref error)
2b6e0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
2b6f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 65 6c  ..            el
2b700 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  se..            
2b710 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
2b720 20 20 20 72 65 74 75 72 6e 20 52 65 6d 6f 76 65     return Remove
2b730 56 73 44 61 74 61 50 72 6f 76 69 64 65 72 28 0d  VsDataProvider(.
2b740 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2b750 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 76 73       rootKey, vs
2b760 56 65 72 73 69 6f 6e 2c 20 70 61 63 6b 61 67 65  Version, package
2b770 2c 20 77 6f 77 36 34 2c 20 77 68 61 74 49 66 2c  , wow64, whatIf,
2b780 20 76 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20   verbose,..     
2b790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
2b7a0 65 66 20 65 72 72 6f 72 29 3b 0d 0a 20 20 20 20  ef error);..    
2b7b0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
2b7c0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65     }..        #e
2b7d0 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20  ndregion....    
2b7e0 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
2b7f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b800 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b810 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b820 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
2b830 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 56         #region V
2b840 69 73 75 61 6c 20 53 74 75 64 69 6f 20 50 61 63  isual Studio Pac
2b850 6b 61 67 65 20 48 61 6e 64 6c 69 6e 67 0d 0a 20  kage Handling.. 
2b860 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
2b870 74 61 74 69 63 20 76 6f 69 64 20 49 6e 69 74 69  tatic void Initi
2b880 61 6c 69 7a 65 56 73 50 61 63 6b 61 67 65 28 0d  alizeVsPackage(.
2b890 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66  .            ref
2b8a0 20 50 61 63 6b 61 67 65 20 70 61 63 6b 61 67 65   Package package
2b8b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d  ..            ).
2b8c0 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
2b8d0 20 20 20 20 20 20 20 20 69 66 20 28 70 61 63 6b          if (pack
2b8e0 61 67 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  age == null)..  
2b8f0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
2b900 20 20 20 20 20 20 20 20 20 20 20 20 20 70 61 63               pac
2b910 6b 61 67 65 20 3d 20 6e 65 77 20 50 61 63 6b 61  kage = new Packa
2b920 67 65 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ge();....       
2b930 20 20 20 20 20 20 20 20 20 70 61 63 6b 61 67 65           package
2b940 2e 41 64 6f 4e 65 74 54 65 63 68 6e 6f 6c 6f 67  .AdoNetTechnolog
2b950 79 49 64 20 3d 20 6e 65 77 20 47 75 69 64 28 0d  yId = new Guid(.
2b960 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2b970 20 20 20 20 20 22 37 37 41 42 39 41 39 44 2d 37       "77AB9A9D-7
2b980 38 42 39 2d 34 42 41 37 2d 39 31 41 43 2d 38 37  8B9-4BA7-91AC-87
2b990 33 46 35 33 33 38 46 31 44 32 22 29 3b 0d 0a 0d  3F5338F1D2");...
2b9a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2b9b0 20 70 61 63 6b 61 67 65 2e 50 61 63 6b 61 67 65   package.Package
2b9c0 49 64 20 3d 20 6e 65 77 20 47 75 69 64 28 0d 0a  Id = new Guid(..
2b9d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b9e0 20 20 20 20 22 44 43 42 45 36 43 38 44 2d 30 45      "DCBE6C8D-0E
2b9f0 35 37 2d 34 30 39 39 2d 41 31 38 33 2d 39 38 46  57-4099-A183-98F
2ba00 46 37 34 43 36 34 44 39 43 22 29 3b 0d 0a 0d 0a  F74C64D9C");....
2ba10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ba20 70 61 63 6b 61 67 65 2e 53 65 72 76 69 63 65 49  package.ServiceI
2ba30 64 20 3d 20 6e 65 77 20 47 75 69 64 28 0d 0a 20  d = new Guid(.. 
2ba40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ba50 20 20 20 22 44 43 42 45 36 43 38 44 2d 30 45 35     "DCBE6C8D-0E5
2ba60 37 2d 34 30 39 39 2d 41 31 38 33 2d 39 38 46 46  7-4099-A183-98FF
2ba70 37 34 43 36 34 44 39 44 22 29 3b 0d 0a 0d 0a 20  74C64D9D");.... 
2ba80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70                 p
2ba90 61 63 6b 61 67 65 2e 44 61 74 61 53 6f 75 72 63  ackage.DataSourc
2baa0 65 49 64 20 3d 20 6e 65 77 20 47 75 69 64 28 0d  eId = new Guid(.
2bab0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2bac0 20 20 20 20 20 22 30 45 42 41 41 42 36 45 2d 43       "0EBAAB6E-C
2bad0 41 38 30 2d 34 42 34 41 2d 38 44 44 46 2d 43 42  A80-4B4A-8DDF-CB
2bae0 45 36 42 46 30 35 38 43 37 31 22 29 3b 0d 0a 0d  E6BF058C71");...
2baf0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2bb00 20 70 61 63 6b 61 67 65 2e 44 61 74 61 50 72 6f   package.DataPro
2bb10 76 69 64 65 72 49 64 20 3d 20 6e 65 77 20 47 75  viderId = new Gu
2bb20 69 64 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  id(..           
2bb30 20 20 20 20 20 20 20 20 20 22 30 45 42 41 41 42           "0EBAAB
2bb40 36 45 2d 43 41 38 30 2d 34 42 34 41 2d 38 44 44  6E-CA80-4B4A-8DD
2bb50 46 2d 43 42 45 36 42 46 30 35 38 43 37 30 22 29  F-CBE6BF058C70")
2bb60 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
2bb70 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
2bb80 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
2bb90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2bba0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2bbb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2bbc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
2bbd0 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
2bbe0 65 20 73 74 61 74 69 63 20 62 6f 6f 6c 20 41 64  e static bool Ad
2bbf0 64 56 73 50 61 63 6b 61 67 65 28 0d 0a 20 20 20  dVsPackage(..   
2bc00 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65 67           MockReg
2bc10 69 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79  istryKey rootKey
2bc20 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 56  ,..            V
2bc30 65 72 73 69 6f 6e 20 76 73 56 65 72 73 69 6f 6e  ersion vsVersion
2bc40 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 50  ,..            P
2bc50 61 63 6b 61 67 65 20 70 61 63 6b 61 67 65 2c 0d  ackage package,.
2bc60 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72  .            str
2bc70 69 6e 67 20 66 69 6c 65 4e 61 6d 65 2c 0d 0a 20  ing fileName,.. 
2bc80 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
2bc90 77 6f 77 36 34 2c 0d 0a 20 20 20 20 20 20 20 20  wow64,..        
2bca0 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c      bool whatIf,
2bcb0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
2bcc0 6f 6c 20 76 65 72 62 6f 73 65 2c 0d 0a 20 20 20  ol verbose,..   
2bcd0 20 20 20 20 20 20 20 20 20 72 65 66 20 73 74 72           ref str
2bce0 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20 20 20  ing error..     
2bcf0 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
2bd00 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
2bd10 20 69 66 20 28 76 73 56 65 72 73 69 6f 6e 20 3d   if (vsVersion =
2bd20 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
2bd30 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
2bd40 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
2bd50 22 69 6e 76 61 6c 69 64 20 56 53 20 76 65 72 73  "invalid VS vers
2bd60 69 6f 6e 22 3b 0d 0a 20 20 20 20 20 20 20 20 20  ion";..         
2bd70 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
2bd80 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lse;..          
2bd90 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
2bda0 20 20 20 69 66 20 28 70 61 63 6b 61 67 65 20 3d     if (package =
2bdb0 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
2bdc0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
2bdd0 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
2bde0 22 69 6e 76 61 6c 69 64 20 56 53 20 70 61 63 6b  "invalid VS pack
2bdf0 61 67 65 22 3b 0d 0a 20 20 20 20 20 20 20 20 20  age";..         
2be00 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
2be10 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lse;..          
2be20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
2be30 20 20 20 73 74 72 69 6e 67 20 6b 65 79 4e 61 6d     string keyNam
2be40 65 20 3d 20 47 65 74 56 73 4b 65 79 4e 61 6d 65  e = GetVsKeyName
2be50 28 76 73 56 65 72 73 69 6f 6e 2c 20 77 6f 77 36  (vsVersion, wow6
2be60 34 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  4);....         
2be70 20 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65     using (MockRe
2be80 67 69 73 74 72 79 4b 65 79 20 6b 65 79 20 3d 20  gistryKey key = 
2be90 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 4f  RegistryHelper.O
2bea0 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20 20  penSubKey(..    
2beb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bec0 72 6f 6f 74 4b 65 79 2c 20 6b 65 79 4e 61 6d 65  rootKey, keyName
2bed0 2c 20 66 61 6c 73 65 2c 20 77 68 61 74 49 66 2c  , false, whatIf,
2bee0 20 76 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 20   verbose))..    
2bef0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
2bf00 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6b             if (k
2bf10 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ey == null)..   
2bf20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
2bf30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bf40 20 20 20 20 65 72 72 6f 72 20 3d 20 53 74 72 69      error = Stri
2bf50 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ng.Format(..    
2bf60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bf70 20 20 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20 6f      "could not o
2bf80 70 65 6e 20 72 65 67 69 73 74 72 79 20 6b 65 79  pen registry key
2bf90 3a 20 7b 30 7d 5c 5c 7b 31 7d 22 2c 0d 0a 20 20  : {0}\\{1}",..  
2bfa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bfb0 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 6b        rootKey, k
2bfc0 65 79 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20  eyName);....    
2bfd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bfe0 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20  return false;.. 
2bff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
2c000 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2c010 20 20 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52      using (MockR
2c020 65 67 69 73 74 72 79 4b 65 79 20 73 75 62 4b 65  egistryKey subKe
2c030 79 20 3d 20 52 65 67 69 73 74 72 79 48 65 6c 70  y = RegistryHelp
2c040 65 72 2e 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a  er.OpenSubKey(..
2c050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c060 20 20 20 20 20 20 20 20 6b 65 79 2c 20 22 50 61          key, "Pa
2c070 63 6b 61 67 65 73 22 2c 20 74 72 75 65 2c 20 77  ckages", true, w
2c080 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 29  hatIf, verbose))
2c090 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2c0a0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
2c0b0 20 20 20 20 20 20 20 20 20 69 66 20 28 73 75 62           if (sub
2c0c0 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  Key == null)..  
2c0d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c0e0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
2c0f0 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
2c100 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d  or = String.Form
2c110 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
2c120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c130 20 22 63 6f 75 6c 64 20 6e 6f 74 20 6f 70 65 6e   "could not open
2c140 20 72 65 67 69 73 74 72 79 20 6b 65 79 3a 20 7b   registry key: {
2c150 30 7d 5c 5c 50 61 63 6b 61 67 65 73 22 2c 0d 0a  0}\\Packages",..
2c160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c170 20 20 20 20 20 20 20 20 20 20 20 20 6b 65 79 29              key)
2c180 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
2c190 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
2c1a0 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20  urn false;..    
2c1b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c1c0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
2c1d0 20 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28           using (
2c1e0 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20  MockRegistryKey 
2c1f0 70 61 63 6b 61 67 65 4b 65 79 20 3d 0d 0a 20 20  packageKey =..  
2c200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c210 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74            Regist
2c220 72 79 48 65 6c 70 65 72 2e 43 72 65 61 74 65 53  ryHelper.CreateS
2c230 75 62 4b 65 79 28 73 75 62 4b 65 79 2c 0d 0a 20  ubKey(subKey,.. 
2c240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c250 20 20 20 20 20 20 20 20 20 20 20 70 61 63 6b 61             packa
2c260 67 65 2e 50 61 63 6b 61 67 65 49 64 2e 54 6f 53  ge.PackageId.ToS
2c270 74 72 69 6e 67 28 56 73 49 64 46 6f 72 6d 61 74  tring(VsIdFormat
2c280 29 2c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20  ), whatIf,..    
2c290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c2a0 20 20 20 20 20 20 20 20 76 65 72 62 6f 73 65 29          verbose)
2c2b0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
2c2c0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
2c2d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c2e0 20 20 69 66 20 28 70 61 63 6b 61 67 65 4b 65 79    if (packageKey
2c2f0 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
2c300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c310 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
2c320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c330 20 20 65 72 72 6f 72 20 3d 20 53 74 72 69 6e 67    error = String
2c340 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  .Format(..      
2c350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c360 20 20 20 20 20 20 20 20 20 20 22 63 6f 75 6c 64            "could
2c370 20 6e 6f 74 20 63 72 65 61 74 65 20 72 65 67 69   not create regi
2c380 73 74 72 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c 7b  stry key: {0}\\{
2c390 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  1}",..          
2c3a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c3b0 20 20 20 20 20 20 6b 65 79 2c 20 70 61 63 6b 61        key, packa
2c3c0 67 65 2e 50 61 63 6b 61 67 65 49 64 2e 54 6f 53  ge.PackageId.ToS
2c3d0 74 72 69 6e 67 28 56 73 49 64 46 6f 72 6d 61 74  tring(VsIdFormat
2c3e0 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ));....         
2c3f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c400 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
2c410 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2c420 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
2c430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c440 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79 48         RegistryH
2c450 65 6c 70 65 72 2e 53 65 74 56 61 6c 75 65 28 70  elper.SetValue(p
2c460 61 63 6b 61 67 65 4b 65 79 2c 20 6e 75 6c 6c 2c  ackageKey, null,
2c470 0d 0a 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 20 20 20 20 53 74                St
2c490 72 69 6e 67 2e 46 6f 72 6d 61 74 28 22 7b 30 7d  ring.Format("{0}
2c4a0 20 44 65 73 69 67 6e 65 72 20 50 61 63 6b 61 67   Designer Packag
2c4b0 65 22 2c 20 50 72 6f 6a 65 63 74 4e 61 6d 65 29  e", ProjectName)
2c4c0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
2c4d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 77                 w
2c4e0 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 3b  hatIf, verbose);
2c4f0 0d 0a 0d 0a 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 52 65 67 69              Regi
2c510 73 74 72 79 48 65 6c 70 65 72 2e 53 65 74 56 61  stryHelper.SetVa
2c520 6c 75 65 28 70 61 63 6b 61 67 65 4b 65 79 2c 20  lue(packageKey, 
2c530 22 43 6c 61 73 73 22 2c 0d 0a 20 20 20 20 20 20  "Class",..      
2c540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c550 20 20 20 20 20 20 22 53 51 4c 69 74 65 2e 44 65        "SQLite.De
2c560 73 69 67 6e 65 72 2e 53 51 4c 69 74 65 50 61 63  signer.SQLitePac
2c570 6b 61 67 65 22 2c 20 77 68 61 74 49 66 2c 20 76  kage", whatIf, v
2c580 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20  erbose);....    
2c590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c5a0 20 20 20 20 52 65 67 69 73 74 72 79 48 65 6c 70      RegistryHelp
2c5b0 65 72 2e 53 65 74 56 61 6c 75 65 28 70 61 63 6b  er.SetValue(pack
2c5c0 61 67 65 4b 65 79 2c 20 22 43 6f 64 65 42 61 73  ageKey, "CodeBas
2c5d0 65 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e",..           
2c5e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c5f0 20 66 69 6c 65 4e 61 6d 65 2c 20 77 68 61 74 49   fileName, whatI
2c600 66 2c 20 76 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a  f, verbose);....
2c610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c620 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79          Registry
2c630 48 65 6c 70 65 72 2e 53 65 74 56 61 6c 75 65 28  Helper.SetValue(
2c640 70 61 63 6b 61 67 65 4b 65 79 2c 20 22 49 44 22  packageKey, "ID"
2c650 2c 20 34 30 30 2c 20 77 68 61 74 49 66 2c 0d 0a  , 400, whatIf,..
2c660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c670 20 20 20 20 20 20 20 20 20 20 20 20 76 65 72 62              verb
2c680 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ose);....       
2c690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c6a0 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e   RegistryHelper.
2c6b0 53 65 74 56 61 6c 75 65 28 70 61 63 6b 61 67 65  SetValue(package
2c6c0 4b 65 79 2c 20 22 49 6e 70 72 6f 63 53 65 72 76  Key, "InprocServ
2c6d0 65 72 33 32 22 2c 0d 0a 20 20 20 20 20 20 20 20  er32",..        
2c6e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c6f0 20 20 20 20 50 61 74 68 2e 43 6f 6d 62 69 6e 65      Path.Combine
2c700 28 45 6e 76 69 72 6f 6e 6d 65 6e 74 2e 53 79 73  (Environment.Sys
2c710 74 65 6d 44 69 72 65 63 74 6f 72 79 2c 0d 0a 20  temDirectory,.. 
2c720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
2c740 6d 73 63 6f 72 65 65 2e 64 6c 6c 22 29 2c 20 77  mscoree.dll"), w
2c750 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 3b  hatIf, verbose);
2c760 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2c770 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69              Regi
2c780 73 74 72 79 48 65 6c 70 65 72 2e 53 65 74 56 61  stryHelper.SetVa
2c790 6c 75 65 28 70 61 63 6b 61 67 65 4b 65 79 2c 20  lue(packageKey, 
2c7a0 22 43 6f 6d 70 61 6e 79 4e 61 6d 65 22 2c 0d 0a  "CompanyName",..
2c7b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c7c0 20 20 20 20 20 20 20 20 20 20 20 20 22 68 74 74              "htt
2c7d0 70 3a 2f 2f 73 79 73 74 65 6d 2e 64 61 74 61 2e  p://system.data.
2c7e0 73 71 6c 69 74 65 2e 6f 72 67 2f 22 2c 20 77 68  sqlite.org/", wh
2c7f0 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 3b 0d  atIf, verbose);.
2c800 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
2c810 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73             Regis
2c820 74 72 79 48 65 6c 70 65 72 2e 53 65 74 56 61 6c  tryHelper.SetVal
2c830 75 65 28 70 61 63 6b 61 67 65 4b 65 79 2c 20 22  ue(packageKey, "
2c840 4d 69 6e 45 64 69 74 69 6f 6e 22 2c 0d 0a 20 20  MinEdition",..  
2c850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c860 20 20 20 20 20 20 20 20 20 20 22 73 74 61 6e 64            "stand
2c870 61 72 64 22 2c 20 77 68 61 74 49 66 2c 20 76 65  ard", whatIf, ve
2c880 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20  rbose);....     
2c890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c8a0 20 20 20 52 65 67 69 73 74 72 79 48 65 6c 70 65     RegistryHelpe
2c8b0 72 2e 53 65 74 56 61 6c 75 65 28 70 61 63 6b 61  r.SetValue(packa
2c8c0 67 65 4b 65 79 2c 20 22 50 72 6f 64 75 63 74 4e  geKey, "ProductN
2c8d0 61 6d 65 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  ame",..         
2c8e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c8f0 20 20 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74     String.Format
2c900 28 22 7b 30 7d 20 44 65 73 69 67 6e 65 72 20 50  ("{0} Designer P
2c910 61 63 6b 61 67 65 22 2c 20 50 72 6f 6a 65 63 74  ackage", Project
2c920 4e 61 6d 65 29 2c 0d 0a 20 20 20 20 20 20 20 20  Name),..        
2c930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c940 20 20 20 20 77 68 61 74 49 66 2c 20 76 65 72 62      whatIf, verb
2c950 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ose);....       
2c960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c970 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e   RegistryHelper.
2c980 53 65 74 56 61 6c 75 65 28 70 61 63 6b 61 67 65  SetValue(package
2c990 4b 65 79 2c 20 22 50 72 6f 64 75 63 74 56 65 72  Key, "ProductVer
2c9a0 73 69 6f 6e 22 2c 0d 0a 20 20 20 20 20 20 20 20  sion",..        
2c9b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c9c0 20 20 20 20 22 31 2e 30 22 2c 20 77 68 61 74 49      "1.0", whatI
2c9d0 66 2c 20 76 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a  f, verbose);....
2c9e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c9f0 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 4d          using (M
2ca00 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 74  ockRegistryKey t
2ca10 6f 6f 6c 62 6f 78 4b 65 79 20 3d 0d 0a 20 20 20  oolboxKey =..   
2ca20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ca30 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67               Reg
2ca40 69 73 74 72 79 48 65 6c 70 65 72 2e 43 72 65 61  istryHelper.Crea
2ca50 74 65 53 75 62 4b 65 79 28 70 61 63 6b 61 67 65  teSubKey(package
2ca60 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  Key,..          
2ca70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ca80 20 20 20 20 20 20 22 54 6f 6f 6c 62 6f 78 22 2c        "Toolbox",
2ca90 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65   whatIf, verbose
2caa0 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
2cab0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
2cac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cad0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 74             if (t
2cae0 6f 6f 6c 62 6f 78 4b 65 79 20 3d 3d 20 6e 75 6c  oolboxKey == nul
2caf0 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
2cb00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cb10 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
2cb20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cb30 20 20 20 65 72 72 6f 72 20 3d 20 53 74 72 69 6e     error = Strin
2cb40 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
2cb50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cb60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
2cb70 63 6f 75 6c 64 20 6e 6f 74 20 63 72 65 61 74 65  could not create
2cb80 20 72 65 67 69 73 74 72 79 20 6b 65 79 3a 20 22   registry key: "
2cb90 20 2b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   +..            
2cba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cbb0 20 20 20 20 20 20 20 20 22 7b 30 7d 5c 5c 54 6f          "{0}\\To
2cbc0 6f 6c 62 6f 78 22 2c 20 70 61 63 6b 61 67 65 4b  olbox", packageK
2cbd0 65 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ey);....        
2cbe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cbf0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
2cc00 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alse;..         
2cc10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cc20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
2cc30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cc40 20 20 20 20 52 65 67 69 73 74 72 79 48 65 6c 70      RegistryHelp
2cc50 65 72 2e 53 65 74 56 61 6c 75 65 28 0d 0a 20 20  er.SetValue(..  
2cc60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cc70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 6f                to
2cc80 6f 6c 62 6f 78 4b 65 79 2c 20 22 44 65 66 61 75  olboxKey, "Defau
2cc90 6c 74 20 49 74 65 6d 73 22 2c 20 33 2c 20 77 68  lt Items", 3, wh
2cca0 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20  atIf,..         
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 76 65 72 62 6f 73 65 29 3b         verbose);
2ccd0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2cce0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
2ccf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cd00 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
2cd10 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
2cd20 20 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28           using (
2cd30 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20  MockRegistryKey 
2cd40 73 75 62 4b 65 79 20 3d 20 52 65 67 69 73 74 72  subKey = Registr
2cd50 79 48 65 6c 70 65 72 2e 4f 70 65 6e 53 75 62 4b  yHelper.OpenSubK
2cd60 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ey(..           
2cd70 20 20 20 20 20 20 20 20 20 20 20 20 20 6b 65 79               key
2cd80 2c 20 22 4d 65 6e 75 73 22 2c 20 74 72 75 65 2c  , "Menus", true,
2cd90 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65   whatIf, verbose
2cda0 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
2cdb0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
2cdc0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 73             if (s
2cdd0 75 62 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  ubKey == null)..
2cde0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cdf0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
2ce00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
2ce10 72 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f  rror = String.Fo
2ce20 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
2ce30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ce40 20 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20 6f 70     "could not op
2ce50 65 6e 20 72 65 67 69 73 74 72 79 20 6b 65 79 3a  en registry key:
2ce60 20 7b 30 7d 5c 5c 4d 65 6e 75 73 22 2c 0d 0a 20   {0}\\Menus",.. 
2ce70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ce80 20 20 20 20 20 20 20 20 20 20 20 6b 65 79 29 3b             key);
2ce90 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2cea0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
2ceb0 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20  rn false;..     
2cec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
2ced0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2cee0 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79          Registry
2cef0 48 65 6c 70 65 72 2e 53 65 74 56 61 6c 75 65 28  Helper.SetValue(
2cf00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2cf10 20 20 20 20 20 20 20 20 20 20 73 75 62 4b 65 79            subKey
2cf20 2c 20 70 61 63 6b 61 67 65 2e 50 61 63 6b 61 67  , package.Packag
2cf30 65 49 64 2e 54 6f 53 74 72 69 6e 67 28 56 73 49  eId.ToString(VsI
2cf40 64 46 6f 72 6d 61 74 29 2c 0d 0a 20 20 20 20 20  dFormat),..     
2cf50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cf60 20 20 20 22 2c 20 31 30 30 30 2c 20 33 22 2c 20     ", 1000, 3", 
2cf70 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29  whatIf, verbose)
2cf80 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
2cf90 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
2cfa0 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 4d          using (M
2cfb0 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 73  ockRegistryKey s
2cfc0 75 62 4b 65 79 20 3d 20 52 65 67 69 73 74 72 79  ubKey = Registry
2cfd0 48 65 6c 70 65 72 2e 4f 70 65 6e 53 75 62 4b 65  Helper.OpenSubKe
2cfe0 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y(..            
2cff0 20 20 20 20 20 20 20 20 20 20 20 20 6b 65 79 2c              key,
2d000 20 22 53 65 72 76 69 63 65 73 22 2c 20 74 72 75   "Services", tru
2d010 65 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f  e, whatIf, verbo
2d020 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  se))..          
2d030 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
2d040 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
2d050 28 73 75 62 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29  (subKey == null)
2d060 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2d070 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
2d080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d090 20 65 72 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e   error = String.
2d0a0 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
2d0b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d0c0 20 20 20 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20       "could not 
2d0d0 6f 70 65 6e 20 72 65 67 69 73 74 72 79 20 6b 65  open registry ke
2d0e0 79 3a 20 7b 30 7d 5c 5c 53 65 72 76 69 63 65 73  y: {0}\\Services
2d0f0 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
2d100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d110 6b 65 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  key);....       
2d120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d130 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
2d140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d150 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
2d160 20 20 20 20 20 20 20 20 20 20 20 20 20 75 73 69               usi
2d170 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73 74 72 79  ng (MockRegistry
2d180 4b 65 79 20 73 65 72 76 69 63 65 4b 65 79 20 3d  Key serviceKey =
2d190 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2d1a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65                Re
2d1b0 67 69 73 74 72 79 48 65 6c 70 65 72 2e 43 72 65  gistryHelper.Cre
2d1c0 61 74 65 53 75 62 4b 65 79 28 73 75 62 4b 65 79  ateSubKey(subKey
2d1d0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
2d1e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70                 p
2d1f0 61 63 6b 61 67 65 2e 53 65 72 76 69 63 65 49 64  ackage.ServiceId
2d200 2e 54 6f 53 74 72 69 6e 67 28 56 73 49 64 46 6f  .ToString(VsIdFo
2d210 72 6d 61 74 29 2c 20 77 68 61 74 49 66 2c 0d 0a  rmat), whatIf,..
2d220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d230 20 20 20 20 20 20 20 20 20 20 20 20 76 65 72 62              verb
2d240 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ose))..         
2d250 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
2d260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d270 20 20 20 20 20 20 69 66 20 28 73 65 72 76 69 63        if (servic
2d280 65 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  eKey == null).. 
2d290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d2a0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
2d2b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d2c0 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 53 74        error = St
2d2d0 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
2d2e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d2f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 63                "c
2d300 6f 75 6c 64 20 6e 6f 74 20 63 72 65 61 74 65 20  ould not create 
2d310 72 65 67 69 73 74 72 79 20 6b 65 79 3a 20 7b 30  registry key: {0
2d320 7d 5c 5c 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20  }\\{1}",..      
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 20 20 20 6b 65 79 2c 20 70            key, p
2d350 61 63 6b 61 67 65 2e 53 65 72 76 69 63 65 49 64  ackage.ServiceId
2d360 2e 54 6f 53 74 72 69 6e 67 28 56 73 49 64 46 6f  .ToString(VsIdFo
2d370 72 6d 61 74 29 29 3b 0d 0a 0d 0a 20 20 20 20 20  rmat));....     
2d380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d390 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
2d3a0 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lse;..          
2d3b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
2d3c0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
2d3d0 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73             Regis
2d3e0 74 72 79 48 65 6c 70 65 72 2e 53 65 74 56 61 6c  tryHelper.SetVal
2d3f0 75 65 28 73 65 72 76 69 63 65 4b 65 79 2c 20 6e  ue(serviceKey, n
2d400 75 6c 6c 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ull,..          
2d410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d420 20 20 70 61 63 6b 61 67 65 2e 50 61 63 6b 61 67    package.Packag
2d430 65 49 64 2e 54 6f 53 74 72 69 6e 67 28 56 73 49  eId.ToString(VsI
2d440 64 46 6f 72 6d 61 74 29 2c 20 77 68 61 74 49 66  dFormat), whatIf
2d450 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
2d460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 76                 v
2d470 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20  erbose);....    
2d480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d490 20 20 20 20 52 65 67 69 73 74 72 79 48 65 6c 70      RegistryHelp
2d4a0 65 72 2e 53 65 74 56 61 6c 75 65 28 73 65 72 76  er.SetValue(serv
2d4b0 69 63 65 4b 65 79 2c 20 22 4e 61 6d 65 22 2c 0d  iceKey, "Name",.
2d4c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2d4d0 20 20 20 20 20 20 20 20 20 20 20 20 20 53 74 72               Str
2d4e0 69 6e 67 2e 46 6f 72 6d 61 74 28 22 7b 30 7d 20  ing.Format("{0} 
2d4f0 44 65 73 69 67 6e 65 72 20 53 65 72 76 69 63 65  Designer Service
2d500 22 2c 20 50 72 6f 6a 65 63 74 4e 61 6d 65 29 2c  ", ProjectName),
2d510 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2d520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 77 68                wh
2d530 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 3b 0d  atIf, verbose);.
2d540 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2d550 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
2d560 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
2d570 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
2d580 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74          return t
2d590 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  rue;..        }.
2d5a0 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
2d5b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d5c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d5d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d5e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d5f0 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72  //....        pr
2d600 69 76 61 74 65 20 73 74 61 74 69 63 20 62 6f 6f  ivate static boo
2d610 6c 20 52 65 6d 6f 76 65 56 73 50 61 63 6b 61 67  l RemoveVsPackag
2d620 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
2d630 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20  MockRegistryKey 
2d640 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20 20 20 20  rootKey,..      
2d650 20 20 20 20 20 20 56 65 72 73 69 6f 6e 20 76 73        Version vs
2d660 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20  Version,..      
2d670 20 20 20 20 20 20 50 61 63 6b 61 67 65 20 70 61        Package pa
2d680 63 6b 61 67 65 2c 0d 0a 20 20 20 20 20 20 20 20  ckage,..        
2d690 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34 2c 0d      bool wow64,.
2d6a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f  .            boo
2d6b0 6c 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67  l throwOnMissing
2d6c0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  ,..            b
2d6d0 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20  ool whatIf,..   
2d6e0 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65           bool ve
2d6f0 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20 20  rbose,..        
2d700 20 20 20 20 72 65 66 20 73 74 72 69 6e 67 20 65      ref string e
2d710 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20  rror..          
2d720 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a    )..        {..
2d730 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
2d740 76 73 56 65 72 73 69 6f 6e 20 3d 3d 20 6e 75 6c  vsVersion == nul
2d750 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
2d760 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
2d770 20 20 20 65 72 72 6f 72 20 3d 20 22 69 6e 76 61     error = "inva
2d780 6c 69 64 20 56 53 20 76 65 72 73 69 6f 6e 22 3b  lid VS version";
2d790 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2d7a0 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
2d7b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
2d7c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
2d7d0 20 28 70 61 63 6b 61 67 65 20 3d 3d 20 6e 75 6c   (package == nul
2d7e0 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
2d7f0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
2d800 20 20 20 65 72 72 6f 72 20 3d 20 22 69 6e 76 61     error = "inva
2d810 6c 69 64 20 56 53 20 70 61 63 6b 61 67 65 22 3b  lid VS package";
2d820 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2d830 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
2d840 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
2d850 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74  ..            st
2d860 72 69 6e 67 20 6b 65 79 4e 61 6d 65 20 3d 20 47  ring keyName = G
2d870 65 74 56 73 4b 65 79 4e 61 6d 65 28 76 73 56 65  etVsKeyName(vsVe
2d880 72 73 69 6f 6e 2c 20 77 6f 77 36 34 29 3b 0d 0a  rsion, wow64);..
2d890 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 75 73  ..            us
2d8a0 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73 74 72  ing (MockRegistr
2d8b0 79 4b 65 79 20 6b 65 79 20 3d 20 52 65 67 69 73  yKey key = Regis
2d8c0 74 72 79 48 65 6c 70 65 72 2e 4f 70 65 6e 53 75  tryHelper.OpenSu
2d8d0 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20  bKey(..         
2d8e0 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b             rootK
2d8f0 65 79 2c 20 6b 65 79 4e 61 6d 65 2c 20 66 61 6c  ey, keyName, fal
2d900 73 65 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62  se, whatIf, verb
2d910 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ose))..         
2d920 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
2d930 20 20 20 20 20 20 69 66 20 28 6b 65 79 20 3d 3d        if (key ==
2d940 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
2d950 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
2d960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
2d970 72 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f  rror = String.Fo
2d980 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
2d990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
2d9a0 63 6f 75 6c 64 20 6e 6f 74 20 6f 70 65 6e 20 72  could not open r
2d9b0 65 67 69 73 74 72 79 20 6b 65 79 3a 20 7b 30 7d  egistry key: {0}
2d9c0 5c 5c 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20  \\{1}",..       
2d9d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d9e0 20 72 6f 6f 74 4b 65 79 2c 20 6b 65 79 4e 61 6d   rootKey, keyNam
2d9f0 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e);....         
2da00 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
2da10 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  n false;..      
2da20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
2da30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 75                 u
2da40 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73 74  sing (MockRegist
2da50 72 79 4b 65 79 20 73 75 62 4b 65 79 20 3d 20 52  ryKey subKey = R
2da60 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 4f 70  egistryHelper.Op
2da70 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20  enSubKey(..     
2da80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2da90 20 20 20 6b 65 79 2c 20 22 50 61 63 6b 61 67 65     key, "Package
2daa0 73 22 2c 20 74 72 75 65 2c 20 77 68 61 74 49 66  s", true, whatIf
2dab0 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a 20 20 20  , verbose))..   
2dac0 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
2dad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2dae0 20 20 20 20 69 66 20 28 73 75 62 4b 65 79 20 3d      if (subKey =
2daf0 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
2db00 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
2db10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2db20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
2db30 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
2db40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2db50 20 20 20 20 20 20 20 20 20 20 20 20 22 63 6f 75              "cou
2db60 6c 64 20 6e 6f 74 20 6f 70 65 6e 20 72 65 67 69  ld not open regi
2db70 73 74 72 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c 50  stry key: {0}\\P
2db80 61 63 6b 61 67 65 73 22 2c 0d 0a 20 20 20 20 20  ackages",..     
2db90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2dba0 20 20 20 20 20 20 20 6b 65 79 29 3b 0d 0a 0d 0a         key);....
2dbb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2dbc0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
2dbd0 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alse;..         
2dbe0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
2dbf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2dc00 20 20 20 20 52 65 67 69 73 74 72 79 48 65 6c 70      RegistryHelp
2dc10 65 72 2e 44 65 6c 65 74 65 53 75 62 4b 65 79 54  er.DeleteSubKeyT
2dc20 72 65 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ree(..          
2dc30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 75                su
2dc40 62 4b 65 79 2c 20 70 61 63 6b 61 67 65 2e 50 61  bKey, package.Pa
2dc50 63 6b 61 67 65 49 64 2e 54 6f 53 74 72 69 6e 67  ckageId.ToString
2dc60 28 56 73 49 64 46 6f 72 6d 61 74 29 2c 0d 0a 20  (VsIdFormat),.. 
2dc70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2dc80 20 20 20 20 20 20 20 77 68 61 74 49 66 2c 20 76         whatIf, v
2dc90 65 72 62 6f 73 65 29 3b 0d 0a 20 20 20 20 20 20  erbose);..      
2dca0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
2dcb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 75                 u
2dcc0 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73 74  sing (MockRegist
2dcd0 72 79 4b 65 79 20 73 75 62 4b 65 79 20 3d 20 52  ryKey subKey = R
2dce0 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 4f 70  egistryHelper.Op
2dcf0 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20  enSubKey(..     
2dd00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2dd10 20 20 20 6b 65 79 2c 20 22 4d 65 6e 75 73 22 2c     key, "Menus",
2dd20 20 74 72 75 65 2c 20 77 68 61 74 49 66 2c 20 76   true, whatIf, v
2dd30 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20 20  erbose))..      
2dd40 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
2dd50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2dd60 20 69 66 20 28 73 75 62 4b 65 79 20 3d 3d 20 6e   if (subKey == n
2dd70 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
2dd80 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
2dd90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2dda0 20 20 20 20 20 65 72 72 6f 72 20 3d 20 53 74 72       error = Str
2ddb0 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
2ddc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ddd0 20 20 20 20 20 20 20 20 20 22 63 6f 75 6c 64 20           "could 
2dde0 6e 6f 74 20 6f 70 65 6e 20 72 65 67 69 73 74 72  not open registr
2ddf0 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c 4d 65 6e 75  y key: {0}\\Menu
2de00 73 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s",..           
2de10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2de20 20 6b 65 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20   key);....      
2de30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2de40 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
2de50 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2de60 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
2de70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65                Re
2de80 67 69 73 74 72 79 48 65 6c 70 65 72 2e 44 65 6c  gistryHelper.Del
2de90 65 74 65 56 61 6c 75 65 28 0d 0a 20 20 20 20 20  eteValue(..     
2dea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2deb0 20 20 20 73 75 62 4b 65 79 2c 20 70 61 63 6b 61     subKey, packa
2dec0 67 65 2e 50 61 63 6b 61 67 65 49 64 2e 54 6f 53  ge.PackageId.ToS
2ded0 74 72 69 6e 67 28 56 73 49 64 46 6f 72 6d 61 74  tring(VsIdFormat
2dee0 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
2def0 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f              thro
2df00 77 4f 6e 4d 69 73 73 69 6e 67 2c 20 77 68 61 74  wOnMissing, what
2df10 49 66 2c 20 76 65 72 62 6f 73 65 29 3b 0d 0a 20  If, verbose);.. 
2df20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
2df30 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2df40 20 20 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52      using (MockR
2df50 65 67 69 73 74 72 79 4b 65 79 20 73 75 62 4b 65  egistryKey subKe
2df60 79 20 3d 20 52 65 67 69 73 74 72 79 48 65 6c 70  y = RegistryHelp
2df70 65 72 2e 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a  er.OpenSubKey(..
2df80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2df90 20 20 20 20 20 20 20 20 6b 65 79 2c 20 22 53 65          key, "Se
2dfa0 72 76 69 63 65 73 22 2c 20 74 72 75 65 2c 20 77  rvices", true, w
2dfb0 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 29  hatIf, verbose))
2dfc0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2dfd0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
2dfe0 20 20 20 20 20 20 20 20 20 69 66 20 28 73 75 62           if (sub
2dff0 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  Key == null)..  
2e000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e010 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
2e020 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
2e030 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d  or = String.Form
2e040 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
2e050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e060 20 22 63 6f 75 6c 64 20 6e 6f 74 20 6f 70 65 6e   "could not open
2e070 20 72 65 67 69 73 74 72 79 20 6b 65 79 3a 20 7b   registry key: {
2e080 30 7d 5c 5c 53 65 72 76 69 63 65 73 22 2c 0d 0a  0}\\Services",..
2e090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e0a0 20 20 20 20 20 20 20 20 20 20 20 20 6b 65 79 29              key)
2e0b0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
2e0c0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
2e0d0 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20  urn false;..    
2e0e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e0f0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
2e100 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72           Registr
2e110 79 48 65 6c 70 65 72 2e 44 65 6c 65 74 65 53 75  yHelper.DeleteSu
2e120 62 4b 65 79 54 72 65 65 28 0d 0a 20 20 20 20 20  bKeyTree(..     
2e130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e140 20 20 20 73 75 62 4b 65 79 2c 20 70 61 63 6b 61     subKey, packa
2e150 67 65 2e 53 65 72 76 69 63 65 49 64 2e 54 6f 53  ge.ServiceId.ToS
2e160 74 72 69 6e 67 28 56 73 49 64 46 6f 72 6d 61 74  tring(VsIdFormat
2e170 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
2e180 20 20 20 20 20 20 20 20 20 20 20 20 77 68 61 74              what
2e190 49 66 2c 20 76 65 72 62 6f 73 65 29 3b 0d 0a 20  If, verbose);.. 
2e1a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
2e1b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
2e1c0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  ...            r
2e1d0 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20  eturn true;..   
2e1e0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
2e1f0 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
2e200 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e210 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e220 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e230 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
2e240 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61       private sta
2e250 74 69 63 20 62 6f 6f 6c 20 50 72 6f 63 65 73 73  tic bool Process
2e260 56 73 50 61 63 6b 61 67 65 28 0d 0a 20 20 20 20  VsPackage(..    
2e270 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65 67 69          MockRegi
2e280 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79 2c  stryKey rootKey,
2e290 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 56 65  ..            Ve
2e2a0 72 73 69 6f 6e 20 76 73 56 65 72 73 69 6f 6e 2c  rsion vsVersion,
2e2b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 50 61  ..            Pa
2e2c0 63 6b 61 67 65 20 70 61 63 6b 61 67 65 2c 0d 0a  ckage package,..
2e2d0 20 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65              obje
2e2e0 63 74 20 63 6c 69 65 6e 74 44 61 74 61 2c 0d 0a  ct clientData,..
2e2f0 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
2e300 20 77 6f 77 36 34 2c 0d 0a 20 20 20 20 20 20 20   wow64,..       
2e310 20 20 20 20 20 62 6f 6f 6c 20 74 68 72 6f 77 4f       bool throwO
2e320 6e 4d 69 73 73 69 6e 67 2c 0d 0a 20 20 20 20 20  nMissing,..     
2e330 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74         bool what
2e340 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  If,..           
2e350 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 0d 0a   bool verbose,..
2e360 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20              ref 
2e370 73 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20  string error..  
2e380 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
2e390 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
2e3a0 20 20 20 20 41 6e 79 50 61 69 72 3c 73 74 72 69      AnyPair<stri
2e3b0 6e 67 2c 20 62 6f 6f 6c 3e 20 70 61 69 72 20 3d  ng, bool> pair =
2e3c0 20 63 6c 69 65 6e 74 44 61 74 61 20 61 73 20 41   clientData as A
2e3d0 6e 79 50 61 69 72 3c 73 74 72 69 6e 67 2c 20 62  nyPair<string, b
2e3e0 6f 6f 6c 3e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ool>;....       
2e3f0 20 20 20 20 20 69 66 20 28 70 61 69 72 20 3d 3d       if (pair ==
2e400 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
2e410 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
2e420 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22         error = "
2e430 69 6e 76 61 6c 69 64 20 56 53 20 63 61 6c 6c 62  invalid VS callb
2e440 61 63 6b 20 64 61 74 61 22 3b 0d 0a 20 20 20 20  ack data";..    
2e450 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
2e460 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20  rn false;..     
2e470 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
2e480 20 20 20 20 20 20 20 20 69 66 20 28 70 61 69 72          if (pair
2e490 2e 59 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  .Y)..           
2e4a0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
2e4b0 20 20 20 20 72 65 74 75 72 6e 20 41 64 64 56 73      return AddVs
2e4c0 50 61 63 6b 61 67 65 28 0d 0a 20 20 20 20 20 20  Package(..      
2e4d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f                ro
2e4e0 6f 74 4b 65 79 2c 20 76 73 56 65 72 73 69 6f 6e  otKey, vsVersion
2e4f0 2c 20 70 61 63 6b 61 67 65 2c 20 70 61 69 72 2e  , package, pair.
2e500 58 2c 20 77 6f 77 36 34 2c 20 77 68 61 74 49 66  X, wow64, whatIf
2e510 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
2e520 20 20 20 20 20 20 20 76 65 72 62 6f 73 65 2c 20         verbose, 
2e530 72 65 66 20 65 72 72 6f 72 29 3b 0d 0a 20 20 20  ref error);..   
2e540 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
2e550 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20          else..  
2e560 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
2e570 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
2e580 75 72 6e 20 52 65 6d 6f 76 65 56 73 50 61 63 6b  urn RemoveVsPack
2e590 61 67 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  age(..          
2e5a0 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65            rootKe
2e5b0 79 2c 20 76 73 56 65 72 73 69 6f 6e 2c 20 70 61  y, vsVersion, pa
2e5c0 63 6b 61 67 65 2c 20 77 6f 77 36 34 2c 20 74 68  ckage, wow64, th
2e5d0 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 2c 0d 0a 20  rowOnMissing,.. 
2e5e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e5f0 20 20 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f     whatIf, verbo
2e600 73 65 2c 20 72 65 66 20 65 72 72 6f 72 29 3b 0d  se, ref error);.
2e610 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
2e620 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
2e630 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 20     #endregion.. 
2e640 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f         #endregio
2e650 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  n....        ///
2e660 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e670 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e680 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e690 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e6a0 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
2e6b0 23 72 65 67 69 6f 6e 20 41 70 70 6c 69 63 61 74  #region Applicat
2e6c0 69 6f 6e 20 45 6e 74 72 79 20 50 6f 69 6e 74 0d  ion Entry Point.
2e6d0 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
2e6e0 20 73 74 61 74 69 63 20 69 6e 74 20 4d 61 69 6e   static int Main
2e6f0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  (..            s
2e700 74 72 69 6e 67 5b 5d 20 61 72 67 73 0d 0a 20 20  tring[] args..  
2e710 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
2e720 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
2e730 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20      try..       
2e740 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
2e750 20 20 20 20 20 20 20 20 43 6f 6e 66 69 67 75 72          Configur
2e760 61 74 69 6f 6e 20 63 6f 6e 66 69 67 75 72 61 74  ation configurat
2e770 69 6f 6e 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20  ion = null;..   
2e780 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72               str
2e790 69 6e 67 20 65 72 72 6f 72 20 3d 20 6e 75 6c 6c  ing error = null
2e7a0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
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 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
2e800 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20          #region 
2e810 43 6f 6d 6d 61 6e 64 20 4c 69 6e 65 20 50 72 6f  Command Line Pro
2e820 63 65 73 73 69 6e 67 0d 0a 20 20 20 20 20 20 20  cessing..       
2e830 20 20 20 20 20 20 20 20 20 69 66 20 28 21 43 6f           if (!Co
2e840 6e 66 69 67 75 72 61 74 69 6f 6e 2e 46 72 6f 6d  nfiguration.From
2e850 41 72 67 73 28 0d 0a 20 20 20 20 20 20 20 20 20  Args(..         
2e860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61                 a
2e870 72 67 73 2c 20 74 72 75 65 2c 20 72 65 66 20 63  rgs, true, ref c
2e880 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2c 20 72 65  onfiguration, re
2e890 66 20 65 72 72 6f 72 29 20 7c 7c 0d 0a 20 20 20  f error) ||..   
2e8a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e8b0 20 21 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e   !Configuration.
2e8c0 50 72 6f 63 65 73 73 28 0d 0a 20 20 20 20 20 20  Process(..      
2e8d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e8e0 20 20 61 72 67 73 2c 20 63 6f 6e 66 69 67 75 72    args, configur
2e8f0 61 74 69 6f 6e 2c 20 74 72 75 65 2c 20 72 65 66  ation, true, ref
2e900 20 65 72 72 6f 72 29 20 7c 7c 0d 0a 20 20 20 20   error) ||..    
2e910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e920 21 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 43  !Configuration.C
2e930 68 65 63 6b 52 75 6e 74 69 6d 65 56 65 72 73 69  heckRuntimeVersi
2e940 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  on(..           
2e950 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
2e960 66 69 67 75 72 61 74 69 6f 6e 2c 20 74 72 75 65  figuration, true
2e970 2c 20 72 65 66 20 65 72 72 6f 72 29 29 0d 0a 20  , ref error)).. 
2e980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
2e990 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2e9a0 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 53        TraceOps.S
2e9b0 68 6f 77 4d 65 73 73 61 67 65 28 54 72 61 63 65  howMessage(Trace
2e9c0 50 72 69 6f 72 69 74 79 2e 48 69 67 68 65 73 74  Priority.Highest
2e9d0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
2e9e0 20 20 20 20 20 20 20 20 20 20 20 64 65 62 75 67             debug
2e9f0 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43  Callback, traceC
2ea00 61 6c 6c 62 61 63 6b 2c 20 74 68 69 73 41 73 73  allback, thisAss
2ea10 65 6d 62 6c 79 2c 0d 0a 20 20 20 20 20 20 20 20  embly,..        
2ea20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ea30 65 72 72 6f 72 2c 20 74 72 61 63 65 43 61 74 65  error, traceCate
2ea40 67 6f 72 79 2c 20 4d 65 73 73 61 67 65 42 6f 78  gory, MessageBox
2ea50 42 75 74 74 6f 6e 73 2e 4f 4b 2c 0d 0a 20 20 20  Buttons.OK,..   
2ea60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ea70 20 20 20 20 20 4d 65 73 73 61 67 65 42 6f 78 49       MessageBoxI
2ea80 63 6f 6e 2e 45 72 72 6f 72 29 3b 0d 0a 0d 0a 20  con.Error);.... 
2ea90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2eaa0 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75     TraceOps.Debu
2eab0 67 41 6e 64 54 72 61 63 65 28 54 72 61 63 65 50  gAndTrace(TraceP
2eac0 72 69 6f 72 69 74 79 2e 4d 65 64 69 75 6d 48 69  riority.MediumHi
2ead0 67 68 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  gh,..           
2eae0 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62               deb
2eaf0 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63  ugCallback, trac
2eb00 65 43 61 6c 6c 62 61 63 6b 2c 20 22 46 61 69 6c  eCallback, "Fail
2eb10 75 72 65 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20  ure.",..        
2eb20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2eb30 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
2eb40 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
2eb50 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 31 3b         return 1;
2eb60 20 2f 2a 20 46 41 49 4c 55 52 45 20 2a 2f 0d 0a   /* FAILURE */..
2eb70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2eb80 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
2eb90 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
2eba0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2ebb0 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
2ebc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ebd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ebe0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ebf0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2ec00 20 20 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52      using (MockR
2ec10 65 67 69 73 74 72 79 20 72 65 67 69 73 74 72 79  egistry registry
2ec20 20 3d 20 6e 65 77 20 4d 6f 63 6b 52 65 67 69 73   = new MockRegis
2ec30 74 72 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20  try(..          
2ec40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
2ec50 6e 66 69 67 75 72 61 74 69 6f 6e 2e 57 68 61 74  nfiguration.What
2ec60 49 66 2c 20 66 61 6c 73 65 2c 20 66 61 6c 73 65  If, false, false
2ec70 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
2ec80 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
2ec90 20 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69             #regi
2eca0 6f 6e 20 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72  on .NET Framewor
2ecb0 6b 20 2f 20 56 69 73 75 61 6c 20 53 74 75 64 69  k / Visual Studi
2ecc0 6f 20 44 61 74 61 0d 0a 20 20 20 20 20 20 20 20  o Data..        
2ecd0 20 20 20 20 20 20 20 20 20 20 20 20 50 61 63 6b              Pack
2ece0 61 67 65 20 70 61 63 6b 61 67 65 20 3d 20 6e 75  age package = nu
2ecf0 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll;..           
2ed00 20 20 20 20 20 20 20 20 20 46 72 61 6d 65 77 6f           Framewo
2ed10 72 6b 4c 69 73 74 20 66 72 61 6d 65 77 6f 72 6b  rkList framework
2ed20 4c 69 73 74 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20  List = null;..  
2ed30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ed40 20 20 56 73 4c 69 73 74 20 76 73 4c 69 73 74 20    VsList vsList 
2ed50 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20  = null;....     
2ed60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
2ed70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ed80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ed90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2eda0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
2edb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2edc0 20 20 49 6e 69 74 69 61 6c 69 7a 65 56 73 50 61    InitializeVsPa
2edd0 63 6b 61 67 65 28 72 65 66 20 70 61 63 6b 61 67  ckage(ref packag
2ede0 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e);....         
2edf0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
2ee00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ee10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ee20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ee30 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
2ee40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 49 6e                In
2ee50 69 74 69 61 6c 69 7a 65 46 72 61 6d 65 77 6f 72  itializeFramewor
2ee60 6b 4c 69 73 74 28 72 65 67 69 73 74 72 79 2e 4c  kList(registry.L
2ee70 6f 63 61 6c 4d 61 63 68 69 6e 65 2c 0d 0a 20 20  ocalMachine,..  
2ee80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ee90 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74        configurat
2eea0 69 6f 6e 2c 20 72 65 66 20 66 72 61 6d 65 77 6f  ion, ref framewo
2eeb0 72 6b 4c 69 73 74 29 3b 0d 0a 0d 0a 20 20 20 20  rkList);....    
2eec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2eed0 49 6e 69 74 69 61 6c 69 7a 65 56 73 4c 69 73 74  InitializeVsList
2eee0 28 72 65 67 69 73 74 72 79 2e 4c 6f 63 61 6c 4d  (registry.LocalM
2eef0 61 63 68 69 6e 65 2c 20 63 6f 6e 66 69 67 75 72  achine, configur
2ef00 61 74 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20  ation,..        
2ef10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ef20 72 65 66 20 76 73 4c 69 73 74 29 3b 0d 0a 20 20  ref vsList);..  
2ef30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ef40 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a    #endregion....
2ef50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ef60 20 20 20 20 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 2f 2f  ////////////////
2ef90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
2efa0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
2efb0 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 43         #region C
2efc0 6f 72 65 20 41 73 73 65 6d 62 6c 79 20 4e 61 6d  ore Assembly Nam
2efd0 65 20 43 68 65 63 6b 0d 0a 20 20 20 20 20 20 20  e Check..       
2efe0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
2eff0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2f000 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 44 6f       // NOTE: Do
2f010 20 74 68 69 73 20 66 69 72 73 74 2c 20 62 65 66   this first, bef
2f020 6f 72 65 20 6d 61 6b 69 6e 67 20 61 6e 79 20 63  ore making any c
2f030 68 61 6e 67 65 73 20 74 6f 20 74 68 65 0d 0a 20  hanges to the.. 
2f040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f050 20 20 20 2f 2f 20 20 20 20 20 20 20 73 79 73 74     //       syst
2f060 65 6d 2c 20 62 65 63 61 75 73 65 20 69 74 20 77  em, because it w
2f070 69 6c 6c 20 74 68 72 6f 77 20 61 6e 20 65 78 63  ill throw an exc
2f080 65 70 74 69 6f 6e 20 69 66 20 74 68 65 0d 0a 20  eption if the.. 
2f090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f0a0 20 20 20 2f 2f 20 20 20 20 20 20 20 66 69 6c 65     //       file
2f0b0 20 6e 61 6d 65 20 64 6f 65 73 20 6e 6f 74 20 72   name does not r
2f0c0 65 70 72 65 73 65 6e 74 20 61 20 76 61 6c 69 64  epresent a valid
2f0d0 20 6d 61 6e 61 67 65 64 0d 0a 20 20 20 20 20 20   managed..      
2f0e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
2f0f0 20 20 20 20 20 20 20 61 73 73 65 6d 62 6c 79 2e         assembly.
2f100 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2f110 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
2f120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 41 73                As
2f130 73 65 6d 62 6c 79 4e 61 6d 65 20 61 73 73 65 6d  semblyName assem
2f140 62 6c 79 4e 61 6d 65 20 3d 20 41 73 73 65 6d 62  blyName = Assemb
2f150 6c 79 4e 61 6d 65 2e 47 65 74 41 73 73 65 6d 62  lyName.GetAssemb
2f160 6c 79 4e 61 6d 65 28 0d 0a 20 20 20 20 20 20 20  lyName(..       
2f170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f180 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 43   configuration.C
2f190 6f 72 65 46 69 6c 65 4e 61 6d 65 29 3b 20 2f 2a  oreFileName); /*
2f1a0 20 74 68 72 6f 77 20 2a 2f 0d 0a 20 20 20 20 20   throw */..     
2f1b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23                 #
2f1c0 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20  endregion....   
2f1d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f1e0 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
2f1f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f200 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f210 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
2f220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f230 20 20 20 20 23 72 65 67 69 6f 6e 20 53 68 61 72      #region Shar
2f240 65 64 20 43 6c 69 65 6e 74 20 44 61 74 61 20 43  ed Client Data C
2f250 72 65 61 74 69 6f 6e 0d 0a 20 20 20 20 20 20 20  reation..       
2f260 20 20 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a               obj
2f270 65 63 74 20 64 69 72 65 63 74 6f 72 79 44 61 74  ect directoryDat
2f280 61 20 3d 20 6e 65 77 20 41 6e 79 50 61 69 72 3c  a = new AnyPair<
2f290 73 74 72 69 6e 67 2c 20 62 6f 6f 6c 3e 28 0d 0a  string, bool>(..
2f2a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f2b0 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72          configur
2f2c0 61 74 69 6f 6e 2e 44 69 72 65 63 74 6f 72 79 2c  ation.Directory,
2f2d0 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 49   configuration.I
2f2e0 6e 73 74 61 6c 6c 29 3b 0d 0a 0d 0a 20 20 20 20  nstall);....    
2f2f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f300 6f 62 6a 65 63 74 20 66 69 6c 65 4e 61 6d 65 44  object fileNameD
2f310 61 74 61 20 3d 20 6e 65 77 20 41 6e 79 50 61 69  ata = new AnyPai
2f320 72 3c 73 74 72 69 6e 67 2c 20 62 6f 6f 6c 3e 28  r<string, bool>(
2f330 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2f340 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67            config
2f350 75 72 61 74 69 6f 6e 2e 44 65 73 69 67 6e 65 72  uration.Designer
2f360 46 69 6c 65 4e 61 6d 65 2c 20 63 6f 6e 66 69 67  FileName, config
2f370 75 72 61 74 69 6f 6e 2e 49 6e 73 74 61 6c 6c 29  uration.Install)
2f380 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
2f390 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f         #endregio
2f3a0 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n....           
2f3b0 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
2f3c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f3d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f3e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f3f0 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
2f400 20 20 20 20 20 20 20 20 20 20 20 20 23 72 65 67              #reg
2f410 69 6f 6e 20 2e 4e 45 54 20 47 41 43 20 49 6e 73  ion .NET GAC Ins
2f420 74 61 6c 6c 2f 52 65 6d 6f 76 65 0d 0a 20 20 20  tall/Remove..   
2f430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f440 20 69 66 20 28 63 6f 6e 66 69 67 75 72 61 74 69   if (configurati
2f450 6f 6e 2e 48 61 73 46 6c 61 67 73 28 49 6e 73 74  on.HasFlags(Inst
2f460 61 6c 6c 46 6c 61 67 73 2e 47 41 43 2c 20 74 72  allFlags.GAC, tr
2f470 75 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ue))..          
2f480 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
2f490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f4a0 20 20 20 20 20 50 75 62 6c 69 73 68 20 70 75 62       Publish pub
2f4b0 6c 69 73 68 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a  lish = null;....
2f4c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f4d0 20 20 20 20 20 20 20 20 69 66 20 28 21 63 6f 6e          if (!con
2f4e0 66 69 67 75 72 61 74 69 6f 6e 2e 57 68 61 74 49  figuration.WhatI
2f4f0 66 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  f)..            
2f500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f510 70 75 62 6c 69 73 68 20 3d 20 6e 65 77 20 50 75  publish = new Pu
2f520 62 6c 69 73 68 28 29 3b 0d 0a 0d 0a 20 20 20 20  blish();....    
2f530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f540 20 20 20 20 69 66 20 28 63 6f 6e 66 69 67 75 72      if (configur
2f550 61 74 69 6f 6e 2e 49 6e 73 74 61 6c 6c 29 0d 0a  ation.Install)..
2f560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f570 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
2f580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f590 20 20 20 20 20 20 20 69 66 20 28 21 63 6f 6e 66         if (!conf
2f5a0 69 67 75 72 61 74 69 6f 6e 2e 57 68 61 74 49 66  iguration.WhatIf
2f5b0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
2f5c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f5d0 20 20 20 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a     /* throw */..
2f5e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f5f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f600 70 75 62 6c 69 73 68 2e 47 61 63 49 6e 73 74 61  publish.GacInsta
2f610 6c 6c 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  ll(configuration
2f620 2e 43 6f 72 65 46 69 6c 65 4e 61 6d 65 29 3b 0d  .CoreFileName);.
2f630 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
2f640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
2f650 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64  raceOps.DebugAnd
2f660 54 72 61 63 65 28 54 72 61 63 65 50 72 69 6f 72  Trace(TracePrior
2f670 69 74 79 2e 48 69 67 68 65 73 74 2c 0d 0a 20 20  ity.Highest,..  
2f680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65                de
2f6a0 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61  bugCallback, tra
2f6b0 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69  ceCallback, Stri
2f6c0 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ng.Format(..    
2f6d0 20 20 20 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 22 47 61 63              "Gac
2f6f0 49 6e 73 74 61 6c 6c 3a 20 61 73 73 65 6d 62 6c  Install: assembl
2f700 79 50 61 74 68 20 3d 20 7b 30 7d 22 2c 0d 0a 20  yPath = {0}",.. 
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 20 20 20 20 46                 F
2f730 6f 72 44 69 73 70 6c 61 79 28 63 6f 6e 66 69 67  orDisplay(config
2f740 75 72 61 74 69 6f 6e 2e 43 6f 72 65 46 69 6c 65  uration.CoreFile
2f750 4e 61 6d 65 29 29 2c 0d 0a 20 20 20 20 20 20 20  Name)),..       
2f760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f770 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
2f780 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
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 20 69 66 20 28 21 63 6f 6e          if (!con
2f7b0 66 69 67 75 72 61 74 69 6f 6e 2e 57 68 61 74 49  figuration.WhatI
2f7c0 66 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  f)..            
2f7d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f7e0 20 20 20 20 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d      /* throw */.
2f7f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2f800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f810 20 70 75 62 6c 69 73 68 2e 47 61 63 49 6e 73 74   publish.GacInst
2f820 61 6c 6c 28 63 6f 6e 66 69 67 75 72 61 74 69 6f  all(configuratio
2f830 6e 2e 4c 69 6e 71 46 69 6c 65 4e 61 6d 65 29 3b  n.LinqFileName);
2f840 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2f850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f860 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e  TraceOps.DebugAn
2f870 64 54 72 61 63 65 28 54 72 61 63 65 50 72 69 6f  dTrace(TracePrio
2f880 72 69 74 79 2e 48 69 67 68 65 73 74 2c 0d 0a 20  rity.Highest,.. 
2f890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f8a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
2f8b0 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72  ebugCallback, tr
2f8c0 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72  aceCallback, Str
2f8d0 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
2f8e0 20 20 20 20 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 22 47 61               "Ga
2f900 63 49 6e 73 74 61 6c 6c 3a 20 61 73 73 65 6d 62  cInstall: assemb
2f910 6c 79 50 61 74 68 20 3d 20 7b 30 7d 22 2c 0d 0a  lyPath = {0}",..
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 20 20 20 20                  
2f940 46 6f 72 44 69 73 70 6c 61 79 28 63 6f 6e 66 69  ForDisplay(confi
2f950 67 75 72 61 74 69 6f 6e 2e 4c 69 6e 71 46 69 6c  guration.LinqFil
2f960 65 4e 61 6d 65 29 29 2c 0d 0a 20 20 20 20 20 20  eName)),..      
2f970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f980 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
2f990 61 74 65 67 6f 72 79 29 3b 0d 0a 20 20 20 20 20  ategory);..     
2f9a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f9b0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
2f9c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c                el
2f9d0 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  se..            
2f9e0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
2f9f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fa00 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21             if (!
2fa10 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 57 68  configuration.Wh
2fa20 61 74 49 66 29 0d 0a 20 20 20 20 20 20 20 20 20  atIf)..         
2fa30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fa40 20 20 20 20 20 20 20 2f 2a 20 74 68 72 6f 77 20         /* throw 
2fa50 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  */..            
2fa60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fa70 20 20 20 20 70 75 62 6c 69 73 68 2e 47 61 63 52      publish.GacR
2fa80 65 6d 6f 76 65 28 63 6f 6e 66 69 67 75 72 61 74  emove(configurat
2fa90 69 6f 6e 2e 4c 69 6e 71 46 69 6c 65 4e 61 6d 65  ion.LinqFileName
2faa0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
2fab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fac0 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67    TraceOps.Debug
2fad0 41 6e 64 54 72 61 63 65 28 54 72 61 63 65 50 72  AndTrace(TracePr
2fae0 69 6f 72 69 74 79 2e 48 69 67 68 65 73 74 2c 0d  iority.Highest,.
2faf0 0a 20 20 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 20 20 20 20 20                  
2fb10 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20   debugCallback, 
2fb20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53  traceCallback, S
2fb30 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
2fb40 20 20 20 20 20 20 20 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 22                 "
2fb60 47 61 63 52 65 6d 6f 76 65 3a 20 61 73 73 65 6d  GacRemove: assem
2fb70 62 6c 79 50 61 74 68 20 3d 20 7b 30 7d 22 2c 0d  blyPath = {0}",.
2fb80 0a 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 20                  
2fba0 20 46 6f 72 44 69 73 70 6c 61 79 28 63 6f 6e 66   ForDisplay(conf
2fbb0 69 67 75 72 61 74 69 6f 6e 2e 4c 69 6e 71 46 69  iguration.LinqFi
2fbc0 6c 65 4e 61 6d 65 29 29 2c 0d 0a 20 20 20 20 20  leName)),..     
2fbd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fbe0 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
2fbf0 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
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 69 66 20 28 21 63            if (!c
2fc20 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 57 68 61  onfiguration.Wha
2fc30 74 49 66 29 0d 0a 20 20 20 20 20 20 20 20 20 20  tIf)..          
2fc40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fc50 20 20 20 20 20 20 2f 2a 20 74 68 72 6f 77 20 2a        /* throw *
2fc60 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
2fc70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fc80 20 20 20 70 75 62 6c 69 73 68 2e 47 61 63 52 65     publish.GacRe
2fc90 6d 6f 76 65 28 63 6f 6e 66 69 67 75 72 61 74 69  move(configurati
2fca0 6f 6e 2e 43 6f 72 65 46 69 6c 65 4e 61 6d 65 29  on.CoreFileName)
2fcb0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
2fcc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fcd0 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41   TraceOps.DebugA
2fce0 6e 64 54 72 61 63 65 28 54 72 61 63 65 50 72 69  ndTrace(TracePri
2fcf0 6f 72 69 74 79 2e 48 69 67 68 65 73 74 2c 0d 0a  ority.Highest,..
2fd00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fd10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fd20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74  debugCallback, t
2fd30 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74  raceCallback, St
2fd40 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
2fd50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fd60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 47                "G
2fd70 61 63 52 65 6d 6f 76 65 3a 20 61 73 73 65 6d 62  acRemove: assemb
2fd80 6c 79 50 61 74 68 20 3d 20 7b 30 7d 22 2c 0d 0a  lyPath = {0}",..
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 20 20                  
2fdb0 46 6f 72 44 69 73 70 6c 61 79 28 63 6f 6e 66 69  ForDisplay(confi
2fdc0 67 75 72 61 74 69 6f 6e 2e 43 6f 72 65 46 69 6c  guration.CoreFil
2fdd0 65 4e 61 6d 65 29 29 2c 0d 0a 20 20 20 20 20 20  eName)),..      
2fde0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fdf0 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
2fe00 61 74 65 67 6f 72 79 29 3b 0d 0a 20 20 20 20 20  ategory);..     
2fe10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fe20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
2fe30 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
2fe40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fe50 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20   #endregion.... 
2fe60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fe70 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
2fe80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2fe90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2fea0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
2feb0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2fec0 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 2e 4e        #region .N
2fed0 45 54 20 41 73 73 65 6d 62 6c 79 46 6f 6c 64 65  ET AssemblyFolde
2fee0 72 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  rs..            
2fef0 20 20 20 20 20 20 20 20 69 66 20 28 63 6f 6e 66          if (conf
2ff00 69 67 75 72 61 74 69 6f 6e 2e 48 61 73 46 6c 61  iguration.HasFla
2ff10 67 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  gs(..           
2ff20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ff30 20 49 6e 73 74 61 6c 6c 46 6c 61 67 73 2e 41 73   InstallFlags.As
2ff40 73 65 6d 62 6c 79 46 6f 6c 64 65 72 73 2c 20 74  semblyFolders, t
2ff50 72 75 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20  rue))..         
2ff60 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
2ff70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ff80 20 20 20 20 20 20 69 66 20 28 21 46 6f 72 45 61        if (!ForEa
2ff90 63 68 46 72 61 6d 65 77 6f 72 6b 52 65 67 69 73  chFrameworkRegis
2ffa0 74 72 79 28 72 65 67 69 73 74 72 79 2c 0d 0a 20  try(registry,.. 
2ffb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ffc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66                 f
2ffd0 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2c 20 50 72  rameworkList, Pr
2ffe0 6f 63 65 73 73 41 73 73 65 6d 62 6c 79 46 6f 6c  ocessAssemblyFol
2fff0 64 65 72 73 2c 0d 0a 20 20 20 20 20 20 20 20 20  ders,..         
30000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30010 20 20 20 20 20 20 20 64 69 72 65 63 74 6f 72 79         directory
30020 44 61 74 61 2c 0d 0a 20 20 20 20 20 20 20 20 20  Data,..         
30030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30040 20 20 20 20 20 20 20 4e 65 74 46 78 49 73 33 32         NetFxIs32
30050 42 69 74 4f 6e 6c 79 20 7c 7c 20 63 6f 6e 66 69  BitOnly || confi
30060 67 75 72 61 74 69 6f 6e 2e 57 6f 77 36 34 2c 0d  guration.Wow64,.
30070 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
30080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30090 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 54   configuration.T
300a0 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 2c 0d 0a  hrowOnMissing,..
300b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
300c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
300d0 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 57 68  configuration.Wh
300e0 61 74 49 66 2c 20 63 6f 6e 66 69 67 75 72 61 74  atIf, configurat
300f0 69 6f 6e 2e 56 65 72 62 6f 73 65 2c 0d 0a 20 20  ion.Verbose,..  
30100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
30120 66 20 65 72 72 6f 72 29 29 0d 0a 20 20 20 20 20  f error))..     
30130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30140 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
30150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30160 20 20 54 72 61 63 65 4f 70 73 2e 53 68 6f 77 4d    TraceOps.ShowM
30170 65 73 73 61 67 65 28 54 72 61 63 65 50 72 69 6f  essage(TracePrio
30180 72 69 74 79 2e 48 69 67 68 65 73 74 2c 0d 0a 20  rity.Highest,.. 
30190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
301a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
301b0 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72  ebugCallback, tr
301c0 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 74 68 69  aceCallback, thi
301d0 73 41 73 73 65 6d 62 6c 79 2c 0d 0a 20 20 20 20  sAssembly,..    
301e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
301f0 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
30200 72 2c 20 74 72 61 63 65 43 61 74 65 67 6f 72 79  r, traceCategory
30210 2c 20 4d 65 73 73 61 67 65 42 6f 78 42 75 74 74  , MessageBoxButt
30220 6f 6e 73 2e 4f 4b 2c 0d 0a 20 20 20 20 20 20 20  ons.OK,..       
30230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30240 20 20 20 20 20 20 20 20 20 4d 65 73 73 61 67 65           Message
30250 42 6f 78 49 63 6f 6e 2e 45 72 72 6f 72 29 3b 0d  BoxIcon.Error);.
30260 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
30270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
30280 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64  raceOps.DebugAnd
30290 54 72 61 63 65 28 54 72 61 63 65 50 72 69 6f 72  Trace(TracePrior
302a0 69 74 79 2e 4d 65 64 69 75 6d 48 69 67 68 2c 0d  ity.MediumHigh,.
302b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
302c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
302d0 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20   debugCallback, 
302e0 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 22  traceCallback, "
302f0 46 61 69 6c 75 72 65 2e 22 2c 0d 0a 20 20 20 20  Failure.",..    
30300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30310 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
30320 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
30330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30340 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
30350 6e 20 31 3b 20 2f 2a 20 46 41 49 4c 55 52 45 20  n 1; /* FAILURE 
30360 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  */..            
30370 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
30380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30390 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
303a0 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65            #endre
303b0 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20  gion....        
303c0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
303d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
303e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
303f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30400 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
30410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23                 #
30420 72 65 67 69 6f 6e 20 2e 4e 45 54 20 44 62 50 72  region .NET DbPr
30430 6f 76 69 64 65 72 46 61 63 74 6f 72 79 0d 0a 20  oviderFactory.. 
30440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30450 20 20 20 69 66 20 28 63 6f 6e 66 69 67 75 72 61     if (configura
30460 74 69 6f 6e 2e 48 61 73 46 6c 61 67 73 28 0d 0a  tion.HasFlags(..
30470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30480 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 73 74              Inst
30490 61 6c 6c 46 6c 61 67 73 2e 44 62 50 72 6f 76 69  allFlags.DbProvi
304a0 64 65 72 46 61 63 74 6f 72 79 2c 20 74 72 75 65  derFactory, true
304b0 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
304c0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
304d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
304e0 20 20 20 62 6f 6f 6c 20 73 61 76 65 64 20 3d 20     bool saved = 
304f0 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  false;....      
30500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30510 20 20 69 66 20 28 21 46 6f 72 45 61 63 68 46 72    if (!ForEachFr
30520 61 6d 65 77 6f 72 6b 43 6f 6e 66 69 67 28 72 65  ameworkConfig(re
30530 67 69 73 74 72 79 2c 0d 0a 20 20 20 20 20 20 20  gistry,..       
30540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30550 20 20 20 20 20 20 20 20 20 66 72 61 6d 65 77 6f           framewo
30560 72 6b 4c 69 73 74 2c 20 50 72 6f 63 65 73 73 44  rkList, ProcessD
30570 62 50 72 6f 76 69 64 65 72 46 61 63 74 6f 72 79  bProviderFactory
30580 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
30590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
305a0 20 20 20 49 6e 76 61 72 69 61 6e 74 4e 61 6d 65     InvariantName
305b0 2c 20 50 72 6f 76 69 64 65 72 4e 61 6d 65 2c 20  , ProviderName, 
305c0 44 65 73 63 72 69 70 74 69 6f 6e 2c 0d 0a 20 20  Description,..  
305d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
305e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46 61                Fa
305f0 63 74 6f 72 79 54 79 70 65 4e 61 6d 65 2c 20 61  ctoryTypeName, a
30600 73 73 65 6d 62 6c 79 4e 61 6d 65 2c 20 64 69 72  ssemblyName, dir
30610 65 63 74 6f 72 79 44 61 74 61 2c 0d 0a 20 20 20  ectoryData,..   
30620 20 20 20 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 20 20 4e 65 74               Net
30640 46 78 49 73 33 32 42 69 74 4f 6e 6c 79 20 7c 7c  FxIs32BitOnly ||
30650 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 57   configuration.W
30660 6f 77 36 34 2c 0d 0a 20 20 20 20 20 20 20 20 20  ow64,..         
30670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30680 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61         configura
30690 74 69 6f 6e 2e 54 68 72 6f 77 4f 6e 4d 69 73 73  tion.ThrowOnMiss
306a0 69 6e 67 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ing,..          
306b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
306c0 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74        configurat
306d0 69 6f 6e 2e 57 68 61 74 49 66 2c 20 63 6f 6e 66  ion.WhatIf, conf
306e0 69 67 75 72 61 74 69 6f 6e 2e 56 65 72 62 6f 73  iguration.Verbos
306f0 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
30700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30710 20 20 20 20 72 65 66 20 73 61 76 65 64 2c 20 72      ref saved, r
30720 65 66 20 65 72 72 6f 72 29 29 0d 0a 20 20 20 20  ef error))..    
30730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30740 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
30750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30760 20 20 20 54 72 61 63 65 4f 70 73 2e 53 68 6f 77     TraceOps.Show
30770 4d 65 73 73 61 67 65 28 54 72 61 63 65 50 72 69  Message(TracePri
30780 6f 72 69 74 79 2e 48 69 67 68 65 73 74 2c 0d 0a  ority.Highest,..
30790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
307a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
307b0 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74  debugCallback, t
307c0 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 74 68  raceCallback, th
307d0 69 73 41 73 73 65 6d 62 6c 79 2c 0d 0a 20 20 20  isAssembly,..   
307e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
307f0 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
30800 6f 72 2c 20 74 72 61 63 65 43 61 74 65 67 6f 72  or, traceCategor
30810 79 2c 20 4d 65 73 73 61 67 65 42 6f 78 42 75 74  y, MessageBoxBut
30820 74 6f 6e 73 2e 4f 4b 2c 0d 0a 20 20 20 20 20 20  tons.OK,..      
30830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30840 20 20 20 20 20 20 20 20 20 20 4d 65 73 73 61 67            Messag
30850 65 42 6f 78 49 63 6f 6e 2e 45 72 72 6f 72 29 3b  eBoxIcon.Error);
30860 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
30870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30880 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e  TraceOps.DebugAn
30890 64 54 72 61 63 65 28 54 72 61 63 65 50 72 69 6f  dTrace(TracePrio
308a0 72 69 74 79 2e 4d 65 64 69 75 6d 48 69 67 68 2c  rity.MediumHigh,
308b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
308c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
308d0 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c    debugCallback,
308e0 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20   traceCallback, 
308f0 22 46 61 69 6c 75 72 65 2e 22 2c 0d 0a 20 20 20  "Failure.",..   
30900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30910 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
30920 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
30930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30940 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
30950 72 6e 20 31 3b 20 2f 2a 20 46 41 49 4c 55 52 45  rn 1; /* FAILURE
30960 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   */..           
30970 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
30980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30990 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
309a0 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 72             #endr
309b0 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20  egion....       
309c0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f               ///
309d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
309e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
309f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30a00 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
30a10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30a20 23 72 65 67 69 6f 6e 20 56 53 20 50 61 63 6b 61  #region VS Packa
30a30 67 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ge..            
30a40 20 20 20 20 20 20 20 20 69 66 20 28 63 6f 6e 66          if (conf
30a50 69 67 75 72 61 74 69 6f 6e 2e 48 61 73 46 6c 61  iguration.HasFla
30a60 67 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  gs(..           
30a70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30a80 20 49 6e 73 74 61 6c 6c 46 6c 61 67 73 2e 56 73   InstallFlags.Vs
30a90 50 61 63 6b 61 67 65 2c 20 74 72 75 65 29 29 0d  Package, true)).
30aa0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
30ab0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
30ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30ad0 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
30ae0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e              // N
30af0 4f 54 45 3a 20 46 6f 72 20 6e 6f 77 2c 20 56 69  OTE: For now, Vi
30b00 73 75 61 6c 20 53 74 75 64 69 6f 20 69 73 20 61  sual Studio is a
30b10 6c 77 61 79 73 20 61 20 33 32 2d 62 69 74 0d 0a  lways a 32-bit..
30b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30b30 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
30b40 20 6e 61 74 69 76 65 20 61 70 70 6c 69 63 61 74   native applicat
30b50 69 6f 6e 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  ion...          
30b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
30b70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
30b80 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21 46            if (!F
30b90 6f 72 45 61 63 68 56 73 56 65 72 73 69 6f 6e 52  orEachVsVersionR
30ba0 65 67 69 73 74 72 79 28 72 65 67 69 73 74 72 79  egistry(registry
30bb0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
30bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30bd0 20 20 20 76 73 4c 69 73 74 2c 20 50 72 6f 63 65     vsList, Proce
30be0 73 73 56 73 50 61 63 6b 61 67 65 2c 20 70 61 63  ssVsPackage, pac
30bf0 6b 61 67 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  kage,..         
30c00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30c10 20 20 20 20 20 20 20 66 69 6c 65 4e 61 6d 65 44         fileNameD
30c20 61 74 61 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ata,..          
30c30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30c40 20 20 20 20 20 20 56 73 49 73 33 32 42 69 74 4f        VsIs32BitO
30c50 6e 6c 79 20 7c 7c 20 63 6f 6e 66 69 67 75 72 61  nly || configura
30c60 74 69 6f 6e 2e 57 6f 77 36 34 2c 0d 0a 20 20 20  tion.Wow64,..   
30c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30c80 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
30c90 66 69 67 75 72 61 74 69 6f 6e 2e 54 68 72 6f 77  figuration.Throw
30ca0 4f 6e 4d 69 73 73 69 6e 67 2c 0d 0a 20 20 20 20  OnMissing,..    
30cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30cc0 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66              conf
30cd0 69 67 75 72 61 74 69 6f 6e 2e 57 68 61 74 49 66  iguration.WhatIf
30ce0 2c 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e  , configuration.
30cf0 56 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20  Verbose,..      
30d00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30d10 20 20 20 20 20 20 20 20 20 20 72 65 66 20 65 72            ref er
30d20 72 6f 72 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ror))..         
30d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
30d40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
30d50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
30d60 61 63 65 4f 70 73 2e 53 68 6f 77 4d 65 73 73 61  aceOps.ShowMessa
30d70 67 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 79  ge(TracePriority
30d80 2e 48 69 67 68 65 73 74 2c 0d 0a 20 20 20 20 20  .Highest,..     
30d90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30da0 20 20 20 20 20 20 20 20 20 20 20 64 65 62 75 67             debug
30db0 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43  Callback, traceC
30dc0 61 6c 6c 62 61 63 6b 2c 20 74 68 69 73 41 73 73  allback, thisAss
30dd0 65 6d 62 6c 79 2c 0d 0a 20 20 20 20 20 20 20 20  embly,..        
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 65 72 72 6f 72 2c 20 74          error, t
30e00 72 61 63 65 43 61 74 65 67 6f 72 79 2c 20 4d 65  raceCategory, Me
30e10 73 73 61 67 65 42 6f 78 42 75 74 74 6f 6e 73 2e  ssageBoxButtons.
30e20 4f 4b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  OK,..           
30e30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30e40 20 20 20 20 20 4d 65 73 73 61 67 65 42 6f 78 49       MessageBoxI
30e50 63 6f 6e 2e 45 72 72 6f 72 29 3b 0d 0a 0d 0a 20  con.Error);.... 
30e60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30e70 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
30e80 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63  Ops.DebugAndTrac
30e90 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e  e(TracePriority.
30ea0 4d 65 64 69 75 6d 48 69 67 68 2c 0d 0a 20 20 20  MediumHigh,..   
30eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62               deb
30ed0 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63  ugCallback, trac
30ee0 65 43 61 6c 6c 62 61 63 6b 2c 20 22 46 61 69 6c  eCallback, "Fail
30ef0 75 72 65 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20  ure.",..        
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 74 72 61 63 65 43 61 74          traceCat
30f20 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  egory);....     
30f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30f40 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 31 3b         return 1;
30f50 20 2f 2a 20 46 41 49 4c 55 52 45 20 2a 2f 0d 0a   /* FAILURE */..
30f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30f70 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
30f80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
30f90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
30fa0 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
30fb0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
30fc0 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
30fd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30fe0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30ff0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31000 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
31010 20 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69             #regi
31020 6f 6e 20 56 53 20 44 61 74 61 53 6f 75 72 63 65  on VS DataSource
31030 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
31040 20 20 20 20 20 20 69 66 20 28 63 6f 6e 66 69 67        if (config
31050 75 72 61 74 69 6f 6e 2e 48 61 73 46 6c 61 67 73  uration.HasFlags
31060 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
31070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 49                 I
31080 6e 73 74 61 6c 6c 46 6c 61 67 73 2e 56 73 44 61  nstallFlags.VsDa
31090 74 61 53 6f 75 72 63 65 2c 20 74 72 75 65 29 29  taSource, true))
310a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
310b0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
310c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
310d0 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
310e0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
310f0 4e 4f 54 45 3a 20 46 6f 72 20 6e 6f 77 2c 20 56  NOTE: For now, V
31100 69 73 75 61 6c 20 53 74 75 64 69 6f 20 69 73 20  isual Studio is 
31110 61 6c 77 61 79 73 20 61 20 33 32 2d 62 69 74 0d  always a 32-bit.
31120 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
31130 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
31140 20 20 6e 61 74 69 76 65 20 61 70 70 6c 69 63 61    native applica
31150 74 69 6f 6e 2e 0d 0a 20 20 20 20 20 20 20 20 20  tion...         
31160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
31170 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
31180 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21             if (!
31190 46 6f 72 45 61 63 68 56 73 56 65 72 73 69 6f 6e  ForEachVsVersion
311a0 52 65 67 69 73 74 72 79 28 72 65 67 69 73 74 72  Registry(registr
311b0 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y,..            
311c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
311d0 20 20 20 20 76 73 4c 69 73 74 2c 20 50 72 6f 63      vsList, Proc
311e0 65 73 73 56 73 44 61 74 61 53 6f 75 72 63 65 2c  essVsDataSource,
311f0 20 70 61 63 6b 61 67 65 2c 0d 0a 20 20 20 20 20   package,..     
31200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31210 20 20 20 20 20 20 20 20 20 20 20 66 69 6c 65 4e             fileN
31220 61 6d 65 44 61 74 61 2c 0d 0a 20 20 20 20 20 20  ameData,..      
31230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31240 20 20 20 20 20 20 20 20 20 20 56 73 49 73 33 32            VsIs32
31250 42 69 74 4f 6e 6c 79 20 7c 7c 20 63 6f 6e 66 69  BitOnly || confi
31260 67 75 72 61 74 69 6f 6e 2e 57 6f 77 36 34 2c 0d  guration.Wow64,.
31270 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
31280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31290 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 54   configuration.T
312a0 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 2c 0d 0a  hrowOnMissing,..
312b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
312c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
312d0 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 57 68  configuration.Wh
312e0 61 74 49 66 2c 20 63 6f 6e 66 69 67 75 72 61 74  atIf, configurat
312f0 69 6f 6e 2e 56 65 72 62 6f 73 65 2c 0d 0a 20 20  ion.Verbose,..  
31300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
31320 66 20 65 72 72 6f 72 29 29 0d 0a 20 20 20 20 20  f error))..     
31330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31340 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
31350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31360 20 20 54 72 61 63 65 4f 70 73 2e 53 68 6f 77 4d    TraceOps.ShowM
31370 65 73 73 61 67 65 28 54 72 61 63 65 50 72 69 6f  essage(TracePrio
31380 72 69 74 79 2e 48 69 67 68 65 73 74 2c 0d 0a 20  rity.Highest,.. 
31390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
313a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
313b0 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72  ebugCallback, tr
313c0 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 74 68 69  aceCallback, thi
313d0 73 41 73 73 65 6d 62 6c 79 2c 0d 0a 20 20 20 20  sAssembly,..    
313e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
313f0 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
31400 72 2c 20 74 72 61 63 65 43 61 74 65 67 6f 72 79  r, traceCategory
31410 2c 20 4d 65 73 73 61 67 65 42 6f 78 42 75 74 74  , MessageBoxButt
31420 6f 6e 73 2e 4f 4b 2c 0d 0a 20 20 20 20 20 20 20  ons.OK,..       
31430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31440 20 20 20 20 20 20 20 20 20 4d 65 73 73 61 67 65           Message
31450 42 6f 78 49 63 6f 6e 2e 45 72 72 6f 72 29 3b 0d  BoxIcon.Error);.
31460 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
31470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
31480 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64  raceOps.DebugAnd
31490 54 72 61 63 65 28 54 72 61 63 65 50 72 69 6f 72  Trace(TracePrior
314a0 69 74 79 2e 4d 65 64 69 75 6d 48 69 67 68 2c 0d  ity.MediumHigh,.
314b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
314c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
314d0 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20   debugCallback, 
314e0 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 22  traceCallback, "
314f0 46 61 69 6c 75 72 65 2e 22 2c 0d 0a 20 20 20 20  Failure.",..    
31500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31510 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
31520 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
31530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31540 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
31550 6e 20 31 3b 20 2f 2a 20 46 41 49 4c 55 52 45 20  n 1; /* FAILURE 
31560 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  */..            
31570 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
31580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31590 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
315a0 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65            #endre
315b0 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20  gion....        
315c0 20 20 20 20 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f  ////////////////
315f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31600 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
31610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23                 #
31620 72 65 67 69 6f 6e 20 56 53 20 44 61 74 61 50 72  region VS DataPr
31630 6f 76 69 64 65 72 0d 0a 20 20 20 20 20 20 20 20  ovider..        
31640 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
31650 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 48 61  configuration.Ha
31660 73 46 6c 61 67 73 28 0d 0a 20 20 20 20 20 20 20  sFlags(..       
31670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31680 20 20 20 20 20 49 6e 73 74 61 6c 6c 46 6c 61 67       InstallFlag
31690 73 2e 56 73 44 61 74 61 50 72 6f 76 69 64 65 72  s.VsDataProvider
316a0 2c 20 74 72 75 65 29 29 0d 0a 20 20 20 20 20 20  , true))..      
316b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
316c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
316d0 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
316e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
316f0 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 46 6f       // NOTE: Fo
31700 72 20 6e 6f 77 2c 20 56 69 73 75 61 6c 20 53 74  r now, Visual St
31710 75 64 69 6f 20 69 73 20 61 6c 77 61 79 73 20 61  udio is always a
31720 20 33 32 2d 62 69 74 0d 0a 20 20 20 20 20 20 20   32-bit..       
31730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31740 20 2f 2f 20 20 20 20 20 20 20 6e 61 74 69 76 65   //       native
31750 20 61 70 70 6c 69 63 61 74 69 6f 6e 2e 0d 0a 20   application... 
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 2f 2f 0d 0a 20 20 20 20 20         //..     
31780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31790 20 20 20 69 66 20 28 21 46 6f 72 45 61 63 68 56     if (!ForEachV
317a0 73 56 65 72 73 69 6f 6e 52 65 67 69 73 74 72 79  sVersionRegistry
317b0 28 72 65 67 69 73 74 72 79 2c 0d 0a 20 20 20 20  (registry,..    
317c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
317d0 20 20 20 20 20 20 20 20 20 20 20 20 76 73 4c 69              vsLi
317e0 73 74 2c 20 50 72 6f 63 65 73 73 56 73 44 61 74  st, ProcessVsDat
317f0 61 50 72 6f 76 69 64 65 72 2c 20 70 61 63 6b 61  aProvider, packa
31800 67 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ge,..           
31810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31820 20 20 20 20 20 66 69 6c 65 4e 61 6d 65 44 61 74       fileNameDat
31830 61 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  a,..            
31840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31850 20 20 20 20 56 73 49 73 33 32 42 69 74 4f 6e 6c      VsIs32BitOnl
31860 79 20 7c 7c 20 63 6f 6e 66 69 67 75 72 61 74 69  y || configurati
31870 6f 6e 2e 57 6f 77 36 34 2c 0d 0a 20 20 20 20 20  on.Wow64,..     
31880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31890 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69             confi
318a0 67 75 72 61 74 69 6f 6e 2e 54 68 72 6f 77 4f 6e  guration.ThrowOn
318b0 4d 69 73 73 69 6e 67 2c 0d 0a 20 20 20 20 20 20  Missing,..      
318c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
318d0 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67            config
318e0 75 72 61 74 69 6f 6e 2e 57 68 61 74 49 66 2c 20  uration.WhatIf, 
318f0 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 56 65  configuration.Ve
31900 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20 20  rbose,..        
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 72 65 66 20 65 72 72 6f          ref erro
31930 72 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  r))..           
31940 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
31950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31960 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
31970 65 4f 70 73 2e 53 68 6f 77 4d 65 73 73 61 67 65  eOps.ShowMessage
31980 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 48  (TracePriority.H
31990 69 67 68 65 73 74 2c 0d 0a 20 20 20 20 20 20 20  ighest,..       
319a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
319b0 20 20 20 20 20 20 20 20 20 64 65 62 75 67 43 61           debugCa
319c0 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c  llback, traceCal
319d0 6c 62 61 63 6b 2c 20 74 68 69 73 41 73 73 65 6d  lback, thisAssem
319e0 62 6c 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  bly,..          
319f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31a00 20 20 20 20 20 20 65 72 72 6f 72 2c 20 74 72 61        error, tra
31a10 63 65 43 61 74 65 67 6f 72 79 2c 20 4d 65 73 73  ceCategory, Mess
31a20 61 67 65 42 6f 78 42 75 74 74 6f 6e 73 2e 4f 4b  ageBoxButtons.OK
31a30 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
31a40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31a50 20 20 20 4d 65 73 73 61 67 65 42 6f 78 49 63 6f     MessageBoxIco
31a60 6e 2e 45 72 72 6f 72 29 3b 0d 0a 0d 0a 20 20 20  n.Error);....   
31a70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31a80 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70           TraceOp
31a90 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28  s.DebugAndTrace(
31aa0 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4d 65  TracePriority.Me
31ab0 64 69 75 6d 48 69 67 68 2c 0d 0a 20 20 20 20 20  diumHigh,..     
31ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31ad0 20 20 20 20 20 20 20 20 20 20 20 64 65 62 75 67             debug
31ae0 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43  Callback, traceC
31af0 61 6c 6c 62 61 63 6b 2c 20 22 46 61 69 6c 75 72  allback, "Failur
31b00 65 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  e.",..          
31b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31b20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67        traceCateg
31b30 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
31b40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31b50 20 20 20 20 20 72 65 74 75 72 6e 20 31 3b 20 2f       return 1; /
31b60 2a 20 46 41 49 4c 55 52 45 20 2a 2f 0d 0a 20 20  * FAILURE */..  
31b70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31b80 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
31b90 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
31ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31bb0 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
31bc0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
31bd0 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
31be0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31bf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31c00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31c10 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
31c20 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e           #region
31c30 20 4c 6f 67 20 53 75 6d 6d 61 72 79 0d 0a 20 20   Log Summary..  
31c40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31c50 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67    TraceOps.Debug
31c60 41 6e 64 54 72 61 63 65 28 54 72 61 63 65 50 72  AndTrace(TracePr
31c70 69 6f 72 69 74 79 2e 4d 65 64 69 75 6d 48 69 67  iority.MediumHig
31c80 68 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  h,..            
31c90 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62 75              debu
31ca0 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65  gCallback, trace
31cb0 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67  Callback, String
31cc0 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  .Format(..      
31cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31ce0 20 20 22 73 75 62 4b 65 79 73 43 72 65 61 74 65    "subKeysCreate
31cf0 64 20 3d 20 7b 30 7d 2c 20 73 75 62 4b 65 79 73  d = {0}, subKeys
31d00 44 65 6c 65 74 65 64 20 3d 20 7b 31 7d 2c 20 22  Deleted = {1}, "
31d10 20 2b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   +..            
31d20 20 20 20 20 20 20 20 20 20 20 20 20 22 6b 65 79              "key
31d30 56 61 6c 75 65 73 53 65 74 20 3d 20 7b 32 7d 2c  ValuesSet = {2},
31d40 20 6b 65 79 56 61 6c 75 65 73 44 65 6c 65 74 65   keyValuesDelete
31d50 64 20 3d 20 7b 33 7d 22 2c 0d 0a 20 20 20 20 20  d = {3}",..     
31d60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31d70 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 52 65     ForDisplay(Re
31d80 67 69 73 74 72 79 48 65 6c 70 65 72 2e 53 75 62  gistryHelper.Sub
31d90 4b 65 79 73 43 72 65 61 74 65 64 29 2c 0d 0a 20  KeysCreated),.. 
31da0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31db0 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61         ForDispla
31dc0 79 28 52 65 67 69 73 74 72 79 48 65 6c 70 65 72  y(RegistryHelper
31dd0 2e 53 75 62 4b 65 79 73 44 65 6c 65 74 65 64 29  .SubKeysDeleted)
31de0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
31df0 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69             ForDi
31e00 73 70 6c 61 79 28 52 65 67 69 73 74 72 79 48 65  splay(RegistryHe
31e10 6c 70 65 72 2e 4b 65 79 56 61 6c 75 65 73 53 65  lper.KeyValuesSe
31e20 74 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  t),..           
31e30 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72               For
31e40 44 69 73 70 6c 61 79 28 52 65 67 69 73 74 72 79  Display(Registry
31e50 48 65 6c 70 65 72 2e 4b 65 79 56 61 6c 75 65 73  Helper.KeyValues
31e60 44 65 6c 65 74 65 64 29 29 2c 0d 0a 20 20 20 20  Deleted)),..    
31e70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31e80 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72      traceCategor
31e90 79 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  y);..           
31ea0 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67           #endreg
31eb0 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ion....         
31ec0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
31ed0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31ee0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31ef0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31f00 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
31f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
31f20 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54  aceOps.DebugAndT
31f30 72 61 63 65 28 54 72 61 63 65 50 72 69 6f 72 69  race(TracePriori
31f40 74 79 2e 4d 65 64 69 75 6d 48 69 67 68 2c 0d 0a  ty.MediumHigh,..
31f50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31f60 20 20 20 20 20 20 20 20 64 65 62 75 67 43 61 6c          debugCal
31f70 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c  lback, traceCall
31f80 62 61 63 6b 2c 20 22 53 75 63 63 65 73 73 2e 22  back, "Success."
31f90 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
31fa0 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
31fb0 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
31fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31fd0 20 20 72 65 74 75 72 6e 20 30 3b 20 2f 2a 20 53    return 0; /* S
31fe0 55 43 43 45 53 53 20 2a 2f 0d 0a 20 20 20 20 20  UCCESS */..     
31ff0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
32000 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
32010 20 20 20 20 20 20 20 20 20 63 61 74 63 68 20 28           catch (
32020 45 78 63 65 70 74 69 6f 6e 20 65 29 0d 0a 20 20  Exception e)..  
32030 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
32040 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61               Tra
32050 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72  ceOps.DebugAndTr
32060 61 63 65 28 54 72 61 63 65 50 72 69 6f 72 69 74  ace(TracePriorit
32070 79 2e 48 69 67 68 65 73 74 2c 0d 0a 20 20 20 20  y.Highest,..    
32080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32090 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74  debugCallback, t
320a0 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 65 2c  raceCallback, e,
320b0 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
320c0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
320d0 20 20 20 20 74 68 72 6f 77 3b 0d 0a 20 20 20 20      throw;..    
320e0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
320f0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65     }..        #e
32100 6e 64 72 65 67 69 6f 6e 0d 0a 20 20 20 20 7d 0d  ndregion..    }.
32110 0a 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d  .    #endregion.
32120 0a 7d 0d 0a                                      .}..